Home > fun, news, wtf > Finde den Fehler (3)

Finde den Fehler (3)

Heute wieder eine Fehlersuche (nach langer Pause)
Diesmal präsentiert von Golem.de (IT News für Profis)

Dabei sind die logischen Kerne 0 und 1 den Rechenwerken auf demselben realen Core zugeordnet. Ein Dual-Core mit Hyperthreading verfügt so aus Sicht des Betriebssystems über die Kerne 0, 1, 2 und 3. Wenn nun beispielsweise ein Programm drei Threads ausführt, werden diese am besten auf den Kernen 0 und 2 sowie einem der beiden Cores 1 oder 3 bearbeitet. Die Kombination 0, 1, 3 ist dagegen ungünstig, weil so zwei Threads auf virtuellen Kernen laufen.

Categories: fun, news, wtf Tags: ,
  1. jens
    June 12th, 2012 at 20:46 | #1

    Ich bitte mal um Aufklärung, da ich den Fehler nicht sehe. Alles was ich in den vergangenen paar Minuten gelesen habe bestätigt eher die Aussage von golem. Oder auf was genau willst du hinaus?

  2. June 12th, 2012 at 23:40 | #2

    Bei der Zuordnung Kern Thread gibt es nur 2 sinnvolle Varianten:
    KernA = Thread 0/1, KernB = Thread 2/3
    oder
    KernA = Thread 0/2, KernB = Thread 1/3

    Nach dem Artikel ist 0,2,X besser als 0,1,3
    Egal wie mans dreht, Thread 0 Läuft immer auf KernA, Thread 3 läuft immer auf KernB, nur Thread 1 oder 2 unterscheiden sich in den 2 Varianten.
    In jedem Fall läuft aber bei 3 Theras mindestens 1 Thread auf einem Kern und 2 Threads auf dem Anderen – damit sind die 2 Varianten gleich (un)günstig.

  3. June 12th, 2012 at 23:52 | #3

    im Artikel werden jetzt die Begriffe logicher Kern und virtueller Kern synonym verwendet. Sagen wir der Einfachheit halber mal ein Dual-Core Prozessor hat 4 Kerne.
    Satz 1 sagt:
    Kern 0 und 1 liegen auf Core 0.
    Kern 2 und 3 liegen auf Core 1.

    Fall1: Kern 0,2,x bei x=1 hat Core0 2 Threads, bei x=3 hat Core1 2 Threads
    Fall2: Kern 0,1,3 hier hat Core0 2 Threads

    Also hat entweder Core0 2 Threads oder aber Core0 2 Threads 😉

  4. robert
    June 13th, 2012 at 09:45 | #4

    Willi hat Recht.
    “entweder Core0 2 Threads oder aber Core1 2 Threads ;)”
    Am besten wäre wahrscheinlich eine Ausführung auf den Kernen 1,2 und 3, da das Betriebssystem gerne auf CPU 0 arbeitet

  5. jens
    June 14th, 2012 at 07:37 | #5

    Ja, das hatte ich mir schon so ähnlich gedacht. Meine Frage lief eher darauf hinaus ob es performancetechnisch einen Unterschied macht ob Thread 3 auf Core 2 (physisch) oder Core 3 (logisch) ausgeführt wird, wenn Thread 1 und 2 auf Core 0 und 1 laufen.

    Scheinbar macht es einen Unterschied, sonst hätte Intel nicht SMT Parking für Win7 entwickelt, oder diese Webseite ist einfach falsch (http://techreport.com/articles.x/17545/2):
    “The basic notion behind SMT parking is that the Windows scheduler will attempt to schedule threads so that all physical cores are occupied before any core gets two threads scheduled on its two front-ends (or logical cores).”

    Leider finde ich zu dem Thema nicht sehr viel mehr Infos.

  6. robert
    June 14th, 2012 at 08:03 | #6

    @jens
    Dass man zuerst die physischen Cores nutzt ist normal, wird aber unter Linux auch gemacht. Allerdings behebt das nicht das angesprochene Problem mit den 3 Threads auf 2 physischen Cores.
    Wenn der Golem-Journalist ein Beispiel mit 2 Threads gewählt hätte, die auf einen physischen Core gescheduled werden, dann wäre das Beispiel richtig.

    Little known fact: Bei Linux kann man einstellen, dass zuerst die logischen Threads genutzt werden (was zu geringerer Leistungsaufnahme führt), indem man eine 1 nach /sys/devices/system/cpu/sched_smt_power_savings schreibt. /sys/devices/system/cpu/sched_mc_power_savings==1 sagt, dass zuerst ein Socket voll gemacht werden soll, bevor ein weiterer genutzt wird. By default werden Tasks gleichmäßig über Socket verteilt und zunächst ein Task pro physischem Kern genutzt, es sind also beide Optionen==0.

  7. jens
    June 14th, 2012 at 20:08 | #7

    @robert
    Du hast meine Frage leider immer noch nicht beantwortet. Es geht einzig allein darum ob das Scheduling “Kombination 0, 1, 3 ist dagegen ungünstig” wirklich schlechter ist als 0,2,[1|3]?

    Dass da 2 Threads auf einem Core laufen ist für mich nebensächlich, mir gehts nur drum (bei leerem Core) ob es einen Unterschied macht ob ein Thread auf dem logischen oder physischen Core läuft, also ob der letzte Thread auf Core 2 oder Core 3 ausgeführt wird.

    Wenn es einen Unterschied macht (was du indirekt angedeutet hast mit der Aussage, dass Linux die physischen Cores bevorzugt), dann seh ich keinen Fehler in dem Post von dem Golem-Journalisten.

  8. robert
    June 15th, 2012 at 07:37 | #8

    @jens
    Es gibt NUR logische Cores. Bei SMT wird kein Thread benachteiligt. Das heißt, dass Core 2 genau so viel Ressourcen bekommt wie Core 3. Eigentlich macht es auch keinen Unterschied, ob man Core 0 oder Core 1 nimmt. Das das OS mehr von Core 0 verlangt als von anderen ist mehr so ein Gefühl.

  1. No trackbacks yet.