Hiệu suất truyền chậm NFS của các tệp nhỏ


12

Tôi đang sử dụng Openfiler 2.3 trên các đĩa HP ML370 G5, Smart Array P400, SAS kết hợp sử dụng RAID 1 + 0.

Tôi đã thiết lập chia sẻ NFS từ phân vùng ext3 bằng cấu hình dựa trên web của Openfiler và tôi đã thành công trong việc gắn kết chia sẻ từ một máy chủ khác. Cả hai máy chủ được kết nối bằng liên kết gigabit chuyên dụng.

Điểm chuẩn đơn giản sử dụng dd:

 $ dd if=/dev/zero of=outfile bs=1000 count=2000000
 2000000+0 records in
 2000000+0 records out
 2000000000 bytes (2.0 GB) copied, 34.4737 s, 58.0 MB/s

Tôi thấy nó có thể đạt được tốc độ truyền vừa phải (58,0 MB / s).

Nhưng nếu tôi sao chép một thư mục chứa nhiều tệp nhỏ ( .php.jpg, khoảng 1-4 kB mỗi tệp) có tổng kích thước ~ 300 MB, cpquá trình sẽ kết thúc sau khoảng 10 phút.

NFS không phù hợp để chuyển tập tin nhỏ như trường hợp trên? Hoặc có một số tham số phải được điều chỉnh?


Điều này có trả lời câu hỏi của bạn không? Hiệu suất viết kém của NFS
Aleksandr Dubinsky

Câu trả lời:


7

Có nhiều lý do tại sao việc chuyển nhiều tệp nhỏ sẽ luôn chậm hơn so với chuyển một tệp lớn. Để đọc, các tệp có nhiều khả năng bị phân tán xung quanh đĩa, yêu cầu tìm kiếm khắp nơi để có được chúng. Như Evan đã đề cập, cũng có siêu dữ liệu liên quan đến trường hợp NFS (hoặc bất kỳ hệ thống tệp nào khác cho vấn đề đó!) Cũng làm phức tạp mọi thứ.

Bạn có thể thử tăng rsizewsizetham số của bạn lên mount NFS và xem điều đó có giúp hiệu suất một chút không. Ngoài ra hãy xem câu hỏi này về điều chỉnh NFS cho độ trễ tối thiểu vì nó có rất nhiều lời khuyên hữu ích sẽ giúp ích trong trường hợp chuyển nhiều tệp nhỏ.


8

Tôi không có nhiều kinh nghiệm về NFS, nhưng trải nghiệm của tôi với các giao thức chia sẻ tệp mạng khác nói rằng hiệu suất bị ảnh hưởng trong kịch bản "nhiều tệp nhỏ" gần như phổ biến. Bạn đang phải chịu độ trễ chuyến đi khứ hồi và trên một nhóm lớn các tệp có độ trễ cộng lại.


4

Bạn đã thử với một hệ thống tập tin khác, như XFS chưa? Nó đã giải quyết tất cả các vấn đề của tôi khi thực hiện một số lượng lớn chuyển khối iSCSI nhỏ. Không biết tại sao.

Ngoài ra, iSCSI / NFS thường được cấu hình cho các tệp dữ liệu khá lớn (khung jumbo, v.v.), nó có thể làm tổn thương bạn nếu bạn sao chép từng tệp nhỏ. Có lẽ tar'ing và sau đó chuyển sẽ giúp bạn.


1
Có, thử nghiệm của tôi cho thấy một số cải tiến khi sử dụng XFS so với ext3 (~ 8 phút so với ~ 14 phút).
Arie K

1
Một số? Tôi muốn nói rằng đó là một cải tiến khá lớn :)
pauseka

1

Kiểm tra xem bạn có đang sử dụng kết nối TCP không ( mount -t nfs -o tcp host: / mount / target ). Hiệu suất trên các hệ thống hiện đại sẽ không bị ảnh hưởng, nhưng các IO nhỏ có thể cải thiện đáng kể nếu mạng của bạn được tải.

Và bạn cũng nên thử một số hệ thống tập tin khác; ext3 về cơ bản là chậm nhất trong tất cả. Nó chắc chắn, nổi tiếng, nhưng nó không phù hợp với máy chủ tệp. XFS là cách tốt hơn và reiserfs cũng tốt hơn nhiều ở các IO nhỏ.


1

Nếu bạn muốn chuyển một cây thư mục lớn gồm các tệp nhỏ qua NFS và bạn có thể đăng nhập vào máy chủ, cách tốt nhất để làm là tạo một tệp tar được trích xuất tự động trên máy khách, như sau:

tar c mydirectory | người dùng ssh @ host tar -xf - -C Destdir

Bằng cách đó, chỉ một "tệp" duy nhất được truyền qua mạng và ngay lập tức bạn có tất cả các tệp của mình trên máy chủ.


0

Chỉ cần thêm vào câu trả lời của Evan, bạn cũng có tất cả chi phí chung để tạo siêu dữ liệu (mục nhập thư mục, v.v.) cho mỗi tệp bạn đang sao chép.


0

Một giải pháp tương tự như câu trả lời của Chris sẽ là rsync các tệp của bạn cho khách hàng theo định kỳ. Nếu bạn muốn thực hiện thay đổi hai chiều, bạn cũng có thể sử dụng unison.


0

Vấn đề là chia sẻ của bạn được xuất với synctùy chọn (mặc định). Sử dụng asyncđể tăng tốc độ ghi đáng kể. Xem nfs.sourceforge.net/nfs-howto/ar01s05.html

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.