2015年6月17日水曜日

PC Robocopy マルチスレッドについて

Robocopy が便利である事は、この Blog で何回も書いてきましたし、 実際に、良く使っていて、その恩恵に与っています。
さて、コマンドラインで /? 付きで実行すると、ヘルプが見られ、その中にマルチスレッド対応の旨の記載があります。
でも、マルチスレッドに関して、余り、詳しい説明が見付かりません。
少し、自分の環境で試して見た結果を、ここに纏めて見ます。


事の発端は、TechNet で見付けたご質問です。
属性のみの更新の場合、Robocopy コマンドオプションのマルチスレッド関連の数値を変えても、
処理時間に差異が認められないと ... 。
   参考 URL : ROBOCOPYにマルチスレッドオプションを付けても処理時間が変わらない   TechNet Windows 7 全般

そこで、スレッドがどうなっているかを見て見ました。
Robocopy は、マルチスレッド対応と謳われていますが、 実際はどうなんだろ と言った感覚ですね。


使うのは、SysInternals で提供されている  Process Explorer です。
ご参考迄に、リンクはこちら。
   https://technet.microsoft.com/ja-jp/sysinternals/bb896653.aspx?f=255&MSPPError=-2147217396



SysInternals の Process Explorer (procexp.exe) で CMD.exe から起動される Robocopy の挙動を見て見ました。

コマンドは
C:\Windows\system32>robocopy L:¥Test ¥¥SERVER¥Master¥Test /S /DCOPY:T
Client は i7 相当で 4コア8スレッド OS は Windows 7 x64。
Server は i3 で2コア4スレッド OS は Windows Home Server 2011 (Windows Server 2008 R2 相当) です。
対象ファイルは 約 290 ファイル、3.6GB で、Server には存在しない Folder です。
因みに、通信経路は同一ローカルネットワーク内で、ハブ経由の ギガビット(1,000Mbps) 環境。
双方の記憶装置は SATA 接続の 2TB HDD (共に RAID 構成ではない) です。

Process Explorer : Robocopy /?  実行中
ごめんなさい。  実際の転送時ではありません。  後から、 Process Explorer の画面だけ取り直しました .. 。

Process Explorer : Robocopy ファイル転送中のスレッド


つまり、既定で スレッドは 8 の筈ですが、実際に、ファイル転送が始まっても当初は1スレッド、後に4スレッドでした。
このケースでは、物理コア数の4しかスレッドが作成されず、最高スレッド数でした。
いや、Server 側の CPU 4スレッドの制限なのかも知れません。

何れにしても、環境に応じた数のスレッドが、実行時に、動的に作成されているのが分りました。
決して、規定値の 8 が、そのまま、使われるのでは無い様です。

また、ファイルの転送は、スレッド毎にバラバラな訳ではなく、シーケンシャルに進みます。
スレッドが出来るのと スレッドが動くのは別かも知れませんし、
今回の例では、ファイルの書き込みは単一 HDD の為、分散書き込みはなされない (I/O を担当するのはひとつのスレッド
とも考えられます。
RAID 構成や SSD 等の使用によって、本来の その効果 が顕在化する とも思っています。

    Windows 7, Windows Server 2008 R2 から、Robocopy のマルチスレッド化がされ、
    同時に、SMB 2.1 によって ネットワーク スループット の改善がされ、環境を整えたとも言えます。
    Robocopy が元々、サーバーの Utility として出発し、 時代と共に、サーバー自身の要求容量は爆発的に増加した為、
    それに応える形の対応なのでしょう。
    実際に検索では Windows Server 2003 や 同 2008 上での処理時間等の質疑応答が Hit します。
    マルチメディア関連アプリ等で、一般にも注目される様になった マルチスレッドですが、
    殊に、通常の一般的個人的小規模的な構成の場合、Robocopy での その恩恵は ? です。
    忘れていてもいい 位の位置付けが 相当 なのかも知れません。

 
私には、この辺り迄、分析するスキルがないので、想像の域を出ませんが ... 。


   言い換えれば、プロンプトから見る限り、 一般的なマルチのイメージの並列コピー では無く、
   恰も、単一スレッドの様な振る舞いをしています。
   しかし、実際には、途中から、別のスレッドが立ち上がり、並列の処理が準備されている事が分ります。


尚、通常の利用ケースでは、CPU のスレッド数が 8 を越すケースは稀でしょう。  羨ましい!?。.
余程、特殊な(豪華な) 仕様の PC でも無い限り、 オプションでマルチスレッド数の指定は無意味かと。
また、敢えて、マルチスレッドを 1 で設定する必要も、通常は、ない気がします。
環境に応じた対処を自動でしている様な感覚を持っています。


さて、先にご紹介した Process Explorer ですが、
オンタイムリーに プロセスが立ち上がり、推移して行く様子が手に取る様に 分ります。
最初に、これを、起動した時は、感動的ですら ありました。
興味のある方は、ダウンロードして、是非、試して見て下さい。  でも、使いこなすのは ハイレベル ですね。  私には無理!。.



0 件のコメント:

コメントを投稿