gpt4 book ai didi

memory-management - Memcache 逐出策略

转载 作者:行者123 更新时间:2023-12-05 05:20:10 25 4
gpt4 key购买 nike

根据我的理解。

  1. 在Memcache中,整个内存被划分为固定大小的页面,每个页面属于一个颗粒状的slab类。每个页面进一步划分为固定大小的 block , block 的大小由每个slab类决定。数据存储在最适合它的 block (以最小化内部碎片)。

  2. Memcache 使用 LRU 策略进行逐出。

我在某处读到 LRU 策略应用于帧而不是整个数据。因此,可能存在帧(不同类)是空闲的但仍在帧上发生驱逐的情况。

这是 memcache 的行为方式吗?不应该逐出,不应该调整空帧的卡盘大小吗?

最佳答案

正如您所提到的,内存被划分为固定大小的页面(1MB 或最大项目配置大小),每个页面都属于一个特定的 slab 类。开始时,这些页面实际上并未分配给任何特定的 slab 类。当请求到来时,会根据尺寸范围创建 slab 类并将页面附加到它们。

确定最优的板类是关键。它的算法大致是这样的:

  1. 检查尾页(这个 slab 类中最近分配的页)看它是否有打开/空闲 block 。
  2. 如果找到,将此对象存储在该页面中并返回。
  3. 否则,找到一个未分配的页面并将其分配给该 slab 类。
  4. 如果没有未分配的页面可用(这并不意味着所有内存都已满),执行 LRU 逻辑以释放一段时间未使用(或已过期)的 block 。<
  5. 将此对象存储在刚刚释放的 block (来自第 4 步)或空白页(来自第 3 步)上。

现在,回答您的问题。

只有当所有页面都分配给某些 slab 类时才会发生驱逐。因为,所有页面都绑定(bind)了一些 slab 类,并准备好接受该大小范围内的对象/项目。剩余的可用内存不能用于其他大小的对象。即它们不能调整大小。我猜这是为简单起见而实现的。此方法适用于许多 Web 应用程序,其中对象大小几乎与查询结果、呈现的 html 页面大小相同。在这种情况下,Memcache 会将它拥有的所有页面分配给您使用的极少数类。

我记得在某处看过,Redis 在调整内存大小这方面更加灵活。

希望对您有所帮助!

关于memory-management - Memcache 逐出策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44896095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com