From nobody Mon May 6 14:55:01 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1596519043; cv=none; d=zohomail.com; s=zohoarc; b=jz3zE/RZnBhsI/2hTYSzlSSPZ6fZpXAkU59PFwdrx2g0tdUMSCODuqI5g2RHOO0AgY9H+Dkh0F6N0rtjyZ3d+MZYyKd9NZZ1G5ClyaW56yVoUvRY3kQH6DplMnMNv+NJVCtZHWfZDkq0qNSd6D4a+4MVKLwGYJNK37V45hs+MTQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1596519043; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=jYSfj/Ob3hj80XgXQHZ5qM94CUH/7Nprc+H/+M2FE6Q=; b=m4TtBWXbYQlow7Udms1zOdS+dV43ck4YXQZXhKJij43CYIIfmCW/3ksAGHv/zU+CUN5homTDDvfE9hTCaJm/kCv9kd4ZOwjo5BVKLI67DRX8t8rtYAS9ZPawdBTZjRbl3FWnRWsTR6K8Mi2i05G5ojuX4TClLFrOybyIH+eBGJg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1596519043249811.0558430268198; Mon, 3 Aug 2020 22:30:43 -0700 (PDT) Received: from localhost ([::1]:33498 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k2pX7-00073h-Rk for importer@patchew.org; Tue, 04 Aug 2020 01:30:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45502) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k2pUp-0005RP-7M for qemu-devel@nongnu.org; Tue, 04 Aug 2020 01:28:19 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:35293 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k2pUn-0004g6-JQ for qemu-devel@nongnu.org; Tue, 04 Aug 2020 01:28:18 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-460-gurlA-gjPoaIU-68BzRCbA-1; Tue, 04 Aug 2020 01:28:14 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id EC7691DE1; Tue, 4 Aug 2020 05:28:13 +0000 (UTC) Received: from localhost (ovpn-112-116.ams2.redhat.com [10.36.112.116]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0CEB28A181; Tue, 4 Aug 2020 05:28:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1596518896; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jYSfj/Ob3hj80XgXQHZ5qM94CUH/7Nprc+H/+M2FE6Q=; b=EcChT1Ic/fLBegKyMlu8ugUWx4/PVTjDFGBoQxiABo3rvGt0yGJHlhJVZ0vma7i21hQaFA RZYAewjDW+D8FpxUz4H/4cwDu0PWaaKu6JAkGdIZLsbNwfkcaafus02PXmSLLZya52Ga4z k7JTh5b2RnOpZw8LKZlew/GcnAo0ACo= X-MC-Unique: gurlA-gjPoaIU-68BzRCbA-1 From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PATCH 1/3] async: rename event_notifier_dummy_cb/poll() Date: Tue, 4 Aug 2020 06:28:02 +0100 Message-Id: <20200804052804.1165291-2-stefanha@redhat.com> In-Reply-To: <20200804052804.1165291-1-stefanha@redhat.com> References: <20200804052804.1165291-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.139.110.61; envelope-from=stefanha@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/04 01:28:16 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MIME_BASE64_TEXT=1.741, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fam Zheng , Paolo Bonzini , Stefan Hajnoczi , qemu-block@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The event_notifier_*() prefix can be confused with the EventNotifier APIs that are also called event_notifier_*(). Rename the functions to aio_context_notifier_*() to make it clear that they relate to the AioContext::notifier field. Signed-off-by: Stefan Hajnoczi --- util/async.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/util/async.c b/util/async.c index 1319eee3bc..d9f987e133 100644 --- a/util/async.c +++ b/util/async.c @@ -445,12 +445,12 @@ static void aio_timerlist_notify(void *opaque, QEMUCl= ockType type) aio_notify(opaque); } =20 -static void event_notifier_dummy_cb(EventNotifier *e) +static void aio_context_notifier_dummy_cb(EventNotifier *e) { } =20 /* Returns true if aio_notify() was called (e.g. a BH was scheduled) */ -static bool event_notifier_poll(void *opaque) +static bool aio_context_notifier_poll(void *opaque) { EventNotifier *e =3D opaque; AioContext *ctx =3D container_of(e, AioContext, notifier); @@ -508,8 +508,8 @@ AioContext *aio_context_new(Error **errp) =20 aio_set_event_notifier(ctx, &ctx->notifier, false, - event_notifier_dummy_cb, - event_notifier_poll); + aio_context_notifier_dummy_cb, + aio_context_notifier_poll); #ifdef CONFIG_LINUX_AIO ctx->linux_aio =3D NULL; #endif --=20 2.26.2 From nobody Mon May 6 14:55:01 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1596519212; cv=none; d=zohomail.com; s=zohoarc; b=JWQEJTWHnYC7EKfbw7RekL09laTOPE9wcVWf8p+g6v4cpf5lOdEH9RwB5q1ZxEK+B2A+KLQrURhoMDYh8RMZWsC/AtJ8msGFfdeCTZkv7cK3BgEI6S3UJcBDiqRM7ionFfKNkbYHP7UM1gWjrxCHpsWEfGtHdTbzBG3Q/LSYaVg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1596519212; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qFKhdiku8sGCyHV+5oEu1Ba9zo9tsc85ZfOtQNKJumQ=; b=kxLMMOUlUFbC0UeU+EM0Hd7yw89I8Tj63v/Ajb3wLwSbapo0SDOmlL8LWscXAfRlJwpGgivYNQQg1dsUmwq2zevPQmIm9oVXn6AQR9ZMZ2qD6WodLgHI8EtR0LjHKzABTfHN7m48B/xbnTuUjaIuCUgglZ9pldxqF6uZMoaj6+o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1596519212276376.59257903503067; Mon, 3 Aug 2020 22:33:32 -0700 (PDT) Received: from localhost ([::1]:37776 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k2pZr-0000W3-4W for importer@patchew.org; Tue, 04 Aug 2020 01:33:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45716) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k2pVt-0006dy-3j for qemu-devel@nongnu.org; Tue, 04 Aug 2020 01:29:25 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:36874 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k2pVr-0004mO-Gq for qemu-devel@nongnu.org; Tue, 04 Aug 2020 01:29:24 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-11-zZFkjMyvN5GD-FDZoZTzwA-1; Tue, 04 Aug 2020 01:28:17 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 040261005510; Tue, 4 Aug 2020 05:28:16 +0000 (UTC) Received: from localhost (ovpn-112-116.ams2.redhat.com [10.36.112.116]) by smtp.corp.redhat.com (Postfix) with ESMTP id 756258A181; Tue, 4 Aug 2020 05:28:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1596518962; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qFKhdiku8sGCyHV+5oEu1Ba9zo9tsc85ZfOtQNKJumQ=; b=W4Uj8AjDw1Sjjy3UJYnioSWUiNp4TKZDOVAwq+9W3EtKmGaFoGzTwmD0vzO8NTts3RO/YY 53zR8VLKc5XHbkiVDeCSLM61ZIs3DnN0KS94nqS3+Xkln9dexsjJRKik0FO5mzp2y6dfPP 0uPfqlx4dvaSulB9gp8M534ib3dimrU= X-MC-Unique: zZFkjMyvN5GD-FDZoZTzwA-1 From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PATCH 2/3] async: always set ctx->notified in aio_notify() Date: Tue, 4 Aug 2020 06:28:03 +0100 Message-Id: <20200804052804.1165291-3-stefanha@redhat.com> In-Reply-To: <20200804052804.1165291-1-stefanha@redhat.com> References: <20200804052804.1165291-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=stefanha@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=207.211.31.81; envelope-from=stefanha@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/04 01:01:15 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -13 X-Spam_score: -1.4 X-Spam_bar: - X-Spam_report: (-1.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MIME_BASE64_TEXT=1.741, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fam Zheng , Paolo Bonzini , Stefan Hajnoczi , qemu-block@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" aio_notify() does not set ctx->notified when called with ctx->aio_notify_me disabled. In order to poll ctx->notified it is therefore necessary to enable ctx->aio_notify_me. This is suboptimal since expensive event_notifier_set(&ctx->notifier) and event_notifier_test_and_clear(&ctx->notifier) calls required when ctx->aio_notify_me is enabled. Change aio_notify() me so that aio->notified is always set, regardless of ctx->aio_notify_me. This will allow polling to work cheaply with ctx->aio_notify_me disabled. Move the event_notifier_test_and_clear() to the fd handler function (which is now no longer an empty function so "dummy" has been dropped from its name). The next patch takes advantage of this by optimizing polling in util/aio-posix.c. Signed-off-by: Stefan Hajnoczi --- util/async.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/util/async.c b/util/async.c index d9f987e133..3e68b5b757 100644 --- a/util/async.c +++ b/util/async.c @@ -425,19 +425,14 @@ void aio_notify(AioContext *ctx) smp_mb(); if (atomic_read(&ctx->notify_me)) { event_notifier_set(&ctx->notifier); - atomic_mb_set(&ctx->notified, true); } + + atomic_mb_set(&ctx->notified, true); } =20 void aio_notify_accept(AioContext *ctx) { - if (atomic_xchg(&ctx->notified, false) -#ifdef WIN32 - || true -#endif - ) { - event_notifier_test_and_clear(&ctx->notifier); - } + atomic_mb_set(&ctx->notified, false); } =20 static void aio_timerlist_notify(void *opaque, QEMUClockType type) @@ -445,8 +440,11 @@ static void aio_timerlist_notify(void *opaque, QEMUClo= ckType type) aio_notify(opaque); } =20 -static void aio_context_notifier_dummy_cb(EventNotifier *e) +static void aio_context_notifier_cb(EventNotifier *e) { + AioContext *ctx =3D container_of(e, AioContext, notifier); + + event_notifier_test_and_clear(&ctx->notifier); } =20 /* Returns true if aio_notify() was called (e.g. a BH was scheduled) */ @@ -508,7 +506,7 @@ AioContext *aio_context_new(Error **errp) =20 aio_set_event_notifier(ctx, &ctx->notifier, false, - aio_context_notifier_dummy_cb, + aio_context_notifier_cb, aio_context_notifier_poll); #ifdef CONFIG_LINUX_AIO ctx->linux_aio =3D NULL; --=20 2.26.2 From nobody Mon May 6 14:55:01 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1596519152; cv=none; d=zohomail.com; s=zohoarc; b=MiSvl2eGf5KwBUsMh6SC2c/DIsxQjr5ted8wIJCANIjZyOeGWvzNlBCgJQ+jYLPw+uYKUC6JBd+ZTYUJ+VWxbMfyNmT764IHwdT9nSUDbiCDtbg4RlYYszu0m18twl3H/2/0OJ7NlKAT/bkV+hqUDsHgr/ZjdW0LOkzImxvY8bY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1596519152; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=VDL1wmc+f6rJIU/rl7Kd5c/L+K1FGTcHl2d4/l6FJQQ=; b=E04m9G5Vy5S0h+K9PpF17lfuZYkqCSliGEg5uOeL2kFGUfpzRw1dxCXNirR6tYx7YwfNUfhO3YYE1NDGvZJh+Rk6RdWRLtz+dqVe8NOeUsAOdc7Owz+H+rsKHJe7/d1oL7zir/2UZjDyICxph6rnJS/qza8XkPRdo7X23kX9UaQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1596519152345220.66964305913143; Mon, 3 Aug 2020 22:32:32 -0700 (PDT) Received: from localhost ([::1]:35660 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k2pYt-00084C-0U for importer@patchew.org; Tue, 04 Aug 2020 01:32:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45560) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k2pUy-0005ju-EY for qemu-devel@nongnu.org; Tue, 04 Aug 2020 01:28:28 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:24055) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k2pUw-0004iI-Ci for qemu-devel@nongnu.org; Tue, 04 Aug 2020 01:28:28 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-10-sJwo89WUNPuCOU1bsIFwyw-1; Tue, 04 Aug 2020 01:28:21 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E449C106B242; Tue, 4 Aug 2020 05:28:20 +0000 (UTC) Received: from localhost (ovpn-112-116.ams2.redhat.com [10.36.112.116]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6884387E3B; Tue, 4 Aug 2020 05:28:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1596518905; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VDL1wmc+f6rJIU/rl7Kd5c/L+K1FGTcHl2d4/l6FJQQ=; b=C4vXa+CbppKg2t6Tl4tE68PIdeT/JCTdoTgwZJljIvYUlryNf7bpYY9C8flgKOCyp8iw6x tUrRHVkJ+ybIVj3q5D/5CqQgV/5utJScTmisODE6mM+rH+hH2UcvSywNY7ohhx9eilOEhz 7d+ecKiCP2l+cTQaKX0AWLPw2vHVUHk= X-MC-Unique: sJwo89WUNPuCOU1bsIFwyw-1 From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PATCH 3/3] aio-posix: keep aio_notify_me disabled during polling Date: Tue, 4 Aug 2020 06:28:04 +0100 Message-Id: <20200804052804.1165291-4-stefanha@redhat.com> In-Reply-To: <20200804052804.1165291-1-stefanha@redhat.com> References: <20200804052804.1165291-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=stefanha@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.139.110.61; envelope-from=stefanha@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/04 01:28:16 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fam Zheng , Paolo Bonzini , Stefan Hajnoczi , qemu-block@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Polling only monitors the ctx->notified field and does not need the ctx->notifier EventNotifier to be signalled. Keep ctx->aio_notify_me disabled while polling to avoid unnecessary EventNotifier syscalls. This optimization improves virtio-blk 4KB random read performance by 18%. The following results are with an IOThread and the null-co block driver: Test IOPS Error Before 244518.62 =C2=B1 1.20% After 290706.11 =C2=B1 0.44% Signed-off-by: Stefan Hajnoczi --- util/aio-posix.c | 56 ++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/util/aio-posix.c b/util/aio-posix.c index 1b2a3af65b..078ec15890 100644 --- a/util/aio-posix.c +++ b/util/aio-posix.c @@ -464,9 +464,6 @@ static bool remove_idle_poll_handlers(AioContext *ctx, = int64_t now) * * Polls for a given time. * - * Note that ctx->notify_me must be non-zero so this function can detect - * aio_notify(). - * * Note that the caller must have incremented ctx->list_lock. * * Returns: true if progress was made, false otherwise @@ -476,7 +473,6 @@ static bool run_poll_handlers(AioContext *ctx, int64_t = max_ns, int64_t *timeout) bool progress; int64_t start_time, elapsed_time; =20 - assert(ctx->notify_me); assert(qemu_lockcnt_count(&ctx->list_lock) > 0); =20 trace_run_poll_handlers_begin(ctx, max_ns, *timeout); @@ -520,8 +516,6 @@ static bool run_poll_handlers(AioContext *ctx, int64_t = max_ns, int64_t *timeout) * @timeout: timeout for blocking wait, computed by the caller and updated= if * polling succeeds. * - * ctx->notify_me must be non-zero so this function can detect aio_notify(= ). - * * Note that the caller must have incremented ctx->list_lock. * * Returns: true if progress was made, false otherwise @@ -566,23 +560,6 @@ bool aio_poll(AioContext *ctx, bool blocking) */ assert(in_aio_context_home_thread(ctx)); =20 - /* aio_notify can avoid the expensive event_notifier_set if - * everything (file descriptors, bottom halves, timers) will - * be re-evaluated before the next blocking poll(). This is - * already true when aio_poll is called with blocking =3D=3D false; - * if blocking =3D=3D true, it is only true after poll() returns, - * so disable the optimization now. - */ - if (blocking) { - atomic_set(&ctx->notify_me, atomic_read(&ctx->notify_me) + 2); - /* - * Write ctx->notify_me before computing the timeout - * (reading bottom half flags, etc.). Pairs with - * smp_mb in aio_notify(). - */ - smp_mb(); - } - qemu_lockcnt_inc(&ctx->list_lock); =20 if (ctx->poll_max_ns) { @@ -597,15 +574,38 @@ bool aio_poll(AioContext *ctx, bool blocking) * system call---a single round of run_poll_handlers_once suffices. */ if (timeout || ctx->fdmon_ops->need_wait(ctx)) { + /* + * aio_notify can avoid the expensive event_notifier_set if + * everything (file descriptors, bottom halves, timers) will + * be re-evaluated before the next blocking poll(). This is + * already true when aio_poll is called with blocking =3D=3D false; + * if blocking =3D=3D true, it is only true after poll() returns, + * so disable the optimization now. + */ + if (timeout) { + atomic_set(&ctx->notify_me, atomic_read(&ctx->notify_me) + 2); + /* + * Write ctx->notify_me before computing the timeout + * (reading bottom half flags, etc.). Pairs with + * smp_mb in aio_notify(). + */ + smp_mb(); + + /* Check again in case a shorter timer was added */ + timeout =3D qemu_soonest_timeout(timeout, aio_compute_timeout(= ctx)); + } + ret =3D ctx->fdmon_ops->wait(ctx, &ready_list, timeout); - } =20 - if (blocking) { - /* Finish the poll before clearing the flag. */ - atomic_store_release(&ctx->notify_me, atomic_read(&ctx->notify_me)= - 2); - aio_notify_accept(ctx); + if (timeout) { + /* Finish the poll before clearing the flag. */ + atomic_store_release(&ctx->notify_me, + atomic_read(&ctx->notify_me) - 2); + } } =20 + aio_notify_accept(ctx); + /* Adjust polling time */ if (ctx->poll_max_ns) { int64_t block_ns =3D qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - star= t; --=20 2.26.2