Tại sao có sự khác biệt về tốc độ ghi giữa dd, cp, rsync và macOS Finder vào ổ SMB3?


15

Tl; dr - Chúng tôi không thể tìm thấy lý do cho tốc độ ghi giới hạn 60 MB / giây vào NAS của chúng tôi thông qua SMB và AFP từ hai máy khách Mac khác nhau. So sánh: Một máy tính xách tay Windows 7 cũ trong cùng một mạng ghi ổn định 100 MB / giây.

Nếu bạn đọc câu hỏi này lần đầu tiên, vui lòng bỏ qua phần Cập nhật 4 . rsynclà lý do chính cho tốc độ thấp, mặc dù chúng tôi không hiểu tại sao (đối với một tệp duy nhất!).


Câu hỏi gốc: Tìm nút cổ chai tốc độ SMB3 / NAS với Mac OS 10.11.5 trở lên

Chúng tôi đã thử nghiệm rsync --progress -a /localpath/test.file /nas/test.filetrên macOS và thông tin sao chép của Windows.

NAS là DS713 + chạy DSM 6.0.2 hiện tại của họ (cũng đã thử nghiệm với 5.x), với hai HGST Deskstar NAS SATA 4TB (HDN724040ALE640) trong RAID1 chỉ với các thành phần ethernet gigabit và cáp ethernet mới (ít nhất là Cat5e).

Máy khách Mac đầu tiên chỉ thực hiện 20 MB / giây. Nhưng việc áp dụng bản signing_required=nosửa lỗi (được mô tả ở đây ) đã đẩy tốc độ ghi lên 60 MB / giây thông qua SMB2 và SMB3. AFP cũng cung cấp khoảng 60 MB / giây. Kết quả thay đổi khoảng 5 MB / giây tùy thuộc vào giao thức và máy khách (Mac).

Những gì chúng tôi đã thử:

Mạng

  1. Đã kiểm tra hiệu suất mạng thông qua iperf3. Kết quả: 926 Mbit / s. Có vẻ tốt.
  2. Đã thử giao diện kết nối / kết nối mạng ngoại quan kép. Không thay đổi.
  3. Tăng MTU lên 6000 và 9000. Không thay đổi.
  4. Đã kiểm tra tất cả các dây cáp. Tất cả đều tốt ít nhất là Cat5e, trong tình trạng tốt.

Đĩa

  1. Đã kiểm tra SMART Có vẻ khỏe mạnh.
  2. Đã kiểm tra tốc độ ghi trực tiếp vào đĩa với dd if=/dev/zero of=write.test bs=256M count=4nhiều cài đặt bsvà khác nhau count(128/8, 512M / 2, 1024/1). Kết quả: khoảng 120 MB / s (tùy thuộc vào kích thước khối / số lượng)

SMB / AFP

  1. Điểm chuẩn SMB2, SMB3 và AFP với nhau. Về bằng nhau.
    Xem cập nhật bên dưới: Đã sử dụng phương pháp sai để loại trừ việc triển khai SMB của macOS. SMB trên Windows nhanh hơn, cài đặt SMB mới đi kèm với macOS 10.11 và 10.12 có thể là lý do.
  2. Đã thử điều chỉnh cài đặt SMB, bao gồm các tùy chọn ổ cắm (theo hướng dẫn này )
  3. Đã thử phiên bản khác nhau của cài đặt ack bị trì hoãn và rsync --sockopts=TCP_NODELAY(ý kiến)

Không có thay đổi đáng kể về tốc độ ghi. Chúng tôi đã kiểm tra lại xem cấu hình đã thực sự được tải chưa và chúng tôi đang chỉnh sửa smb.conf đúng .

Hệ thống

  1. Đã xem CPU và RAM. Không có gì tối đa. CPU khoảng 20%, RAM khoảng 25% trong quá trình chuyển.
  2. Đã thử nghiệm cùng một NAS với DSM 5.xx trong một thiết lập gần như vượt trội. Không có phần mềm bổ sung được cài đặt. Lưu ý: Chúng tôi có hai trong số này ở các địa điểm khác nhau. Chúng được đồng bộ hóa thông qua CloudSync của Synology. Cùng một kết quả.
  3. Vô hiệu hóa mọi thứ không cần thiết có thể rút tài nguyên hệ thống.

