From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47359) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XuGgo-0000zB-Ti for qemu-devel@nongnu.org; Fri, 28 Nov 2014 03:14:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XuGgj-0006td-Gf for qemu-devel@nongnu.org; Fri, 28 Nov 2014 03:14:06 -0500 Received: from mx-v6.kamp.de ([2a02:248:0:51::16]:48512 helo=mx01.kamp.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XuGgj-0006tR-5n for qemu-devel@nongnu.org; Fri, 28 Nov 2014 03:14:01 -0500 Message-ID: <54782EC3.10005@kamp.de> Date: Fri, 28 Nov 2014 09:13:55 +0100 From: Peter Lieven MIME-Version: 1.0 References: <1417084026-12307-1-git-send-email-pl@kamp.de> <1417084026-12307-4-git-send-email-pl@kamp.de> <547753F7.2030709@redhat.com> In-Reply-To: <547753F7.2030709@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC PATCH 3/3] qemu-coroutine: use a ring per thread for the pool List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini , qemu-devel@nongnu.org Cc: kwolf@redhat.com, famz@redhat.com, benoit@irqsave.net, ming.lei@canonical.com, armbru@redhat.com, mreitz@redhat.com, stefanha@redhat.com Am 27.11.2014 um 17:40 schrieb Paolo Bonzini: > > On 27/11/2014 11:27, Peter Lieven wrote: >> +static __thread struct CoRoutinePool { >> + Coroutine *ptrs[POOL_MAX_SIZE]; >> + unsigned int size; >> + unsigned int nextfree; >> +} CoPool; >> > The per-thread ring unfortunately didn't work well last time it was > tested. Devices that do not use ioeventfd (not just the slow ones, even > decently performing ones like ahci, nvme or megasas) will create the > coroutine in the VCPU thread, and destroy it in the iothread. The > result is that coroutines cannot be reused. > > Can you check if this is still the case? I already tested at least for IDE and for ioeventfd=off. The coroutine is created in the vCPU thread and destroyed in the I/O thread. I also havea more complicated version which sets per therad coroutine pool only for dataplane. Avoiding the lock for dedicated iothreads. For those who want to take a look: https://github.com/plieven/qemu/commit/325bc4ef5c7039337fa785744b145e2bdbb7b62e Peter