web-dev-qa-db-ja.com

ハイパースレッド化された4コアのi7で16スレッドが8スレッドよりも効率的であるのはなぜですか? (Robocopy)

Windows 8.1では、Robocopyを使用して2台のサーバーのデータを専用のPCのストレージスペースに保存しています。データ量は、4,110フォルダー(66,841,845,760バイト)の147,314ファイルです。

関連する3台のPCはすべて、4コアのi7 CPUを搭載し、1Gbネットワーク内にあります。ターゲットのストレージスペース(D:でミラーリングおよびストライプ化)は、4 x 4 TB JBODケースを使用して実現されます。

CPUの4つのコアとハイパースレッディングのために、Robocopyスイッチ/ MT:8が最適に機能し、8を超えるスレッドは、受益者のスレッド管理がないためにやり過ぎになると予想していました。

私はこれをテストしました。ここに4番目のテストシリーズのデータ​​をリストします(期間はmm:ss):

 1 thread:  59:19
 2 threads: 39:12
 4 threads: 29:13
 8 threads: 24:36
16 threads: 24:19
32 threads: 24:27

確かに、16スレッドを使用した数秒はごくわずかですが、一貫性がありますすべてのテストシリーズで、つまり、16スレッド未満のテストでの負荷が大きいためではありません(4つのテストすべてに当てはまる場合を除く)シリーズ)。また、32スレッドは、ほとんどの場合、8スレッドよりも少し高速であることに注意してください。

質問:4つのハイパースレッドコアを備えたi7で8スレッドよりも16スレッドを使用する方が効率的である理由は何ですか?

3
Herb

TL; drバージョン:Handbrakeを使用してビデオをトランスコードするなど、CPUを集中的に使用する処理を行う場合は、作業を行う場所がないため、CPUよりも多くのコアを使用することは望ましくありません。ほとんどのスレッドが読み取りまたは書き込みを待つために90%の時間をスリープ状態で過ごすこの場合、より多くのスレッドが機能しますfor反対ではなくあなた。


ファイルのコピーは、特にCPUに依存するタスクではありません。コアを増やすと、他のタスクがコピーツールをブロックするのを防ぐのに役立つ場合がありますが、各スレッドが各コアでほぼ100%実行されている可能性はほとんどありません。

各コピースレッドは、読み取り要求をハードディスクに送信し、読み取り要求が実行されるのを待つ間、スリープ状態になります。回転するRustディスクのシーク時間は通常9ミリ秒で、CPUの観点からは実質的に永遠であり、コピータスクは単に「準備はできていますか?」と言ってCPUサイクルを浪費するだけではありません。そうすると、そのスレッドが100%CPUでロックされ、リソースが浪費されます。いいえ、スレッドが読み取りを発行し、読み取りが完了してデータが次のステップの準備ができるまでスレッドがスリープ状態になります。

その間、別のスレッドが同じことを行い、読み取りでブロックされてスリープ状態になります。これは、16個のスレッドすべてで発生します。 (実際には、読み取りと書き込みは同期が外れるとランダムな時間に発生しますが、アイデアは得られます)

スレッドの1つにデータの準備ができると、Windowsはそのデータを再スケジュールし、書き込みのために処理を開始します。スレッドに関する限り、プロセスは同じです。 「このデータをファイルxの場所yに書き込む」と表示され、Windowsはデータを取得して、スレッドのスケジュールを解除します。 Windowsはバックグラウンドでファイルの場所を特定し、データを移動し(ネットワーク全体で遅延にミリ秒を追加する可能性があります)、書き込みが成功するとスレッドに制御を戻します。

1つのスレッドがCPUコアで常に書き込みを行うことはないため、CPUよりも多くのスレッドが問題になることはありません。問題になるほど長くアウェイクしているスレッドはありません。

他の多くのスレッドが実行されている単一のCPUしかない場合は、CPUのボトルネックになる可能性がありますが、この種のワークロードを持つマルチコアシステムでは、CPUに問題があると驚かれることでしょう。

ハードドライブのパフォーマンスがボトルネックになり、ドライブの読み取りまたは書き込みバッファのキューの深さに達する可能性が高くなります。より多くのスレッドを使用することで、ディスクであれネットワークであれ、何かを限界まで押し上げます。スレッドの最適な数を見つける唯一の方法は、実行したことを実行して実験することです。 。

SSDからSSDへのコピーを備えたシステムでは、回転しているRust HDDからファイルをコピーし、ネットワークを介してプッシュし、書き込みを行うよりも待ち時間が短いため、スレッドの数が少ない方がよいと思います。 Rustを回転させますが、その仮定を裏付ける証拠はありません。

3
Mokubai