x86/split_lock: Add sysctl to control the misery mode
Commitb041b525da("x86/split_lock: Make life miserable for split lockers") changed the way the split lock detector works when in "warn" mode; basically, it not only shows the warn message, but also intentionally introduces a slowdown through sleeping plus serialization mechanism on such task. Based on discussions in [0], seems the warning alone wasn't enough motivation for userspace developers to fix their applications. This slowdown is enough to totally break some proprietary (aka. unfixable) userspace[1]. Happens that originally the proposal in [0] was to add a new mode which would warns + slowdown the "split locking" task, keeping the old warn mode untouched. In the end, that idea was discarded and the regular/default "warn" mode now slows down the applications. This is quite aggressive with regards proprietary/legacy programs that basically are unable to properly run in kernel with this change. While it is understandable that a malicious application could DoS by split locking, it seems unacceptable to regress old/proprietary userspace programs through a default configuration that previously worked. An example of such breakage was reported in [1]. Add a sysctl to allow controlling the "misery mode" behavior, as per Thomas suggestion on [2]. This way, users running legacy and/or proprietary software are allowed to still execute them with a decent performance while still observing the warning messages on kernel log. [0] https://lore.kernel.org/lkml/20220217012721.9694-1-tony.luck@intel.com/ [1] https://github.com/doitsujin/dxvk/issues/2938 [2] https://lore.kernel.org/lkml/87pmf4bter.ffs@tglx/ [ dhansen: minor changelog tweaks, including clarifying the actual problem ] Fixes:b041b525da("x86/split_lock: Make life miserable for split lockers") Suggested-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Reviewed-by: Tony Luck <tony.luck@intel.com> Tested-by: Andre Almeida <andrealmeid@igalia.com> Link: https://lore.kernel.org/all/20221024200254.635256-1-gpiccoli%40igalia.com
This commit is contained in:
committed by
Dave Hansen
parent
f0c4d9fc9c
commit
727209376f
@@ -1314,6 +1314,29 @@ watchdog work to be queued by the watchdog timer function, otherwise the NMI
|
||||
watchdog — if enabled — can detect a hard lockup condition.
|
||||
|
||||
|
||||
split_lock_mitigate (x86 only)
|
||||
==============================
|
||||
|
||||
On x86, each "split lock" imposes a system-wide performance penalty. On larger
|
||||
systems, large numbers of split locks from unprivileged users can result in
|
||||
denials of service to well-behaved and potentially more important users.
|
||||
|
||||
The kernel mitigates these bad users by detecting split locks and imposing
|
||||
penalties: forcing them to wait and only allowing one core to execute split
|
||||
locks at a time.
|
||||
|
||||
These mitigations can make those bad applications unbearably slow. Setting
|
||||
split_lock_mitigate=0 may restore some application performance, but will also
|
||||
increase system exposure to denial of service attacks from split lock users.
|
||||
|
||||
= ===================================================================
|
||||
0 Disable the mitigation mode - just warns the split lock on kernel log
|
||||
and exposes the system to denials of service from the split lockers.
|
||||
1 Enable the mitigation mode (this is the default) - penalizes the split
|
||||
lockers with intentional performance degradation.
|
||||
= ===================================================================
|
||||
|
||||
|
||||
stack_erasing
|
||||
=============
|
||||
|
||||
|
||||
Reference in New Issue
Block a user