2016-07-06 50 views
0

我在写一个实现lruskips参数的商业案例。我知道这些好处(它们可能很大)。我不知道的是在内存等方面的性能开销,我应该考虑作为缺点。毕竟我们需要一个平衡的观点! OpenEdge 10.2B08 已将各种不同风格的Windows与而不是一起用于Linux。Openedge 10.2B08 lruskips overhead

回答

1

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

每次引用它时,都只会对每个X引用执行一次块代替将块移到LRU链的头部。因此,不是驱逐绝对是“最近最少使用”的区块,而是“可能不是最近使用过”的区块将被驱逐。

唯一潜在的缺点是,理论上可能是一个反常的情况,将其设置得太高可能会导致一些不好的驱逐决定。 IOW事实上“可能”部分事实证明是不真实的,因为你没有经常检查(你基本上已经将-B管理转换为FIFO队列)。

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

假设你这样做了(set -lruskips 1000000 -B 1000),并且你的应用程序有一个“普通”访问和几个后台进程的组合顺序扫描以支持报告。

报告的东西将读取它只看到一次(或几次)的大量数据。这些数据将立即放置在队列的MRU末端,并在读取新数据时移向LRU端。

即使正在频繁访问,“正常”数据的工作集将被推送到LRU端,因为访问计数器更新正在被跳过。有了一个小小的-B它会很快脱落并被驱逐。然后下一次访问将导致IO发生,周期将重新开始。

你设置的越高-lruskips越敏感,你会变成这样的事情。 - lruskips 10将消除90%的家务管理,应该是一个非常非常低的风险设置。 -lruskips 100将消除99%的内务管理,应该仍然是非常低的风险(除非-B疯狂小)。除非你有一组非常特殊的情况,否则它高于100似乎毫无意义。你很容易陷入“收益递减”,并可能将你的运气推向不利的结果。