
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.
Ein Service von s3n🧩net
Comments