I'm writing a business case for implementing the lruskips parameter. I know the benefits (and they are likely sizeable). What I don't know is the performance overhead in terms of memory etc I should consider as the downsides. We need a balanced viewpoint after all! OpenEdge 10.2B08 Various flavours of Windows that have not been patched with Linux.
The feature eliminates overhead by avoiding the housekeeping associated with maintaining the LRU chain. Using it does not add any memory requirements and it reduces CPU consumption.
Instead of moving a block to the head of the LRU chain every time it is referenced it only does that every X references. So rather than evicting the block that is absolutely the "least recently used" a block that is "probably not very recently used" will be evicted.
The only potential downside is that there could, theoretically, be a perverse case where setting it too high might result in some poor eviction decisions. IOW the "probably" part of things turns out to be untrue because you aren't checking often enough (you have basically converted the -B management to a FIFO queue).
For instance, setting it to 1000000 with a -B of 1000 might not be very smart. (But the bigger issue is probably-B 1000)
Suppose that you did that (set -lruskips 1000000 -B 1000) and your application has a mix of "normal" access along with a few background processes doing some sort of sequential scan to support reporting.
The reporting stuff is going to read lots of data that it only looks at once (or a very few times). This data is going to be immediately placed at the MRU end of the queue and will move towards the LRU end as new data is read.
Even though it is being frequently accessed the working set of "normal" data will be pushed to the LRU end because the access counter update is being skipped. With a smallish -B it is going to fall off the end pretty quickly and be evicted. And then the next access will cause an IO to occur and the cycle will restart.
The higher you set -lruskips the more sensitive you will become to that sort of thing. -lruskips 10 will eliminate 90% of lru housekeeping and should be a very, very low risk setting. -lruskips 100 will eliminate 99% of the housekeeping and should still be awfully low risk (unless -B is crazy small). Unless you have a very special set of circumstances setting it higher than 100 seems mostly pointless. You are well into "diminishing returns" and possibly pushing your luck vis a vis perverse outcomes.