kfence: optimize timer scheduling
Status from this message: [merged] kfence-use-power-efficient-work-queue-to-run-delayed-work.patch removed from -mm tree
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v2 Latest3 patches 8 repliesApplied 3/3
- v13 patches 5 repliesSuperseded
Changes in v2 from the cover letter
* Replace kfence_timer_waiting with simpler waitqueue_active() check.
Patches in v2 All 3 applied
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/3 | kfence: await for allocation using wait_eventlib/ mm/ | +30 | 0 replies | Applied |
| 2/3 | kfence: maximize allocation wait timeout durationmm/ | +11 | 8 replies | Applied |
| 3/3 | kfence: use power-efficient work queue to run delayed workmm/ | +3 | 0 replies | Applied |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.
Cover letter [PATCH v2 0/3] kfence: optimize timer scheduling
We have observed that mostly-idle systems with KFENCE enabled wake up otherwise idle CPUs, preventing such to enter a lower power state. Debugging revealed that KFENCE spends too much active time in toggle_allocation_gate().
While the first version of KFENCE was using all the right bits to be scheduling optimal, and thus power efficient, by simply using wait_event() + wake_up(), that code was unfortunately removed.
As KFENCE was exposed to various different configs and tests, the scheduling optimal code slowly disappeared. First because of hung task warnings, and finally because of deadlocks when an allocation is made by timer code with debug objects enabled. Clearly, the "fixes" were not too friendly for devices that want to be power efficient.
Therefore, let's try a little harder to fix the hung task and deadlock problems that we have with wait_event() + wake_up(), while remaining as scheduling friendly and power efficient as possible.
Crucially, we need to defer the wake_up() to an irq_work, avoiding any potential for deadlock.
The result with this series is that on the devices where we observed a power regression, power usage returns back to baseline levels.
Changelog
---------
v2:
* Replace kfence_timer_waiting with simpler waitqueue_active() check.
v1: https://lkml.kernel.org/r/[email protected]
Marco Elver (3):
kfence: await for allocation using wait_event
kfence: maximize allocation wait timeout duration
kfence: use power-efficient work queue to run delayed work
lib/Kconfig.kfence | 1 + mm/kfence/core.c | 58 ++++++++++++++++++++++++++++++++-------------- 2 files changed, 42 insertions(+), 17 deletions(-)
Signature · 1 line
2.31.1.368.gbe11c130af-goog