Chúng tôi nghĩ rằng đây là một thiết lập mặc định, không thích ứng, ứng dụng khách hoặc thành phần mạng. Theo số liệu Synology xuất bản, NAS sẽ thực hiện nhanh hơn 40 MB / s đến 75 MB / s. Nhưng chúng ta không thể tìm thấy nút cổ chai.

Khách hàng / NAS

Các máy khách Mac là MacPro 5,1 (NIC có dây tiêu chuẩn, chạy 10.12.3 (16D32)) và MacBookPro10,1 (bộ điều hợp mạng Thunderbolt, chạy 10.11.6) chỉ cách NAS khoảng 2m, chạy trên cùng gigabit chuyển đổi như máy tính xách tay Windows trong thử nghiệm.

Chúng tôi có hai trong số các NAS ở các địa điểm khác nhau và kết quả là giống hệt nhau. Các giây NAS ít nhiều mặc định xuất xưởng (thậm chí không cài đặt phần mềm của bên thứ 3). Chỉ cần hai đĩa định dạng RAID1, EXT4 đồng bộ hóa với NAS khác thông qua Synology CloudSync. Chúng tôi đã đi xa như kết nối trực tiếp với NAS mà không cần chuyển đổi, kết quả tương tự.

Cập nhật quan trọng

Phương pháp được sử dụng để loại trừ việc triển khai SMB của macOS / OS X là sai. Tôi đã thử nghiệm nó thông qua một máy ảo, giả sử rằng nó sẽ sử dụng phiên bản SMB của riêng nó, nhưng rõ ràng lưu lượng được chuyển sang macOS, chạy qua phiên bản SMB của nó.

Sử dụng máy tính xách tay Windows Bây giờ tôi đã có thể đạt được trung bình 100 MB / s. Việc chỉ ra việc thực hiện / cập nhật SMB đi kèm với 10.11 và 10.12 có thể gây ra hiệu suất kém. Ngay cả khi signing_requiredđược đặt thành no.

Sẽ thật tuyệt nếu ai đó có thể chỉ ra một số cài đặt khác có thể đã thay đổi với các bản cập nhật và có thể ảnh hưởng đến hiệu suất.

Cập nhật 2 - những hiểu biết mới

AndrewHenle đã chỉ ra trong các ý kiến ​​rằng tôi nên điều tra giao thông một cách chi tiết bằng cách sử dụng Wireshark để có cái nhìn sâu sắc hơn.

Do đó, tôi đã chạy sudo tcpdump -i eth0 -s 65535 -w tcpdump.dumptrên NAS, trong khi chuyển hai tệp thử nghiệm một với 512 MB và một với 1 GB. Và kiểm tra bãi rác với Wireshark.

Những gì tôi tìm thấy:

  1. Cả OS X và Windows dường như đều sử dụng SMB2 mặc dù SMB3 được kích hoạt trên NAS (ít nhất là theo Wireshark).
  2. OS X dường như gắn bó với MTU . Các gói có 1514 byte dẫn đến nhiều mạng hơn và các gói được gửi (hiển thị trong các bãi chứa).
  3. Windows dường như gửi các gói lên tới 2634 byte (nếu tôi đọc dữ liệu chính xác! Vui lòng xác minh.) Ngay cả khi MTU không cho phép điều đó, vì nó được đặt thành 1500 trên NAS, cài đặt tối đa sẽ là 9000 ở đó (Synology cũng sử dụng cài đặt 1500 trong các thử nghiệm của họ).
  4. Cố gắng buộc macOS sử dụng SMB3 bằng cách thêm smb_neg=smb3_onlyvào /etc/nsmb.conf không hoạt động hoặc ít nhất không dẫn đến chuyển nhanh hơn.
  5. Chạy rsync --sockopts=TCP_NODELAYvới các kết hợp khác nhau của cài đặt ack bị trì hoãn TCP (0 đến 3) không có hiệu lực (Lưu ý: Tôi đã chạy tcpdump với cài đặt ack mặc định là 3).

