2009-11-16 9 views
7

Ich versuche herauszufinden, wie ein Betriebssystem (Windows, Linux) Zahlen logischen CPUs in einer Umgebung mit aktiviertem Hyper-Threading zuweist. ?CPU-Nummerierung auf einem System mit aktiviertem Hypertheading

Ordnen beide Betriebssysteme den physikalischen CPUs zuerst seriell Nummern zu und beginnen dann mit der Nummerierung der logischen CPUs oder folgt eine andere Regel? z.B. Gibt ein Betriebssystem in einem 2 physikalischen CPU-System mit Hyper-Threading der ersten physischen CPU die Nummer 0,2 und dann der physischen 1: 2-CPU die Nummer?

Alle Referenzen würden wirklich geschätzt werden.

Vielen Dank im Voraus.

Grüße, -Jay.

Bearbeiten: Reagieren auf Alans Frage: Ich muss dies wissen, weil ich in meiner Arbeit verschiedene Threads an bestimmte CPUs binden muss, um Kontextwechsel zu vermeiden, und ich möchte sicherstellen, dass bestimmte Tasks (Threads) an gebunden sind separate physikalische cpus. Danke

Antwort

8

Von was ich weiß, hängt es davon ab, wie die CPU seine Kerne exponiert. Wenn HT aktiviert ist, gibt es keine offengelegten physischen CPUs, sondern zwei logische CPUs pro physischer CPU. Es gibt also keinen Unterschied, ob Sie einen Thread auf einer der beiden logischen CPUs ausführen. Entscheidend ist nur, welche Paare von logischen CPUs zu jeder physischen CPU gehören.

Mit Single-Core-Prozessoren (wie der Pentium 4 mit HT), ist es ziemlich einfach, da Sie nur ein Paar haben - so ist es (0, 1). Bei Quad-Core-Prozessoren (wie Nehalem) sind die logischen Kerne Paare (0,4), (1,5), (2,6) und (3,7). Das Muster, bei dem alle ersten Hälften jedes Paares dann alle zweiten Hälften haben, skaliert mit zukünftigen CPUs, die noch mehr Kerne haben.

Die eigentliche Frage ist, warum müssen Sie die Paaranordnung kennen? Lassen Sie den Scheduler des Betriebssystems die richtigen Cores für die richtigen Threads auswählen - das macht einen ziemlich guten Job.

+1

Ich möchte das konifizieren, weil ich verschiedene Aufgaben (Threads) an verschiedene logische CPUs binden will. –

+0

Aber warum? Der Thread-Scheduler sorgt dafür, dass die Last zwischen den Kernen korrekt ausgeglichen wird. In der Regel ist dies nicht manuell erforderlich (dies kann die Leistung beeinträchtigen) und kann bei Randfällen zu unerwarteten Nebeneffekten führen. –

+0

Einige der Algorithmen, die wir verwenden, haben die Zeitbeschränkungen in Mikrosekunden. Wenn wir also die CPU-Affinität für diese mehreren Threads, die diese Algos verarbeiten, nicht erzwingen, machen die Kontextwechsel diese Timing-Deadlines unmöglich zu erreichen. . –

4

Sie können in /sys/devices/system/cpu/ nach Informationen über die CPUs suchen. Das Layout der Kerne und deren Hyperthread-Paare finden Sie in /sys/devices/system/cpu/cpuN/topology/thread_siblings_list.