折腾nas nfs读写提速

目前lz的设备有华芸asustor as5304t nas, 两个2.5g网口,mac mini mid 2011中古机型,上面跑着esxi,插有一个雷电2的dock,所以他也有了两个网卡,捡垃圾捡到的ubiquiti us-8交换机,lz想着能不能瞎折腾点什么来提高文件读写速度

首先lz上网研究了下,要提速可以从如下关键词着手

  • link aggregation
  • LACP
  • nfs multipathing
  • iSCSI + MPIO
  • SMB multi-channel

由于lz的qb和安卓电视盒子都主要使用nfs共享,所以lz先研究下nfs的方法

$ rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  35242  status
    100024    1   tcp  49073  status
    100021    1   udp  50617  nlockmgr
    100021    3   udp  50617  nlockmgr
    100021    4   udp  50617  nlockmgr
    100021    1   tcp  40703  nlockmgr
    100021    3   tcp  40703  nlockmgr
    100021    4   tcp  40703  nlockmgr

看来lz的虚拟机上的F33有nfs v4, 可是lz的主力存储asustor as5304t上的nfs只有v3,看来此路不通

$ ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
                                2500baseX/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
                                2500baseX/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: Unknown
Cannot get wake-on-lan settings: Operation not permitted
        Current message level: 0x00000033 (51)
                               drv probe ifdown ifup
        Link detected: yes

lz是穷人,买不起万兆交换机,可是又不想浪费了他的两个2.5G网口,所以准备试下link aggregation,虽然没法文件拷贝提速,但是不用岂不是浪费,所以用两条网线接到ubiquiti us-8交换机上,在nas里开启Link aggregation设置

这个unifi的交换机好久没用了,密码都忘了,装完Ubiquiti Unifi Controller之后adopt不了,只好把他reset了,然后重新adopt.如果没法访问旧的controoler,那只有捅reset10s以上,等他所有灯全灭再放手,然后ssh的默认账号密码都恢复为ubnt, 连进去后运行命令set-inform http://(IP_Address_of_Controller):8080/inform, 然后再去网页上adopt即可,(感觉如果网页上直接能adopt了的话,不自己ssh也行,因为我看advanced adopt选项那里一样可以输入这些信息)

$ ssh ubnt@192.168.0.120
ubnt@192.168.0.120's password:


BusyBox v1.23.2 (2021-11-17 07:22:05 UTC) built-in shell (ash)


  ___ ___      .__________.__
 |   |   |____ |__\_  ____/__|
 |   |   /    \|  ||  __) |  |   (c) 2010-2021
 |   |  |   |  \  ||  \   |  |   Ubiquiti Networks, Inc.
 |______|___|  /__||__/   |__|
            |_/                  https://www.ui.com/

      Welcome to UniFi US-8!

US-8-US.5.76.7# set-inform http://192.168.0.149:8080/inform

Adoption request sent to 'http://192.168.0.149:8080/inform'.  Use the controller to complete the adopt process.
ubiquiti里port 1和2是连接到nas上的

理论上此时多个客户端同时读写的时候应该可以有2倍带宽(2Gbps),而单个客户端读写的时候依然是千兆连接,这样是提不了单机文件拷贝速度的,zl没去测试(感觉可以用iperf3)。此外nfs4.1有multipathing功能,可是lz的存储nas asustor上只有nfs3,就算lz在fedora虚拟机上把mergerfs用nfs4 multipath共享出去了也没有意义,因为瓶颈在asustor,不过上面的设置也许可以有利于下载的同时看盒子吧,此时是两个不同的连接,应该会至少比之前有多利用到带宽。

此外由于这样nas的ip只有一个了, 在esxi里iscsi的target也就只有了一个,而显示成了degraded(已降级), 看着略不爽,感觉这意味着目前的使用方式速度降低了,因为目前lz是把asustor的iscsi target挂到esxi里用的,现在只有一条path了,lz准备之后把qb搬到fedora虚拟机上,下载目录放到mergerfs里,好吧,这依然是降速使用,不过这样nas上的一个盘不至于完全不能独立使用,而且可以直接访问下载文件夹,不必通过黑群,不知道是不是会减少“卷损毁”的几率

lz发现asustor nas ADM 3.5的一个脑残之处,如上所述使用了link aggregation之后,就没法再设回两个lan口的默认设置了,删除link aggregation之后就无法连接到nas, 强制重启也不行,asustor control center也找不到nas,只能捅reset孔恢复默认设置,此外lz联系了技术支持, 回复是目前adm3.5里的nfs不支持multipathing ( 因为是v3), samba也不支持multi channel, lz在nas目录里找到有/volume0/usr/builtin/etc.default/samba/smb.conf,然后加上了

