You are not logged in.

#1 2011-05-07 16:22:30

Xehoz
Member
From: Portugal
Registered: 2010-07-27
Posts: 31

NFSv4 freezes/hiccups when transfering larger files

When transfering files from a laptop (wlan max 150mbs, usually not less than 81mbs) to a server (eth - 100mbs), the behaviour represented in these graphics happens.

eIzO6.png
tph75.png

I'm observing this with files at least bigger than ~70mb. It spikes (first third and end of the graphic) to pseudo ~30.000 Kib/S and then it freezes for a good number of seconds. If the file is really big (ex: 700mb/1Gb) it starts a cycle of spike/freeze until the file is transfered. The duration of the freezes and the spikes vary greatly. It can last 10 seconds as it can last well over a minute. And when I say freezes, I'm not only talking about the actual transfer, but also Dolphin, which is being used for the transfer (this happens in cli as well, I'm just using Dolphin so I can observe those graphics). I can't ls the mounted directory, but I can still ping the server during these freezes:

18 packets transmitted, 18 received, 0% packet loss, time 17025ms
rtt min/avg/max/mdev = 20.453/39.204/103.703/20.727 ms

The freezes happen on the client side. Everything seems fine in server side. Nothing in htop in either one. For some reason, Chromium becomes quite unresponsive during these freezes.

When transfering through ethernet this still happens, but very moderately. It slows down a whole lot on the bigger files. If it's big enough, it slows down until it freezes. In this, around the middle, it starts a transfer of a 1.3Gb file, steady at ~25.500, followed by long slow down until a short freeze.

hHYTi.png


Configs Client:

# 
# /etc/fstab: static file system information
#
# <file system>      <dir>        <type>    <options>          <dump> <pass>
devpts        /dev/pts    devpts    defaults        0 0
shm        /dev/shm    tmpfs    nodev,nosuid        0 0

#/dev/cdrom    /media/cd    auto    ro,user,noauto,unhide   0 0
#/dev/dvd    /media/dvd    auto    ro,user,noauto,unhide   0 0
#/dev/fd0    /media/fl    auto    user,noauto        0 0

/dev/sda6    /        ext4    defaults,user_xattr        0 1
/dev/sda7    swap        swap    defaults        0 0
/dev/sda8    /boot        ext4    defaults        0 1

/dev/sda2    /media/win7    ntfs-3g    defaults        0 0
/dev/sda5    /media/data    ntfs-3g    defaults        0 0

# vgaswitcherro
none            /sys/kernel/debug debugfs defaults 0 0

# nfs mount
databox:/    /mnt/            nfs4    _netdev,proto=tcp,timeo=14,auto,async 0 0
#
# /etc/hosts.allow
#
mpd: ALL
rpcbind: 192.168.1.86/255.255.255.255
sshd: ALL
# End of file
/etc/conf.d/nfs-common.conf

# Parameters to be passed to nfs-common (nfs clients & server) init script.
#

# If you do not set values for the NEED_ options, they will be attempted
# autodetected; this should be sufficient for most people. Valid alternatives
# for the NEED_ options are "yes" and "no".

# Do you want to start the statd daemon? It is not needed for NFSv4.
NEED_STATD=""

# Options to pass to rpc.statd.
# See rpc.statd(8) for more details.
# N.B. statd normally runs on both client and server, and run-time
# options should be specified accordingly.
# STATD_OPTS="-p 32765 -o 32766"
STATD_OPTS=""

# Options to pass to sm-notify
# e.g. SMNOTIFY_OPTS="-p 32764"
SMNOTIFY_OPTS=""

# Do you want to start the idmapd daemon? It is only needed for NFSv4.
NEED_IDMAPD="yes"

# Options to pass to rpc.idmapd.
# See rpc.idmapd(8) for more details.
IDMAPD_OPTS=""

# Do you want to start the gssd daemon? It is required for Kerberos mounts.
NEED_GSSD=""

# Options to pass to rpc.gssd.
# See rpc.gssd(8) for more details.
GSSD_OPTS=""

# Where to mount rpc_pipefs filesystem; the default is "/var/lib/nfs/rpc_pipefs".
PIPEFS_MOUNTPOINT=""

# Options used to mount rpc_pipefs filesystem; the default is "defaults".
PIPEFS_MOUNTOPTS=""
/etc/idmpad.conf
[General]

Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = databox

[Mapping]

Nobody-User = nobody
Nobody-Group = nobody

[Translation]

Method = nsswitch

Configs Server:

# /etc/exports
#
# List of directories exported to NFS clients.  See exports(5).
# Use exportfs -arv to reread.
#
# Example for NFSv2 and NFSv3:
#  /srv/home       hostname1(rw,sync) hostname2(ro,sync)
#
# Example for NFSv4:
#  /srv/nfs4       hostname1(rw,sync,fsid=0)
#  /srv/nfs4/home   hostname1(rw,sync,nohide)
# Using Kerberos and integrity checking:
#  /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt)
#  /srv/nfs4/home   gss/krb5i(rw,sync,nohide)
#
/srv/nfs/ 192.168.1.0/24(rw,fsid=0,async,no_subtree_check,nohide)
/srv/nfs/apps 192.168.1.0/24(rw,async,no_subtree_check,nohide)
/srv/nfs/backup 192.168.1.0/24(rw,async,no_subtree_check,nohide)
/srv/nfs/downloads 192.168.1.0/24(rw,async,no_subtree_check,nohide)
/srv/nfs/games 192.168.1.0/24(rw,async,no_subtree_check,nohide)
/srv/nfs/music 192.168.1.0/24(rw,async,no_subtree_check,nohide)
/srv/nfs/video 192.168.1.0/24(rw,async,no_subtree_check,nohide)
# 
# /etc/fstab: static file system information
#
# <file system>        <dir>         <type>    <options>          <dump> <pass>
devpts                 /dev/pts      devpts    defaults            0      0
shm                    /dev/shm      tmpfs     nodev,nosuid        0      0

#/dev/cdrom             /media/cd   auto    ro,user,noauto,unhide   0      0
#/dev/dvd               /media/dvd  auto    ro,user,noauto,unhide   0      0
#/dev/fd0               /media/fl   auto    user,noauto             0      0

UUID=2b6dd92f-33f1-4b21-be0e-5660be56fe35 /             ext4     defaults 0 1
UUID=610c3f37-4496-4c14-a44d-a9956154e5f8 /home         ext4     defaults 0 1
UUID=6791fc96-7e4c-4a4d-b1f2-1942c56324ad swap             swap     defaults 0 0
UUID=ff9379f8-cd75-4d0a-9872-00aa7a9d03a8 /boot         ext2     defaults 0 1
UUID=da147e01-4175-47d0-ac20-9aaae7e79e51 /media/data-750     ext4     defaults 0 1
UUID=e2f50893-10e5-4b48-8faa-e33bf6622532 /media/data-160     ext4     defaults 0 1

/media/data-750/apps        /srv/nfs/apps            none    bind    0 0
/media/data-750/backup        /srv/nfs/backup            none    bind    0 0
/home/xehoz/downloads        /srv/nfs/downloads        none    bind    0 0
/media/data-750/games        /srv/nfs/games            none    bind    0 0
/home/xehoz/music        /srv/nfs/music            none    bind    0 0
/home/xehoz/video        /srv/nfs/video            none    bind    0 0
#
# /etc/hosts.allow
#
sshd: ALL
mpd: ALL
pyLoadCore: ALL
rtorrent: ALL
#nfsd: 192.168.1.0/255.255.255.0
#rpcbind: 192.168.1.0/255.255.255.0
#mountd: 192.168.1.0/255.255.255.0
#idmapd: 192.168.1.0/255.255.255.0
#statd: 192.168.1.0/255.255.255.0
nfsd: ALL
rpcbind: ALL
mountd: ALL
idmapd: ALL
statd: ALL
# End of file
/etc/conf.d/nfs-common.conf

# Parameters to be passed to nfs-common (nfs clients & server) init script.
#

# If you do not set values for the NEED_ options, they will be attempted
# autodetected; this should be sufficient for most people. Valid alternatives
# for the NEED_ options are "yes" and "no".

# Do you want to start the statd daemon? It is not needed for NFSv4.
NEED_STATD=""

# Options to pass to rpc.statd.
# See rpc.statd(8) for more details.
# N.B. statd normally runs on both client and server, and run-time
# options should be specified accordingly.
# STATD_OPTS="-p 32765 -o 32766"
STATD_OPTS=""

# Options to pass to sm-notify
# e.g. SMNOTIFY_OPTS="-p 32764"
SMNOTIFY_OPTS=""

# Do you want to start the idmapd daemon? It is only needed for NFSv4.
NEED_IDMAPD=""

# Options to pass to rpc.idmapd.
# See rpc.idmapd(8) for more details.
IDMAPD_OPTS=""

# Do you want to start the gssd daemon? It is required for Kerberos mounts.
NEED_GSSD=""

# Options to pass to rpc.gssd.
# See rpc.gssd(8) for more details.
GSSD_OPTS=""

# Where to mount rpc_pipefs filesystem; the default is "/var/lib/nfs/rpc_pipefs".
PIPEFS_MOUNTPOINT=""

# Options used to mount rpc_pipefs filesystem; the default is "defaults".
PIPEFS_MOUNTOPTS=""
/etc/conf.d/nfs-server.conf

# Parameters to be passed to nfs-server init script.
#

# Options to pass to rpc.nfsd.
# See rpc.nfsd(8) for more details.
NFSD_OPTS=""

# Number of servers to start up; the default is 8 servers.
NFSD_COUNT=""

# Where to mount nfsd filesystem; the default is "/proc/fs/nfsd".
PROCNFSD_MOUNTPOINT=""

# Options used to mount nfsd filesystem; the default is "rw,nodev,noexec,nosuid".
PROCNFSD_MOUNTOPTS=""

# Options for rpc.mountd.
# If you have a port-based firewall, you might want to set up
# a fixed port here using the --port option.
# See rpc.mountd(8) for more details.
MOUNTD_OPTS="--no-nfs-version 1 --no-nfs-version 2"

# Do you want to start the svcgssd daemon? It is only required for Kerberos
# exports. Valid alternatives are "yes" and "no"; the default is "no".
NEED_SVCGSSD=""

# Options to pass to rpc.svcgssd.
# See rpc.svcgssd(8) for more details.
SVCGSSD_OPTS=""
/etc/idmapd.conf
[General]

Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = databox

[Mapping]

Nobody-User = nobody
Nobody-Group = nobody

[Translation]

Method = nsswitch

Also, nfsstat on the server:

[xehoz@databox ~]$ nfsstat 
Server rpc stats:                                                                                                                                                                                                    
calls      badcalls   badauth    badclnt    xdrcall                                                                                                                                                                  
35384      0          0          0          0                                                                                                                                                                        
                                                                                                                                                                                                                     
Server nfs v4:                                                                                                                                                                                                       
null         compound                                                                                                                                                                                                
1         0% 35383    99% 
                                                                                                                                                                                                                     
Server nfs v4 operations:                                                                                                                                                                                            
op0-unused   op1-unused   op2-future   access       close        commit                                                                                                                                              
0         0% 0         0% 0         0% 1828      1% 1337      1% 1380      1%                                                                                                                                        
create       delegpurge   delegreturn  getattr      getfh        link                                                                                                                                                
104       0% 0         0% 0         0% 33242    30% 1723      1% 0         0%                                                                                                                                        
lock         lockt        locku        lookup       lookup_root  nverify      
0         0% 0         0% 0         0% 1704      1% 0         0% 0         0% 
open         openattr     open_conf    open_dgrd    putfh        putpubfh     
1339      1% 0         0% 1337      1% 0         0% 35295    32% 0         0% 
putrootfh    read         readdir      readlink     remove       rename       
4         0% 787       0% 9         0% 0         0% 0         0% 0         0% 
renew        restorefh    savefh       secinfo      setattr      setcltid     
23        0% 1441      1% 1443      1% 0         0% 2688      2% 3         0% 
setcltidconf verify       write        rellockowner bc_ctl       bind_conn    
3         0% 0         0% 22104    20% 0         0% 0         0% 0         0% 
exchange_id  create_ses   destroy_ses  free_stateid getdirdeleg  getdevinfo   
0         0% 0         0% 0         0% 0         0% 0         0% 0         0% 
getdevlist   layoutcommit layoutget    layoutreturn secinfononam sequence     
0         0% 0         0% 0         0% 0         0% 0         0% 0         0% 
set_ssv      test_stateid want_deleg   destroy_clid reclaim_comp 
0         0% 0         0% 0         0% 0         0% 0         0% 

Client rpc stats:
calls      retrans    authrefrsh
0          0          0

Offline

#2 2011-05-08 17:30:43

zenlord
Member
From: Belgium
Registered: 2006-05-24
Posts: 1,221
Website

Re: NFSv4 freezes/hiccups when transfering larger files

The wiki has a troubleshooting-area that mentions packetsizes in your config to battle slowdowns. Maybe you could try it out?

Offline

#3 2011-05-08 19:50:01

Xehoz
Member
From: Portugal
Registered: 2010-07-27
Posts: 31

Re: NFSv4 freezes/hiccups when transfering larger files

They do mention it, but in the context of Gibabit networks.

Default value for NFS4 is 32768. Maximum is 65536. Increase from default in increments of 1024 until maximum transfer rate is achieved.

My issue being with Wifi, I assume I should diminish, instead of increasing it, 1024 at a time?

Last edited by Xehoz (2011-05-08 19:50:34)

Offline

#4 2011-05-09 22:04:03

Xehoz
Member
From: Portugal
Registered: 2010-07-27
Posts: 31

Re: NFSv4 freezes/hiccups when transfering larger files

It's fine (no freezes) with any 1024 multiple below 20480 (not inclusive). However, it's extremely slow. I fluctuates a bit, but the transfer speed ranges from under 1 Mb/s to under 300 Kb/s (1024). Those are max values. I can't say exactly what the average is, but it's a lot lower than that.

In the particular spot I tried this, I had a 40-54 Mb/s connection. That should equal to 5-6.75 MB/s. Considering the circumstances, I'd be happy with half of that rate.
fstab line's like this (not necessarily my best value, haven't tested every single 1024 multiple from 1024 to 20500 yet):

