Date: Mon, 21 Aug 2017 15:00:14 +0100 From: Kaya Saman <kayasaman@gmail.com> To: freebsd-questions <freebsd-questions@freebsd.org> Subject: NFS home directory performance tuning for Linux client Message-ID: <30d13a2b-0813-9686-3841-b24051fa3e0e@gmail.com>
next in thread | raw e-mail | index | archive | help
Hi, I'm testing an Arch Linux client with my FreeBSD server which has recently been updated to 11.1. The server runs a zpool spread over 15x disks with SSD L2ARC and also just as another test point I am using a separate SSD (zpool over 1x disk) in the server to compare and contrast with. For non-home NFS mounts I found Version4 to have good performance however, when increasing the MTU size in the network: NIC's, switches, routing etc... to 9000 ; I tend to see a lot of server timeouts, even with rsize and wsize increased to 8192. Hard setting the Linux clients to vers=3 in fstab sees stability, as in no timeouts, and with no apparent decrease in performance either. What is odd however, is that FreeBSD to FreeBSD will just work without any issues at all, so I'm wondering if the NFS implementation on Linux is slightly different causing these issues?? To the main question/issue however, when using as NFS home directory setting vers=3 on the client makes the system unuseable. It takes roughly 5-10 mins after login for anything to appear on screen then again after clicking somewhere another 5-10mins for the response. - setting to vers=4 improves things significantly but still if trying to use an application like Chromium then the system will hang upon browsing for 5-10 mins then come alive again?? I have set the server up as follows in rc.conf: nfs_server_flags="-t -n 128 -h <IP>" nfs_server_enable="YES" nfsv4_server_enable="YES" nfsuserd_enable="YES" nfsuserd_flags="-domain domian.com" rpc_statd_enable="YES" rpc_lockd_enable="YES" rpcbind_enable="YES" rpcbind_flags="-h <IP>" mountd_enable="YES" mountd_flags="-r -n -l -h <IP>" I've even tried to increase the sysctl variable: vfs.nfs.iodmax from 20 to 60 On the client side the fstab entry contains the following options: vers=4,defaults,auto,tcp,retrans=10,timeo=30,rsize=8192,wsize=8192,noatime and gets mounted to /mnt/home. I realize the 'tcp' flag doesn't need to be there as v4 by default uses 'tcp' however, it is there when testing with v3. nfsstat command on server gives: Client Info: Rpc Counts: Getattr Setattr Lookup Readlink Read Write Create Remove 139585 0 399150 0 137485 0 0 0 Rename Link Symlink Mkdir Rmdir Readdir RdirPlus Access 0 0 0 0 0 138482 0 393052 Mknod Fsstat Fsinfo PathConf Commit 0 94496 4 0 0 Rpc Info: TimedOut Invalid X Replies Retries Requests 0 0 0 0 1302226 Cache Info: Attr Hits Misses Lkup Hits Misses BioR Hits Misses BioW Hits Misses 16703860 139581 13000702 399150 667954 139782 0 0 BioRLHits Misses BioD Hits Misses DirE Hits Misses Accs Hits Misses 0 0 116186 116459 94263 0 13744785 393052 Server Info: Getattr Setattr Lookup Readlink Read Write Create Remove 3200367 39011 89025 41 203807584 806982 410 7656 Rename Link Symlink Mkdir Rmdir Readdir RdirPlus Access 6383 101 2 6 1 2880 265953 1643074 Mknod Fsstat Fsinfo PathConf Commit 0 94770 30 15 18370 Server Ret-Failed 0 Server Faults 0 Server Cache Stats: Inprog Idem Non-idem Misses 0 0 0 209101544 Server Write Gathering: WriteOps WriteRPC Opsaved 806982 806982 0 And nfsstat on client: Client rpc stats: calls retrans authrefrsh 327404 1293 327395 Client nfs v3: null getattr setattr lookup access 0 0% 367 49% 0 0% 3 0% 3 0% readlink read write create mkdir 0 0% 0 0% 0 0% 0 0% 0 0% symlink mknod remove rmdir rename 0 0% 0 0% 0 0% 0 0% 0 0% link readdir readdirplus fsstat fsinfo 0 0% 0 0% 1 0% 363 49% 2 0% pathconf commit 1 0% 0 0% Client nfs v4: null read write commit open 0 0% 16452 5% 169214 51% 6150 1% 17026 5% open_conf open_noat open_dgrd close setattr 11 0% 0 0% 4 0% 12719 3% 19691 6% fsinfo renew setclntid confirm lock 12 0% 480 0% 6 0% 6 0% 11578 3% lockt locku access getattr lookup 35 0% 10085 3% 5545 1% 24591 7% 17443 5% lookup_root remove rename link symlink 3 0% 1612 0% 4266 1% 31 0% 15 0% create pathconf statfs readlink readdir 105 0% 9 0% 7093 2% 4 0% 398 0% server_caps delegreturn getacl setacl fs_locations 21 0% 0 0% 0 0% 0 0% 0 0% rel_lkowner secinfo fsid_present exchange_id create_session 2051 0% 0 0% 0 0% 0 0% 0 0% destroy_session sequence get_lease_time reclaim_comp layoutget 0 0% 0 0% 0 0% 0 0% 0 0% getdevinfo layoutcommit layoutreturn secinfo_no test_stateid 0 0% 0 0% 0 0% 0 0% 0 0% free_stateid getdevicelist bind_conn_to_ses destroy_clientid seek 0 0% 0 0% 0 0% 0 0% 0 0% allocate deallocate layoutstats clone 0 0% 0 0% 0 0% 0 0% The server isn't loaded at all, load is around 0.40 and the network is also pretty free as the system has 4x NIC's in lagg with current throughput under 10Mb/s. Would anyone be able to offer any advice? Many thanks.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?30d13a2b-0813-9686-3841-b24051fa3e0e>