Linux NETFS Patches Help With CIFS Performance, Single Blob Objects – Phoronix
The Linux kernel’s CIFS support is quite a complex area, and for its various use cases, some tuning is always possible to achieve better performance or improve how things operate for specific workloads. On Phoronix Test Suite this week there have been various benchmark runs showcasing the impact of two recent NETFS CIFS patches for increasing performance, particularly for a scenario with lots of small objects being accessed via NFS or SMB. Those performance results as well as some additional information about those patches can be found below.
First off, let’s go over the performance changes when comparing Linux 6.2 and 6.4 as one is using a recent CIFS patch that brings improved performance for handling large, single-blob objects. While the benchmark used is still being refined for an upcoming Phoronix article, one notable result is that the performance with the single blob object can see up to a 10x speed increase from using 6.2 compared to using 6.4. This makes sense given 6.2 will just read and write that full blob data while 6.4, because it’s optimizing around small files, breaks it up into separate file writes and has higher overhead in handling those numerous I/Os. That means for large files on SMB servers, performance will degrade significantly with 6.4 while it may not see a huge performance improvement for many small files.
A look at some additional benchmarks highlights this potential performance problem. Again, these are preliminary runs, but the results look clear. With the SMB / CIFS protocol, read-only requests against single, 100 GiB (102,400 MB) files that are read in a streaming manner, with 6.2 Linux running on Intel Xeon Gold 6254 (Skylake-SP) processors, it showed 3863 MiB/s of sustained transfer throughput while 6.4’s sustained performance came out to be only 544 MiB/s.
With that much of a performance hit it is likely some applications or storage servers might need to explicitly disable this single-blob handling feature. With that, the upcoming Phoronix article will go over this recent CIFS feature in more depth with extensive benchmarking across multiple test platforms and workloads. In general though, with the default setting, large files being accessed via NFS/SMB could potentially end up slower compared to previous kernel releases. With CIFS being a complex area with many scenarios, however, it’s worth remembering that some workloads are optimized better than others and these CIFS changes won’t negatively affect all SMB/NFS use cases.
The other CIFS patch being evaluated has to do with read-ahead on remote SMB servers. This patch increases the performance for handling small files, especially when there is a high number of small objects, and especially in the scenario when read-ahead doesn’t make much sense, like with file accesses that occur at random times or in other circumstances where there isn’t good locality or there isn’t enough file metadata available in the NFS/SMB server. In such circumstances, it can lead to better performance and more effective I/O handling, by reducing unnecessary read-ahead operations.
With both of these changes, as far as I’m aware, these haven’t hit upstream Linux stable yet, though it may just be that this hasn’t been committed upstream yet but otherwise should hopefully get in. These recent CIFS changes illustrate just how complex these sorts of optimizations can be across various network protocols like SMB / CIFS.

