Tôi có hai máy được kết nối với Ethernet 10Gbit. Hãy để một trong số họ là máy chủ NFS và một người khác sẽ là khách hàng của NF.
Kiểm tra tốc độ mạng qua TCP với iperf
thông lượng ~ 9,8 Gbit / s theo cả hai hướng, vì vậy mạng vẫn ổn.
Kiểm tra hiệu năng đĩa của máy chủ NFS:
dd if=/dev/zero of=/mnt/test/rnd2 count=1000000
Kết quả là ~ 150 MB / s, vì vậy đĩa hoạt động tốt để ghi.
Máy chủ /etc/exports
là:
/mnt/test 192.168.1.0/24(rw,no_root_squash,insecure,sync,no_subtree_check)
Khách hàng gắn kết chia sẻ này với địa phương /mnt/test
với các tùy chọn sau:
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)
Nếu tôi cố tải xuống một tệp lớn (~ 5Gb) trên máy khách từ chia sẻ NFS, tôi nhận được hiệu suất ~ 130-140 MB / giây gần với hiệu suất đĩa cục bộ của máy chủ, vì vậy nó rất thỏa đáng.
Nhưng khi tôi thử tải một tệp lớn lên chia sẻ NFS, tải lên bắt đầu với tốc độ ~ 1,5 Mbyte / giây, tăng chậm lên đến 18-20 Mbyte / giây và ngừng tăng. Đôi khi, chia sẻ "treo" trong vài phút trước khi tải lên thực sự bắt đầu, tức là lưu lượng giữa các máy chủ trở nên gần bằng 0 và nếu tôi thực thi ls /mnt/test
, nó sẽ không quay lại trong một hoặc hai phút. Sau đó, ls
lệnh trả về và tải lên bắt đầu với tốc độ 1,5Mbit / giây ban đầu.
Khi tốc độ tải lên đạt tối đa (18-20 Mbyte / giây), tôi chạy iptraf-ng
và nó hiển thị lưu lượng ~ 190 Mbit / s trên giao diện mạng, do đó, mạng không phải là nút cổ chai ở đây, cũng như ổ cứng của máy chủ.
Những gì tôi đã cố gắng:
1.
Thiết lập máy chủ NFS trên máy chủ thứ ba chỉ được kết nối với Ethernet Ethernet 100Mbit. Kết quả tương tự: DL cho thấy hiệu suất tốt và sử dụng mạng 100Mbit gần như đầy đủ, tải lên không thực hiện nhanh hơn hàng trăm kilobyte mỗi giây, khiến mức sử dụng mạng rất thấp (2,5 Mbit / s theo iptraf-ng
).
2. Tôi đã cố điều chỉnh một số tham số NFS:
sync
hoặc làasync
noatime
Không
hard
rsize
vàwsize
là tối đa trong các ví dụ của tôi, vì vậy tôi đã cố gắng giảm chúng trong một số bước xuống còn 8192
3. Tôi đã cố gắng chuyển đổi máy khách và máy chủ (thiết lập máy chủ NFS trên máy khách cũ và ngược lại). Hơn nữa, có thêm sáu máy chủ có cùng cấu hình, vì vậy tôi đã cố gắn chúng với nhau theo các biến thể khác nhau. Cùng một kết quả.
4. Tập hợp liên kết MTU = 9000, MTU = 9000 và 802.3ad, tập hợp liên kết với MTU = 1500.
5. điều chỉnh hệ thống:
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
Cùng một kết quả.
6. Gắn kết từ 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/
Và ở đây tôi nhận được kết quả tương tự: tải xuống từ /mnt/testmount/
nhanh, tải lên /mnt/testmount/
rất chậm, không nhanh hơn 22 MB / giây và có một độ trễ nhỏ trước khi quá trình chuyển thực sự bắt đầu. Có nghĩa là ngăn xếp mạng hoạt động hoàn hảo và vấn đề là ở NFS?
Tất cả điều này không giúp được gì, kết quả không khác biệt đáng kể so với cấu hình mặc định. echo 3 > /proc/sys/vm/drop_caches
đã được thực hiện trước tất cả các bài kiểm tra.
MTU của tất cả NICS ở cả 3 máy chủ là 1500, không thực hiện điều chỉnh mạng không chuẩn. Bộ chuyển mạch Ethernet là Dell MXL 10 / 40Gbe.
HĐH là 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
Tôi thiếu cài đặt nào? Làm thế nào để làm cho NFS viết nhanh chóng và không bị treo?
Operation not permitted
cố gắng gắn strace vào quy trình NFS.