CPU Pinning für Gaming

Enigma

Captain
Registriert
Apr. 2004
Beiträge
3.844
Hey,

ich würde gerne meine Spiele etwas flüssiger laufen lassen. Im Hintergrund läuft oft ein Browser mit Youtube-Musik.

Ich Pinne hierfür immer das Spiel manuell auf die Nicht-Hyperthreading Kerne. Bis auf einen Kern, der fürs OS gedacht ist.

Das würde ich gerne optimieren und die anderen, da immer wieder ein Prozess auf dem Hyper-Threading-Kern läuft der eigentlich für das Spiel ist.

Kann man irgendwie einstellen, dass alle Prozesse die nicht dem Spiel gehören per CPU-Affinity von meinen Gaming-Cores weggkommen?
 
Wenn die Hardware in der Signatur aktuell ist: Eine neue CPU soll helfen, wenn man im CPU-Limit ist. Das Binning auf bestimmte Kerne dürfte im Zweifel das Gegenteil bewirken.
 
  • Gefällt mir
Reaktionen: NerdmitHerz, coasterblog und GTrash81
Du hast einen i7 Broadwell, der hat keine "nicht HT-Kerne". Solange HT an ist gibt es 8 virtuelle Kerne, fertig.

Thread #0 und Thread #1 sind auf ihrem Core absolut gleichwertig, da bringt es genau nichts an welchen der beiden Threads du deinen Prozess kettest. Willst du, dass über den zweiten Thread nichts dazwischenfunkt, musst du HT ganz deaktivieren. Und das wäre in deinem Fall kontraproduktiv, weil der Core dann nicht mehr so effektiv ausgelastet werden kann und deine Gesamtleistung schwindet.

Wenn deine Min-FPS zu niedrig sind oder das Game ruckelt und das tatsächlich an der CPU liegt, dann daran das 4 Kerne einfach nicht mehr reichen, ob mit HT oder ohne.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: NerdmitHerz, ReignInBlo0d, GTrash81 und 3 andere
Wie wäre es mit den scheduler das machen lassen was er am besten kann? Die Last automatisch entsprechend verteilen lassen. Windows kann das wesentlich besser als es manuell zu versuchen.
 
  • Gefällt mir
Reaktionen: ReignInBlo0d und GTrash81
Ich habe das mal selber versucht, als alle meine Bekannten mich mal gefragten hatten bei Ryzen 1000.
Nun ja, der Unterschied lag bei vielleicht 1%, wenn man Prozesse an einen Kern bzw. CCX gebunden hat solange man nicht den langsamsten RAM hatte.
Von daher: Zeit für eine neue CPU.
 
  • Gefällt mir
Reaktionen: FGA
Versuch es mal ohne Youtube und ohne Browser, das kostet auch etwas Leistung, grad wenn Deine Möhre sowieso aus dem letztem Loch pfeift. :D
 
Humptidumpti schrieb:
Wie wäre es mit den scheduler das machen lassen was er am besten kann? Die Last automatisch entsprechend verteilen lassen. Windows kann das wesentlich besser als es manuell zu versuchen.
Dachte ich mir auch - sollte optimal laufen.

Aktuell gehts um Starcraft 2, das nur 2 Threads nutzt. Wenn man die manuell auf die echten Kerne legt (z.B: 4+6) brechen die FPS nicht ein und bleiben fast immer bei 60 (VSync). Starcraft scheint dort sehr penibel zu sein, wenn an den Gaming-Kernen etwas anderes läuft. Ich hab gerade mit der Priorität Echtzeit rumgespielt und das macht die FPS noch stabiler.

Jetzt merke ich aber, dass der Betriebssystem-Scheduler auf virtualisierten Kernen (z.B: 5+7) auch Aktiviäten drauf legt. Das würde ich gerne unterbinden.

1666298776300.png
 
Du wirst dadurch keinen Leistungsvorteil erfahren.
 
Enigma schrieb:
Jetzt merke ich aber, dass der Betriebssystem-Scheduler auf virtualisierten Kernen (z.B: 5+7) auch Aktiviäten drauf legt. Das würde ich gerne unterbinden.
Nochmal: Solange HT aktiv ist, sind alle Threads virtuell. Willst du keine Doppelbelegung, musst du HT deaktivieren. Dann schmeißt der Scheduler aber die Arbeit vermehrt in die Threads, an die du deinen Prozess gebunden hast, denn irgendwo muss die erforderliche Rechenzeit geleistet werden. Und ob das dann besser ist, das bezweifle ich.
 
  • Gefällt mir
Reaktionen: ReignInBlo0d
Jedes andere Spiel gewinnt durch HyperThreading 20-30%, weil die Recheneinheiten besser ausgelastet werden. Und ... ähh ... das mit der "erforderlichen Rechenzeit" ist Nonsense. Du hast die Hyperthreading-Schicht mit extra Registern - die Recheneinheiten für Integer und Co. dahinter bleiben die gleichen - und die gilt es zu optmieren :)
 
Enigma schrieb:
Spiel gewinnt durch HyperThreading 20-30%, weil die Recheneinheiten besser ausgelastet werden.
Weswegen ich dir gesagt hab, das dein Unterfangen, so wie man es durchführen müsste, an sich sinnlos ist.
Enigma schrieb:
ähh ... das mit der "erforderlichen Rechenzeit" ist Nonsense
Ach, ist es das? Ich glaube wir reden da einfach nur aneinander vorbei.
Enigma schrieb:
und die gilt es zu optmieren
Du versuchst ein Klavier in einer zu kleinen Abstellkammer so zu positionieren, das es besser klingt.
 
  • Gefällt mir
Reaktionen: ReignInBlo0d
Ok, danke für deine subjektive Einschätzung zu meiner alten Diva. Zurück zum Thema.

Kennt ihr ein Tool, welches das übernimmt? Sprich über Masking die einzelnen (virtuellen) Kerne nach Anwendungen zuweist?

Ich würde mir das sonst nachher zusammen-scripten und hat dann keine schöne UI.
 
Falls es jemand mal brauchen sollte - funktioniert für meinen UseCase perfekt:

PowerShell:
$allProcesses = Get-Process
$core0 = 1;
$core1 = 2;
$core2 = 4;
$core3 = 8;
$core4 = 16;
$core5 = 32;
$core6 = 64;
$core7 = 128;

$gamingAffinityMask = $core4 + $core6;
$systemAffintyMask  = $core0 + $core1 + $core2 + $core3;

 foreach($process in $allProcesses) {
    if($process.Name -eq "SC2_x64") {
        if($process.ProcessorAffinity -ne $gamingAffinityMask) {
            echo "Setting " + $process.Name + " to gaming";
            $process.ProcessorAffinity = $gamingAffinityMask;
        }
        else {
            #echo "Setting " + $process.Name + " is already set to gaming";
        }
    }
    else {
        if($process.ProcessorAffinity -ne $systemAffintyMask) {
            #echo "Setting " + $process.Name + " to system";
            $process.ProcessorAffinity = $systemAffintyMask;
        }
        else {
            #echo "Setting " + $process.Name + " is already set to system";
        }

    }
 }

 echo "Now in gaming mode, press enter to continue"

 Read-Host

 $allProcesses = Get-Process

 
 foreach($process in $allProcesses) {
    # echo "Resetting " + $process.Name + " to normal";
    $process.ProcessorAffinity = 255;
 }
 
Und hier nochmal n Screenshot wo man die die ganzen entlasteten Kerne sieht :) Man merkt, dass es etwas bringt.
 

Anhänge

  • Untitled.png
    Untitled.png
    99,7 KB · Aufrufe: 94
Zurück
Oben