I'm attempting to setup a file share system for a system where users are given access to ephemeral virtual machines to work on projects that read/write a large amount of small files. For example, a new project may be 200MB with 12,000+ files. I'm looking to reduce the time it takes to create a new project, but believe I'm being bottlenecked by the overhead from the RTT from the requests of all these files.
Currently, I'm mounting the NFS share using the follow mount command.
sudo mount -t nfs -o nfsvers=3,nconnect=16,hard,async,fsc,noatime,nodiratime,relatime <drive>:/fsx /share
Additionally, the NFS server is configured with rw,async
to ensure that we're actually using asynchronous writes.
After a few days of tuning and working with nfsstat
and nfsiostat
, this gave me the fastest results. I also have cachefilesd
configured for read caches to speed up those operations. Unfortunately, I'm still getting ~20kb/s of write during the project creation. Writing a large single file yields > 250MB/s
of throughput, and nfsiostat
indicates around 1ms of latency per request, so it doesn't appear to be a throughput or network issue.
These files rarely will be accessed by anyone besides the file share owner, but application spec requires all of these files to be in a readable format on the file share, so creating this projects on the local disk and tar
ing them up to the file share at the end of a session unfortunately isn't an option.
Is there a way to speed up the write operations for many small files in some other way? It'd really be great if new files could just be written locally and synced up to the NFS share when there's time. I'm not a sysadmin, so just looking for guidance and interested if there's any new takes on this issue.
nfsvers=3
to use v4, which runs better. Check out some of the tuning recommendations here: admin-magazine.com/HPC/Articles/…