OpenEdge 10.2B08 lrusskips 开销

OpenEdge 10.2B08 lruskips overhead

我正在编写实施 lruskips 参数的业务案例。我知道好处(而且它们可能相当大)。我不知道的是我应该将内存等方面的性能开销视为缺点。毕竟我们需要一个平衡的观点! OpenEdge 10.2B08 Windows 被 Linux 修补的各种变体。

该功能通过避免与维护 LRU 链相关的内务处理来消除开销。使用它不会增加任何内存需求,并且会减少 CPU 消耗。

不是每次引用块时都将块移动到 LRU 链的头部,而是每次 X 引用时才这样做。因此,不是驱逐绝对 "least recently used" 的块,而是 "probably not very recently used" 的块将被驱逐。

唯一的潜在缺点是,从理论上讲,可能会出现一种反常情况,即设置得太高可能会导致一些糟糕的驱逐决定。 IOW "probably" 部分事情被证明是不正确的,因为你没有经常检查(你基本上已经将 -B 管理转换为 FIFO 队列)。

例如,将其设置为 1000000 且 -B 为 1000 可能不是很明智。 (但更大的问题可能是-B 1000)

假设您这样做了 (set -lruskips 1000000 -B 1000) 并且您的应用程序混合了 "normal" 访问权限以及一些后台进程执行某种顺序扫描以支持报告。

报告内容将读取大量只查看一次(或很少次)的数据。此数据将立即放置在队列的 MRU 端,并在读取新数据时移至 LRU 端。

即使访问频繁,"normal"数据的工作集也会被推送到 LRU 端,因为访问计数器更新被跳过。使用较小的 -B 它会很快从末端掉下来并被驱逐。然后下一次访问将导致IO发生并重新开始循环。

-lruskips 设置得越高,您对这类事情就越敏感。 -lruskips 10 将消除 90% 的 lru 管理,应该是一个非常非常低风险的设置。 -lruskips 100 将消除 99% 的内务处理,并且风险仍然非常低(除非 -B 非常小)。除非您有一组非常特殊的情况,否则将其设置为高于 100 似乎毫无意义。您很喜欢 "diminishing returns" 并可能将运气推向反常的结果。