git: f390100c60 - main - Status/2023Q4/packrat.adoc: Add report

From: Lorenzo Salvadore <>
Date: Thu, 04 Jan 2024 16:39:34 UTC
The branch main has been updated by salvadore:


commit f390100c60f00e1c8b7d759aa9e2e1315742b78e
Author:     Rick Macklem <>
AuthorDate: 2024-01-04 16:35:40 +0000
Commit:     Lorenzo Salvadore <>
CommitDate: 2024-01-04 16:35:40 +0000

    Status/2023Q4/packrat.adoc: Add report
    Reviewed by:    status (Pau Amma <>)
 .../en/status/report-2023-10-2023-12/packrat.adoc  | 63 ++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/website/content/en/status/report-2023-10-2023-12/packrat.adoc b/website/content/en/status/report-2023-10-2023-12/packrat.adoc
new file mode 100644
index 0000000000..afff0ddb3b
--- /dev/null
+++ b/website/content/en/status/report-2023-10-2023-12/packrat.adoc
@@ -0,0 +1,63 @@
+=== Packrat - NFS client caching on non-volatile storage
+Contact: Rick Macklem <>
+NFSv4.1/4.2 provides support for a feature called delegations.
+When a NFSv4.1/4.2 client holds a delegation, the client has certain rights to a file, including a guarantee that no other client will make changes to the file unless the delegation is recalled.
+As such, when a client holds a delegation for a file, it can aggressively cache the file's data, knowing that it will not be modified by other clients until it returns the delegation.
+This project is intended to allow the NFSv4.1/4.2 client to aggressively cache file data on client local non-volatile storage, when the client holds a delegation for the file.
+I created a patch long ago to try and do this for NFSv4.0, but it was never at a stage where it was worth using.
+This project is a complete rewrite of the patch, done in part because NFSv4.1/4.2 plus other recent NFSv4-related changes make doing this more feasible.
+I now have code running fairly well and hope to have a patch ready for others to test this winter.
+Early testing shows promise.
+For a test run of "make buildkernel", the test with and without packrat enabled performed as follows:
+.NFS operation counts
+[cols="1,1,1,1,1,1", frame="none", options="header"]
+| NFS operation counts
+| Getattr
+| Lookup
+| Read
+| Write
+| Total RPCs
+|with packrats
+|without packrats
+.Elapsed Run Time
+[cols="1,1,1", frame="none", options="header"]
+| Elapsed Run Time (sec)
+| with packrat
+| without packrat
+As you can see, the packrat case ran a little faster and with fewer RPCs.
+Although this test was run on my little LAN, it is hoped that a NFSv4.1/4.2 mount over a WAN would show a larger difference in performance.
+I will note that the packrat cache was primed by unrolling a tarball of FreeBSD's [.filename]#/usr/src# into the NFSv4.1/4.2 mount.
+This will be very much an experimental feature, but it is hoped it will allow NFS mounts to be used more effectively, particularily in WAN situations, such as a mobile laptop.
+There is still work to be done, particularily with respect to recovery of delegations after a NFSv4.1/4.2 client restart.
+Hopefully, the next status report will include a URL that allows downloading of a patch for user testing.