2 GB のファイルを一つ VPN 経由でコピーすると、転送は問題なく見える。一万個の小さな文書が入ったフォルダーをコピーすると、同じ回線が壊れているように見える。違いは、二つの作業の間で変わった帯域設定ではない。二つ目の作業は、セットアップ、メタデータ、応答待ちに時間を使い、トンネルの遅延がその待ち時間を目に見えるものにする。

ファイル一つは流れ、ファイルのフォルダーは交渉する

大きなコピーは、その生涯の大半を、少数の開かれたハンドル上での読み書きループに費やす。プロトコルのオーバーヘッドはファイルごとに一度だけ支払われ、データは大きなブロックで移動する。結果を支配するのは帯域だ。

フォルダーのコピーはファイルごとに支払う。作成、属性の照会、オープン、書き込み、クローズ、ディレクトリのメタデータ更新だ。これらのどれも、次の手順に進む前に応答を待つリクエストである。バイトは小さいが、調整は小さくない。

だからこそ、リンク使用率が低いグラフはほとんど何も証明しない。リンクが遊んでいるのは、クライアントが待っているからであり、トンネルが遅いからではない。ストレージアレイやエンドポイントスキャナーも同じ形の遅延を加えることがある。ネットワーク設定を変える前に、どの段階が待っているのかを特定しよう。

往復はバイトより速く積み上がる

遅延とは、依存するやり取り一度分のコストだ。ファイルが複数の逐次的なやり取りを必要とし、トンネルが片道ごとに 40 ms を加えるなら、ファイルあたりのコストは急速に増える。一万個のファイルがそれを分単位に変える。

この算術は説明のためのもので、測定ではないが、ファイルが往復一度で済む保証はなく、クライアントは作業の一部を重ね合わせる。

合計を変えるレバーは二つある。ファイルあたりの依存するやり取りの数を減らすか、より多くを同時に進行させるかだ。前者はプロトコルかワークロードの変更であり、後者は並列性である。どちらも遅い回線を速くはしない。

測るのはワークロードで、回線ではない

同じエンドポイントと同じアクセス方針で、三つの作業を比較しよう。大きなファイル一つ、小さなファイルのフォルダー、そして実際の業務操作だ。ファイル数、サイズ分布、コピーツール、ネットワーク条件を各結果とともに記録する。

こうした詳細のない単一の MB/s 数値は、他の誰の数値とも比較できない。

遅延はスループットとは別に測る。ファイルサーバーへの簡単な往復テストが、小さな操作に掛け算される数値を与える。次に、コピーの平均レートではなく要求のパターンを見る。レートが低くリンクが遊んでいるなら、ボトルネックはトンネルの上にある。

作業を変える:並列性とアーカイブ

許可された一括コピーでは、並列性を制御できるツールがより多くの要求を進行させる。Robocopy の /MT オプションが Windows で一般的な例だ。スレッドを増やしても、速いコピーは保証されない。

クライアント、サーバー、ストレージが耐えられる数を選び、作業ログとあらゆるエラーを残そう。

ソース側でアーカイブし、ローカルで展開すれば、ファイルごとの遠隔作業がなくなる。比較には準備と展開の時間を含め、アーカイブが作業に必要なメタデータと権限を保つことを確認する。どちらの工夫も、アプリケーション自身のファイル操作をまとめさせはしない。

対照実験でカウンターを確かめる

同じ作業を、変数を一つだけ変えて二回実行し、両方の数値を記録する。対照実験だけが、設定が効いたのか、たまたまネットワークが静かだったのかを知る唯一の方法だ。

二つのコマンドでファイル数と往復の基準値が得られる:

Get-ChildItem \\fileserver.hq.example\\share -Recurse | Measure-Object -Property Length -Sum
ping -n 20 fileserver.hq.example

次に、スレッド数を抑えてコピーを実行し、ログを前回の実行と比較しよう:

robocopy \\fileserver.hq.example\\share C:\\local /E /MT:16 /LOG:copy.log /TEE

カウンターを良くするために SMB 署名、暗号化、エンドポイント保護を無効にしてはいけない。そうした変更は、ボトルネックではなかったかもしれない数値と引き換えに、セキュリティ特性を失う。そしてメモでは、VPN の転送と SMB 自身の転送を分けておこう。一方の修正は他方の証拠にはならない。

関連記事