Vergessener Patch im Linux-Kernel gefunden, der die AMD-CPU-Leistung beeinträchtigt

Der Linux 6.0-Kernel, der nächsten Montag erscheinen soll, enthält eine Änderung, die Leistungsprobleme mit AMD Zen-Prozessoren behebt. Ursache des Leistungsabfalls war Code, der vor 20 Jahren hinzugefügt wurde, um ein Hardwareproblem einiger Chipsätze zu umgehen. Das Hardwareproblem ist längst behoben und tritt bei aktuellen Chipsätzen nicht mehr auf. Der alte Workaround geriet jedoch in Vergessenheit und ist zur Ursache für Leistungseinbußen auf Systemen mit modernen AMD-CPUs geworden. Neuere Systeme mit Intel-CPUs sind von dem alten Workaround nicht betroffen, da sie auf ACPI über einen separaten Intel_idle-Treiber und nicht über den allgemeinen Processor_idle-Treiber zugreifen.

Im März 2002 wurde dem Kernel ein Workaround hinzugefügt, um einen Fehler in Chipsätzen zu beheben, bei dem der Leerlaufzustand aufgrund einer Verzögerung bei der Verarbeitung des STPCLK#-Signals nicht korrekt eingestellt wurde. Um das Problem zu umgehen, wurde der ACPI-Implementierung eine zusätzliche WAIT-Anweisung hinzugefügt, die den Prozessor verlangsamte, sodass der Chipsatz Zeit hatte, in den Leerlaufzustand zu wechseln. Beim Profiling mit Instruction-Based Sampling (IBS)-Anweisungen auf AMD Zen3-Prozessoren stellte sich heraus, dass der Prozessor viel Zeit mit der Ausführung eines Stubs verbringt, was zu einer falschen Interpretation des Prozessorladezustands und zur Einstellung tieferer Ruhemodi (C-State) durch den CPU-Implementierer führt.

Dieses Verhalten spiegelt sich in einem Leistungsabfall unter Lasten wider, die häufig zwischen Leerlauf und Auslastung wechseln. Beispielsweise steigt der durchschnittliche Tbench-Benchmark bei Verwendung eines Patches, der den Workaround deaktiviert, von 32191 MB/s auf 33805 MB/s.

Source: opennet.ru

Kommentar hinzufügen