除了本周正在进行的 Linux 6.14 内核周期的电源管理和热驱动程序更新外,还有 ACPI 更新。ACPI 拉取请求本身值得一提,这要归功于一项更改,该更改将允许在具有此新内核的某些系统上更快地挂起和恢复周期。
在 Linux 6.14 中,值得强调的 ACPI 更改是在内核的 acpi_os_sleep() 调用中从 msleep() 切换到 usleep_range()。这减少了由于定时器不准确而导致的虚假休眠时间。编写此更改的 Intel 的 Linux ACPI/PM 维护者 Rafael Wysocki 指出,它可以“惊人地”减少某些系统上系统挂起和恢复转换的持续时间。
受影响的众多系统包括 2022 年 7 月在戴尔 XPS 笔记本电脑上通过 Thunderbolt 报告的错误,暂停需要 8 秒,恢复需要 8 秒。另一份表明这一 ACPI 变化的报告指出,另一台戴尔 XPS 笔记本电脑的内核恢复时间从 1.9 秒下降到 1.1 秒。
Rafael 在改变睡眠的补丁中解释说:
“msleep() 添加到传递给它的睡眠时间值的额外延迟可能很大,在 HZ = 1000 的系统上大约在 1.5 ns 之间,在 HZ = 100 的系统上长达 15 ms,这几乎是不可接受的,至少对于较小的睡眠时间值是这样。
msleep(5) 在现代 PC 上的 Ubuntu 中默认 HZ = 250 大约需要 12 毫秒。这会导致 Dell XPS-13-9300 等系统出现超过 800 毫秒的虚假系统恢复延迟,这些系统在紧密循环中使用 ASL 睡眠 (5ms)。
通过在 acpi_os_sleep() 中使用 usleep_range() 而不是 msleep() 来解决此问题。对于较短的睡眠时间,这是不费吹灰之力的,但即使对于长时间的睡眠,也应该首选 usleep_range(),因为计时器轮计时器在到期之前已针对取消进行了优化,并且这个特定的计时器不会被取消。
此暂停和恢复改进已合并为 Linux 6.14 内核的 ACPI 更新的一部分。
转自 Much Faster Suspend & Resume For Some Systems With Linux 6.14 – Phoronix