Thread (115 messages) 115 messages, 7 authors, 2010-08-04

Re: [PATCH UPDATED 1/3] vhost: replace vhost_workqueue with per-vhost kthread

From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2010-07-26 15:56:52
Also in: kvm, lkml

On Mon, Jul 26, 2010 at 05:34:44PM +0200, Tejun Heo wrote:
Hello,

On 07/26/2010 05:25 PM, Michael S. Tsirkin wrote:
quoted
BTW, kthread_worker would benefit from the optimization I implemented
here as well.
Hmmm... I'm not quite sure whether it's an optimization.  I thought
the patch was due to feeling uncomfortable about using barriers?
Oh yes. But getting rid of barriers is what motivated me originally.
 Is it an optimization?

Thanks.
Yes, sure. This removes atomic read and 2 barrier operations on data path.  And
it does not add any new synchronization: instead, we reuse the lock that we
take anyway.  The relevant part is:


+               if (work) {
+                       __set_current_state(TASK_RUNNING);
+                       work->fn(work);
+               } else
+                       schedule();

-       if (work) {
-               __set_current_state(TASK_RUNNING);
-               work->fn(work);
-               smp_wmb();      /* wmb worker-b0 paired with flush-b1 */
-               work->done_seq = work->queue_seq;
-               smp_mb();       /* mb worker-b1 paired with flush-b0 */
-               if (atomic_read(&work->flushing))
-                       wake_up_all(&work->done);
-       } else
-               schedule();
-
-       goto repeat;

Is there a git tree with kthread_worker applied?
I might do this just for fun ...

-- 
tejun
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help