This questionは、同じCPU上で2つのプロセスが実行されていることを確認します。 sched_setaffinity
を使用するプロセスをいくつかの論理CPUに制限できますが、これらを特定の物理CPUおよびスレッドにマッピングするにはどうしたらよいですか?プロセスが特定の物理CPUコアとスレッドで実行されるようにするにはどうすればよいですか?
私はマッピングがあろうと予想される:
0 - CPU 0スレッド0
1 - CPU 0スレッド1
2 - CPU 1スレッド0
3 - CPU 1スレッド1
等..
ここで、左側の数字は、sched_setaffinity
で使用される関連CPUです。
しかし、これをテストしようとすると、必ずしもそうではないようです。
void print_cpu()
{
int cpuid_out;
__asm__(
"cpuid;"
: "=b"(cpuid_out)
: "a"(1)
:);
std::cout << "I am running on cpu " << std::hex << (cpuid_out >> 24) << std::dec << std::endl;
}
はその後IがCPUマスクのビットにわたってループし、それらを1つのセット:
これをテストするために、私は、EBX
に現在コアの初期のAPIC IDを返すCPUID
命令を使用しましたOSがプロセスを各論理CPUに順番に移行させてから、現在のCPUをプリントアウトするようにします。これは私が得たものである
は:
cpu mask is 0
I am running on cpu 0
cpu mask is 1
I am running on cpu 4
cpu mask is 2
I am running on cpu 2
cpu mask is 3
I am running on cpu 6
cpu mask is 4
I am running on cpu 1
cpu mask is 5
I am running on cpu 5
cpu mask is 6
I am running on cpu 3
cpu mask is 7
I am running on cpu 7
は、CPUが、私は上記のスキームに従って初期APIC IDを割り当てていることを想定し、CPUマスクは、実際の物理コアに対応していないと思われると糸。
sched_setaffinity
のマスクのビットの物理コアへの正しいマッピングを見つける方法はありますか。
hwlocの最も優れた機能の1つは、CPUがキャッシュやメモリドメインなどをどのように共有するかなど、システムトポロジの図を表示する機能です。 –