Slashdot and other sites had mention of the release of the 2.6.27 Linux kernel today. Some of the new features in the kernel take from here about improved SMP support for the page cache:
The page cache is the place where the kernel keeps in RAM a copy of a file to improve performance by avoiding disk I/O when the data that needs to be read is already on RAM. Each “mapping”, which is the data structure that keeps track of the correspondence between a file and the page cache, is SMP-safe thanks to its own lock. So when different processes in different CPUs access different files, there’s no lock contention, but if they access the same file (shared libraries or shared data files for example), they can hit some contention on that lock. In 2.6.27, thanks to some rules on how the page cache can be used and the usage of RCU, the page cache will be able to do lookups (ie., “read” the page cache) without needing to take the mapping lock, and hence improving scalability. But it will only be noticeable on systems with lots of cpus (page fault speedup of 250x on a 64 way system have been measured).
Hasn’t Solaris been able to successfully scale vertically on 64+ CPU systems since the Solaris 2.5.1 days back on the E10k in 1996 without this type of contention? It also seems like this kernel version brings new enhancements to direct I/O. This also was implemented back in Solaris 6?
Its great that work is being done in the Linux kernel now to allow for vertical scalability, but it just seems to me that these are already mature kernel features that have been around in Solaris for years.