SMB ファイル転送速度の低下
サーバー メッセージ ブロック (SMB) は、既定の Windows ネットワーク ファイル システムの機能とプロトコルです。 ネットワーク ファイル転送速度は、いくつかのシステムおよびネットワーク要因の影響を受けます。 この記事では、SMB を使用してファイル転送のパフォーマンスに関する一般的な問題を解決する手順について説明します。
転送が遅い
Note
SMB 署名 および SMB 暗号化 は SMB 転送の速度を低下させることがわかっている。 パフォーマンス損失の量は、関連するハードウェアの機能によって大きく異なります。 主な要因は、CPU コアの数と速度、および他のワークロード専用の CPU 時間です。
SMB 署名は既定で必要になります Windows 11 バージョン 24H2 (プレビュー) および Windows Server 2025 (プレビュー) です。 SMB クライアントとサーバーの署名要件は、スプーフィング、改ざん、リレー攻撃に対する重要な保護を提供するため、無効にすることはお勧めしません。
重要
Windows 11 バージョン 24H2 および Windows Server 2025 はプレビュー段階です。 この情報はプレリリース製品に関連するものであり、リリース前に大幅に変更される可能性があります。 ここに記載された情報について、Microsoft は明示か黙示かを問わずいかなる保証をするものでもありません。
次の手順を使用して、低速 SMB 転送に関する一般的な問題の分析、トラブルシューティング、および解決を行うことができます。
コマンド ライン (コマンド プロンプトまたは PowerShell) から robocopy を使用します。
- エクスプローラー (Windows ファイル マネージャー) はシングル スレッド コピーを実行し、バッファー内の入出力 (I/O) 転送を使用します。
- Robocopy は、IT 管理者が高パフォーマンスのローカルおよびリモート のファイル コピー タスクを作成できるように最適化されています。
- エクスプローラーは基本的な使用には便利ですが、特定のタスクに必要な robocopy のパフォーマンスの最適化が欠けています。
コマンド ラインから
robocopy /J
コマンドを使用して、1 GB を超えるファイルに対してバッファーなしの I/O コピーを試してください。SMB 圧縮を有効にして使用します。
- これにより、仮想マシン ディスク、
.iso
、.dmp
などの重要な空白を含む大きなファイルの転送時間と帯域幅の使用率が大幅に削減されます。 - アーカイブ ファイル (
.zip
、.7z
、.rar
)、.mp4
ビデオ、.mp3
ファイルなどの圧縮不可能なデータでは、SMB 圧縮によるパフォーマンスが大幅に向上することはありません。 - SMB 圧縮は、Windows 11 および Windows Server 2022 以降で使用できます。
- これにより、仮想マシン ディスク、
SMB の速度は、ストレージのパフォーマンスによって制限される場合があります。
必要なネットワーク スループットを満たすために、バッキング ストレージに必要な使用可能なパフォーマンス特性があることを確認します。
SMB での実際のストレージからネットワークへのパフォーマンスのおおよその速度は次のとおりです。
- ネットワーク帯域幅の 1 Gbps あたり 110 MB/秒の持続的ストレージ スループット。
- ネットワーク帯域幅 10 Gbps あたり 1.1 GB/秒の持続的ストレージ スループット。
- ネットワーク帯域幅 100 Gbps あたり 11 GB/秒の持続的ストレージ スループット。
- これらの数値は、CPU やメモリの枯渇など、システムに他のボトルネックがなく、ネットワーク エラーがないことを前提としています。
- ストレージのピーク パフォーマンスは、多くの場合、持続的なストレージ パフォーマンスよりもはるかに多く、ほとんどのアドバタイズされたストレージ測定はピーク パフォーマンスであることに注意してください。
SMB ダイレクト (リモート ダイレクト メモリ アクセス (RDMA) 経由の SMB) は、特定のネットワーク転送速度に到達したり、高い CPU 使用率を引き起こさずに高速に到達したりするために必要な場合があります。
ファイル コピーは高速で開始され、その後速度が低下します。
コピー速度の変化は、初期コピーがストレージによってキャッシュされるか、システム メモリにバッファーされた後、キャッシュが容量に達したときに発生する可能性があります。
その後、メモリ バッファーとストレージ キャッシュが使い果たされると、データはディスクに直接コミットされます (書き込みスルー)。
Microsoft SysInternals の RAMMap を使用して、メモリ内 Mapped File の使用量が増加を停止するかどうかを判断します。
- これは、メモリ バッファーが使い果たされたことを示します。
- RAMMap は自動的に更新されません。 キーボードまたは File>Refresh で F5 を使用してメモリ使用量を更新します。
ストレージ パフォーマンス モニター カウンターを使用して、ストレージのパフォーマンスがネットワーク スループットに比例して低下するかどうかを判断します。 詳細については、「SMB ファイル サーバーのパフォーマンス チューニング」を参照してください。
Windows Server 2016 以降のバージョンでパフォーマンスが約 5 GB ごとに低下する場合はファイルダーティ ページのしきい値を調整します。
転送が遅くなるのは、特定のテクノロジまたは Scale-Out File Server (SOFS)を使用している場合のみです。
- 一部のテクノロジ (通常はバックアップまたはデータベース ベース) では、データの整合性を維持するためにディスクライトスルーが必要です。
- Windows SOFS には、SQL バックアップと同様に、ライトスルーが必要です。
- ディスクライトスルーでは、ストレージ操作がすべてのストレージ キャッシュとバッファーをバイパスし、操作を完了するにはストレージ メディアに直接コミットする必要があります。
- このような場合、高い書き込みスルー パフォーマンスがないストレージ システムでは、パフォーマンスの高い SMB 転送を提供できません。
ネットワーク エラーの兆候を探します。 パケット損失などの一般的なネットワークの問題により、伝送制御プロトコル (TCP) 輻輳アルゴリズムによるネットワーク レベルの調整が発生します。
ファイル スキャンを無効にし、ファイル システムとネットワーク フィルター ドライバーがアンロードされた状態で SMB 転送のパフォーマンスを一時的にテストすることで、マルウェア対策ソフトウェアのパフォーマンス オーバーヘッドを判断します。
SMB3 の場合は、 SMB マルチチャネル が有効で動作していることを確認します。
ネットワーク オフロード テクノロジが有効になっていることを確認します。
- SMB のパフォーマンスは、ネットワーク パフォーマンスに密接に関連しています。
- Receive Side Scaling (RSS)、Large Send Offload (LSO)、Receive Segment Coalescing (RSC)、TCP/UDP チェックサムなどのネットワーク オフロード テクノロジは、ネットワーク スタックの CPU 使用率を下げながらネットワーク スループットを向上するように設計されています。
- ネットワーク オフロードを無効にしないでください。
SMB クライアントで、次の PowerShell コマンドレットを実行して、大きな最大伝送単位 (MTU) が無効になっていないこと、および帯域幅調整が SMB で有効になっていないことを確認します。
Set-SmbClientConfiguration -EnableBandwidthThrottling 0 -EnableLargeMtu 1
SMB ファイル サーバーの Windows Server パフォーマンス チューニングに従って SMB サーバー サブシステムを調整します。
小さいファイルを使用する場合の転送速度が遅い
エクスプローラーやその他のシングルスレッド コピー ツールを使用して多数の小さなファイルをネットワーク経由で転送する場合、コピー速度が遅く、ネットワーク スループットが低下することが予想されます。 "多数の小さなファイル" は、1 MB 未満の数百、数千、さらには数百万のファイルとして定義されます。
問題の詳細
ファイルの作成は、ネットワーク プロトコル (SMB) とファイル システムの両方の観点からのパフォーマンスの観点から見ると、"コストのかかる操作" です。 SMB では、データを送信する前に、ファイルを作成するために複数のプロトコル操作を実行する必要があります。 ファイル システム自体は、ファイルの作成時にパフォーマンスが低下します。
小さなファイルコピーは、このペナルティを繰り返しヒットします。 シングルスレッド コピーを使用する場合、ファイルデータの転送よりもファイルの作成に時間がかかるため、ネットワークが高速なネットワーク速度を維持するのに十分なデータを転送するには、ファイルごとのデータ サイズでは不十分です。
この問題は、少数のデータ ペイロードのみが送信された後にファイルの作成を実行するためにデータ転送を停止する必要があるために発生します。 ただし、1 つの大きなファイルには 1 つのファイル作成ペナルティがあり、ピーク時のネットワーク速度に達するのに十分なデータが送信されます。
技術詳細
ネットワーク待ち時間、SMB create
コマンド、およびウイルス対策プログラムは、小さなファイルの転送速度の低下に寄与します。 この問題の詳細を次に示します。
SMB は
create
ファイルの作成を要求するコマンドを発行します。- 各
create
コマンドは、ファイル システムに対してアクティビティを生成します。 - データが書き込まれると、ファイルは閉じられます。
- 各
このプロセスでは、ネットワーク、プロトコル (SMB)、ファイル システムの待機時間が発生します。
- この待機時間は、ファイル システム要求が最初に SMB コマンドに変換され、ネットワーク経由で送信され、ファイル システム コマンドに戻され、次に実行されるのは実際のファイル システムの作業であるためです。
- ストレージ操作が完了した後、プロセスは元に戻され、SMB クライアントが応答を受信し、次の操作を続行できます。
さらに、エンドポイント保護 (ウイルス対策) は、多くの場合、ネットワーク パケットとファイル システムの操作をスキャンします。
- これにより、通常、プロセスに少量の待機時間が追加されます。
- 小さなファイル シナリオでは、転送されるファイルごとにウイルス対策アクションが繰り返されます。
その結果、シングルスレッド ファイル コピー ツールを使用する場合、ネットワーク スループットの速度は 1 MB/秒未満になる可能性があります。
小さなファイル コピーを高速化する
/MT
パラメーターでrobocopy
を使用し、/log
を使用して出力をリダイレクトします。- Robocopy は Windows に組み込まれており、
/MT
パラメーターを使用すると、マルチスレッド のファイル コピーが可能になります。 - マルチスレッド コピーは、多数のデータ転送を並列で実行することで役立ちます。
- 1 つまたは 2 つのファイルが作成されている間は、複数のファイルを転送できます。
- これにより、実行中のネットワーク データの量が増え、ネットワーク データ ストリームの一時停止が最小限に抑えられます。
- コンソールへの書き込みは時間のかかるもう 1 つの操作であるため、出力をログ ファイルにリダイレクトすると、転送ジョブが高速化されます。
- 既定では、
/MT
は一度に 8 つのファイルをコピーします。 一度に最大 128 個のコピーをサポートします。 - スレッドが多すぎると、パフォーマンスが低下する可能性があります。 CPU コアあたり 2 つのスレッドは一般的に安全ですが、最適なパフォーマンス数を見つけることをテストすることを強くお勧めします。
- 使用法の詳細については、 robocopy を参照してください。
- Robocopy は Windows に組み込まれており、
Azure 間でデータを移動する場合は、
AzCopy
を使用します。- AzCopy には、コンカレンシー (マルチスレッド) 機能と、いくつかの パフォーマンスの最適化があります。
ファイル圧縮を使用します。
- 小さいファイルを大きなアーカイブ ファイル (
.zip
、.7z
、.rar
、.tar
、.gz
) に圧縮します。 - アーカイブ ファイルをコピーします。
- 展開先システム上のファイルを抽出します。 ファイルをリモートで抽出しないでください。
- これは、2 つのシステムの圧縮速度と展開速度によっては、高速になる場合とそうでない場合があります。
- 高速圧縮または圧縮アーカイブなしを使用して、圧縮と展開の時間を短縮します。
- 小さいファイルを大きなアーカイブ ファイル (
マルチスレッド ファイルのコピーをサポートする信頼できるサード パーティ (Microsoft 以外) のファイル コピー ツールを使用します。
Office ドキュメントが開くのが遅い
Office ドキュメントが開くのが遅くなる場合があります。これは通常、WAN 接続で発生します。 Office アプリ (特に Microsoft Excel) によるデータへのアクセスと読み取り方法が、一般にドキュメントが開くのが遅くなる原因です。
Office と SMB バイナリが最新であることを確認し、SMB サーバーでリースを無効にしてテストしてみます。 両方の状態が解決されたことを確認するには、こちらの手順に従います。
Note
この方法は慎重に使用する必要があります。 リースは SMB プロトコルの不可欠な部分であり、通常は SMBv2 または SMBv3 サーバーで使用できる必要があります。 複数の機能は、読み取りキャッシュ、書き込みキャッシュ、ハンドル キャッシュなど、リースの可用性に依存します。 リースを無効にすると、パフォーマンスの低下の問題が解決される可能性があります。リースの利点に依存する他のアプリケーションに悪影響を及ぼす可能性があります。
Windows 8 および Windows Server 2012 以降のバージョンの Windows で、次の PowerShell コマンドレットを実行します。
Set-SmbServerConfiguration -EnableLeasing $false
これは、新しい SMB クライアント接続ですぐに機能します。 SMB サーバーまたはクライアント コンピューターを再起動する必要はありません。
この問題を回避するには、ファイルをローカル ファイル サーバーにレプリケートすることもできます。 詳細については、「EFS を使用して Office ドキュメントをネットワーク サーバーに保存すると遅い」を参照してください。