SMB3ドライブへのdd、cp、rsyncおよびmacOS Finderの書き込み速度に違いがあるのはなぜですか?


15

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.filemacOSおよび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 /秒前後で異なります。

すでに試したこと:

通信網

  1. iperf3を介してネットワークパフォーマンスをテストしました。結果:926 Mbit / s。いいね。
  2. デュアルリンクアグリゲーション/ボンディングネットワークインターフェイスを試しました。変化なし。
  3. MTUを6000および9000に増やしました。変更なし。
  4. すべてのケーブルをチェックしました。少なくともCat5eで、良好な状態ですべて正常です。

ディスク

  1. 確認済みSMART健全に見えます。
  2. でディスクに直接書き込み速度を試験したdd if=/dev/zero of=write.test bs=256M count=4種々有するbscount設定(8分の128、512M / 2、1分の1024)。結果:約120 MB / s(ブロックサイズ/カウントによる)

SMB / AFP

  1. ベンチマークされたSMB2、SMB3、およびAFP。ほぼ等しい。
    以下の更新を参照してください: macOSのSMB実装を除外するために間違った方法を使用しました。Windows上のSMBはより高速で、macOS 10.11および10.12に付属する新しいSMB設定が理由である可能性があります。
  2. ソケットオプションを含むSMB設定を微調整しようとしました(この指示に従って
  3. 異なるバージョンの遅延ack設定とrsync --sockopts=TCP_NODELAY(コメント)を試しました

書き込み速度に大きな変化はありません。configが実際にロードされていることを再確認し、正しいsmb.confを編集していました

システム

  1. 監視されているCPUおよびRAMの負荷。限界はありません。転送中のCPUは約20%、RAMは約25%です。
  2. ほぼそのままのセットアップで、DSM 5.xxを使用して同じNASをテストしました。追加のソフトウェアはインストールされていません。注:これらの2つは異なる場所にあります。SynologyのCloudSyncを介して同期しています。同じ結果。
  3. システムリソースを消費する可能性のある不要なすべてを無効にしました。

これはかなりデフォルトの設定で、派手な適応、クライアント、ネットワークコンポーネントはないと思います。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でダンプを検査しました。

私が見つけたもの:

  1. OS XとWindowsはどちらもSMB2使用しているようですが、SMB3はNASで有効になっています(少なくともWiresharkによると)。
  2. OS XはMTUに固執しているようです。パケットには1514バイトがあるため、ネットワークオーバーヘッドが増加し、パケットが送信されます(ダンプに表示されます)。
  3. Windowsは最大26334バイトのパケットを送信するようです(データを正しく読み取った場合、確認してください!)MTUがNASで1500に設定されているため、それを許可しない場合でも、最大設定は9000になります(Synologyもテストで1500の設定を使用します)。
  4. /etc/nsmb.confに追加smb_neg=smb3_onlyしてmacOSにSMB3を強制的に使用しようとしても機能しなかった、または少なくとも転送が高速にならなかった。
  5. rsync --sockopts=TCP_NODELAYTCP遅延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 -a30メガバイト程度のコスト/スピードを書くのです。ddSMB共有への直接書き込みと使用time cp /local/test.file /NAS/test.fileは約85-90 MB / sで高速であり、明らかに最速のコピー方法は約100 MB / sのmacOS Finderです(これは、タイミングまたは速度インジケーター–誰が必要ですか?o_O)。ストップウォッチを使用して、最初に1 GBファイルをコピーし、次に10 GBファイルをコピーして測定しました。

この質問の最後の更新以降に試したこと。

  1. MacクライアントからMacクライアントにコピーします。どちらにもSSDがあります(MacProはディスクに250 MB / sで書き込み、MacBook Proは300 MB / sで書き込みます)。結果:ddMacBook ProからMacPro への書き込みによるわずか65 MB / s (rsync25 MB / s)。25 MB / sを見るのは、rsyncに質問し始めた瞬間でした。それでも65 MB / sは非常に遅いです。そのため、macOSでのSMB実装は…まあ、疑わしいようです。
  2. ddとcpで異なるack設定を試しました-運はありません。
  3. 最後に、利用可能なすべての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有効な同等物である必要があります。

とにかく、これらの設定はどれも私たちに違いをもたらしませんでした。

一目でわかる新しい質問

  1. rsyncが1つの(1!)ファイルをコピーするのにそれほど高価な方法なのはなぜですか。ここで同期/比較することはあまりありませんが、ありますか?tcpdumpは、オーバーヘッドの可能性も示しません。

  2. なぜddおよびcpSMB共有に転送するときにファインダーのMacOSより遅いですか?Finderでコピーすると、TCP通信での確認応答が大幅に少なくなるようです。(再び:ackの設定は、たとえばdelayed_ack=1私たちにとって違いはありませんでした。)

  3. 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、転送方法、およびファイルサイズ)を説明しています。


