由于 freeshell 硬盘空间告急,现把原来用作备份的 2T 7200rpm SATA 盘用作存储。新注册的 freeshell 和 Copy、Move后的 freeshell 都将使用新硬盘作为存储。现有 freeshell 的存储位置不变,重装系统和 Move 也不会改变存储位置。

新硬盘安装在 1 号节点上,其他节点使用 NFS 挂载。NFS 的小文件读写性能不是很好,但通过调整参数,达到了可以接受的性能。各节点连接同一个交换机,目前 MTU 为 9000,NFS server 挂载参数为 rw,async,no_subtree_check,no_root_squash,NFS client 挂载参数为 <del datetime="2014-08-30T16:57:59+00:00">rw,rsize=32768,wsize=32768,udp,timeo=15,intr</del> <ins datetime="2014-08-30T16:57:59+00:00">vers=3,rw,rsize=32768,wsize=32768,tcp,timeo=10,retrans=5,soft,intr,sec=sys,lookupcache=all,ac,nocto</ins>

新参数主要做了如下优化,使得 NFS 的 I/O 性能与本地接近:

  1. 使用 NFSv3 取代 NFSv4 协议,这样就不需要在 client 端把 UID/GID 转换成 username@domain,在 server 端再转换回 UID/GID 了。
  2. 由于不同节点始终在访问不同的数据,关闭文件时不需要刷新缓存,即 nocto 选项。这也修复了进程退出时关闭打开的文件需要刷新缓存导致的进程卡死问题。
  3. 为避免 NFS 抽风导致应用挂死,使用 soft 选项,即查询失败时返回文件打开失败,而不是让应用程序挂起等待。使用 TCP 和更多的重传次数来提高稳定性。

初步测试结果(对比 2 号节点与 1 号节点上对 SATA 盘上 freeshell 的操作):

  • 解压 Debian wheezy minimal 系统 tar.gz 包:本地 6.925s,NFS 26.453s(NFS 比本地慢 3 倍) 本地 7.277s,NFS 19.897s(NFS 比本地慢 173%)
  • 启动虚拟机,apt-get update,生成 locale:本地 10.674s,NFS 11.458s(NFS 比本地慢 7%) 本地 11.480s,NFS 10.790s(NFS 比本地快 6%)
  • 安装 vim:本地 13.920s,NFS 16.911s(NFS 比本地慢 21%) 本地 8.911s,NFS 10.879s(NFS 比本地慢 22%)
  • 安装 build-essential:本地 51.163s,NFS 77.057s(NFS 比本地慢 50%) 本地 52.708s,NFS 50.480s(NFS 比本地快 4%)

fio 磁盘性能测试结果(老参数的,新参数的未测试)
Capture

新硬盘是 SATA 盘,性能本来就不如 SAS,再加上 NFS 和多台机器共享使用,性能可能会更差,因此仅作为磁盘空间不足时的救急方案。

如果您发现新注册的 freeshell 卡死,或者注册、复制、移动等操作长时间不能完成,请联系我们:support AT freeshell.ustc.edu.cn。