I'm currently reading Ulrich Drepper's "What every programmer should know about memory". The relevant chapter as html is ħere, pdfs of the entire text are also available and easy to find.
To explain the effects of CPU cache on performance he goes through a couple of variations of walking a singly linked list. The two main scenarios he compares are sequential, each item links to its right hand neighbor, and random.
The bit I find difficult to understand is in figure 3.16 where he plots the ratio of L2 cache misses against the size of the list. For a randomly linked list the ratio is zero as long as the list fits into L2 and beyond that (at 2^19 bytes) quickly rises. So far so plausible. But then it doesn't keep rising but falls if slowly between 2^22 and 2^26. Afterwards it steeply rises again.
The author describes the phenomenon but doesn't really seem to explain it.
I myself can't think of any reason for this counterintuitive behavior.
Anyone able to enlighten me?