mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2] vhost: Run TIF_NOTIFY_RESUME work in the vhost_task loop
@ 2026-11-03 10:54 Aamir Ahmed
  2026-11-03 11:47 ` Bradley Morgan
  0 siblings, 1 reply; 2+ messages in thread
From: Aamir Ahmed @ 2026-11-03 10:54 UTC (permalink / raw)
  To: Michael S . Tsirkin
  Cc: shakeel.butt, jasowangio, eperezma, vschneid, ziqianlu, peterz,
	kvm, virtualization, netdev, linux-kernel, stable

Since commit e1fad12dcb66 ("sched/fair: Switch to task based throttle
model"), a throttled task is only dequeued when TWA_RESUME task_work
runs on its way back to user mode.

vhost workers never return to user mode, and vhost_task_fn() only runs
task_work via get_signal() when a signal is pending. A busy vhost worker
therefore ignores its cgroup's cpu.max, while its runtime is still
charged to the group, throttling the group's other tasks (typically the
VM's vCPUs) harder.

This also fixes memory.high and block cgroup throttling for vhost
workers, which are handled in resume_user_mode_work() as well.

Run pending notify-resume work at the top of the worker loop, as io-wq
does in io_run_task_work(). Commit 12013e3d4695 ("KVM: powerpc: Use
generic xfer to guest work function") fixed the same problem for KVM.

Fixes: e1fad12dcb66 ("sched/fair: Switch to task based throttle model")
Cc: stable@vger.kernel.org # 6.18+
Reviewed-by: Shakeel Butt <shakeel.butt@linux.dev>
Tested-by: Shakeel Butt <shakeel.butt@linux.dev>
Assisted-by: LLM
Signed-off-by: Aamir Ahmed <elb12345@hotmail.co.uk>
---
v2:
- Also describe the memory.high and block cgroup throttling fixes
  (Shakeel)
- Add Shakeel's Reviewed-by and Tested-by
- Update the code comment to match
- v1: https://lore.kernel.org/AS8P251MB00012469E6ECBEA2B7D87BB0C86C2@AS8P251MB0001.EURP251.PROD.OUTLOOK.COM

Tested on x86_64 with a vhost_task-based reproducer: in a 0.2-CPU cgroup
a busy worker drops from 100% to 19% of a CPU. Reproducer available on
request.

 kernel/vhost_task.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/kernel/vhost_task.c b/kernel/vhost_task.c
index 3717885a599..f63ac005214 100644
--- a/kernel/vhost_task.c
+++ b/kernel/vhost_task.c
@@ -6,6 +6,7 @@
 #include <linux/completion.h>
 #include <linux/sched/task.h>
 #include <linux/sched/vhost_task.h>
+#include <linux/resume_user_mode.h>
 #include <linux/sched/signal.h>
 
 enum vhost_task_flags {
@@ -31,6 +32,14 @@ static int vhost_task_fn(void *data)
 	for (;;) {
 		bool did_work;
 
+		/*
+		 * We never return to user mode, so TWA_RESUME task_work and
+		 * memory.high/blkcg throttling would otherwise never run. Run
+		 * them here, where no locks are held, like io-wq workers do.
+		 */
+		if (test_thread_flag(TIF_NOTIFY_RESUME))
+			resume_user_mode_work(NULL);
+
 		if (signal_pending(current)) {
 			struct ksignal ksig;
 

base-commit: c03c1a14507dfaf8b856c2608f9ac216021fc222
-- 
2.55.0

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH v2] vhost: Run TIF_NOTIFY_RESUME work in the vhost_task loop
  2026-11-03 10:54 [PATCH v2] vhost: Run TIF_NOTIFY_RESUME work in the vhost_task loop Aamir Ahmed
@ 2026-11-03 11:47 ` Bradley Morgan
  0 siblings, 0 replies; 2+ messages in thread
From: Bradley Morgan @ 2026-11-03 11:47 UTC (permalink / raw)
  To: elb12345
  Cc: eperezma, jasowangio, kvm, linux-kernel, mst, netdev, peterz,
	shakeel.butt, stable, virtualization, vschneid, ziqianlu

On 3 November 2026 10:54:40 GMT, Aamir Ahmed <elb12345@hotmail.co.uk>
wrote:
>Since commit e1fad12dcb66 ("sched/fair: Switch to task based throttle
>model"), a throttled task is only dequeued when TWA_RESUME task_work
>runs on its way back to user mode.
>
>vhost workers never return to user mode, and vhost_task_fn() only runs
>task_work via get_signal() when a signal is pending. A busy vhost worker
>therefore ignores its cgroup's cpu.max, while its runtime is still
>charged to the group, throttling the group's other tasks (typically the
>VM's vCPUs) harder.
>
>This also fixes memory.high and block cgroup throttling for vhost
>workers, which are handled in resume_user_mode_work() as well.
>
>Run pending notify-resume work at the top of the worker loop, as io-wq
>does in io_run_task_work(). Commit 12013e3d4695 ("KVM: powerpc: Use
>generic xfer to guest work function") fixed the same problem for KVM.
>
>Fixes: e1fad12dcb66 ("sched/fair: Switch to task based throttle model")
>Cc: stable@vger.kernel.org # 6.18+
>Reviewed-by: Shakeel Butt <shakeel.butt@linux.dev>
>Tested-by: Shakeel Butt <shakeel.butt@linux.dev>

Reviewed-by: Bradley Morgan <brads@mainlining.org>

>Assisted-by: LLM
>Signed-off-by: Aamir Ahmed <elb12345@hotmail.co.uk>
>---
>v2:
>- Also describe the memory.high and block cgroup throttling fixes
>  (Shakeel)
>- Add Shakeel's Reviewed-by and Tested-by
>- Update the code comment to match
>- v1: https://lore.kernel.org/AS8P251MB00012469E6ECBEA2B7D87BB0C86C2@AS8P251MB0001.EURP251.PROD.OUTLOOK.COM
>
>Tested on x86_64 with a vhost_task-based reproducer: in a 0.2-CPU cgroup
>a busy worker drops from 100% to 19% of a CPU. Reproducer available on
>request.
>
> kernel/vhost_task.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
>diff --git a/kernel/vhost_task.c b/kernel/vhost_task.c
>index 3717885a599..f63ac005214 100644
>--- a/kernel/vhost_task.c
>+++ b/kernel/vhost_task.c
>@@ -6,6 +6,7 @@
> #include <linux/completion.h>
> #include <linux/sched/task.h>
> #include <linux/sched/vhost_task.h>
>+#include <linux/resume_user_mode.h>
> #include <linux/sched/signal.h>
> 
> enum vhost_task_flags {
>@@ -31,6 +32,14 @@ static int vhost_task_fn(void *data)
> 	for (;;) {
> 		bool did_work;
> 
>+		/*
>+		 * We never return to user mode, so TWA_RESUME task_work and
>+		 * memory.high/blkcg throttling would otherwise never run. Run
>+		 * them here, where no locks are held, like io-wq workers do.
>+		 */
>+		if (test_thread_flag(TIF_NOTIFY_RESUME))
>+			resume_user_mode_work(NULL);
>+
> 		if (signal_pending(current)) {
> 			struct ksignal ksig;
> 
>
>base-commit: c03c1a14507dfaf8b856c2608f9ac216021fc222
>


--- Thanks!

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-11-03 11:47 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-03 10:54 [PATCH v2] vhost: Run TIF_NOTIFY_RESUME work in the vhost_task loop Aamir Ahmed
2026-11-03 11:47 ` Bradley Morgan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®