Tôi đã tạo 4 kết xuất dưới dạng tệp .csv, 2 trong khi sao chép 512 MB (test-2.file) và 2 trong khi sao chép 1024 MB (test.file). Bạn có thể tải xuống bản xuất của Wireshark tại đây (25,2 MB). Chúng được nén để tiết kiệm không gian và được đặt tên tự giải thích.

Cập nhật 3 - đầu ra smbutil

Đầu ra smbutil statshares -atheo yêu cầu của harrymc trong các ý kiến.

==================================================================================================
SHARE                         ATTRIBUTE TYPE                VALUE
==================================================================================================
home
                              SERVER_NAME                   server-name._smb._tcp.local
                              USER_ID                       502
                              SMB_NEGOTIATE                 SMBV_NEG_SMB1_ENABLED
                              SMB_NEGOTIATE                 SMBV_NEG_SMB2_ENABLED
                              SMB_NEGOTIATE                 SMBV_NEG_SMB3_ENABLED
                              SMB_VERSION                   SMB_3.0
                              SMB_SHARE_TYPE                DISK
                              SIGNING_SUPPORTED             TRUE
                              EXTENDED_SECURITY_SUPPORTED   TRUE
                              LARGE_FILE_SUPPORTED          TRUE
                              OS_X_SERVER                   TRUE
                              QUERYINFO_NOT_SUPPORTED       TRUE
                              DFS_SUPPORTED                 TRUE
                              MULTI_CREDIT_SUPPORTED        TRUE

--------------------------------------------------------------------------------------------------

Lưu ý về điều này: Tôi chắc chắn SIGNING_SUPPORTEDtrueở đây không có nghĩa là các thiết lập trong cấu hình không hoạt động. Nhưng chỉ có điều nó được hỗ trợ bởi NAS. Tôi đã kiểm tra ba lần rằng việc thay đổi signing_requiredcài đặt trong cấu hình của tôi có ảnh hưởng đến tốc độ ghi (~ 20 MB / s khi được điều chỉnh, ~ 60 MB / s khi tắt).

Cập nhật 4 - Cuộc chiến Samba: Hy vọng mới

Nó cảm thấy hơi xấu hổ, nhưng vấn đề chính ở đây - một lần nữa - dường như là sự đo lường.

Hóa ra rsync --progress -achi phí khoảng 30 MB / s tốc độ viết. Viết ddtrực tiếp vào chia sẻ SMB và sử dụng time cp /local/test.file /NAS/test.filenhanh hơn với tốc độ khoảng 85-90 MB / giây và rõ ràng cách nhanh nhất để sao chép là Trình tìm kiếm macOS với tốc độ khoảng 100 MB / giây (đây cũng là phương pháp khó đo nhất, vì không có chỉ báo thời gian hoặc tốc độ - ai cần điều đó, phải không? o_O). Chúng tôi đã đo nó bằng cách đầu tiên sao chép tệp 1 GB và sau đó là tệp 10 GB, sử dụng đồng hồ bấm giờ.

Những gì chúng tôi đã cố gắng kể từ khi cập nhật cuối cùng của câu hỏi này.

  1. Sao chép từ máy khách Mac sang máy khách Mac. Cả hai đều có ổ SSD (MacPro ghi với 250 MB / s để sở hữu đĩa, MacBook Pro với 300 MB / s). Kết quả: 65 MB / s ít ỏi thông qua ddviệc viết từ MacBook Pro sang MacPro ( rsync25 MB / s). Thấy 25 MB / giây là lúc chúng tôi bắt đầu đặt câu hỏi về rsync. Vẫn còn 65 MB / s là cực kỳ chậm. Vì vậy, việc triển khai SMB trên macOS có vẻ như rất tốt.
  2. Đã thử cài đặt ack khác nhau với dd và cp - không có may mắn.
  3. Cuối cùng, chúng tôi đã tìm thấy một cách để liệt kê tất cả các tùy chọn nsmb.conf có sẵn. Nó là một đơn giản man nsmb.conf. Chú ý phiên bản trực tuyến đã lỗi thời!

Vì vậy, chúng tôi đã thử thêm một vài cài đặt, trong số đó:

notify_off=yes
validate_neg_off=yes
read_async_cnt=16
write_async_cnt=16
dir_cache_async_cnt=40
protocol_vers_map=4
streams=no
soft=yes