server multi channel support = yes
aio max threads = 100
aio read size = 1
aio write size = 1

之后从webui上重启samba服务,然后从esxi上的fedora虚拟机里,已经加了另一个网卡到一个单独的port group和vswitch上,fedora里有两个网卡,测试了下,似乎没效果,而且smb拷文件更慢,只有50M/s左右,nfs是千兆满速,110M/s

[oglop@fedora ~]$ df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               1.9G     0  1.9G   0% /dev
tmpfs                  2.0G   84K  2.0G   1% /dev/shm
tmpfs                  786M  1.5M  785M   1% /run
/dev/sda2               39G  8.4G   31G  22% /
tmpfs                  2.0G   40K  2.0G   1% /tmp
/dev/sda2               39G  8.4G   31G  22% /home
mergerFS               7.2T  3.7T  3.6T  51% /mnt/mergerfs
/dev/sda1              976M  183M  727M  21% /boot
asustor:/volume2/nfs2  3.6T  137G  3.5T   4% /mnt/asustor2
asustor:/volume1/nfs1  3.6T  3.5T   90G  98% /mnt/asustor1
tmpfs                  393M   92K  393M   1% /run/user/42
tmpfs                  393M  184K  393M   1% /run/user/1000
//192.168.0.91/nfs1    3.6T  3.5T   90G  98% /mnt/asustor1smb
//192.168.0.90/nfs1    3.6T  3.5T   90G  98% /mnt/asustor1smb

[oglop@fedora ~]$ sudo dd if=/dev/zero of=/mnt/asustor2/nfs.img bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 9.88848 s, 109 MB/s

[oglop@fedora ~]$ sudo dd if=/dev/zero of=/mnt/asustor1smb/smb.img bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 18.7182 s, 57.4 MB/s
[oglop@fedora ~]$ 

结论:研究失败,只好继续nfs了

update 2021-11-28: 好久没升级华芸nas的固件了,最近一看,发现6月份就升级到了ADM 4.0,升级之后貌似nfs直接更新到了4.2, 这也许意味着可以multipathing了, 但是lz不想折腾了,只是把fedora虚拟机里的fstab mount选项改成了4.2

root@Asustor:/volume0 # cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2

更新,实际使用中发现下载速度超过40MB/s以上时很容易出现写入缓存超载现象,俗称卡io,经过漫长的折腾后吐血发现是nfs造成的,使用cifs模式mount 华芸nas上的samba共享之后没有再出现卡io现象,nfs试过添加一些优化选项如noatime,nodiratime,async均无明显效果

//192.168.0.90/nfs1 /mnt/asustor1 cifs uid=0,credentials=/root/.smb,vers=3.0 0 0

用着用着突然发现新加的任务无法下载,貌似是权限问题,一顿折腾后发现必须得

mount -t cifs -o remount,username=xxx,password=xxx,uid=1000,gid=1000 //192.168.0.90/nfs1  /mnt/asustor1
然后得setsebool -P virt_use_samba 1
所以最终fstab的mount行变成
//192.168.0.90/nfs1 /mnt/asustor1 cifs uid=1000,gid=1000,credentials=/root/.smb,vers=3.0,file_mode=0777,dir_mode=0777 0 0
测试中还连进qb的container看到底能不能访问,如果不设file_mode/dir_mode,默认权限是0755, owner是abc
podman exec -it qbittorrent bash

自从使用samba后遇到一个问题是flexget反复刷流后,磁盘剩余空间为0但是明明所有文件加起来远小于磁盘总容量,重启smbd没效果,只有重启asustor nas才能显示正确剩余空间,查看samba log后怀疑与这个bug有关,只能等待asustor升级samba版本了

不得已又换回nfs,加上几个优化选项,似乎效果不明显noatime,nodiratime,async

192.168.0.90:/volume1/nfs1 /mnt/asustor1 nfs defaults,vers=4,noatime,nodiratime,async 0 

参考:
How to Use iSCSI Targets on VMware ESXi Server with Multipath Support
VMware Embraces NFS 4.1, Supports Multipathing and Kerberos Authentication
UniFi – USW: Configuring Link Aggregation Groups (LAG)
How to configure Software iSCSI Initiator in ESXi 6.5 Host that Contains Multiple NIC
Setting up SMB Multi-Channel between FreeNAS (or any BSD/Linux) and Windows for 20Gbps transfers
Performance Tuning on Linux
CIFS share as a volume

留下评论