[Tutorial] Hyperthreading und FSX/ Prepar3D

  • Noch eine kleine Abhandlung, ... diesmal zum Thema Hyperthreading und seine Auswirkungen auf den Flusi.


    Ich gehe mal davon aus, das die meisten im Grundsatz wissen, dass Hyperthreading (HT) dafür da ist, die Leistung eines Prozessors zu optimieren und Mehrleistung zu erzeugen, indem ein CPU-Kern, sozusagen zweigeteilt wird und damit gleichzeitig zwei Rechenprozesse (Threads) ausführen kann.


    Warum ist HT nun im Fall der Flusis nachteilig?
    Schließlich ist es ja dafür gedacht, Mehrleistung zu erbringen.


    Der Haken ist, dass die unterschiedlichen Threads im Kern zwar eigenständig gehändelt werden können, aber sie nutzen dennoch die gleichen Ressourcen.
    Das heißt Eingabe und Ausgabe von Daten müssen über die selben physikalischen Komponenten in diesem CPU-Kern laufen.
    Solange einzelne Berechnungen für sich gefahren werden, ist HT von Vorteil, wird es aber sehr Ein- und Ausgabelastig, sind genau diese gemeinsam genutzten Ressourcen das Nadelöhr und es passiert das Gegenteil dessen, was man gerne erreichen wollte.


    Und wie nicht anders zu erwarten, besteht der größte Teil einer Flugsimulation in genau diesen Rechenprozessen.
    Es ist ein ständiger Datenfluss, ständig werden Parameter eingegeben und müssen umgerechnet und so schnell wie möglich wieder ausgegeben werden und das sehr massiv.


    Daher ist HT für Flusi's nicht sinnvoll.


    Wenn der Rechner auch für andere Aufgaben verwendet wird, die von HT profitieren, kann es auch sinnvoll sein, das HT im BIOS aktiviert zu lassen und entweder über die Affinitymask die Kerne so einzustellen, dass pro Kern nur ein Thread aktiv ist oder, was auch eine Möglichkeit ist, dem FSX über den Taskmanager nach dem Start gesagt wird, welche Kerne er benutzen darf (Taskmanager mit Ctrl.-Shift-Esc aufrufen, -> Prozesse->FSX-Prozess markieren, rechte Maustaste ->Zugehörigkeit festlegen).
    Allerdings muss man das dann jedesmal machen, für Gelegenheitsnutzer vielleicht eine Möglichkeit, ansonsten geht das auch über die Affinity Mask.


    Wenn allerdings ansonsten keine Programme auf dem Rechner laufen, die von HT profitieren, würde ich es auch im Bios abschalten.


    Wer aber z.B. einen 4-Kerner hat und im Bios das HT eingeschaltet hat und das auch aus guten Gründen so lassen möchte (und dafür gibt es gute Gründe), dem empfehle ich die Einstellung:
    84, was bedeutet, dass der erste physikalische Kern komplett rausgenommen ist (so wie auch bei 14 mit einem 4-Kerner ohne HT) und alle anderen Kerne nur einen Thread verwenden.
    Das sieht dann so aus(vlnr CPU 0-7): 00 10 10 10 .
    Wobei das Wort sich errechnet aus der gespiegelten Eingabe des Wertes, also 0101 0100.


    Soll der erste Kern ebenfalls mit einbezogen werden (was üblicherweise nicht der Fall ist), dann lautet das der Wert 85.
    Was sich aus folgendem Wort ergibt: 10 10 10 10 = wieder gepiegelt: 0101 0101.
    Wie gesagt, das ist nicht ratsam, da das BS und andere Tasks auf dem ersten Kern laufen und auch wenn der in der Systemauslastung aussieht, als würde er nur vor sich hindümpeln, macht es Sinn, den nicht für FS-Aufgaben einzusetzen.


    Also:
    AffinitMask=84 bei einem 4-Kerner mit im Bios eingeschaltetem HT, damit pro Kern nur ein Thread verwendet wird und der erste physikalische Kern (CPU 0 und 1) nicht verwendet werden.
    (Empfohlen)


    AffinitMask=85 bei einem 4-Kerner mit im Bios eingeschaltetem HT, wenn alle Kerne verwendet werden sollen, aber nur jeweils ein Thread pro Kern.
    (nicht empfohlen)


    Und btw:
    Die AffinityMask ist ein 8-Bit Wort, kann also maximal bis 255 gehen.
    (zumindest ist das laut Angabe von Lockheed Martin zu Prepar3d so und ich gehe daher davon aus, dass dies auch im FSX nicht anders ist, alles andere würde mich jedenfalls gewaltig wundern)


    Auch hier wieder zum Abschluss die ausdrückliche Bitte, mich zu korrigieren, wenn ich daneben gehauen habe.
    Vieles ist vereinfacht beschrieben, aber es sollte dennoch passen.
    Ich freue mich also immer über Fragen und Korrekturen.



    Viele Grüße
    Marcus

  • Bei mir steht, auf Empfehlung von Bojote's FSX Tweaker, und auch aus anderen Foren empfohlen AffinityMask=14


    Ich hab einen Intel Quad mit HT aktiviert ... Daher wäre 84 laut deinem Tutorial die besser Wahl?


    Meiner Meinung nach: Ja.


    Ich habe beim Bojote Tweaker bemerkt, dass es dem völlig egal zu sein scheint, ob man im Auswahlfeld für die CPU's 4 oder 8 Kerne/ Threads angibt und es ist auch egal, ob man anklickt HT an oder aus, der spuckt immer einen Affinity Wert von 14 aus, ... was in meinen Augen vollkommen unlogisch ist.


    Das kannst Du aber ganz einfach testen.


    Wenn Du über Ctrl-Shift-ESC den Taskmanager aufrufst und auf den Register "Leistung" gehst, dann müsstest Du dort 8 Scope-Grafiken sehen.
    Bei laufendem Flusi kann man sehr deutlich erkennen, welche Cores/ Threads aktiv sind und welche nicht.
    Bei richtig eingestelltem wert, sollten die ersten beiden Threads nicht auf Vollast laufen und danach jeder zweite, genaugenommen Core 2, 4 und 6.
    Die Cores 3,5 und 7 sollten nicht fahren.


    Stimmt dies, ist es ok, wenn nicht, würde ich das ändern.


    Ich kann davon hier jetzt leider keinen Screenshot machen, da ich HT auf meinem Rechner abgeschaltet habe, ich profitiere hier nicht davon.


    Ich habe aber vor kurzem einige Screens angefertigt, dabei ging es zwar um vsync, aber vielleicht gibt es zumindest einen Anhaltspunkt:
    FPS_40_02.png
    Im Taskmanager kann man sehr gut sehen, wie die Affinity Mask 14 bei einem 4-Kerner wirkt:
    Der erste Kern wird freigehalten, da läuft das BS drauf und einige andere Prozesse, während die anderen drei Kerne deutlich unter Last stehen.
    So müsste es bei Dir dann auch in etwa aussehen, nur eben mit 8 Kernen und ab Kern 2 nur bei jedem zweiten unter voller Last.


    Ohne Affinity Mask würde auch Kern 0 unter Vollast fahren.


    Viele Grüße
    Marcus

  • Gute Zusammenfassung. Ich würde für die Lesefaulen oder auch die, die von so viel Stoff, leicht erschlagen werden, zum Ende hin eine kleine Zusammenfassung erstellen.
    So z.B.


    Quadcore mit HT (z.B. i7 2600, i7 3770, etc.)
    Alle Kerne; Affinitymask=85
    Nur drei Kerne; Affinitymask=84


    Quadcore ohne HT (z.B. i5 2500, i5 3570 oder i7 mit ausgeschaltetem HT im BIOS)
    Alle Kerne; Affinitymask=15
    Nur drei Kerne; Affinitymask=14


    Gruß


    Sebastian

  • Zitat von »Eik209_C160«oder du kommst mal vorbei und zeigst mir dasAlso wenn du es mit DER Anleitung nicht hinkriegst, dann weiß ich auch nicht...


    Also klar würde ich es hinbekommen keine frage nur fehlt mir ab und zu die zeit mich nach Feierabend noch intensiv mit den Einstellungen zu beschäftigen :thumbup: Und da Marcus nun einer ist der ganz in meiner Nähe wohnt wäre das ja auch so mal zum Austausch was nettes :friends:

  • Hi again,


    Bei mir steht, auf Empfehlung von Bojote's FSX Tweaker, und auch aus anderen Foren empfohlen AffinityMask=14


    Ich hab einen Intel Quad mit HT aktiviert ... Daher wäre 84 laut deinem Tutorial die besser Wahl?


    Das hat mich jetzt nicht losgelassen und daher habe ich mal spaßeshalber HT bei mir aktiviert und eine kleine Testreihe durchgeführt (war eh um 4 wach, da kann ich auch was nützliches machen :D )


    Die Ergebnisse fand ich ganz interessant und nicht alles hätte ich auch so erwartet.


    Als erstes habe ich den AffinityMask- Wert auf 255 gesetzt, also alle Kerne mit jeweils allen Threads aktiv:
    FSX_Affinity_Mask_255.png
    Somit wusste ich schon mal, dass mit diesem Wert auch wirklich alle Threads verwendet werden.
    Das war sozusagen eine Hinterwandkontrolle.



    Als zweites kam dann der Test mit AffinityMask=252, was bedeutet, dass der erste Core abgeschaltet bleibt, alle anderen aber mit allen Threads zur Verfügung stehen:
    FSX_Affinity_Mask_252.png



    Als drittes kam dann der Test mit dem Default-Verhalten des Sim's, also Betrieb ohne einen AffinityMask Eintrag:
    FSX_Affinity_Mask_Default.png
    EDIT: Was ich hier interessant finde und mich ein wenig verwundert hat ist, dass sowohl der FSX, als auch P3D von sich aus die Finger von den zweiten Threads lassen und nativ nur den ersten Thread jedes Cores ansprechen.
    Das hätte ich nicht erwartet.
    Ist aber im Endeffekt egal, da wir ja den Core 0 komplett freihalten wollen.



    Als viertes wollte ich dann sehen, wie die Prozessoren fahren, wenn AffinityMask auf 14 steht:
    FSX_Affinity_Mask_14.png
    Da brauchts nicht viel an Erklärung um zu sehen, dass das nicht optimal ist :)



    Dann kam als fünftes der Test mit AffinityMask 84, der ja bei 4-Kernen mit eingeschaltetem HT empfohlen wird:
    FSX_Affinity_Mask_84.png
    Das entspricht auch meinen Erwartungen und ist das, was ich als gut ansehen würde, denn wie man hier sieht, ist die Last homogen, während in den oberen Bildern deutlich zu sehen ist, wie extrem die Auslastung schwankt.
    (das ist alles immer der selbe Flug, EDXF, Start vorm Tower mit der Lama, Rechtskurve und dann über die Stadt)
    Hier waren auch die optischen Eindrücke am besten (ist halt kein ewiges Anfahren-Bremsen, sondern ein sauberes rollen, um bei der Auto-Metapher zu bleiben)



    Als sechstes habe ich dann noch einen Test gemacht, diesmal mit AffinityMask=85, was bedeutet, dass nun auch Core 1 mit dem ersten Thread mitarbeiten sollte, was auch der Fall war.
    (aber nicht zu empfehlen ist, ich wollte die Testreihe nur komplett haben :whistling::(
    FSX_Affinity_Mask_85.png




    Und weil es so hübsch aussieht, habe ich das dann auch mal als Gesamtübersicht zusammengestellt, da kann man einiges etwas deutlicher erkennen:
    Affinity_Masks_Leistung_Gesamtuebersicht.png


    Ich persönlich sehe da, dass die Einstellung 14 für einen 4-Kerner mit HT nicht optimal ist.








    Und da Marcus nun einer ist der ganz in meiner Nähe wohnt wäre das ja auch so mal zum Austausch was nettes :friends:


    Das ist ja wirklich ziemlich in der Nähe :).


    Heide kennen wir auch ein wenig, meine Frau und ich sind da gerne hingeflogen, Heide Büsum ist ein echt schöner Platz, Fahrradverleih direkt am Platz für kleines Geld, mit dem Rad runter zum Strand, und anschließend wieder nach Hause fliegen, eine echt schöne Strecke von einer echt schönen Ecke :)
    Wird dann allerdings nur noch ein Besuch mit dem Auto, wäre aber möglich :)


    Viele Grüße
    Marcus


  • Danke erst mal für den Beitrag, aber eine kleine Korrekur sei angebracht. Da ich einen 6- Kerner habe ist auch AffinityMaks bis 4095 möglich, wenn alle Kerne mit HT eingeschaltet sind.Die obige Beschränkung gibt es also nicht.


    Das ist zumindest gemäß den Aussagen von LM (ist es ok, wenn ich als Quellenangabe dorthin verweise?) nicht der Fall:


    Zitat von LM Support


    The affinity mask is a one byte ( 8 bit ) mask that tells our job scheduler which logical processors to schedule jobs on. If you have a 6 core processor with hyper threading, i.e. a 3960x, 3930k, etc., your processor has more cores than are covered by our bit-mask. Nevertheless, Prepar3d's default behavior seems to be to use one of the threads on each of the two extra cores. This is the desired behavior, so I see no reason to worry about it.


    Zitat von LM Support


    The affinity mask is only 8 bits. That means that you can only explicitly control how tasks get mapped to 8 of the 12 logical cores. Inputting values larger than 255 into the affinity mask has no effect. As I mentioned before however, the default behavior seems to be to use cores 8 and 10, so there is no real cause for concern. I believe that 84 is usually the best value for Intel 4 and 6 core chips with hyper threading.


    Ich kann das hier ja leider nicht nachvollziehen, aber tatsächlich stimmt es ja, dass das native Verhalten der Sim's (und da gehe ich davon aus, dass FSX und P3D gleich sind, das zeigen auch meine Test hier) so ist, dass ohnehin nur der erste Thread eines jeden Cores verwendet wird.
    Ein 8-Bit Wort wie 84 wird sich dann zumindest auf die ersten 8 Cores auswirken, was ja auch vollkommen ausreicht, denn dann sind CPU 0 und 1 raus aus dem Rennen, CPU 2 bis 7 werden über die mask noch gehändelt, die CPU's 8 bis 11 laufen sozusagen frei, in ihrem nativen Verhalten, was ja wie gewünscht nur ein Thread pro Core bedeutet.
    Wobei mich dann aber interessieren würde, wie diese Cores dann in der Auslastung sind, also ob die ebenfalls so gleichmäßig fahren oder ob es da dann diese Berg-und-Talfahrt gibt.
    Da waren die Grafiken ja teilweise wirklich extrem unterschiedlich (ich würde da vielleicht mal einen längeren Flug machen, um zu schauen, inwiefern sich das für den Anwender überhaupt bemerkbar macht).
    Diese Schwankungen von teilweise 10/ 30% hoch auf 98% fand ich schon üppig ...



    Laut LM werden Eingaben oberhalb 255 aber nicht berücksichtigt.


    Ich kann das aber hier leider nicht testen ... könntest Du mal bei Gelegenheit einen Screen von der Auslastung bei Dir machen?
    Das wär echt prima, denn was 6-Kerner angeht, kann ich nur ganz vorsichtige Aussagen treffen un nur weitergeben, was ich mir nur angelesen habe.
    Und nach wie vor gilt fürmich, dass ich im Zweifel eher Dir als mir glaube :).

  • Wat ihr hier schreibt sind für mich alles böhmische um nicht zu sagen gar chinezische Dörfer.


    Ich bin einer von denen, die sowas nicht wissen - echt keinen Plan.


    Wer oder was ist "affinity mask"? Klingt mir ganz nach irgendeinem Teufelszeug.
    Wo finde ich das? Wie stelle ich da was ein? Im BIOS?


    Kein Plan, wie immer :D


    Heilpraktiker halt! :sleeping:

  • Wat ihr hier schreibt sind für mich alles böhmische um nicht zu sagen gar chinezische Dörfer.


    Ich bin einer von denen, die sowas nicht wissen - echt keinen Plan.


    Die gute Nachricht ist:
    Wenn Dein Flusi gut läuft, braucht man das auch nicht zu wissen.


    Es kann aber durchaus von Nutzen sein.


    Ok,... ich versuch eine Kurzfassung :)


    Moderne Prozessoren sind meistens Multicore-Prozessoren, also ein Gehäuse, in dem mehrere Prozessorkerne gemeinsam untergebracht sind.
    Ein QuadCore Prozessor hat 4 CPU-Kerne, man hat also mehr oder weniger 4 Prozessoren in einem Gehäuse (wie gesagt: Vereinfachte Kurzfassung)
    Schön und gut soweit ...
    Um auch alle Kerne für ein Programm zu nutzen, muss dieses Programm das auch können, es muss also so programmiert sein, dass es mehrere Berechnungen auf die einzelnen Kerne verteilen kann.
    Das ist nicht so einfach, aber es geht eben :).
    Im Normalfall entscheidet also die Software, wieviele und welche Kerne genutzt werden und auch wie diese genutzt werden.


    Zitat


    Wer oder was ist "affinity mask"? Klingt mir ganz nach irgendeinem Teufelszeug.


    Die kommt jetzt ins Spiel und ist zum Glück nicht ganz so teuflisch, wie man meinen mag ... aber ein Engel ist sie auch nicht ... irgendwas dazwischen...
    Die Affinity Mask gibt dem Anwender die Möglichkeit mitzubestimmen, wie das Programm die Prozessoren benutzen soll.
    Da fragt man sich natürlich, warum man das als Anwender tun sollte, die Software weiß das doch viel besser und die Frage ist berechtigt, denn in den meisten Fällen ist es besser, die Finger von sowas zu lassen, ... aber eben nur in den meisten...


    Warum also ist es hier interessant?
    Weil man damit wunderbar sortieren kann, wenn man genug Ressourcen zur Verfügung hat.


    Wr bleiben kurz bei unserem 4-Kerner, der zeigt Dir, wenn Du den Task Manager aufrufst, 4 CPU's an, wenn Du das Register Leistung anwählst.
    Ich kann über die AffinityMask der Software sagen, dass sie z.B. den ersten Kern in Ruhe lassen und nicht benutzen soll, sondern sich nur auf den anderen Dreien austoben soll.
    Verschwendung möchte man meinen und ja, ... irgendwie schon.


    Aber auf dem ersten Kern liegt auch das Betriebssystem und einige andere Prozesse, die im Hintergrund laufen.
    Wenn da jetzt auch der Flusi drauf rumwerkelt, dann beharken die sich schnell mal, denn jeder Koch will seine Suppe kochen und das auf dieser einen Kochstelle.
    Das wäre auch nicht so schlimm, denn die Kochstelle ist an sich groß genug, nur ist die Anzahl der Helfer begrenzt, die die Zutaten rein und rausbringen können, die müssen von allen gleichsam genutzt werden und jeder will der erste sein, der seine Möhren in die Suppe wirft und so kriegen die sich dann gerne mal in die Haare ... (Aha ... daher wohl der Ausdruck "Haare in der Suppe :huh: ...).
    Am Ende merkt das dann derjenige, der vor dem Rechner sitzt, weils ruckelt und hakelt.


    Also verbieten wir über diese AfifinityMask dem Programm, den ersten Kern zu benutzen, das darf sich auf dem Rest austoben und der erste bleibt für andere wichtige Dinge frei (und da gibt es eben mehr als nur die genannten, aber das soll ja 'ne Kurzfassung werden :) )


    Zitat


    Wo finde ich das? Wie stelle ich da was ein? Im BIOS?


    Wenn die Antwort ehrlich sein soll: Wenn kein Plan vorhanden ist, findet man das am besten gar nicht ^^:whistling:
    Aber kaputtmachen kann man da auch nichts, also findet man das in der FSX.cfg bzw. analog zum Prepar3D in der Prepar3D.cfg.


    Dort ist das standardmäßig nicht vorhanden, der Eintrag muss eigens erstellt werden.
    Der Eintrag beginnt mit der Section [Jobscheduler]
    Und dann folgt AffinityMask= ... und dann der entsprechende Wert.
    Bei einem Vierkerner ohne Hyperthreading (also wenn Du im Taskmanager nur 4 CPU's siehst), dann ist der richtige Wert 14.
    Siehst Du im Taskmanager 8 CPU's, dann trägst Du 82 ein.


    Läuft Dein Flusi aber zu deiner vollen Zufriedenheit, trägst Du gar nichts ein :).


    Einen Versuch ist es wert, aber wie immer: die cfg vorher sichern und im Zweifelsfall die Änderungen wieder zurücknehmen und immer nur eine Änderung zur Zeit, sonst Chaos und Autsch.



    Sagte ich Kurzfassung??
    Jap ... ist eine ^^


    PS: Ähm, ... wolltest Du das eigentlich überhaupt wissen oder einfach nur sagen, dass es böhmische Dörfer sind? ?(:S


    Viele Grüße
    Marcus

  • Nee, ist schon interessant.


    Aber eher für die Zukunft, wenn ich recht verstand, ist das eher für FSX und P3D und noch bin ich mit dem Niner unterwegs.


    Früher kannte ich mich mit den Computersachen echt aus, aber während der Ausbildungen der letzten Jahre hab ich mich auf andere Sachen verlegt und den Anschluß verloren....
    Fehlen, was dies betrifft, quasi 12,13 Jahre.


    Aber vielen Dank für die Anleitungen und die Hilfe.


  • Manchmal weiß eben der Support nicht was er da so redet, dass ging beim FSX und geht auch bei P3D


    Wie gesagt, ... im Zweifel glaube ich eher Dir als mir :).


    Allerdings bin ich jetzt gerade leicht verwirrt:


    Zitat


    Das ist AFM 62 nehme ich die oberen Kerne durch Änderung weg, dann sind sie auch nicht ausgelastet.


    AFM62 ist ja als 2-stelliger Dezimalwert in der 8-Bit-Range.
    Als 8-Bit Wort ausgedrückt wäre das 00 11 11 10


    Gespiegelt, da von rechts nach links ausgelesen ergibt das für die CPU's von 0 bis 7:
    01 11 11 00
    Demnach müsste auf CPU0 wenig Last liegen (trifft zu), CPU1 fährt mehr Dampf, weil der Thread von Sim benutzt wird (trifft ebenfalls zu), die CPU's 2 und 3, sowie 4 und 5 fahren Volllast unterm Sim, trifft ebenfalls zu, und die CPU6 müsste ebenfalls noch ackern, CPU7 aber müsste still sein.
    Die folgenden CPU's, eben die über CPU7 müssten dann im Wechsel Voll, ungenutzt, Voll, ungenutzt usw. laufen.


    Allerdings verstehe ich den Wert 62 nicht und kann nicht erkennen, wie der zustande gekommen ist.
    Ähnlich ist es mit AFM56.
    Dafür ist das 8-Bit-Wort 00 11 10 00, wieder gespiegelt weil von rechts nach links ausgelesen:
    00 01 11 00
    CPU0 aus, CPU1 aus, CPU2 aus, CPU3 an CPU4 und 5 an, CPU6 und 7 aus, danach dann wieder alle weiteren CPU's, gerade an, ungerade aus.


    Zitat

    Im übrigen sagt unterschiedliche Auslastung der Kerne optisch nichts aus, weil die CPU dies selber regelt, ja nach Bedarf.


    Das verstehe ich nicht.
    Das lässt sich meiner Ansicht nach hervorragend erkennen, allein schon dann, wenn der Sim pausiert wird, dann fallen die Kerne, die den Sim fahren, sofort auf Null Auslastung, während Kern 0 bei mir nur gering veränderte Auslastung zeigt.
    Wenn ich auf dem Holzweg bin, dann sehe ich gerade nicht wo und wie :S


    Nach dem, was ich hier sehe, lässt sich das reproduzieren.
    Und die von Dir genannten Werte sind keine Vierstelligen, alles unter 255 wird auch angenommen, aber immer nur auf die ersten 8 Kerne, alles darüber sollte 1-0, 1-0 usw. gefahren werden, was ich aber eben hier nicht austesten kann.


    Viele Grüße
    Marcus


  • Vergiss mal die 8 Bit, die geben nur die Anzahl der Möglichkeiten an, führende Nullen sind inaktiv, es sei den es sind acht Kerne da. Der Wert ist ein reiner Maskierungswert, der lediglich anweist, welche Kerne genutzt werden dürfen.


    Da der Wert von rechts nach links ausgelesen wird und 8 Bit lang ist, kann da keine führende inaktive Null sein.
    Das 8-Bit wort spricht 8 Kerne an, immer, auch wenn nur ein, zwei, vier, sechs, acht oder Zwölf Kerne im System vorhanden sind.
    Das kann ich auch nachvollziehen und reproduzieren.


    Hat ein System weniger Kerne, sind die Einstellungen über diese Kerne hinaus wirkungslos.
    Hat ein System dagegen mehr Kerne, werden 8 Kerne über die Mask eingestellt, die übrigen laufen im Default Behavior weiter, ein HT Kern wird also den ersten Thread benutzen, den zweiten nicht, ein Nicht HT Kern wird genutzt.
    Es werden keine Nullen ignoriert.
    Das kann ich auch sauber reproduzieren und alles was ich im voraus erwarte, trifft auch ein.
    Zumindest dahingehend bin ich mir ganz sicher.


    Zitat

    Nochmal 62 = 111110


    Hier wird - analog wie bei einem 4-Kerner- der erste Kern ( gelesen wir immer von rechts nach links, weil das Dualsystem mit Potenzen von 2 arbeitet) für die Fibers und die restlichen 5 für den Flusi genutzt.
    Das entspricht dem gleichen Prinzip wie beim Vierkerner 14.
    Generell sind immer so viele Zahlen zu kodieren, wie Kerne da sind, auch wenn man mit HT arbeitet, also dann bei Vierkerner 8 mit den virtuellen.


    ich hab das soweit verstanden, knabbere aber noch ein wenig daran rum.
    Ich kann das nachvollzuiehen, aber das geht irgendwie nicht so auf, wie Du es erklärst, zumindest sehe ich das nicht.
    62 heißt bei einem 4-Kerner OHNE HT: CPU0 aus, CPU 1 an, CPU2 an, CPU3 ander Rest wird ohnehin ignoriert, weil es die Kerne ja nicht gibt.


    Bei einem 4-Kerner MIT HT würde das aber heißen: CPU0 aus, CPU 1 an, CPU2 an, CPU3 an, CPU4 an, CPU 5, an und wenn es stimmt, dass führende Nullen unberückichtigt bleiben, wobei ich hier noch nicht sicher bin, das teste ich aer gerne noch mit aus, dann müsste CPU6 an sein und CPU7 aus.
    Da ich aber davon ausgehe, dass die Nullen mit berücksichtigt werden, würde dieser Wert besagen, dass sowohl CPU6 als auch CPU7 aus sind, der vierte Kern ist also komplett mit beiden Threads abgeschaltet.
    Werde versuchen das morgen mal zu machen und einen Screen davon anzulegen.


    Zitat


    Letztlich macht das kodieren von virtuellen Kernen als Maske im Flusi aber wenig Sinn. Diese können überhaupt nur bedient werden, wenn der Hardwarekern Rechenpausen hat. Folge es entstehen Miniruckler im FS, weil die CPU dann wenn tatsächlich der virtuelle Kern arbeitet, "waits" an den Hardwarekern senden muss. Ist also der FS unter Volllast, dann sind die virtuellen Kerne schlicht eine Bremse.


    Deswegen ja wird ein virtueller Kern abgeschaltet, so dass sich der Prozessor im Prinzip so verhält, wie ein Vierkerner ohne HT.



    Zitat


    84 ist deswegen ein Wert der nicht existiert, denn der würde 7 Kerne voraussetzen: 1010110


    Nein falsch.
    Wie gesagt, ich fürchte, dass die Angabe mit den nicht berücksichtigten Nullen nicht stimmt und ich kann das glasklar nachvollziehen.
    84 bedeutet 01 01 01 00 und genau so wirkt sich der Wert auch aus, das ist in den Graphen des Systemmonitors deutlich zu erkennen.
    Der Wert spricht IMMER 8 Kerne an, also muss es auch ein 8-Bit Wort sein und alle Zeichen des Wortes müssen gelesen werden.
    Das dies auch stimmt, kann man sehen.
    CPU0 und CPU1 sind aus für die Fibers, CPU2 ist an, CPU3 ist aus, CPU4 ist an, CPU5 ist aus, CPU6 ist an, CPU7 ist aus.
    Das zeigen mir die Lastmonitore hier sauber an.



    Zitat


    Hier macht die CPU irgendwas , aber nicht dass was man vermutet. Wenn HT eingeschaltet ist, muss Du auch 8 Zustände codieren und nicht 7.


    Es sind auch 8, weil es ein 8-Bit Wort ist und das mit allen Nullen ausgelesen wird, da bin ich mir sicher und das kann ich hier reproduzieren und die CPU macht ganz exakt das, was ich vermutet und ewartet habe und wenn Binfort schreibt, dass seine Auslastung mit meiner identisch ist, scheint das auch bei ihm reproduzierbar zu sein.


    Ich bin mir inzwischen recht sicher, dass das gesamte Wort mit allen Nullen ausgelesen und ausgewertet wird.
    Ich kann auch 204 eingeben, das entspricht 1100 1100, gespiegelt 0011 0011, dann sehe ich in den Graphen bei einem 4-Kerner, HT an, dass CPU0, CPU1 aus sind, CPU2 und 3 feuern, CPU4 und 5 machen nichts, CPU6 und 7 feuern.
    Nur macht das keinen Sinn, weil ich dann zwei Kerne gar nicht nutze und die anderen beiden eben besagte waits produzieren, weil sie in den gleichen Ressourcen hängen.
    Aber jede dieser Änderungen ergibt ein reproduzierberes und voraussagbares Ergebnis in den Graphen, das ist schon recht eindeutig.


    Viele Grüße
    Marcus

  • Wie gesagt, ich versuche in erster Linie den Denkfehler bei mir zu suchen, aber hier macht mir da echt mal Probleme :).



    Denk was Du willst, aber Deinen Ansatz halte ich für falsch. AFM ist kein 8-Bit Wort , sondern ein Maskierungswert für die Kerne.


    Denn das ist genau der Punkt, das ist eine Maske, und zwar ein feste Maske die immer aus 8 Einsen oder Nullen bestehen muss.


    Welcher Wert an welcher Stelle ist, lasse ich mal für einen Moment außen vor.


    Wir haben einmal eine Maske, die immer gleich groß ist, nämlich aus 8 Zeichen besteht.
    Die gegenüberstehende Komponente sind die CPU's, die eine Variable sind, denn sie können von 1 bis X Kerne gehen.



    Es gibt also drei mögliche grundsätzliche Fälle, die eintreten können:
    Weniger Kerne als die Maske
    Genausoviel Kerne wie die Maske
    Mehr Kerne als die Maske.


    Ich nehme den Buchstaben "M" als Platzhalter für einen beliebigen Wert der Maske, also entweder 1 oder 0, das ist egal:


    Fall 1: Weniger Kerne als die Maske (2-Kerner, Platzhalter "K")

    M M M M M M M M
    K K X X X X X X

    Die Kerne holen sich die Werte, die über ihnen in der Maske stehen.
    Ist kein Kern über dem wert, ist da auch nichts.


    Fall 2: Genausoviel Kerne wie Anzahl der Maskenstellen:

    M M M M M M M M
    K K K K K K K K

    Jeder Kern hat über sich einen Maskenwert, alles gut.



    Fall 3, Mehr Kerne als die Maske Stellen hat (z.B. 6-Kerner, HT an):

    M M M M M M M M X X X X
    K K K K K K K K K K K K

    Die letzten vier Kerne bekommen keine Werte mehr, weil die Maske schon zu Ende ist, also verfahren sie nach Standard Behavior.
    Die ersten acht Kerne holen sich die Werte, die über ihnen inn der Maske stehen.
    Die Maske hat immer die gleiche Größe und die Kerne schauen immer ihrer Nummrung folgend auf den gleichen Wert in der Maske.
    Das macht es ja zu einer Maske.



    Die "X" zeigen an, dass hier entweder ein Wert der Maske ins Leere läuft oder eine CPu keinen Wert aus der Maske erhält.


    Das genau ist das, was ich unter einer solchen Maskierung verstehe, alles andere würde in meinen Augen keinen Sinn ergeben.


    Wie gesagt, ich suche meinen Denkfehler, aber hier sehe ich tatsächlich keinen.


    Es mag ein wenig beirrend wirken, dass der Zahlenwert in der Eingabe 256 Möglichkeiten besitzt, während es nur 16 Möglichkeiten bei einem 4-Kerner ohne HT gibt, aber die Maske zeigt, dass das logisch ist.


    Die Maske hat IMMER 8 Stellen, so verstehe ich das und der Zahlenwert bestimmt nur, an welcher Stelle eine Null und an welcher eine Eins steht.


    Und die Tests bisher bestätigen das.



    Wie gesagt: Ich suche immer als erstes meinen Denkfehler und ich schließe auch hier nicht aus, dass ich falsch liege, aber bis jetzt konnte mich alles davon überzeugen, dass mein Verständnis schlüssig ist, sowohl seitens der Logik, als auch seitens der erkennbaren Ergebnisse über die Auslastung des Systems.

  • Nicht das es hier Verwirrung gibt, weil wir aneinander vorbeireden. Mein Prozessor hat SECHS Kerne (i3930k) ;)
    Ich habe also 2 hoch 6 Möglichkeiten. Sprich bis AFM 64.


    Ja, habe ich verstanden, aber die Rechnung mit 2 hoch 6 passt nicht zu der Maskenbeschreibung.
    Aber ja, verstanden habe ich das. :)


  • Ich denke schon ;)


    Ja,... das war unglücklich von mir formuliert.


    Gehen wir über die Maske:


    Die Maske hat 8 Stellen.
    Deine CPU hat 6 Kerne.
    Damit ist es problemlos möglich, alle Kerne zu steuern, aber eben immer über die Maske betrachtet.

    M M M M M M M M
    K K K K K K X X

    Es sind ja zwei Stellen in der Maske überzählig.


    Jetzt setzen wir Werte ein, der erste Kern soll nichts machen, der Rest voll mitarbeiten ist ja kein HT):

    M M M M M M M M
    0 1 1 1 1 1 X X
    K K K K K K X X

    Bei den letzten beiden Stellen ist es egal, ob sie auf Eins oder Null stehen.
    Denn da liegt ja kein Kern drunter.
    Also wäre die Möglichkeit entweder
    01 11 11 00
    oder
    01 11 11 11


    Gespiegelt ergeben sich folgende Binärworte:


    00 11 11 10
    und
    11 11 11 10


    Daraus ergeben sich die Dezimalzahlen:
    62
    254


    Wobei ich gerade feststelle, dass ich mich in einem der vorigen Postings verhaspelt haben muss, weil ich da mit HT an und HT aus etwas durcheinandergekommen bin, da muss ich noch mal schauen, aber das ändert am Grundsatz an sich nichts.


    Egal welchen der beiden Werte Du in der AFM eingibst, das Ergebnis in der Prozessorauslastung muss, sollte ich richtig liegen, das selbe sein.


    Sowohl 62 als auch 254 ergeben bei einem 6-Kerner ohne HT reproduzierbar das selbe Resultat.
    Bei einem 8-Kerner jedoch ist neben den ersten


    Das würde ich jedenfalls erwarten.


    Im Moment sehe ich allerdings, dass ich wohl etwas vom Kurs abgekommen bin, weil ich HT on und 6 Kerner ohne HT etwas durchgemischt habe.


    Nach wie vor bin ich aber der Meinung, dass der Wert 84 für den 4-Kerner mit HT der richtige ist.


    Vierkerner ohne HT fahren mit 14, aber 254 oder 142 oder 206 usw. usw. würden z.B. das gleiche Ergebnis erzielen, denn auch wenn ich für die Cores 4 bis 7 Werte angebe, bewirkt das nichts, weil hinter Maske kein Kern steht.
    Das werd ich auf jeden Fall mal spaßeshalber durchtesten.
    14 bedeutet lediglich, dass die hinteren 4 Kerne auf Default Behavior stehen.
    Bei einem echten 8-Kerner ohne HT würde das bedeuten, dass Kern 0 aus ist, Kern 1, 2, 3, sind an, Kern 4 an, Kern 5 aus, Kern 6 an, Kern 7 aus.
    Was echte Verschwendung wäre.
    Auf jeden Fall muss berücksichtigt werden, ob HT an ist und damit jeder zweite Thread, also jede zweite CPU deaktiviert werden muss, oder ob HT off ist und damit jeder Kern, bis auf den ersten, laufen soll.


    Bei einem 6-Kerner ohne HT geht entweder 62 oder 254, wobei 62 der wäre, den ich vorziehen würde, aber nur der Schönheit halber.
    Von dr Wirkung her sind beide gleich.


    Und sorry, Bojotes Tweaker ist falsch, was der rausgibt ist nicht logisch.


    Und ich tweake mich jetzt in die Koje :)