SMBはVMからホストのOSに渡されず、VMは実際のコンピューターを完全にエミュレートし、仮想化されることを認識しません。ただし、仮想化によりオーバーヘッドが発生し、必然的にVMがすべてのネットワーク通信をホスト経由で渡すことになり、これも最適ではない可能性があります。
グロノスタジ

@gronostajそれは私も思ったことです。しかし、書き込み速度の結果は偶然にはあまりにも似ており、どちらも60 MB /秒に非常に近いと思います。一方、「実際の」Windowsラップトップは、さまざまな実行で100 MB /秒を作成しました。とにかく、VMのパフォーマンスは問題の中心的な側面ではありません。私のテストでは、現在のOS X SMB実装には、SMB接続を著しく遅くする設定(おそらく10.11および10.12)が導入されていることが示唆されています。しかし、署名を回す以外に、次にどこを見るべきか手がかりがありません。
woerndl

Windowsラップトップを使用すると、平均で100 MB /秒を達成できました。SMBの実装/アップデートが10.11および10.12に含まれることを示すと、パフォーマンスが低下する可能性があります。 おそらく真実ですが、このWindowsラップトップとOS Xインストールの間には、60 MB /秒しか得られない他の多くの違いもあります。ネットワークドライバー、ネットワーク設定、ハードウェアなども貢献している可能性があります。100 MB /秒(ギガビットイーサネットの制限にほぼ等しい)から60 MB /秒までパフォーマンスを低下させるのにそれほど時間はかかりません。
アンドリューヘンレ

@AndrewHenle絶対に。2つの異なるMac(MacPro 5,1とMacBookPro10,1)と2つの同一のNASでこれを試したことを追加する必要があります。同じ結果を生み出します。スイッチ間のような他のネットワークコンポーネントがなくても、直接接続されます。たとえば、Macまたはドライバーのネットワークハードウェアが原因である可能性を低くします。しかし、問題をさらに絞り込むための提案には非常にオープンです。
woerndl

@awenro少なくとも、高速のWindowsラップトップと低速のOS Xマシンからの転送のパケットサイズとタイミングをキャプチャできますか?そこからの違いは、少なくとも最初にいくつかのデータを提供します。ちょっとした話ですが、Windowsラップトップと比較して、Nagleのアルゴリズム/遅延TCP ackのOS X設定は何ですか?これは、関連するかもしれない: shabangs.net/osx/...
アンドリュー・ヘンレ

回答:


1
  1. 同様の質問ですが、興味深い答えがあります。特にコメント5でこのスレッドを確認できますか:https : //bugzilla.samba.org/show_bug.cgi?id=8512#c5

ここでは「ピーターヴァンホーフト」を引用します。what / which linux distに基づいてテストするかどうかはわかりませんが。rsyncのバージョンも。ただし、1 .パフォーマンスを向上させることができる場合は、-sparseフラグを試してみてください。2.彼はNFSプロトコルでテストしましたが、同じ速度の問題に遭遇しました。そのため、ITがプロトコル(SMB2 / 3、AFPなど)の理由ではない可能性があります。

rsyncを使用 して、10Gbリンク上のNFS3マウントを使用して、あるファイルサーバーから別のファイルサーバーにデータをコピーします。(簡単なテストとして)バッファーサイズを大きくすると、パフォーマンスが向上することがわかりました。--sparseを使用すると、2MBpsから100MBpsまで50倍のパフォーマンスが向上します。

  1. 次に、rsyncのパフォーマンスに関する興味深い検査を示します。 https://lwn.net/Articles/400489/

LWN.netには、2010年に掲載された記事でさえ、パフォーマンスの問題がカーネルに関連する可能性があり、NASまたはMacOSでは変更できないという結論があります。ただし、この記事では、チェックサム(推測)計算によってカーネルの問題が発生する可能性があると考えています。

