[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <2dc8286c-35ab-841d-07a8-397cc38fd969@oracle.com>
Date: Thu, 27 Jul 2017 10:59:50 -0400
From: Boris Ostrovsky <boris.ostrovsky@...cle.com>
To: Stefano Stabellini <sstabellini@...nel.org>
Cc: jgross@...e.com, Stefano Stabellini <stefano@...reto.com>,
linux-kernel@...r.kernel.org, xen-devel@...ts.xen.org
Subject: Re: [Xen-devel] [PATCH v2 09/13] xen/pvcalls: implement recvmsg
On 07/26/2017 08:08 PM, Stefano Stabellini wrote:
> On Wed, 26 Jul 2017, Boris Ostrovsky wrote:
>>>> + count++;
>>>> + else
>>>> + wait_event_interruptible(map->active.inflight_conn_req,
>>>> + pvcalls_front_read_todo(map));
>>>> + }
>>> Should we be using PVCALLS_FRONT_MAX_SPIN here? In sendmsg it is
>>> counting non-sleeping iterations but here we are sleeping so
>>> PVCALLS_FRONT_MAX_SPIN (5000) may take a while.
>>>
>>> In fact, what shouldn't this waiting be a function of MSG_DONTWAIT
>> err, which it already is. But the question still stands (except for
>> MSG_DONTWAIT).
> The code (admittedly unintuitive) is busy-looping (non-sleeping) for
> 5000 iterations *before* attempting to sleep. So in that regard, recvmsg
> and sendmsg use PVCALLS_FRONT_MAX_SPIN in the same way: only for
> non-sleeping iterations.
>
OK.
Why not go directly into wait_event_interruptible()? I see you write in
the commit message
If not enough data is available on the ring, rather than returning
immediately or sleep-waiting, spin for up to 5000 cycles. This small
optimization turns out to improve performance and latency significantly.
Is this because of scheduling latency? I think this should be mentioned not just in the commit message but also as a comment in the code.
(I also think it's not "not enough data" but rather "no data"?)
-boris
Powered by blists - more mailing lists