ฉันมีสองเครื่องเชื่อมต่อกับ 10Gbit Ethernet ให้หนึ่งในนั้นคือเซิร์ฟเวอร์ NFS และอีกอันจะเป็นไคลเอนต์ NFs
การทดสอบความเร็วของเครือข่ายผ่าน TCP ด้วยการiperf
แสดงปริมาณข้อมูลที่ ~ 9.8 Gbit / s ในทั้งสองทิศทางดังนั้นเครือข่ายจึงใช้ได้
ทดสอบประสิทธิภาพดิสก์ของเซิร์ฟเวอร์ NFS:
dd if=/dev/zero of=/mnt/test/rnd2 count=1000000
ผลลัพธ์คือ ~ 150 MBytes / s ดังนั้นดิสก์จึงทำงานได้ดีสำหรับการเขียน
เซิร์ฟเวอร์/etc/exports
คือ:
/mnt/test 192.168.1.0/24(rw,no_root_squash,insecure,sync,no_subtree_check)
ไคลเอนต์เมาท์การแชร์นี้เป็นภายในเครื่อง/mnt/test
ด้วยตัวเลือกต่อไปนี้:
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)
หากฉันพยายามดาวน์โหลดไฟล์ขนาดใหญ่ (~ 5Gb) บนเครื่องไคลเอ็นต์จากการแชร์ NFS ฉันจะได้รับประสิทธิภาพการทำงานที่ ~ 130-140 MBytes / s ซึ่งใกล้เคียงกับประสิทธิภาพของดิสก์ในเครื่องของเซิร์ฟเวอร์ดังนั้นจึงเป็นที่น่าพอใจ
แต่เมื่อฉันลองอัปโหลดไฟล์ขนาดใหญ่ไปยังการแบ่งปัน NFS การอัปโหลดเริ่มต้นที่ ~ 1.5 Mbytes / s ค่อยๆเพิ่มขึ้นถึง 18-20 Mbytes / s และหยุดเพิ่มขึ้น บางครั้งการแชร์ "แฮงค์" เป็นเวลาสองสามนาทีก่อนที่การอัปโหลดจะเริ่มขึ้นจริงนั่นคือการรับส่งข้อมูลระหว่างโฮสต์จะใกล้เคียงกับศูนย์และหากฉันดำเนินการls /mnt/test
ก็จะไม่กลับมาในช่วงหนึ่งหรือสองนาที จากนั้นls
คำสั่งจะส่งคืนและอัปโหลดเริ่มต้นที่ความเร็วเริ่มต้น 1.5Mbit / s
เมื่อความเร็วในการอัพโหลดถึงค่าสูงสุด (18-20 Mbytes / s) ฉันจะเรียกใช้iptraf-ng
และมันจะแสดงปริมาณการรับส่งข้อมูล ~ 190 Mbit / s บนอินเทอร์เฟซเครือข่ายดังนั้นเครือข่ายจึงไม่ใช่คอขวดเช่นเดียวกับ HDD ของเซิร์ฟเวอร์
สิ่งที่ฉันพยายาม:
1.
ตั้งค่าเซิร์ฟเวอร์ NFS บนโฮสต์ที่สามซึ่งเชื่อมต่อกับ 100Mbit Ethernet NIC เท่านั้น ผลลัพธ์เป็นแบบอะนาล็อก: DL แสดงประสิทธิภาพที่ดีและการใช้เครือข่ายเกือบเต็ม 100Mbit การอัปโหลดไม่ทำงานเร็วกว่าร้อยกิโลไบต์ต่อวินาทีทำให้การใช้เครือข่ายต่ำมาก (2.5 Mbit / s ตามiptraf-ng
)
2. ฉันพยายามปรับพารามิเตอร์ NFS:
sync
หรือasync
noatime
ไม่
hard
rsize
และwsize
สูงสุดในตัวอย่างของฉันดังนั้นฉันพยายามลดลงในหลายขั้นตอนจนถึง 8192
3. ฉันพยายามสลับเครื่องไคลเอนต์และเซิร์ฟเวอร์ (ตั้งค่าเซิร์ฟเวอร์ NFS บนไคลเอนต์เก่าและในทางกลับกัน) ยิ่งไปกว่านั้นมีเซิร์ฟเวอร์อีกหกตัวที่มีการกำหนดค่าเดียวกันดังนั้นฉันจึงลองเชื่อมต่อเข้าด้วยกันในรูปแบบที่แตกต่างกัน ผลลัพธ์เดียวกัน
4. MTU = 9000, MTU = 9000 และ 802.3ad การรวมลิงก์, การรวมลิงก์กับ MTU = 1500
5. การปรับ sysctl:
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
ผลลัพธ์เดียวกัน
6. เมาท์จาก localhost:
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/
และที่นี่ฉันก็ได้ผลเหมือนกัน: ดาวน์โหลดจาก/mnt/testmount/
เร็วอัปโหลดไป/mnt/testmount/
ช้ามากไม่เร็วกว่า 22 MBytes / s และมีความล่าช้าเล็กน้อยก่อนที่จะเริ่มการถ่ายโอนจริง ๆ มันหมายความว่า stack network ทำงานได้อย่างไร้ที่ติและปัญหาอยู่ใน NFS หรือไม่?
ทั้งหมดนี้ไม่ได้ช่วยผลที่ได้ไม่แตกต่างอย่างมากจากการกำหนดค่าเริ่มต้น echo 3 > /proc/sys/vm/drop_caches
ถูกดำเนินการก่อนการทดสอบทั้งหมด
MTU ของ NICS ทั้งหมดที่โฮสต์ทั้งหมด 3 แห่งคือ 1500 ไม่มีการปรับจูนเครือข่ายที่ไม่ได้มาตรฐาน สวิตช์อีเธอร์เน็ตคือ Dell MXL 10 / 40Gbe
ระบบปฏิบัติการคือ CentOS 7
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
การตั้งค่าใดที่ฉันขาดหายไป วิธีทำให้ NFS เขียนได้อย่างรวดเร็วและไม่มีการหยุดทำงาน?
Operation not permitted
พยายามเชื่อม strace กับกระบวนการ NFS