Lưu ý: smb_neg=smb3_onlylà - như tôi đã mong đợi - không phải là cài đặt hợp lệ. protocol_vers_map=4nên tương đương hợp lệ.

Dù sao, không có cài đặt nào trong số này tạo ra sự khác biệt cho chúng tôi.

Câu hỏi mới trong nháy mắt

  1. Tại sao rsync lại là một cách đắt tiền để sao chép một (1!) Tệp. Không có nhiều thứ để đồng bộ hóa / so sánh ở đây, phải không? Các tcpdump không chỉ ra chi phí có thể.

  2. Tại sao ddcpchậm hơn công cụ tìm macOS khi chuyển sang chia sẻ SMB? Có vẻ như khi sao chép bằng Finder, có ít sự thừa nhận hơn trong giao tiếp TCP. (Một lần nữa: Cài đặt ack, ví dụ: delayed_ack=1không có sự khác biệt đối với chúng tôi.)

  3. Tại sao Windows dường như bỏ qua MTU, gửi các gói TCP lớn hơn đáng kể và do đó ít hơn, dẫn đến hiệu suất tốt nhất, so với mọi thứ có thể thông qua macOS.

Đây là những gì các gói trông giống như từ macOS (liên tục 1514)

"TCP","1514","[TCP segment of a reassembled PDU]"
"TCP","66","445  >  56932 [ACK] Seq=6603 Ack=35239 Win=4505 Len=0 TSval=520980697 TSecr=650208630"

Và điều này đến từ Windows (lên tới 26334, kích thước khác nhau)

"SMB2","1466","Write Request Len:65536 Off:196608 File: test.file"
"TCP","26334","[TCP segment of a reassembled PDU]"
"TCP","7354","[TCP segment of a reassembled PDU]"
"TCP","54","445  >  49220 [ACK] Seq=6831 Ack=267030 Win=4074 Len=0"

Bạn có thể tải xuống .csv đầy đủ tại đây (25,2 MB), tên tệp giải thích những gì đã được sao chép (HĐH, phương thức truyền và kích thước tệp).


SMB không được máy ảo chuyển giao cho hệ điều hành của máy chủ, máy ảo mô phỏng hoàn hảo một máy tính thực và không biết bị ảo hóa. Tuy nhiên, ảo hóa giới thiệu một số chi phí hoạt động và do VM cần thiết vượt qua tất cả giao tiếp mạng của họ thông qua máy chủ, điều này cũng có thể là tối ưu.
gronostaj

@gronostaj đó là những gì tôi nghĩ quá. Nhưng tôi nghĩ rằng kết quả tốc độ ghi quá giống nhau cho một sự trùng hợp ngẫu nhiên, cả hai đều rất gần với 60 MB / s. Mặt khác, máy tính xách tay Windows "thực sự" đã tạo ra 100 MB / s trong nhiều lần chạy khác nhau. Nhưng dù sao thì hiệu năng VM không phải là khía cạnh cốt lõi của vấn đề. Các thử nghiệm của tôi cho thấy việc triển khai OS X SMB hiện tại đã đưa ra các cài đặt (có thể là 10.11 và 10.12) làm chậm nghiêm trọng các kết nối SMB. Nhưng tôi không có manh mối nào để tìm tiếp theo, bên cạnh việc chuyển sang ký.
woerndl

Sử dụng máy tính xách tay Windows Bây giờ tôi đã có thể đạt được trung bình 100 MB / s. Việc chỉ ra việc thực hiện / cập nhật SMB đi kèm với 10.11 và 10.12 có thể gây ra hiệu suất kém. Mặc dù có thể đúng, cũng có rất nhiều sự khác biệt khác giữa máy tính xách tay Windows này và (các) cài đặt OS X của bạn chỉ nhận được 60 MB / giây. Trình điều khiển mạng, cài đặt mạng, phần cứng và nhiều hơn nữa cũng có thể được đóng góp. Sẽ không mất nhiều thời gian để giảm hiệu suất từ ​​100 MB / giây - chỉ bằng giới hạn của ethernet gigabit - xuống còn 60 MB / giây.
Andrew Henle

