Filesystems: Improve section on dentry cache.
authorAndre Noll <maan@tuebingen.mpg.de>
Thu, 26 Mar 2020 10:06:15 +0000 (11:06 +0100)
committerAndre Noll <maan@tuebingen.mpg.de>
Thu, 26 Mar 2020 10:06:15 +0000 (11:06 +0100)
Filesystems.m4

index 0e573d3d44ba3cd11499dae6e357f5451503931e..9035de5218f1ab8da1e4c6e399438f2b523002a8 100644 (file)
@@ -543,30 +543,34 @@ SUBSECTION(«The Dentry Cache»)
 which represents a file or a directory. Dentries contain pointers to
 the corresponding inode and to the parent dentry. The vfs maintains
 the <em>dentry cache</em>, which is independent of the normal page
-cache that keeps copies of file contents in memory. Dentries are kept
-in hashed lists to make directory lookups fast. </p>
+cache that keeps copies of file contents in memory. Dentries are
+kept in hashed lists to make directory lookups fast. Dentries are
+also reference-counted. As long as there is a reference on a dentry,
+it can not be pruned from the dentry cache. Unreferenced dentries,
+however, can be evicted from the cache at any time due to memory
+pressure. Each dentry also has a "looked up" flag which enables the
+VFS to evict dentries which have never been looked up earlier than
+those which have. </p>
 
 <p> On a busy system the dentry cache changes frequently. For example,
 file creation, removal and rename all trigger an update of the dentry
-cache. Moreover, memory pressure can cause dentries to be evicted from
-the cache at any time. Clearly, some sort of coordination is needed to
-keep the dentry cache consistent in view of concurrent changes, like
-a file being deleted on one CPU and looked up on another. A global
-lock would scale very poorly, so a more sophisticated method called
-<em>RCU-walk</em> is employed. With RCU, lookups can be performed
-without taking locks, and read operations can proceed in parallel
-with concurrent writers. </p>
+cache. Clearly, some sort of coordination is needed to keep the dentry
+cache consistent in view of concurrent changes, like a file being
+deleted on one CPU and looked up on another. A global lock would scale
+very poorly, so a more sophisticated method called <em>RCU-walk</em> is
+employed. With RCU, lookups can be performed without taking locks, and
+read operations can proceed in parallel with concurrent writers. </p>
 
 <p> The dentry cache also contains <em>negative</em> entries
 which represent nonexistent paths which were recently looked up
 unsuccessfully. When a user space program tries to access such a path
 again, the <code>ENOENT</code> error can be returned without involving
 the filesystem. Since lookups of nonexistent files happen frequently,
-failing such lookups quickly enhances performance. Naturally, negative
-dentries do not point to any inode. </p>
-
-<p> Dentries are reference-counted. As long as there is a reference
-on a dentry, it can not be pruned from the dentry cache. </p>
+failing such lookups quickly enhances performance. For example
+<code>import</code> statements from interpreted languages like Python
+benefit from the negative entries of the dentry cache because the
+requested files have to be looked up in several directories. Naturally,
+negative dentries do not point to any inode. </p>
 
 SUBSECTION(«File and Inode Objects»)