NFS hiệu suất viết kém


20

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 iperfthô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/exportslà:

/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/testvớ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 đó, lslệ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-ngvà 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

  • rsizewsizelà 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?


1
Bạn có một trường hợp kiểm tra khá tròn, nhưng tôi sẽ thử gắn trên máy chủ và viết từ đó, bằng cách đó bạn có thể biết liệu ngăn xếp NFS hoặc ngăn xếp mạng có lỗi hay không. Ngoài ra, hãy thử chuyển đổi máy chủ và máy khách (xuất từ ​​máy khách, gắn kết trên máy chủ) và sử dụng máy khách khác hoàn toàn. thoát khỏi quá trình máy chủ / máy khách không tiết lộ bất cứ điều gì?
Dalibor Karlović

@ DaliborKarlović Tôi đã thử tất cả ngoại trừ strace và thêm thông tin vào câu hỏi. Mount từ localhost hoạt động chậm, do đó, ngăn xếp và chuyển đổi mạng dường như không có lỗi. Tôi sử dụng NFS kernel-space và Operation not permittedcố gắng gắn strace vào quy trình NFS.
Serge

Tôi giả sử điều này có nghĩa là bạn có thể loại trừ hoàn toàn ngăn xếp mạng (nhưng bạn cần phải gắn strace với nó để đảm bảo). Bạn sẽ có thể thực hiện bất kỳ quy trình nào với tư cách là người dùng root nếu không gặp phải một lỗi nào đó .
Dalibor Karlović

@ DaliborKarlović Chắc chắn tôi thử strace như root. Tôi có thể đính kèm vào bất kỳ quy trình không gian người dùng nào, nhưng không phải là quy trình không gian nhân. Nhưng thông tin nào tôi có thể nhận được từ đầu ra của nó? Tôi cho rằng nó sẽ tạo ra hàng trăm ngàn dòng đầu ra nếu tôi gắn nó vào NFS và bắt đầu tải lên. Tôi có nên chú ý đến các giá trị trả về khác không?
Serge

Bạn nói đúng, tôi đã không nghĩ về nó là một quá trình phi người dùng. Tôi hy vọng sẽ thấy những gì nó đã làm trong khi nó "treo" khi bắt đầu chuyển, nó có thể là một cái gì đó tầm thường như một tra cứu DNS ngược được định cấu hình sai.
Dalibor Karlović

Câu trả lời:


3

Bạn sử dụng tùy chọn đồng bộ hóa trong câu lệnh xuất của bạn. Điều này có nghĩa là máy chủ chỉ xác nhận thao tác ghi sau khi chúng thực sự được ghi vào đĩa. Do bạn có một đĩa quay (tức là không có SSD), điều này đòi hỏi trung bình ít nhất 1/2 vòng quay của mỗi thao tác ghi, đây là nguyên nhân gây ra sự chậm lại.

Sử dụng cài đặt không đồng bộ, máy chủ sẽ ngay lập tức xác nhận thao tác ghi cho máy khách khi nó được xử lý nhưng chưa được ghi vào đĩa. Đây là một chút không đáng tin cậy hơn, ví dụ, trong trường hợp mất điện khi khách hàng nhận được ack cho một hoạt động không xảy ra. Tuy nhiên, nó mang lại sự gia tăng lớn về hiệu suất ghi.

(chỉnh sửa) Tôi chỉ thấy rằng bạn đã kiểm tra các tùy chọn async vs sync. Tuy nhiên, tôi gần như chắc chắn rằng đây là nguyên nhân của vấn đề suy giảm hiệu suất của bạn - tôi đã từng có chính xác cùng một chỉ định với thiết lập idencitcal. Có thể bạn kiểm tra lại. Bạn có đưa ra tùy chọn async tại câu lệnh xuất của máy chủ VÀ trong hoạt động gắn kết tại máy khách cùng một lúc không?


+1 Giải thích rất có thể là đồng bộ hóa không được tắt chính xác.
David Schwartz

2

Nó có thể là một vấn đề liên quan đến kích thước gói và độ trễ. Hãy thử như sau:

Báo cáo lại kết quả của bạn.


Tôi đã thử các khung jumbo với MTU = 9000, nhưng kết quả là như nhau. Tôi cũng đã thử tổng hợp liên kết với 802.3ad, một lần nữa không có thay đổi. Vì vậy, tôi đã hoàn nguyên tất cả các cài đặt này để càng gần trạng thái mặc định càng tốt. Ngoài ra tôi đã cố gắng điều chỉnh điều đó net.core.*net.ipv4.*sysctls, nhưng có lẽ tôi đã thực hiện quá ít thử nghiệm. OK, tôi sẽ làm thêm một số bài kiểm tra và sẽ báo cáo.
Serge

Tôi đã thử một lần nữa để điều chỉnh sysctls trên cả máy chủ và máy khách, nhưng điều đó không có ích.
Serge

Bạn đã thử với UDP là giao thức truyền tải chưa?
shodanshok

Tôi đã thử UDP (proto = udp trong tùy chọn gắn kết), nhưng nó hoạt động chậm hơn 1-2 MB / giây so với TCP. Kết quả là sự gắn kết tương tự từ localhost và từ máy chủ từ xa.
Serge

2

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

Việc định cấu hình bộ lập lịch Linux trên các hệ thống có RAID phần cứng và thay đổi mặc định từ [cfq] thành [noop] sẽ cải thiện I / O.

Sử dụng lệnh nfsstat, để tính tỷ lệ phần trăm đọc / ghi. Đặt tỷ lệ bộ đệm của bộ điều khiển RAID để khớp.

Đối với khối lượng công việc nặng, bạn sẽ cần tăng số lượng luồng máy chủ NFS.

Định cấu hình các luồng nfs để ghi không chậm trễ vào đĩa bằng tùy chọn no_delay.

Yêu cầu nhân Linux tuôn ra càng nhanh càng tốt để ghi được giữ càng nhỏ càng tốt. Trong nhân Linux, tần số ghi trang bẩn có thể được kiểm soát bởi hai tham số.

Để ghi đĩa nhanh hơn, hãy sử dụng tùy chọn filesystem data = tạp chí và ngăn cập nhật vào thời gian truy cập tệp, điều này dẫn đến dữ liệu bổ sung được ghi vào đĩa. Chế độ này là nhanh nhất khi dữ liệu cần được đọc và ghi vào đĩa cùng lúc với nó vượt trội hơn tất cả các chế độ khác

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.