NFS zayıf yazma performansı


20

10Gbit Ethernet ile bağlı iki makinem var. Biri NFS sunucusu, diğeri NFs istemcisi olsun.

TCP üzerinden ağ hızının iperfher 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/testolarak 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/testbir veya iki dakika boyunca geri dönmez. Sonra lskomut 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-ngve 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 veya async

  • noatime

  • Hayır hard

  • rsizeve wsizeö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_cachestü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?


1
Oldukça iyi bir test durumunuz var, ancak sunucunun kendisine monte etmeyi ve oradan yazmayı deneyebilirim, bu şekilde NFS yığınının veya ağ yığınının hatalı olup olmadığını anlayabilirsiniz. Ayrıca, sunucuyu ve istemciyi (istemciden dışa aktar, sunucuya bağla) ve ayrıca farklı bir istemci kullanarak değiştirmeyi deneyin. sunucu / istemci işlemlerini izlemek hiçbir şey ortaya koymadı?
Dalibor Karlović

@ DaliborKarlović Strace hariç hepsini denedim ve soruya bilgi ekledim. Localhost'tan bağlanma yavaş çalışıyor, bu nedenle ağ yığını ve anahtarı hatalı görünmüyor. Çekirdek alanı NFS kullanıyorum ve Operation not permittedNFS işlemine strace ekleme girişiminde bulunuyorum.
Sergey

Bu, ağ yığınını tamamen devre dışı bırakabileceğiniz anlamına gelir (ancak emin olmak için ona bant eklemeniz gerekir). Belirli bir hata tarafından vurulmazsa, herhangi bir işlemi kök kullanıcı olarak bağlayabilmeniz gerekir .
Dalibor Karlović

@ DaliborKarlović Elbette strace'yi kök olarak deniyorum. Herhangi bir kullanıcı alanı işlemine ekleyebiliyorum, ancak çekirdek alanı olanları ekleyemiyorum. Ancak çıktısından hangi bilgileri alabilirim? NFS'ye ekleyip yüklemeye başlarsam yüz binlerce satır üreteceğini düşünüyorum. Sıfır olmayan dönüş değerlerine dikkat etmeli miyim?
Sergey

Haklısın, bunun kullanıcı olmayan bir süreç olduğunu düşünmüyordum. Ben transfer başlangıcında "asılı" iken ne yaptığını görmek için beklenir, bu yanlış yapılandırılmış ters DNS arama gibi önemsiz bir şey olabilir.
Dalibor Karlović

Yanıtlar:


3

Dışa aktarma ifadenizde senkronizasyon seçeneğini kullanırsınız. Bu, sunucunun yazma işlemlerini yalnızca diske yazıldıktan sonra onayladığı anlamına gelir. Dönen bir diskiniz (yani SSD'siz) olduğu düşünüldüğünde, bu yavaşlama sebebi olan yazma işlemi başına diskin ortalama en az 1/2 turunu gerektirir.

Zaman uyumsuzluk ayarını kullanarak, sunucu işlendiğinde ancak henüz diske yazılmadığında istemciye yazma işlemini derhal kabul eder. Bu, örneğin istemci gerçekleşmeyen bir işlem için bir ack aldığında bir elektrik kesintisi durumunda, biraz daha güvenilir değildir. Ancak, yazma performansında büyük bir artış sağlar.

Senkronizasyonu ve senkronizasyonu daha önce test ettiğinizi gördüm. Ancak, bu performans düşüşü sorununun nedeni olduğundan neredeyse eminim - bir keresinde bir kimlik ayarıyla tamamen aynı göstergeye sahiptim. Belki tekrar test edersin. Sunucunun dışa aktarma deyiminde ve istemcideki bağlama işleminde eşzamansız seçeneğini aynı anda verdiniz mi?


+1 En olası açıklama, senkronizasyonun doğru şekilde devre dışı bırakılmamış olmasıdır.
David Schwartz

2

Paket boyutu ve gecikme ile ilgili bir sorun olabilir. Takip etmeyi dene:

Rapor sonuçlarınızı geri getirir.


MTU = 9000 ile jumbo kareleri denedim, ancak sonuçlar aynıydı. Ayrıca 802.3ad ile bağlantı toplamayı denedim, yine değişiklik yok. Bu yüzden, varsayılan duruma olabildiğince yaklaşmak için tüm bu ayarları geri aldım. Ayrıca sana ses bu çalıştı net.core.*ve net.ipv4.*sysctl, ama belki de birkaç deney yaptı. Tamam, biraz daha test yapacağım ve rapor edeceğim.
Sergey

Hem sunucuda hem de istemcide sysctls ayarlamak için bir kez daha denedim, ama bu yardımcı olmadı.
Sergey

UDP ile taşıma protokolü olarak denediniz mi?
shodanshok

UDP (mount seçeneklerinde proto = udp) denedim, ancak TCP'den bile 1-2 MBytes / s daha yavaş çalışıyor. Sonuç localhost ve uzak ana bilgisayardan aynı montajdı.
Sergey

2

http://veerapen.blogspot.com/2011/09/tuning-redhat-enterprise-linux-rhel-54.html

Donanım RAID'si olan sistemlerde Linux zamanlayıcısını yapılandırmak ve varsayılanı [cfq] 'den [noop]' a değiştirmek G / Ç iyileştirmeleri sağlar.

Okuma / yazma yüzdesini hesaplamak için nfsstat komutunu kullanın. RAID denetleyicisi önbellek oranını eşleşecek şekilde ayarlayın.

Ağır iş yükleri için NFS sunucusu iş parçacığı sayısını artırmanız gerekir.

Nfs iş parçacıklarını no_delay seçeneğini kullanarak diske gecikmeden yazacak şekilde yapılandırın.

Linux çekirdeğine mümkün olduğunca çabuk akmasını söyleyin, böylece yazma işlemleri mümkün olduğunca küçük tutulur. Linux çekirdeğinde, kirli sayfaların geri yazma sıklığı iki parametre ile kontrol edilebilir.

Daha hızlı disk yazma işlemleri için, dosya sistemi verileri = günlük seçeneğini kullanın ve dosya erişim sürelerinde güncellemeleri önleyin, bu da diske yazılan ek verilere neden olur. Bu mod, verilerin tüm diğer modlardan daha iyi performans gösterdiği aynı zamanda okunması ve diske yazılması gerektiğinde en hızlı olanıdır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.