# nfs mount
databox:/    /mnt/            nfs4    _netdev,proto=tcp,wsize=10240,rsize=10240,timeo=14,auto,async 0 0

*edit*
When connected at 150 Mb/s, it's naturally better, but it's still quite slow (relatively speaking). Average ~2Mb/s. In theory, 150 Mbps = 18.75 MBps. I realize this is just theory, but 2 Mb/s it's still ridiculously slow.

Last edited by Xehoz (2011-05-09 22:40:18)

Offline

#5 2011-05-10 00:00:54

Xehoz
Member
From: Portugal
Registered: 2010-07-27
Posts: 31

Re: NFSv4 freezes/hiccups when transfering larger files

sshfs speeds are a little better - not to much -, but eventually freezes.

I wonder if what I am experiencing is this bug? I'll try the LTS kernel.

*edit*

Didn't get to try it. Now that I diverted my attention to a wireless issue, I noticed there is an ongoing topic about Atheros AR9222x, which points to another kernel bug. A couple of people already reported it to be happening with Atheros AR928x as well. Which is my case (AR9285).

Comment #27 From tm512 2011-04-22 22:20:30
I am having some problem with ath9k on Arch Linux x86_64, kernel 2.6.38. My
wireless card is the AR9285. I am using wireless G, and while the packet loss
is not constant, it intermittently hops up to around 30%, then back down. Other
times it's a steady 1% to 5% loss, which makes using SSH irritating, but
doesn't affect downloads that much.

Of course, this was not an issue with 2.6.37 and earlier, so I have been using
kernel 2.6.32 (Arch's LTS kernel) since, and have not tested to see if
nohwcrypt fixes the issue.

From what I can tell, this is my issue.

I suppose this can be closed, or whatever Moderators do to these posts.

Last edited by Xehoz (2011-05-10 00:40:37)

Offline

Board footer

Powered by FluxBB