Tl; dr – 2つの異なるMacクライアントからSMBとAFPを介してNASへの書き込み速度が60 MB /秒に制限されている理由は見つかりません。比較すると、同じネットワーク内の古いWindows 7ラップトップは、安定した100 MB /秒を書き込みます。
この質問を初めて読んだ場合は、アップデート4セクションに進んでください。rsync
理由はわかりませんが、低速の主な理由は(単一ファイルの場合です!)
元の質問:Mac OS 10.11.5以降で速度のボトルネックSMB3 / NASを見つける
rsync --progress -a /localpath/test.file /nas/test.file
macOSおよびWindowsのコピー情報を介してテストしました。
NASは現在のDSM 6.0.2(5.xでもテスト済み)を実行するDS713 +であり、RAID1に2つのHGST Deskstar NAS SATA 4TB(HDN724040ALE640)を搭載し、ギガビットイーサネットコンポーネントと新しいイーサネットケーブル(少なくともCat5e)のみを搭載しています。
Macクライアントは最初に20 MB /秒しか作成しませんでした。ただし、signing_required=no
修正プログラム(ここで説明)を適用すると、SMB2およびSMB3を介して書き込み速度が60 MB /秒になりました。AFPは約60 MB /秒も提供します。結果は、プロトコルと(Mac)クライアントによって5 MB /秒前後で異なります。
すでに試したこと:
通信網
- iperf3を介してネットワークパフォーマンスをテストしました。結果:926 Mbit / s。いいね。
- デュアルリンクアグリゲーション/ボンディングネットワークインターフェイスを試しました。変化なし。
- MTUを6000および9000に増やしました。変更なし。
- すべてのケーブルをチェックしました。少なくともCat5eで、良好な状態ですべて正常です。
ディスク
- 確認済みSMART健全に見えます。
- でディスクに直接書き込み速度を試験した
dd if=/dev/zero of=write.test bs=256M count=4
種々有するbs
とcount
設定(8分の128、512M / 2、1分の1024)。結果:約120 MB / s(ブロックサイズ/カウントによる)
SMB / AFP
ベンチマークされたSMB2、SMB3、およびAFP。ほぼ等しい。
以下の更新を参照してください: macOSのSMB実装を除外するために間違った方法を使用しました。Windows上のSMBはより高速で、macOS 10.11および10.12に付属する新しいSMB設定が理由である可能性があります。- ソケットオプションを含むSMB設定を微調整しようとしました(この指示に従って)
- 異なるバージョンの遅延ack設定と
rsync --sockopts=TCP_NODELAY
(コメント)を試しました
書き込み速度に大きな変化はありません。configが実際にロードされていることを再確認し、正しいsmb.confを編集していました。
システム
- 監視されているCPUおよびRAMの負荷。限界はありません。転送中のCPUは約20%、RAMは約25%です。
- ほぼそのままのセットアップで、DSM 5.xxを使用して同じNASをテストしました。追加のソフトウェアはインストールされていません。注:これらの2つは異なる場所にあります。SynologyのCloudSyncを介して同期しています。同じ結果。
- システムリソースを消費する可能性のある不要なすべてを無効にしました。
これはかなりデフォルトの設定で、派手な適応、クライアント、ネットワークコンポーネントはないと思います。Synologyが公開しているメトリックによると、NASは40 MB / s〜75 MB / sの高速化を実現するはずです。しかし、ボトルネックを見つけることができません。
クライアント/ NAS
Macクライアントは、MacPro 5,1(標準の有線NIC、10.12.3(16D32)を実行)およびMacBookPro10,1(Thunderboltネットワークアダプター、10.11.6を実行)で、NASからわずか2mの距離にあり、同じ上を実行しています。テストでのWindowsラップトップとしてのギガビットスイッチ。
これらのNASの2つが異なる場所にあり、結果は同じです。秒のNASは、工場出荷時のデフォルト値です(サードパーティのソフトウェアもインストールされていません)。Synology CloudSyncを介して他のNASと同期する2つのRAID1、EXT4フォーマットのディスクのみ。スイッチなしでNASに直接接続する限り、同じ結果になりました。
重要な更新
macOS / OS XのSMB実装を除外するために使用された方法は間違っていました。SMBの独自バージョンを使用することを想定して、仮想マシンを介してテストしましたが、明らかにトラフィックはmacOSに渡され、SMBのバージョンを実行します。
Windowsラップトップを使用すると、平均で100 MB /秒を達成できました。10.11および10.12に含まれるSMB実装/更新を示すと、パフォーマンスが低下する可能性があります。signing_required
がに設定されてno
いる場合でも。
更新に伴って変更され、パフォーマンスに影響する可能性のある設定を誰かが指摘できるとすばらしいでしょう。
更新2 –新しい洞察
AndrewHenleは、より詳しい洞察を得るためにWiresharkを使用してトラフィックを詳細に調査する必要があるというコメントで指摘しました。
したがってsudo tcpdump -i eth0 -s 65535 -w tcpdump.dump
、NAS上で実行し、一方は512 MB、もう一方は1 GBの2つのテストファイルを転送しました。そして、Wiresharkでダンプを検査しました。
私が見つけたもの:
- OS XとWindowsはどちらもSMB2を使用しているようですが、SMB3はNASで有効になっています(少なくともWiresharkによると)。
- OS XはMTUに固執しているようです。パケットには1514バイトがあるため、ネットワークオーバーヘッドが増加し、パケットが送信されます(ダンプに表示されます)。
- Windowsは最大26334バイトのパケットを送信するようです(データを正しく読み取った場合、確認してください!)MTUがNASで1500に設定されているため、それを許可しない場合でも、最大設定は9000になります(Synologyもテストで1500の設定を使用します)。
- /etc/nsmb.confに追加
smb_neg=smb3_only
してmacOSにSMB3を強制的に使用しようとしても機能しなかった、または少なくとも転送が高速にならなかった。 rsync --sockopts=TCP_NODELAY
TCP遅延ack設定(0〜3)のさまざまな組み合わせで実行しても効果はありません(注:デフォルトのack設定3でtcpdumpを実行しました)。
.csvファイルとして4つのダンプを作成しました。512MB(test-2.file)のコピー中に2つ、1024 MB(test.file)のコピー中に2つです。Wiresharkのエクスポートはここからダウンロードできます(25.2 MB)。スペースを節約するために圧縮されており、わかりやすい名前が付けられています。
更新3 – smbutilの出力
コメントでのharrymcのsmbutil statshares -a
要求どおりの出力。
==================================================================================================
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
--------------------------------------------------------------------------------------------------
これに関する注意:ここにいることは、設定の設定が機能しないことを意味しないと確信しSIGNING_SUPPORTED
ていtrue
ます。しかし、それだけがNASによってサポートされています。構成のsigning_required
設定を変更すると、書き込み速度に影響することをオンにしました(オンにすると〜20 MB / s、オフにすると〜60 MB / s)。
更新4 –サンバ戦争:新しい希望
少々恥ずかしい思いをしますが、ここでの主な問題は、やはり測定です。
判明したrsync --progress -a
30メガバイト程度のコスト/スピードを書くのです。dd
SMB共有への直接書き込みと使用time cp /local/test.file /NAS/test.file
は約85-90 MB / sで高速であり、明らかに最速のコピー方法は約100 MB / sのmacOS Finderです(これは、タイミングまたは速度インジケーター–誰が必要ですか?o_O)。ストップウォッチを使用して、最初に1 GBファイルをコピーし、次に10 GBファイルをコピーして測定しました。
この質問の最後の更新以降に試したこと。
- MacクライアントからMacクライアントにコピーします。どちらにもSSDがあります(MacProはディスクに250 MB / sで書き込み、MacBook Proは300 MB / sで書き込みます)。結果:
dd
MacBook ProからMacPro への書き込みによるわずか65 MB / s (rsync
25 MB / s)。25 MB / sを見るのは、rsyncに質問し始めた瞬間でした。それでも65 MB / sは非常に遅いです。そのため、macOSでのSMB実装は…まあ、疑わしいようです。 - ddとcpで異なるack設定を試しました-運はありません。
- 最後に、利用可能なすべてのnsmb.confオプションをリストする方法を見つけました。シンプル
man nsmb.conf
です。オンラインバージョンが古いことに注意してください!
そこで、いくつかの設定を試しました。
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
注:smb_neg=smb3_only
は、既に予想したとおり、有効な設定ではありません。protocol_vers_map=4
有効な同等物である必要があります。
とにかく、これらの設定はどれも私たちに違いをもたらしませんでした。
一目でわかる新しい質問
rsyncが1つの(1!)ファイルをコピーするのにそれほど高価な方法なのはなぜですか。ここで同期/比較することはあまりありませんが、ありますか?tcpdumpは、オーバーヘッドの可能性も示しません。
なぜ
dd
およびcp
SMB共有に転送するときにファインダーのMacOSより遅いですか?Finderでコピーすると、TCP通信での確認応答が大幅に少なくなるようです。(再び:ackの設定は、たとえばdelayed_ack=1
私たちにとって違いはありませんでした。)WindowsがMTUを無視しているように見えるため、macOSを介して可能なすべてのものと比較して、大幅に大きいTCPパケットを送信し、最高のパフォーマンスを実現します。
これは、macOSからのパケットの外観です(常に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"
そして、これはWindowsからのものです(最大26334、サイズは異なります)
"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"
ここで完全な.csv(25.2 MB)をダウンロードできます。ファイル名は、コピーされた内容(OS、転送方法、およびファイルサイズ)を説明しています。