1つのことは明らかです。Mythtvシステムでカーネルをアップグレードする必要があります。一般に、2.6.34および2.6.35-rc3カーネルは、古い2.6.27カーネルよりも優れたパフォーマンスを提供します。しかし、いじくり回してもいなくても、rsyncは100MiB / s以上でコピーする単純なcpに勝るものはありません。実際、rsyncは単純なローカルコピーのために多くのCPUパワーを実際に必要とします。最も高い頻度では、cpは0.34 + 20.95秒のCPU時間しか必要としませんでしたが、rsyncの70 + 55秒はそれと比較しました。

引用コメントにもこれがあります:

rsync は、ファイルの転送時に生成されるファイル全体のチェックサムチェックすることにより、転送された各ファイルが受信側で正しく再構築されたことを常に確認することに 注意してください。

アップデート1:私の間違い、この説明は--checksum用です。ここで確認してください:[--checksumオプションの説明を改善しました。] PS、2つ以上のリンクを投稿するのに十分な評判がありません。

しかし、rsyncのmanページから同じ説明を見つけることができないので、誰かが太字の下で話していると推測しています:

Rsyncは、サイズまたは最終変更時刻が変更されたファイルを検索する「クイックチェック」アルゴリズム(デフォルト)を使用して転送する必要があるファイルを検出します。クイックチェックでファイルのデータを更新する必要がないことが示された場合、他の保存された属性(オプションで要求される)の変更は、宛先ファイルで直接行われます。

したがって、cp / tar / catと比較して、rsyncを使用して多数の小さなファイルまたは大きなファイルをコピーすると、パフォーマンスの問題が発生する可能性があります。しかし、私はrsyncのソースコードを読み取ることができないため、これが究極の理由であることを確認できません。

私のアイデアはチェックし続けることです:

  1. awenroはテストにどのrsyncバージョンを使用していますか?最新バージョンに更新してもらえますか?
  2. --debug = FLAGSで--statsおよび-vを使用した場合の出力を確認します

--statsこれは、ファイル転送に関する詳細な統計セットを出力するようにrsyncに指示します。これにより、rsyncアルゴリズムがデータに対してどの程度効果的かを知ることができます。

--debug = FLAGSこのオプションを使用すると、表示するデバッグ出力をきめ細かく制御できます。個々のフラグ名の後にレベル番号が続く場合があります。0はその出力を無音にすることを意味し、1はデフォルトの出力レベルです。--debug = helpを使用して、利用可能なすべてのフラグ名、それらが出力するもの、および冗長レベルの増加ごとに追加されるフラグ名を確認します。

最後に、この補足記事を読んでより多くの知識を得ることをお勧めします。
「ネットワーク経由で大量のデータを転送する方法」 moo.nac.uci.edu/~hjm/HOWTO_move_data.html


ここに関連情報を含めることができますか?
ベルティエブ

これは理論的には質問に答える可能性がありますが、答えの重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう
スティーブンラウチ

0

正しく覚えていれば、Rsync / sshは接続を暗号化し、smbは暗号化しません。ファイルが1つだけの場合、1つのシステムがそのファイルを読み取れ、もう1つのシステムが読み取れない可能性があります。また、MTUを1514より上にするには、「ジャイアント」/「ジャンボフレーム」パケットを有効にする必要があることに注意してください。パケットをさらに削減する必要があるという事実は、パケットを「再パック」するためのオーバーヘッドがあることを意味する場合があります。2番目に注意することは、「ジャイアンツ」/「ジャンボフレーム」を両端およびすべてで有効にする必要があることです。

1514は通常のイーサネットフレームです。6k-9kフレームは、OS /アプリケーションに応じてジャイアントまたは「ジャンボフレーム」と呼ばれます

NAS(VMの1つがNASであるVMを備えたPC)とsftp(sshfsを使用)を備えたステーション(PC)の間で平均80MB / sで、その間のデバイスはmicrotik 2011ですtruスイッチチップのみ)

MTUは2つのポイント間でネゴシエートされ、パスに沿って異なる容量の複数のMTUが存在する可能性があり、MTUは利用可能な最低のものになることに注意してください。

編集:SMBはファイル転送にはあまり効率的ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.