#cache #pingora #policy #eviction #algorithm #memory #high

TinyUFO

采用 TinyLFU 作为进入策略和 S3-FIFO 作为淘汰策略的内存缓存实现

4 个版本 (2 个破坏性更新)

0.3.0 2024年7月12日
0.2.0 2024年5月10日
0.1.1 2024年4月18日
0.1.0 2024年2月27日

#90缓存

Download history 17/week @ 2024-05-02 170/week @ 2024-05-09 56/week @ 2024-05-16 85/week @ 2024-05-23 59/week @ 2024-05-30 42/week @ 2024-06-06 30/week @ 2024-06-13 58/week @ 2024-06-20 52/week @ 2024-06-27 119/week @ 2024-07-04 236/week @ 2024-07-11 160/week @ 2024-07-18 202/week @ 2024-07-25 161/week @ 2024-08-01 192/week @ 2024-08-08 162/week @ 2024-08-15

每月下载量547次
用于 4 crates

Apache-2.0

43KB
827

TinyUFO

TinyUFO 是一个快速高效的内存缓存。它采用最先进的 S3-FIFO 以及 TinyLFU 算法,以同时实现高吞吐量和高命中率。

使用方法

请参阅文档

性能比较

我们比较了 TinyUFO 与最常用的缓存算法 lru 以及另一个优秀的缓存库 moka,它实现了 TinyLFU。

命中率

下表显示了在不同缓存大小下,比较算法的缓存命中率,zipf=1。

缓存大小 / 总资产 TinyUFO TinyUFO - LRU TinyUFO - moka (TinyLFU)
0.5% 45.26% +14.21pp -0.33pp
1% 52.35% +13.19pp +1.69pp
5% 68.89% +10.14pp +1.91pp
10% 75.98% +8.39pp +1.59pp
25% 85.34% +5.39pp +0.95pp

TinyUFO 和 moka 都大大提高了命中率,TinyUFO 在此工作负载中表现更佳。 这篇论文 包含了更多关于 S3-FIFO 的缓存性能评估,TinyUFO 与许多缓存算法在各种工作负载下的比较。

速度

下表显示了每个缓存库每秒执行的操作次数。测试在 x64 Linux 桌面上的 8 个线程上进行。

设置 TinyUFO LRU moka
纯读 148.7 百万 ops 700 万 ops 1410 万 ops
混合读写 8090 万 ops 680 万 ops 1660 万 ops

由于 TinyUFO 的无锁设计,其性能远超其他缓存库。

内存开销

TinyUFO 提供了一种紧凑模式,以牺牲原始读取速度来换取更高的内存效率。这种节省是否值得取决于实际的大小和工作负载。对于小型内存资产,节省的内存意味着可以缓存更多内容。

下表显示了在特定工作负载下,用于存储零大小资产的比较缓存库的内存分配(以字节为单位)。

缓存大小 TinyUFO TinyUFO 紧凑型 LRU moka
100 39,409 19,000 9,408 354,376
1000 236,053 86,352 128,512 535,888
10000 2,290,635 766,024 1,075,648 2,489,088

依赖项

~1.8–7.5MB
~39K SLoC