NFS and RPC queues

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm trying to diagnose an NFS performance problem and need to know a bit more about how the Linux NFS client works internally. I've got a single NFS client which is connected to a network appliance file server via 1Gb ethernet. We've removed all switches between the client and server to remove that variable from the equation. We have two benchmarking scripts, one which performs generates mostly GETATTR requests and the other which generates mostly READ/WRITE requests from the server. The file system is mounted using "actimeo=1". This is required for our purposes since we need file status information which cannot be out of date by more than 1 second.

When we run the GETATTR test alone, we see around 6000 requests per second. When we run one or more of the READ/WRITE tests at the same time from the same host, we see GETATTR performance drop considerably. Here's the average performance based on the number of READ/WRITE threads: 1=500/sec, 2=215/sec, 4=110/sec, 8=45/sec, 16=15/sec. So there clearly seems to be some interaction between the response times to GETATTR based on the number of READ/WRITE operations going on. Now, I'd assume that there would be some degradation but considering that GETATTR is a fast operation for the server to perform and the amount of data being send both ways is very small its more than I was expecting.

We then tried adding a second network card, connection and NFS mount from the same client to the same file server. We segregated all GETATTR traffic to use one mount and the READ/WRITE to use the other mount. With this setup, GETATTR request seem to be almost completely unaffected by any amount of READ/WRITE activity. Interestingly, the READ/WRITE performance was identical as in the one network/mount case. So this seemed to validate that the GETATTR requests do not require much bandwidth.

We also performed this same set of tests on a different file server which has a completely different architecture and is also much older and it delivered nearly identical results. This this what make us think it might be an NFS client related problem and not the server at all.

Sorry to be so long winded, but I needed a proper context to ask my questions...

Is the RPC queue used by NFS processed in a serial fashion for each mount to a unique IP address? One possible explanation is that the GETATTR requests are simply waiting in line behind READ/WRITES in the one network case and that explains the drop in performance. So does using a different IP address for the second mount create a second RPC queue which is processed in an asynchronous manner? That might explain the lack of interaction between the GETATTR's and READ/WRITES in our second test...

If this is not the case, can you suggest any theories that might explain this results along with any tests we might perform to validate these theories? Many thanks in advance for any insights you can provide!

--
Jim Callahan - President - Temerity Software <www.temerity.us>
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux