Re: [PATCH] vhost: don't forget to schedule()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 02/27/2012 03:07 PM, Nadav Har'El wrote:
> This is a tiny, but important, patch to vhost.
>
> Vhost's worker thread only called schedule() when it had no work to do, and
> it wanted to go to sleep. But if there's always work to do, e.g., the guest
> is running a network-intensive program like netperf with small message sizes,
> schedule() was *never* called. This had several negative implications (on
> non-preemptive kernels):
>
>  1. Passing time was not properly accounted to the "vhost" process (ps and
>     top would wrongly show it using zero CPU time).
>
>  2. Sometimes error messages about RCU timeouts would be printed, if the
>     core running the vhost thread didn't schedule() for a very long time.
>
>  3. Worst of all, a vhost thread would "hog" the core. If several vhost
>     threads need to share the same core, typically one would get most of the
>     CPU time (and its associated guest most of the performance), while the
>     others hardly get any work done.
>
> The trivial solution is to add
>
> 	if (need_resched())
> 		schedule();
>
> After doing every piece of work. This will not do the heavy schedule() all
> the time, just when the timer interrupt decided a reschedule is warranted
> (so need_resched returns true).
>
> Thanks to Abel Gordon for this patch.
>
> Signed-off-by: Nadav Har'El <nyh@xxxxxxxxxx>
> ---
>  vhost.c |    2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
> index c14c42b..ae66278 100644
> --- a/drivers/vhost/vhost.c
> +++ b/drivers/vhost/vhost.c
> @@ -222,6 +222,8 @@ static int vhost_worker(void *data)
>  		if (work) {
>  			__set_current_state(TASK_RUNNING);
>  			work->fn(work);
> +			if (need_resched())
> +				schedule();
>

This is cond_resched(), no?

-- 
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux