Tl; dr - Kami tidak dapat menemukan alasan untuk kecepatan tulis terbatas 60 MB / detik untuk NAS kami melalui SMB dan AFP dari dua klien Mac yang berbeda. Sebagai perbandingan: Laptop Windows 7 lama di jaringan yang sama menulis stabil 100 MB / detik.
Jika Anda membaca pertanyaan ini untuk pertama kalinya, silakan lewati bagian Pembaruan 4 . rsync
adalah alasan utama untuk kecepatan rendah, meskipun kami tidak mengerti mengapa (untuk satu file!).
Pertanyaan Asli: Temukan bottleneck kecepatan SMB3 / NAS dengan Mac OS 10.11.5 dan di atasnya
Kami menguji melalui rsync --progress -a /localpath/test.file /nas/test.file
pada macOS dan info salinan Windows
NAS adalah DS713 + yang menjalankan DSM 6.0.2 mereka saat ini (diuji dengan 5.x juga), dengan dua HGST Deskstar NAS SATA 4TB (HDN724040ALE640) dalam RAID1 dengan hanya komponen ethernet gigabit dan kabel ethernet baru (setidaknya Cat5e).
Klien Mac pertama hanya menghasilkan 20 MB / detik. Tetapi menerapkan signing_required=no
perbaikan (dijelaskan di sini ) mendorong kecepatan tulis ke 60 MB / detik melalui SMB2 dan SMB3. AFP juga memberikan sekitar 60 MB / detik. Hasilnya bervariasi sekitar 5 MB / detik tergantung pada protokol dan (Mac) klien.
Apa yang sudah kami coba:
Jaringan
- Menguji kinerja jaringan melalui iperf3. Hasil: 926 Mbit / s. Kelihatan bagus.
- Mencoba Dual Link Aggregation / antarmuka jaringan terikat. Tidak ada perubahan.
- Peningkatan MTU menjadi 6000 dan 9000. Tidak ada perubahan.
- Memeriksa semua kabel. Semua baik-baik saja setidaknya Cat5e, dalam kondisi baik.
Disk
- Diperiksa SMART Terlihat sehat.
- Diuji kecepatan tulis langsung ke disk dengan
dd if=/dev/zero of=write.test bs=256M count=4
berbagaibs
dancount
pengaturan (128/8, 512M / 2, 1024/1). Hasil: sekitar 120 MB / s (tergantung pada ukuran / jumlah blok)
SMB / AFP
SMB2 dengan Benchmarked, SMB3, dan AFP saling bertentangan Hampir sama.
Lihat pembaruan di bawah ini: Metode yang digunakan salah untuk mengesampingkan implementasi SMOS dari macOS. SMB pada Windows lebih cepat, pengaturan SMB baru yang datang dengan macOS 10.11 dan 10.12 mungkin menjadi alasannya.- Mencoba mengubah pengaturan SMB, termasuk opsi soket (mengikuti instruksi ini )
- Mencoba versi berbeda dari pengaturan ack tertunda dan
rsync --sockopts=TCP_NODELAY
(komentar)
Tidak ada perubahan kecepatan tulis yang signifikan. Kami memeriksa ulang bahwa konfigurasi benar-benar dimuat dan kami mengedit smb.conf yang tepat .
Sistem
- Menonton CPU dan RAM. Tidak ada yang maksimal. CPU sekitar 20%, RAM sekitar 25% saat transfer.
- Diuji NAS yang sama dengan DSM 5.xx dalam pengaturan hampir out-of-the-box. Tidak ada perangkat lunak tambahan yang diinstal. Catatan: Kami memiliki dua ini di lokasi yang berbeda. Mereka sinkron melalui CloudSync milik Synology. Hasil yang sama
- Nonaktifkan semua yang tidak perlu yang dapat menarik sumber daya sistem.
Kami pikir ini adalah pengaturan yang agak default, tidak ada adaptasi mewah, klien atau komponen jaringan. Menurut metrik yang diterbitkan Synology, NAS harus melakukan 40 MB / s hingga 75 MB / s lebih cepat. Tapi kami tidak dapat menemukan hambatannya.
Klien / NAS
Klien Mac adalah MacPro 5,1 (NIC berkabel standar, menjalankan 10.12.3 (16D32)) dan MacBookPro10, 1 (adaptor jaringan Thunderbolt, menjalankan 10.11.6) hanya berjarak sekitar 2 m dari kabel NAS, berjalan di atas yang sama gigabit beralih sebagai laptop Windows dalam ujian.
Kami memiliki dua NAS ini di lokasi yang berbeda dan hasilnya identik. Detik NAS adalah kurang lebih default pabrik (bahkan perangkat lunak pihak ketiga tidak diinstal). Hanya dua RAID1, disk berformat EXT4 yang disinkronkan ke NAS lain melalui Synology CloudSync. Kami telah pergi sejauh menghubungkan langsung ke NAS tanpa saklar, hasil yang sama.
Pembaruan Penting
Metode yang digunakan untuk mengesampingkan implementasi SMB dari macOS / OS X salah. Saya mengujinya melalui mesin virtual, dengan asumsi akan menggunakan versi SMB sendiri, tapi jelas lalu lintas diserahkan ke macOS, berjalan melalui versi SMB-nya.
Menggunakan laptop Windows Sekarang saya sudah bisa mencapai rata-rata 100 MB / s. Menunjukkan implementasi / pembaruan SMB yang datang dengan 10.11 dan 10.12 dapat menyebabkan kinerja yang buruk. Bahkan jika signing_required
diatur ke no
.
Akan lebih bagus jika seseorang dapat menunjukkan beberapa pengaturan lebih lanjut yang mungkin telah berubah dengan pembaruan dan dapat mempengaruhi kinerja.
Perbarui 2 - wawasan baru
AndrewHenle menunjukkan dalam komentar bahwa saya harus menyelidiki lalu lintas secara rinci menggunakan Wireshark untuk wawasan lebih lanjut.
Karena itu saya menjalankan sudo tcpdump -i eth0 -s 65535 -w tcpdump.dump
NAS, sambil mentransfer dua file uji satu dengan 512 MB dan satu dengan 1 GB. Dan memeriksa tempat pembuangan sampah dengan Wireshark.
Apa yang kutemukan:
- Baik OS X dan Windows tampaknya menggunakan SMB2 meskipun SMB3 diaktifkan pada NAS (setidaknya menurut Wireshark).
- OS X tampaknya tetap dengan MTU . Paket-paket tersebut memiliki 1514 byte yang mengarah ke lebih banyak jaringan dan mengirimkan paket (terlihat di dump).
- Windows tampaknya mengirim paket hingga 26334 byte (jika saya membaca data dengan benar! Harap verifikasi.) Bahkan jika MTU seharusnya tidak mengizinkan itu, karena diatur ke 1500 pada NAS, pengaturan maksimum akan menjadi 9000 di sana (Synology juga menggunakan pengaturan 1500 dalam tes mereka).
- Mencoba memaksa macOS untuk menggunakan SMB3 dengan menambahkan
smb_neg=smb3_only
ke /etc/nsmb.conf tidak berfungsi atau setidaknya tidak mengarah ke transfer yang lebih cepat. - Menjalankan
rsync --sockopts=TCP_NODELAY
dengan berbagai kombinasi pengaturan ack tertunda TCP (0 hingga 3) tidak berpengaruh (Catatan: Saya menjalankan tcpdump dengan pengaturan ack default 3).
Saya telah membuat 4 kesedihan sebagai file .csv, 2 saat menyalin 512 MB (test-2.file) dan 2 saat menyalin 1024 MB (test.file). Anda dapat mengunduh ekspor Wireshark di sini (25,2 MB). Mereka zip untuk menghemat ruang dan dinamai cukup jelas.
Perbarui 3 - output smbutil
Output smbutil statshares -a
seperti yang diminta oleh harrymc di komentar.
==================================================================================================
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
--------------------------------------------------------------------------------------------------
Catatan tentang ini: Saya yakin SIGNING_SUPPORTED
berada di true
sini tidak berarti pengaturan di konfigurasi tidak berfungsi. Tapi hanya itu yang didukung oleh NAS. Saya telah memeriksa tiga kali lipat bahwa mengubah signing_required
pengaturan pada konfigurasi saya memiliki efek pada kecepatan tulis (~ 20 MB / s saat disetel, ~ 60 MB / s saat mati).
Pembaruan 4 - Perang Samba: Harapan Baru
Rasanya agak memalukan, tetapi masalah utama di sini - lagi - tampaknya adalah pengukuran.
Ternyata rsync --progress -a
biayanya sekitar 30 MB / s dari kecepatan menulis. Menulis dengan dd
langsung ke pangsa SMB dan menggunakan time cp /local/test.file /NAS/test.file
lebih cepat sekitar 85-90 MB / s dan tampaknya cara tercepat untuk menyalin adalah macOS Finder di sekitar 100 MB / s (yang juga merupakan metode yang paling sulit untuk diukur, karena tidak ada indikator waktu atau kecepatan - siapa yang butuh itu, kan? o_O). Kami mengukurnya dengan pertama-tama menyalin file 1 GB dan kemudian file 10 GB, menggunakan stopwatch.
Apa yang telah kami coba sejak pembaruan terakhir dari pertanyaan ini.
- Salin dari klien Mac ke klien Mac. Keduanya memiliki SSD (MacPro menulis dengan 250 MB / s untuk memiliki disc, MacBook Pro dengan 300 MB / s). Hasil: Sedikit 65 MB / s melalui
dd
tulisan dari MacBook Pro ke MacPro (rsync
25 MB / s). Melihat 25 MB / s adalah saat ketika kami mulai mempertanyakan rsync. Masih 65 MB / s sangat lambat. Jadi implementasi SMB pada macOS sepertinya ... well, dipertanyakan. - Mencoba pengaturan ack yang berbeda dengan dd dan cp - tidak berhasil.
- Akhirnya kami menemukan cara untuk mendaftar semua opsi nsmb.conf yang tersedia. Ini sederhana
man nsmb.conf
. Perhatian versi online sudah usang!
Jadi kami mencoba beberapa pengaturan lagi, di antaranya:
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
Catatan: smb_neg=smb3_only
adalah - seperti yang saya harapkan - bukan pengaturan yang valid. protocol_vers_map=4
harus setara dengan yang valid.
Lagi pula, tidak ada pengaturan ini yang membuat perbedaan bagi kami.
Sekilas pertanyaan baru
Mengapa rsync merupakan cara yang mahal untuk menyalin satu (1!) File. Tidak banyak yang bisa disinkronkan / dibandingkan di sini, kan? Tcpdump juga tidak mengindikasikan kemungkinan overhead.
Mengapa
dd
dancp
lebih lambat daripada pencari macOS ketika mentransfer ke saham SMB? Sepertinya saat menyalin dengan Finder, ada sedikit pengakuan dalam komunikasi TCP. (Lagi: Pengaturan ack mis. Tidakdelayed_ack=1
ada bedanya bagi kami.)Mengapa Windows tampaknya mengabaikan MTU, mengirimkan paket TCP yang lebih besar dan karenanya lebih sedikit, menghasilkan kinerja terbaik, dibandingkan dengan segala sesuatu yang mungkin dilakukan melalui macOS.
Ini adalah bentuk paket-paket dari macOS (terus-menerus 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"
Dan ini berasal dari Windows (hingga 26334, ukuran bervariasi)
"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"
Anda dapat mengunduh .csv penuh di sini (25,2 MB), nama-nama file menjelaskan apa yang telah disalin (OS, metode transfer, dan ukuran file).