@AndrewHenle hoàn toàn. Tôi sẽ phải nói thêm rằng chúng tôi đã thử điều này với hai máy Mac khác nhau (MacPro 5,1 và MacBookPro10,1) và hai NAS giống hệt nhau. Sản xuất kết quả tương tự. Được kết nối trực tiếp, thậm chí không có các thành phần mạng khác như chuyển đổi giữa. Làm cho nó ít có khả năng, ví dụ như phần cứng mạng của Mac hoặc trình điều khiển chịu trách nhiệm. Nhưng tôi rất cởi mở với bất kỳ đề xuất nào để thu hẹp vấn đề hơn nữa.
woerndl

@awenro Bạn có thể nắm bắt ít nhất kích thước và thời gian gói để chuyển từ máy tính xách tay Windows nhanh hơn và máy OS X chậm hơn không? Một sự khác biệt ở đó ít nhất sẽ cung cấp cho bạn một số dữ liệu để bắt đầu. Chỉ là một linh cảm, nhưng cài đặt OS X cho thuật toán của Nagle / TCP ack bị trì hoãn so với máy tính xách tay Windows là gì? Điều này có thể có liên quan: shabangs.net/osx/ Kẻ
Andrew Henle

Câu trả lời:


1
  1. câu hỏi tương tự nhưng có câu trả lời thú vị, có thể bạn có thể kiểm tra chủ đề này, đặc biệt là trên bình luận 5: https://ormszilla.samba.org/show_orms.cgi?id=8512#c5

Ở đây trích dẫn "Peter van Hooft". Mặc dù tôi không chắc chắn thử nghiệm dựa trên những gì / linux linux. và phiên bản của rsync cũng vậy. Tuy nhiên: 1. anh ấy cho chúng tôi một suy nghĩ để thử - cờ thưa nếu có thể để tăng hiệu suất. 2. ông đã thử nghiệm trên giao thức NFS nhưng gặp vấn đề về tốc độ tương tự, do đó, CNTT có thể không phải là lý do giao thức (SMB2 / 3, AFP, v.v.).

Chúng tôi sử dụng rsync để sao chép dữ liệu từ một máy chủ tệp này sang máy chủ khác bằng cách sử dụng NFS3 gắn kết qua liên kết 10Gb. Chúng tôi thấy rằng việc tăng kích thước bộ đệm (dưới dạng thử nghiệm nhanh) sẽ tăng hiệu suất. Khi sử dụng - thưa, điều này làm tăng hiệu suất với hệ số năm mươi, từ 2MBps đến 100MBps.

  1. Đây là một kiểm tra thú vị về hiệu suất rsync. https://lwn.net/Articles/400361/

LWN.net có một Kết luận rằng vấn đề về hiệu năng có thể liên quan đến kernel ngay cả bài viết được đăng trên 2010 và chúng tôi không thể thay đổi trên NAS hoặc MacOS. Tuy nhiên, bài viết này cho chúng ta một suy nghĩ rằng vấn đề hạt nhân có thể gây ra bởi tính toán tổng kiểm tra (đoán của tôi).

Một điều rõ ràng: Tôi nên nâng cấp kernel trên hệ thống Mythtv của mình. Nhìn chung, các hạt nhân 2.6.34 và 2.6.35-RC3 cho hiệu năng tốt hơn so với kernel 2.6.27 cũ. Nhưng, dù mày mò hay không, rsync vẫn không thể đánh bại một cp đơn giản sao chép với tốc độ trên 100MiB / s. Thật vậy, rsync thực sự cần rất nhiều sức mạnh CPU cho các bản sao cục bộ đơn giản. Ở tần số cao nhất, cp chỉ cần thời gian CPU 0,34 + 20,95 giây, so với 70 + 55 giây của rsync.

cũng trích dẫn ý kiến ​​có điều này:

Lưu ý rsync rằng luôn xác minh rằng mỗi tập tin chuyển giao đã được tái tạo một cách chính xác về phía tiếp nhận bằng cách kiểm tra một toàn-tập tin checksum được tạo ra như các tập tin được chuyển giao

cập nhật 1 : lỗi của tôi, mô tả này là cho --checksum. kiểm tra nó ở đây: [Cải thiện mô tả của tùy chọn --checksum.] PS, tôi không có đủ danh tiếng để đăng hơn 2 liên kết.

