From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kevin Wolf Subject: Re: [PATCH v2] posix-aio-compat: fix latency issues Date: Mon, 22 Aug 2011 19:22:06 +0200 Message-ID: <4E52903E.7040909@redhat.com> References: <1313294689-21572-1-git-send-email-avi@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: Anthony Liguori , qemu-devel@nongnu.org, kvm@vger.kernel.org To: Avi Kivity Return-path: Received: from mx1.redhat.com ([209.132.183.28]:33130 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751294Ab1HVRTQ (ORCPT ); Mon, 22 Aug 2011 13:19:16 -0400 In-Reply-To: <1313294689-21572-1-git-send-email-avi@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: Am 14.08.2011 06:04, schrieb Avi Kivity: > In certain circumstances, posix-aio-compat can incur a lot of latency= : > - threads are created by vcpu threads, so if vcpu affinity is set, > aio threads inherit vcpu affinity. This can cause many aio thread= s > to compete for one cpu. > - we can create up to max_threads (64) aio threads in one go; since = a > pthread_create can take around 30=CE=BCs, we have up to 2ms of cpu= time > under a global lock. >=20 > Fix by: > - moving thread creation to the main thread, so we inherit the main > thread's affinity instead of the vcpu thread's affinity. > - if a thread is currently being created, and we need to create yet > another thread, let thread being born create the new thread, reduc= ing > the amount of time we spend under the main thread. > - drop the local lock while creating a thread (we may still hold the > global mutex, though) >=20 > Note this doesn't eliminate latency completely; scheduler artifacts o= r > lack of host cpu resources can still cause it. We may want pre-alloc= ated > threads when this cannot be tolerated. >=20 > Thanks to Uli Obergfell of Red Hat for his excellent analysis and sug= gestions. >=20 > Signed-off-by: Avi Kivity > --- > v2: simplify do_spawn_thread() locking Thanks, applied to the block branch. Kevin