Mastodon
Zuletzt aktualisiert am
Phoronix: Viel schnelleres Suspendieren und Fortsetzen für einige Systeme mit Linux 6.14
Michael Larabel

Viel schnelleres Suspendieren und Fortsetzen für einige Systeme mit Linux 6.14

 Neben den Aktualisierungen der Energieverwaltung und der thermischen Treiber für den laufenden Linux 6.14 Kernel-Zyklus gab es diese Woche auch die ACPI-Aktualisierungen
Eine Übersetzung von 🇬🇧 phoronix.com

Der ACPI-Pull-Request war es wert, für sich allein aufgerufen zu werden, da er eine Änderung enthält, die schnellere Suspend- und Resume-Zyklen auf einigen Systemen mit diesem neuen Kernel ermöglicht.

Die hervorzuhebende ACPI-Änderung für Linux 6.14 ist der Wechsel von msleep() zu usleep_range() innerhalb des Aufrufs acpi_os_sleep() im Kernel. Dadurch werden ungewollte Schlafzeiten aufgrund von ungenauen Timern reduziert. Der Linux-ACPI/PM-Maintainer Rafael Wysocki von Intel, der diese Änderung verfasst hat, merkte an, dass sie die Dauer der System-Suspend- und Resume-Übergänge auf einigen Systemen "spektakulär" verkürzen könnte.

Zu den vielen betroffenen Systemen gehören in diesem Fehlerbericht vom Juli 2022 über Thunderbolt auf Dell XPS-Laptops, die 8 Sekunden für das Suspendieren und 8 Sekunden für das Resume benötigen. In einem anderen Bericht, der auf diese ACPI-Änderung hindeutet, wurde festgestellt, dass ein anderes Dell XPS-Notebook von einer Kernel-Wiederaufnahmezeit von 1,9 Sekunden auf 1,1 Sekunden zurückging.

Rafael erklärte in dem Patch, der den Sleep verändert:

Die zusätzliche Verzögerung, die msleep() zum übergebenen Schlafzeitwert hinzufügt, kann beträchtlich sein, etwa zwischen 1,5 ns auf Systemen mit HZ = 1000 und bis zu 15 ms auf Systemen mit HZ = 100, was zumindest für kleine Schlafzeitwerte kaum akzeptabel ist.

msleep(5) benötigt bei der Standard-HZ = 250 in Ubuntu auf einem modernen PC etwa 12 ms. Dies führt auf Systemen wie dem Dell XPS-13-9300, die ASL Sleep(5ms) in einer engen Schleife verwenden, zu einer unerwünschten Verzögerung von mehr als 800 ms bei der Systemwiederaufnahme.

Beheben Sie dies, indem Sie usleep_range() in acpi_os_sleep() anstelle von msleep() verwenden. Für kurze Sleep-Zeiten ist dies ein Kinderspiel, aber auch für lange Sleep-Zeiten sollte usleep_range() bevorzugt werden, da Timer-Rad-Timer für den Abbruch optimiert sind, bevor sie ablaufen, und dieser spezielle Timer nicht abgebrochen werden wird.

Diese Verbesserung bei Suspend und Resume wurde als Teil der ACPI-Updates für den Kernel Linux 6.14 integriert.

Unterstützen Sie Michael

Ein Service von s3n🧩net

Comments