10Gbit Ethernet ile bağlı iki makinem var. Biri NFS sunucusu, diğeri NFs istemcisi olsun.
TCP üzerinden ağ hızının iperf
her iki yönde de test edilmesi ~ 9.8 Gbit / s verim gösterir, böylece ağ tamamdır.
NFS sunucusunun disk performansını test etme:
dd if=/dev/zero of=/mnt/test/rnd2 count=1000000
Sonuç ~ 150 MBytes / s'dir, bu nedenle disk yazma için iyi çalışır.
Sunucu /etc/exports
:
/mnt/test 192.168.1.0/24(rw,no_root_squash,insecure,sync,no_subtree_check)
İstemci bu paylaşımı yerel /mnt/test
olarak aşağıdaki seçeneklerle bağlar :
node02:~ # mount | grep nfs
192.168.1.101:/mnt/test on /mnt/test type nfs4 (rw,relatime,sync,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.102,local_lock=none,addr=192.168.1.101)
NFS paylaşımından istemci makinede büyük bir dosya (~ 5Gb) indirmeye çalışırsam, sunucunun yerel disk performansına yakın olan ~ 130-140 MBytes / s performans elde ederim, bu yüzden tatmin edicidir.
Ancak NFS paylaşımına büyük bir dosya yüklemeyi denediğimde, yükleme ~ 1.5 Mbyte / s'de başlar, yavaşça 18-20 Mbyte / s'ye kadar artar ve artmayı durdurur. Bazen paylaşım yükleme başlamadan birkaç dakika önce "askıda kalır", yani ana bilgisayarlar arasındaki trafik sıfıra yakın olur ve yürütürsem ls /mnt/test
bir veya iki dakika boyunca geri dönmez. Sonra ls
komut geri döner ve yükleme ilk 1.5Mbit / s hızında başlar.
Yükleme hızı maksimum (18-20 Mbayt / sn) değerine ulaştığında, çalıştırıyorum iptraf-ng
ve ağ arayüzünde ~ 190 Mbit / s trafik gösteriyor, bu nedenle ağ burada bir HDD darboğazının yanı sıra sunucunun HDD'sini göstermiyor.
Ne denedim:
1.
Yalnızca 100Mbit Ethernet NIC ile bağlı üçüncü bir ana bilgisayara NFS sunucusu kurun. Sonuçlar analog: DL iyi performans ve neredeyse tam 100Mbit ağ kullanımını gösterir, yükleme saniyede yüzlerce kilobayttan daha hızlı performans göstermez, ağ kullanımını çok düşük bırakır (buna göre 2,5 Mbit / s iptraf-ng
).
2. Bazı NFS parametrelerini ayarlamaya çalıştım:
sync
veyaasync
noatime
Hayır
hard
rsize
vewsize
örneklerimde maksimum, bu yüzden onları 8192'ye kadar birkaç adımda azaltmaya çalıştım
3. İstemci ve sunucu makinelerini değiştirmeye çalıştım (eski istemcide NFS sunucusu kurdu veya tersi). Ayrıca, aynı yapılandırmaya sahip altı sunucu daha var, bu yüzden onları farklı varyasyonlarda birbirine monte etmeye çalıştım. Aynı sonuç.
4. MTU = 9000, MTU = 9000 ve 802.3ad bağlantı toplama, MTU = 1500 ile bağlantı toplama.
5. sysctl ayarlama:
node01:~ # cat /etc/sysctl.conf
net.core.wmem_max=16777216
net.core.rmem_max=16777216
net.ipv4.tcp_rmem= 10240 873800 16777216
net.ipv4.tcp_wmem= 10240 873800 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.core.netdev_max_backlog = 5000
Aynı sonuç.
6. localhost'tan bağlama:
node01:~ # cat /etc/exports
/mnt/test *(rw,no_root_squash,insecure,sync,no_subtree_check)
node01:~ # mount -t nfs -o sync localhost:/mnt/test /mnt/testmount/
Ve burada aynı sonucu alıyorum: indirme /mnt/testmount/
hızlı, yükleme /mnt/testmount/
çok yavaş, 22 MBytes / s'den daha hızlı değil ve aktarım gerçekten başlamadan önce küçük bir gecikme var. Ağ yığınının kusursuz çalıştığı ve sorunun NFS'de olduğu anlamına mı geliyor?
Tüm bunlar yardımcı olmadı, sonuçlar varsayılan yapılandırmadan önemli ölçüde farklı değildi. echo 3 > /proc/sys/vm/drop_caches
tüm testlerden önce yürütüldü.
Tüm 3 ana bilgisayardaki tüm NICS'lerin MTU'ları 1500'dür, standart dışı ağ ayarı yapılmamıştır. Ethernet anahtarı Dell MXL 10 / 40Gbe'dir.
İşletim Sistemi CentOS 7'dir.
node01:/mnt/test # uname -a
Linux node01 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Hangi ayarları kaçırıyorum? NFS'yi hızlı ve askıda kalmadan nasıl yazabilirim?
Operation not permitted
NFS işlemine strace ekleme girişiminde bulunuyorum.