运行 NFS 且具有 22TB 导出 JFS 文件系统的 Debian 服务器上的写入性能较差

运行 NFS 且具有 22TB 导出 JFS 文件系统的 Debian 服务器上的写入性能较差

我目前正在运行一个 debian 服务器,该服务器正在通过 NFS(nfs-kernel-server)导出大型 JFS 文件系统(22TB)。当尝试写入 NFS 共享时,性能非常差。22TB 磁盘位于使用 iSCSI 安装的 NAS 上。

  • 它会在接近预期线路速度时暂停一会儿,然后闲置几秒钟。以低 kb/sec 测量的流量非常少。
  • 等待写入。
  • 从 NFS 挂载读取时,系统以预期速度运行(11MB/秒)。
  • 使用 SFTP、rsync 或本地复制(非 nfs)时不会出现此问题。
  • 稳定版本和测试版本之间仍然存在该问题。
  • 在同一台机器上,我有一个 14TB 的 ext4 文件系统,使用完全相同的导出配置,不存在共享问题。此共享不经常使用,因此不消耗资源。

NFS 服务器:

cat /etc/exports
/data2      10.1.20.86(rw,no_subtree_check,async,all_squash)

cat /sys/block/sdb/queue/scheduler
noop [deadline] cfq

cat /etc/default/nfs-kernel-server 
RPCNFSDCOUNT=8
RPCNFSDPRIORITY=0
RPCMOUNTDOPTS=--manage-gids
NEED_SVCGSSD=
RPCSVCGSSDOPTS=

NFS 客户端:

cat /etc/fstab
10.1.20.100:/data2  /root/incoming  nfs     rw,noatime,soft,intr,noacl 0 2

cat /sys/block/sdb/queue/scheduler
noop [deadline] cfq

cat /proc/mounts
10.1.20.100:/data2/ /root/incoming nfs4 rw,noatime,vers=4,rsize=262144,wsize=262144,namlen=255,soft,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.1.20.86,minorversion=0,addr=10.1.20.100 0 0

这个问题让我很困惑。任何帮助都非常感谢。谢谢。

答案1

我猜想 NFS 服务器线程数太少了。这个数字应该比 8 要高得多。

对于仅包含小文件且由极少数客户端(例如在家庭网络中)或在慢速网络(10 Mbit)上访问的共享,8 个线程可能就足够了。

尝试在写入期间确定 NFS 服务器上的 retrans 值:

nfsstat -r

如果您遇到传输重试的情况,请增加服务器线程数。

我认为从挂载选项中删除 rsize / wsize / tcp 设置是安全的。无论如何,TCP 是默认协议,使用 TCP 无需限制传输大小。

答案2

我怀疑 JumboFrames 存在问题。使用以下方法检查两个接口上的卸载配置:

sudo ethtool -k your_nic

并尝试使用 wireshark 监听线路。您可能会发现一些无序数据包、重复数据包……

答案3

可能是用于写入的 nfs 锁定和 jfs 不兼容。我在 ubuntu 中发现了一些 bug: https://bugs.launchpad.net/ubuntu/+source/jfsutils/+bug/754495

相关内容