Storing Blocks in the Page Cache
We have seen in the section "Block Devices Handling" in Chapter 14 that the VFS, the mapping layer, and the various filesystems group the disk data in logical units called “blocks.”
In old versions of the Linux kernel, there were two different main disk caches: the page cache, which stored whole pages of disk data resulting from accesses to the contents of the disk files, and the buffer cache , which was used to keep in memory the contents of the blocks accessed by the VFS to manage the disk-based filesystems.
Starting from stable version 2.4.10, the buffer cache does not really exist anymore. In fact, for reasons of efficiency, block buffers are no longer allocated individually; instead, they are stored in dedicated pages called “buffer pages ,” which are kept in the page cache.
Formally, a buffer page is a page of data associated with additional descriptors called “buffer heads ,” whose main purpose is to quickly locate the disk address of each individual block in the page. In fact, the chunks of data stored in a page belonging to the page cache are not necessarily adjacent on disk.
Block Buffers and Buffer Heads
Each block buffer has a buffer head
descriptor of type buffer_head
.
This descriptor contains all the information needed by the kernel to
know how to handle the block; thus, before operating on each block,
the kernel checks its buffer head. The fields of a buffer head are
listed in Table
15-4.
Table 15-4. The fields of a buffer head
Type |
---|
Get Understanding the Linux Kernel, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.