nhưng tôi không thể tìm thấy mô tả tương tự từ trang man rsync, vì vậy tôi đoán ai đó đang nói về bên dưới Bold:

Rsync tìm thấy các tệp cần được chuyển bằng thuật toán "kiểm tra nhanh" (theo mặc định) để tìm các tệp đã thay đổi kích thước hoặc trong thời gian sửa đổi lần cuối. Mọi thay đổi trong các thuộc tính được bảo toàn khác (theo yêu cầu của tùy chọn) được thực hiện trực tiếp trên tệp đích khi kiểm tra nhanh cho biết rằng dữ liệu của tệp không cần phải cập nhật.

Do đó, so sánh với cp / tar / cat, nếu chúng ta sử dụng rsync để sao chép một loạt các tệp nhỏ hoặc lớn, nó có thể gây ra vấn đề về hiệu suất. NHƯNG do tôi không thể đọc mã nguồn của rsync do đó tôi không thể xác nhận đây là lý do cuối cùng.

ý tưởng của tôi là tiếp tục kiểm tra:

  1. Phiên bản rsync nào được awenro sử dụng để thử nghiệm? Bạn có thể cập nhật lên phiên bản mới nhất?
  2. hãy xem đầu ra nào khi sử dụng --stats và -v với --debug = FLAGS

cờ

--stats Điều này cho rsync in một tập hợp thống kê dài dòng về việc truyền tệp, cho phép bạn cho biết thuật toán rsync có hiệu quả như thế nào đối với dữ liệu của bạn.

--debug = FLAGS Tùy chọn này cho phép bạn có quyền kiểm soát chi tiết đối với đầu ra gỡ lỗi mà bạn muốn xem. Một tên cờ riêng lẻ có thể được theo sau bởi một số cấp độ, với 0 có nghĩa là làm im lặng đầu ra đó, 1 là mức đầu ra mặc định và các số cao hơn làm tăng đầu ra của cờ đó (đối với những cấp độ hỗ trợ các cấp cao hơn). Sử dụng --debug = help để xem tất cả các tên cờ có sẵn , những gì chúng xuất ra và tên cờ nào được thêm cho mỗi lần tăng ở cấp độ dài.

cuối cùng, tôi khuyên bạn nên đọc bài viết bổ sung này để có thêm kiến ​​thức.
"Cách chuyển lượng lớn dữ liệu qua mạng" moo.nac.uci.edu/~hjm/HOWTO_move_data.html


Bạn có thể bao gồm các thông tin liên quan ở đây?
bertieb

Điều này về mặt lý thuyết có thể trả lời câu hỏi, nhưng tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây, và cung cấp liên kết để tham khảo.
Stephen Rauch

0

Rsync / ssh mã hóa kết nối smb không, nếu tôi nhớ chính xác. Nếu đó chỉ là một tệp thì một hệ thống có thể đọc được tệp đó còn hệ thống kia thì không. Cũng lưu ý rằng để có MTU trên 1514, bạn cần kích hoạt các gói "khổng lồ" / "Khung Jumbo", thực tế là các gói cần được cắt giảm thêm có thể ngụ ý rằng có phí để "đóng gói lại" gói. Điều thứ hai cần lưu ý là "người khổng lồ" / "Khung Jumbo" cần được bật ở cả hai đầu VÀ MỌI THỨ GIỮA.

1514 là các khung Ethernet bình thường. Khung 6k-9k được gọi là người khổng lồ hoặc "Khung Jumbo" tùy thuộc vào hệ điều hành / ứng dụng

Tôi trung bình 80 MB / s giữa mũi của tôi (PC có VM, một trong số VM là NAS) và trạm của tôi (pc) với sftp (sử dụng sshfs) [người khổng lồ không được bật] và thiết bị ở giữa là microtik 2011 (đang đi chỉ chuyển đổi chip tru)

Hãy nhớ rằng MTU được đàm phán giữa hai điểm và dọc theo một con đường bạn có thể có một vài MTU ở công suất khác nhau và MTU sẽ là mức thấp nhất có sẵn.

chỉnh sửa: SMB không hiệu quả cho việc chuyển tập tin.

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.