2009-11-16 6 views
7

ハイパースレッディングが有効な環境でOS(Windows、Linux)が論理CPUにどのように番号を割り当てるかを調べようとしています。 ?ハイパーヘッダー対応システムのCPU番号

両方のOSが最初にシリアル番号を物理CPUに割り当ててから、論理CPUの番号を付け始めるのですか?例えばハイパースレッディングを使用する2つの物理CPUシステムでは、OSが最初の物理CPUに0,2を割り当て、次に1番目に物理CPUを割り当てます。

本当にありがとうございます。

ありがとうございます。

よろしくお願い致します。

編集:Alanの質問に答える:私の仕事では、コンテキスト切り替えを避けるためにさまざまなスレッドを特定のCPUにバインドする必要があるため、特定のタスク(スレッド)がにバインドされていることを確認したい別の物理CPU。ありがとう

答えて

8

私が知っているところから、CPUがコアをどのように公開しているかによって異なります。 HTを有効にすると、物理CPUが公開されるのではなく、物理CPUあたり2つの論理CPUが存在するため、いずれかの論理CPUでスレッドを実行すると違いはありません。重要なのは、各物理CPUにどの論理CPUのペアが属しているかだけです。

シングルコアプロセッサ(HT搭載のPentium 4など)では、1ペアしか持たないため、かなり簡単です。だから、(0,1)です。 4つのコアプロセッサ(Nehalemなど)の場合、論理コアのペアは(0,4)、(1,5)、(2,6)、(3,7)です。各ペアの最初の半分をすべて持っていて、その後のすべての後半を持つパターンは、より多くのコアを持つ将来のCPUでスケールを拡大します。

本当の質問はなぜあなたはペアの配置を知る必要がありますか? OSのスケジューラに、正しいスレッドのための正しいコアを選んでもらう。それはかなりまともな仕事だ。

+1

異なる論理CPUに異なるタスク(スレッド)をバインドしたいので、これを確認したいと思います。 –

+0

しかし、なぜですか?スレッドスケジューラは、コア間の負荷のバランスを正しく調整します。通常、これを手動で行う必要はなく(パフォーマンスを低下させる可能性もあります)、エッジのケースで予期しない副作用を引き起こす可能性があります。 –

+0

私たちが使用するアルゴリズムの中には、マイクロ秒単位のタイミング制約があります。したがって、これらの藻類を処理するこれらの複数のスレッドにCPUアフィニティを強制しないと、コンテキスト切り替えによってこのタイミングのデッドラインを達成することが不可能になります。 。 –

4

/sys/devices/system/cpu/を見ると、CPUに関する情報を見つけることができます。コアのレイアウトとハイパースレッドのペアは、/sys/devices/system/cpu/cpuN/topology/thread_siblings_listにあります。

関連する問題