From patchwork Tue Jul 30 17:34:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066371 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5A5E314DB for ; Tue, 30 Jul 2019 17:39:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3F4FD286BC for ; Tue, 30 Jul 2019 17:39:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3014528714; Tue, 30 Jul 2019 17:39:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id C4B65286BC for ; Tue, 30 Jul 2019 17:39:31 +0000 (UTC) Received: from localhost ([::1]:35182 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW5z-00038M-59 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:39:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35519) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW1x-0003Xk-7j for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:35:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW1w-0008Ol-7G for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:35:21 -0400 Received: from mail-pf1-x441.google.com ([2607:f8b0:4864:20::441]:37514) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW1w-0008OQ-1H; Tue, 30 Jul 2019 13:35:20 -0400 Received: by mail-pf1-x441.google.com with SMTP id 19so30201299pfa.4; Tue, 30 Jul 2019 10:35:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dbXKSdV5tn5FcTOHM2GayIdaoxtdtsUeiXsLP0/PfEA=; b=ac7f/SCaAIkJICvNjagIShZ3Ql1yUbJST57mHrbSzq+mB2+3ZZvWqJ3Ejzm7L0VED6 3dC/6RUcU58HNU0ZEEETXGSCQxzzvGkKhPlr0qvj9BizNFixzYTopaaTH0SvCNC6cFRO Gkqp2RyvzjsU/1hB50WJ2B1jiPzvQ8qzx1jyskGUpGaJ0dDAKgKiN5wtqEPkGaEkTahM f3VoDlfNc1sVERWHdOSwoIEGUFWRjB6AdFklGPemEfBbHpIdET2SRNQmE7auwLHLul74 J8GyXU6uRiiCDwwF6L/dgV/qrHWYdpwYNnBD6Lz3hroKxMSWEdWVZ/6SKwhte9b29CJM vRWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=dbXKSdV5tn5FcTOHM2GayIdaoxtdtsUeiXsLP0/PfEA=; b=HEsnOe7d6mmHFnHD5dYEOql2k6yIjiHieBkydw06apHDUGv1wJFC1vUI0Yuchjby/h Fg7T2zLt9hkcJ/yFqMFDuWURcws4VNem0tWGGL4rGDvLUvFdF71MhenD3VjDAP2kDHkS cFFXpSFVCoaIjWmlkaozMOGLo6qYXnJ3jx8CYvoHrF7ZNczIClQLS90hMQ5OdrMndhfm hc0amKkLR8a7J1Cc/88EvvLieChbDNvnTf5lF4mDy/Js/sBvMmc597eYn4FVxqcEn2ec KeHUHjX+cjkk4js3LFoyydjLZ09BzNjtQ1sAdxeGKOzRGpzzAWnSb5AmDgMUn8FPFxUr TacQ== X-Gm-Message-State: APjAAAWsRAE9sNLLM7mNpeHnJUKoDn4nS6QGy+OrEYliefjzthhHwOzS Z2gKwNX1M6ANGjG6p/RdPDSlTlzL8fF+4g== X-Google-Smtp-Source: APXvYqwwi3kJDv3s/f/uqT2nQ/DMA5NxB4gS4X7/aniZEb1ZhBIb9NBRRB+0fj73eKsOIF0VUH2BZA== X-Received: by 2002:aa7:9293:: with SMTP id j19mr44186152pfa.90.1564508118709; Tue, 30 Jul 2019 10:35:18 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.35.04 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:35:18 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:26 +0530 Message-Id: <20190730173441.26486-2-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::441 Subject: [Qemu-devel] [PATCH v8 01/16] configure: permit use of io_uring 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta , Maxim Levitsky Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi Reviewed-by: Maxim Levitsky --- configure | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/configure b/configure index 714e7fb6a1..493dbc2ec5 100755 --- a/configure +++ b/configure @@ -371,6 +371,7 @@ xen="" xen_ctrl_version="" xen_pci_passthrough="" linux_aio="" +linux_io_uring="" cap_ng="" attr="" libattr="" @@ -1272,6 +1273,10 @@ for opt do ;; --enable-linux-aio) linux_aio="yes" ;; + --disable-linux-io-uring) linux_io_uring="no" + ;; + --enable-linux-io-uring) linux_io_uring="yes" + ;; --disable-attr) attr="no" ;; --enable-attr) attr="yes" @@ -1790,6 +1795,7 @@ disabled with --disable-FEATURE, default is enabled if available: vde support for vde network netmap support for netmap network linux-aio Linux AIO support + linux-io-uring Linux io_uring support cap-ng libcap-ng support attr attr and xattr support vhost-net vhost-net kernel acceleration support @@ -3975,6 +3981,21 @@ EOF linux_aio=no fi fi +########################################## +# linux-io-uring probe + +if test "$linux_io_uring" != "no" ; then + if $pkg_config liburing; then + linux_io_uring_cflags=$($pkg_config --cflags liburing) + linux_io_uring_libs=$($pkg_config --libs liburing) + linux_io_uring=yes + else + if test "$linux_io_uring" = "yes" ; then + feature_not_found "linux io_uring" "Install liburing devel" + fi + linux_io_uring=no + fi +fi ########################################## # TPM emulation is only on POSIX @@ -6398,6 +6419,7 @@ echo "PIE $pie" echo "vde support $vde" echo "netmap support $netmap" echo "Linux AIO support $linux_aio" +echo "Linux io_uring support $linux_io_uring" echo "ATTR/XATTR support $attr" echo "Install blobs $blobs" echo "KVM support $kvm" @@ -6885,6 +6907,11 @@ fi if test "$linux_aio" = "yes" ; then echo "CONFIG_LINUX_AIO=y" >> $config_host_mak fi +if test "$linux_io_uring" = "yes" ; then + echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak + echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak + echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak +fi if test "$attr" = "yes" ; then echo "CONFIG_ATTR=y" >> $config_host_mak fi From patchwork Tue Jul 30 17:34:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066377 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 911451395 for ; Tue, 30 Jul 2019 17:40:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7B0D2286BC for ; Tue, 30 Jul 2019 17:40:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6D4CC28714; Tue, 30 Jul 2019 17:40:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 161C128714 for ; Tue, 30 Jul 2019 17:40:06 +0000 (UTC) Received: from localhost ([::1]:35192 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW6X-0004rf-F6 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:40:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35547) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW23-0003v5-VB for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:35:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW23-0008RS-3F for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:35:27 -0400 Received: from mail-pf1-x443.google.com ([2607:f8b0:4864:20::443]:40516) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW22-0008R6-TX; Tue, 30 Jul 2019 13:35:27 -0400 Received: by mail-pf1-x443.google.com with SMTP id p184so30199170pfp.7; Tue, 30 Jul 2019 10:35:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kq+GocMZNBzs7h+JrH4HUXS6sT3wW7TSwegih8ayQCc=; b=L6JMmOmR9adQM+7Yn8wBFur6/NdLwM2ssKsQlg9abh2H4LpAA39v/LQHqVtl6kgPHL z0q4Ao/x3LGnT9rSQxQMsMhpoQhkatpTXZfpnAVpVo2OIUTCIqTxZ3nipA+fpG2AP3MM A9aEPrr2EgUjIIDGdMCX46sq8nMt7pqjiuhHCEXSxBXsnSv/vDLTvg09K8t+wJJmwGRN XKj5mcDdbb85gYcbT9zQjM6mk4hbe8dCBHLSNBNBddYwybhArxmdctpI+b2XuuDoqIiB o2lIrRbCyyKkTN28y5MMbkYqqpo3sbVKxEGTVUamB4FNteFZJP3QDGN7nW+C50dSTkXP XkRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kq+GocMZNBzs7h+JrH4HUXS6sT3wW7TSwegih8ayQCc=; b=S5d2x5/MBfm6gCwgkIvEYOyGhVkrW8Hb90aXMpS3LLK2czI/f4QywMXOo+yhkl9jFl fWi24wyFflz2HrnuvpwGkDzl2Wk5iG9RkegO7iIRNUQg6goW1OE7NUZreAkwAJCy0jME +CwxjNFIK+mA2Ur7b+7+c7Sp6PgD9pKlqaxd9i6EJmvl8GCgV60CPNa7eyWWKho5M1Iu 9n8yt/Zb0bsztH+U8BSj0jXf5e/P5FZPfEL+QqytBDMNireRXvl+GakXL53tz6F3kU3P cEh41b9rAVoBjZitN3s2DPI+YizABTPvdKW8EhREwYjGxwwKqEZOcwba5CoB5hOGFzD1 7eog== X-Gm-Message-State: APjAAAUxXmcRGkXW4+cfDUorLXF+vfMsMYkoWCIW+gQ5QJHaj3vj+IhV UNkwctDAQYgtr2/QLvI9sGuMgsSTakbZPQ== X-Google-Smtp-Source: APXvYqyD5buVWI7Vla9DLEAJ0o2XwD0UDQjch1i/L9sdecxMmPoNJuU4Lnek9aBcnfbKQjnSRXbufA== X-Received: by 2002:a63:3148:: with SMTP id x69mr23346603pgx.300.1564508125119; Tue, 30 Jul 2019 10:35:25 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.35.18 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:35:24 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:27 +0530 Message-Id: <20190730173441.26486-3-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::443 Subject: [Qemu-devel] [PATCH v8 02/16] qapi/block-core: add option for io_uring 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Only enumerates option for devices that support it. Since QAPI schema supports io_uring, which is the actual name of the Linux API, it is preferred over io-uring. Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi --- qapi/block-core.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/qapi/block-core.json b/qapi/block-core.json index 0d43d4f37c..3dc93b483f 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -2792,11 +2792,13 @@ # # @threads: Use qemu's thread pool # @native: Use native AIO backend (only Linux and Windows) +# @io_uring: Use linux io_uring (since 4.2) # # Since: 2.9 ## { 'enum': 'BlockdevAioOptions', - 'data': [ 'threads', 'native' ] } + 'data': [ 'threads', 'native', + { 'name': 'io_uring', 'if': 'defined(CONFIG_LINUX_IO_URING)' } ] } ## # @BlockdevCacheOptions: From patchwork Tue Jul 30 17:34:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066379 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EACD91395 for ; Tue, 30 Jul 2019 17:41:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CE8012874B for ; Tue, 30 Jul 2019 17:41:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C265528704; Tue, 30 Jul 2019 17:41:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 2AD99287E5 for ; Tue, 30 Jul 2019 17:41:00 +0000 (UTC) Received: from localhost ([::1]:35214 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW7P-0006ez-Hm for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:40:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35572) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW2C-0004LI-8g for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:35:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW2B-00006y-DX for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:35:36 -0400 Received: from mail-pl1-x644.google.com ([2607:f8b0:4864:20::644]:46642) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW2B-00006E-89; Tue, 30 Jul 2019 13:35:35 -0400 Received: by mail-pl1-x644.google.com with SMTP id c2so29140806plz.13; Tue, 30 Jul 2019 10:35:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2qHkahVEkN1zu8CSs6/qp7V0fV616Ybkp0QDQj4tHxQ=; b=ICKhoPl6wva4wEX+ZC6lpYQVYzWNtBkcJiH7g4h9MBHV7zku6Jf7mt4g/2YR9gwbse c2RNBRzcil/EhuAh11c12AhncRxNh6QxdPstU6B2Q8tTyOhbciD9inEfLSrjH1Ib0c24 gK3zyadEhmtqCyKQsATpKC1ISsE99cmXpyZDC8e1f8GmfN8PXbYPjuMYBb0ftQyun3qG nTHBJYyE+9ylYdO73UKe8kyc7HE7MQ1OjZEWHs9M788xt6jLfQczTm3P4mG7XbcUI9fR gV/Hrj+YBrafMlLovLQYNEwx4BZwZimvr56WJqoXzgrla/FJe6qFxmW6FtkhhEyx2lUG qI5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2qHkahVEkN1zu8CSs6/qp7V0fV616Ybkp0QDQj4tHxQ=; b=RIyDM9/itf1Dm5w7/41Mkxtk+olVJTpTgDee1XX+YBNYNSFQW0HiIn7JYBPNYHi6oB YCqnf7LOY2k9d2NF/ewYNOAkqwvygkTDmvizHc0WVSBJD6hdzPzcBNCCnQrSiaoKJPTS 0+N3dyOpt2oNTuRw/XG5bIyW1w7wJhRHbqeUjFa9wQK96rwX6WWJgpqnNM6jPvAaUB01 0Ldr83jwpWk+Lu0feWlg8gZgTsDPQLvnu/UQfEfirdVPSxiYQ5jSYS24grd0WNle8sat LTzSeRXdtktCUFa+eHXQdrlDSHepurw7Zg+G62dhrVbAgx9Jsa7xQQwS3WqYF3VIcJTB ubDw== X-Gm-Message-State: APjAAAXWcApHke2/LKlbObRsOu/4dVeoEhCRWq1wEFFumGETxoHuRyHA M71ZG5cqpVngsrhjoexEvKdH32zv3KwbjA== X-Google-Smtp-Source: APXvYqy6vkQKy+9TRU6BRA979Me7jvGwcqTxR+vGYSvPVHWVRy8qflztY91XnomdEGplkoJbQcazFw== X-Received: by 2002:a17:902:e202:: with SMTP id ce2mr111842448plb.272.1564508132918; Tue, 30 Jul 2019 10:35:32 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.35.25 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:35:32 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:28 +0530 Message-Id: <20190730173441.26486-4-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::644 Subject: [Qemu-devel] [PATCH v8 03/16] block/block: add BDRV flag for io_uring 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta , Maxim Levitsky Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi Reviewed-by: Maxim Levitsky --- include/block/block.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/block/block.h b/include/block/block.h index 50a07c1c33..e29baa172c 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -121,6 +121,7 @@ typedef struct HDGeometry { ignoring the format layer */ #define BDRV_O_NO_IO 0x10000 /* don't initialize for I/O */ #define BDRV_O_AUTO_RDONLY 0x20000 /* degrade to read-only if opening read-write fails */ +#define BDRV_O_IO_URING 0x40000 /* use io_uring instead of the thread pool */ #define BDRV_O_CACHE_MASK (BDRV_O_NOCACHE | BDRV_O_NO_FLUSH) From patchwork Tue Jul 30 17:34:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066365 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 64F831395 for ; Tue, 30 Jul 2019 17:38:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4C6C2286F1 for ; Tue, 30 Jul 2019 17:38:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3FEC728710; Tue, 30 Jul 2019 17:38:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 328DF286BC for ; Tue, 30 Jul 2019 17:38:09 +0000 (UTC) Received: from localhost ([::1]:35140 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW4e-0007vB-9L for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:38:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35603) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW2P-0004uC-D0 for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:35:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW2N-0000BJ-72 for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:35:49 -0400 Received: from mail-pg1-x543.google.com ([2607:f8b0:4864:20::543]:33696) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW2M-0000BA-Ua; Tue, 30 Jul 2019 13:35:47 -0400 Received: by mail-pg1-x543.google.com with SMTP id f20so21194835pgj.0; Tue, 30 Jul 2019 10:35:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=W8vsKkWotv5zYcQjjmaR3ANq6wnqhanwVV3d5AY3Aco=; b=pevlKoBNGdZPhIhjehAia75RMgtXnaEOeWsc+SOzTJ+6H95qMbSnGIXGO/DKdUfICX pW8MHIlOw7XAo0EXT9kSqUzWlDXHnqu2uzawjUwdztqnSx4XT2NUp311/mbU++Ww6lO5 lXGYCjiqSK//90e8RKR63/KhNRsZEoKBh0jVGLv2/icgP5BsSSkzdlbRtn55xq3LYhm/ 1Yl6JFIdldJaTW9pAgv6OTyMrLQq8d1J/8EO5IbLshUlR3ZutaQfbrqfj9apYqtrNPG3 zyhrwZPjOrWmYCnIWJ3i7OZm8SAOo//AaTpO3e8JKDa5QwCA3zubAosBc2tngePqPXqN 2ZbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=W8vsKkWotv5zYcQjjmaR3ANq6wnqhanwVV3d5AY3Aco=; b=oLDL/yLXEQcBwatD51W51H25lYYnkRZDaEMyr2ngy+gpwNSyWmsMz4cabHBnN3Y12H kFSfGMJNaq1ThKHQHy4TQssLE1yE1BbXvpx/GGCuQSqMh2F6xNIrFnAo5ZVlTW52uTev 8ZnBoWc08NrkwpK9ZFXV8hH87lf0YetdlQG4q3AGSh7WKl1+7Q2c3Gti+31qHWbd2Vm7 I0CgRUQhuFSyCiv+jlxy6GxX1z191kIsedhEq9q9vpHAX1KLAz6Id2Ad3y7Z5cuwpRqG mFRqtvl9aAViwVAbaXtfkNhP7c0F5R7xFyZ8/ghP/XHxym9uLJzbo7esEqv0UANwEALG GPWQ== X-Gm-Message-State: APjAAAX8QhkBe5jjc1Kw7PKIeQI4lqTQbXR2xhsCnFUnL/BkS6+PhgY6 trIN5ulMitTJ+VJyibBhSfEvFKaX+5DimQ== X-Google-Smtp-Source: APXvYqzX7kqALMX0/CkiRMhhX/5QDze7sDqnXXDNqPLkBpa5MNNx1DV4mX1f22Kh00I1AWAD8w9bHA== X-Received: by 2002:a63:24a:: with SMTP id 71mr672104pgc.273.1564508145452; Tue, 30 Jul 2019 10:35:45 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.35.33 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:35:44 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:29 +0530 Message-Id: <20190730173441.26486-5-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::543 Subject: [Qemu-devel] [PATCH v8 04/16] block/io_uring: implements interfaces for io_uring 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Aborts when sqe fails to be set as sqes cannot be returned to the ring. Adds slow path for short reads for older kernels Signed-off-by: Aarushi Mehta Signed-off-by: Stefan Hajnoczi Reviewed-by: Stefan Hajnoczi --- MAINTAINERS | 7 + block/Makefile.objs | 3 + block/io_uring.c | 409 ++++++++++++++++++++++++++++++++++++++++ include/block/aio.h | 16 +- include/block/raw-aio.h | 12 ++ 5 files changed, 446 insertions(+), 1 deletion(-) create mode 100644 block/io_uring.c diff --git a/MAINTAINERS b/MAINTAINERS index d6de200453..be688fcd5e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2530,6 +2530,13 @@ F: block/file-posix.c F: block/file-win32.c F: block/win32-aio.c +Linux io_uring +M: Aarushi Mehta +R: Stefan Hajnoczi +L: qemu-block@nongnu.org +S: Maintained +F: block/io_uring.c + qcow2 M: Kevin Wolf M: Max Reitz diff --git a/block/Makefile.objs b/block/Makefile.objs index 35f3bca4d9..6a548af8ed 100644 --- a/block/Makefile.objs +++ b/block/Makefile.objs @@ -18,6 +18,7 @@ block-obj-y += block-backend.o snapshot.o qapi.o block-obj-$(CONFIG_WIN32) += file-win32.o win32-aio.o block-obj-$(CONFIG_POSIX) += file-posix.o block-obj-$(CONFIG_LINUX_AIO) += linux-aio.o +block-obj-$(CONFIG_LINUX_IO_URING) += io_uring.o block-obj-y += null.o mirror.o commit.o io.o create.o block-obj-y += throttle-groups.o block-obj-$(CONFIG_LINUX) += nvme.o @@ -61,5 +62,7 @@ block-obj-$(if $(CONFIG_LZFSE),m,n) += dmg-lzfse.o dmg-lzfse.o-libs := $(LZFSE_LIBS) qcow.o-libs := -lz linux-aio.o-libs := -laio +io_uring.o-cflags := $(LINUX_IO_URING_CFLAGS) +io_uring.o-libs := $(LINUX_IO_URING_LIBS) parallels.o-cflags := $(LIBXML2_CFLAGS) parallels.o-libs := $(LIBXML2_LIBS) diff --git a/block/io_uring.c b/block/io_uring.c new file mode 100644 index 0000000000..b1f14d2461 --- /dev/null +++ b/block/io_uring.c @@ -0,0 +1,409 @@ +/* + * Linux io_uring support. + * + * Copyright (C) 2009 IBM, Corp. + * Copyright (C) 2009 Red Hat, Inc. + * Copyright (C) 2019 Aarushi Mehta + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ +#include "qemu/osdep.h" +#include +#include "qemu-common.h" +#include "block/aio.h" +#include "qemu/queue.h" +#include "block/block.h" +#include "block/raw-aio.h" +#include "qemu/coroutine.h" +#include "qapi/error.h" + +#define MAX_EVENTS 128 + +typedef struct LuringAIOCB { + Coroutine *co; + struct io_uring_sqe sqeq; + ssize_t ret; + QEMUIOVector *qiov; + bool is_read; + QSIMPLEQ_ENTRY(LuringAIOCB) next; + + /* + * Buffered reads may require resubmission, see + * luring_resubmit_short_read(). + */ + int total_read; + QEMUIOVector resubmit_qiov; +} LuringAIOCB; + +typedef struct LuringQueue { + int plugged; + unsigned int in_queue; + unsigned int in_flight; + bool blocked; + QSIMPLEQ_HEAD(, LuringAIOCB) submit_queue; +} LuringQueue; + +typedef struct LuringState { + AioContext *aio_context; + + struct io_uring ring; + + /* io queue for submit at batch. Protected by AioContext lock. */ + LuringQueue io_q; + + /* I/O completion processing. Only runs in I/O thread. */ + QEMUBH *completion_bh; +} LuringState; + +/** + * ioq_submit: + * @s: AIO state + * + * Queues pending sqes and submits them + * + */ +static int ioq_submit(LuringState *s); + +/** + * luring_resubmit: + * + * Resubmit a request by appending it to submit_queue. The caller must ensure + * that ioq_submit() is called later so that submit_queue requests are started. + */ +static void luring_resubmit(LuringState *s, LuringAIOCB *luringcb) +{ + QSIMPLEQ_INSERT_TAIL(&s->io_q.submit_queue, luringcb, next); + s->io_q.in_queue++; +} + +/** + * luring_resubmit_short_read: + * + * Before Linux commit 9d93a3f5a0c ("io_uring: punt short reads to async + * context") a buffered I/O request with the start of the file range in the + * page cache could result in a short read. Applications need to resubmit the + * remaining read request. + * + * This is a slow path but recent kernels never take it. + */ +static void luring_resubmit_short_read(LuringState *s, LuringAIOCB *luringcb, + int nread) +{ + QEMUIOVector *resubmit_qiov; + size_t remaining; + + /* Update read position */ + luringcb->total_read = nread; + remaining = luringcb->qiov->size - luringcb->total_read; + + /* Shorten qiov */ + resubmit_qiov = &luringcb->resubmit_qiov; + if (resubmit_qiov->iov == NULL) { + qemu_iovec_init(resubmit_qiov, luringcb->qiov->niov); + } else { + qemu_iovec_reset(resubmit_qiov); + } + qemu_iovec_concat(resubmit_qiov, luringcb->qiov, luringcb->total_read, + remaining); + + /* Update sqe */ + luringcb->sqeq.off = nread; + luringcb->sqeq.addr = (__u64)(uintptr_t)luringcb->resubmit_qiov.iov; + luringcb->sqeq.len = luringcb->resubmit_qiov.niov; + + luring_resubmit(s, luringcb); +} + +/** + * luring_process_completions: + * @s: AIO state + * + * Fetches completed I/O requests, consumes cqes and invokes their callbacks + * The function is somewhat tricky because it supports nested event loops, for + * example when a request callback invokes aio_poll(). + * + * Function schedules BH completion so it can be called again in a nested + * event loop. When there are no events left to complete the BH is being + * canceled. + * + */ +static void luring_process_completions(LuringState *s) +{ + struct io_uring_cqe *cqes; + int total_bytes; + /* + * Request completion callbacks can run the nested event loop. + * Schedule ourselves so the nested event loop will "see" remaining + * completed requests and process them. Without this, completion + * callbacks that wait for other requests using a nested event loop + * would hang forever. + * + * This workaround is needed because io_uring uses poll_wait, which + * is woken up when new events are added to the uring, thus polling on + * the same uring fd will block unless more events are received. + * + * Other leaf block drivers (drivers that access the data themselves) + * are networking based, so they poll sockets for data and run the + * correct coroutine. + */ + qemu_bh_schedule(s->completion_bh); + + while (io_uring_peek_cqe(&s->ring, &cqes) == 0) { + LuringAIOCB *luringcb; + int ret; + + if (!cqes) { + break; + } + + luringcb = io_uring_cqe_get_data(cqes); + ret = cqes->res; + io_uring_cqe_seen(&s->ring, cqes); + cqes = NULL; + + /* Change counters one-by-one because we can be nested. */ + s->io_q.in_flight--; + + /* total_read is non-zero only for resubmitted read requests */ + total_bytes = ret + luringcb->total_read; + + if (ret < 0) { + if (ret == -EINTR) { + luring_resubmit(s, luringcb); + continue; + } + } else if (!luringcb->qiov) { + goto end; + } else if (total_bytes == luringcb->qiov->size) { + ret = 0; + /* Only read/write */ + } else { + /* Short Read/Write */ + if (luringcb->is_read) { + if (ret > 0) { + luring_resubmit_short_read(s, luringcb, ret); + continue; + } else { + /* Pad with zeroes */ + qemu_iovec_memset(luringcb->qiov, total_bytes, 0, + luringcb->qiov->size - total_bytes); + ret = 0; + } + } else { + ret = -ENOSPC;; + } + } +end: + luringcb->ret = ret; + qemu_iovec_destroy(&luringcb->resubmit_qiov); + + /* + * If the coroutine is already entered it must be in ioq_submit() + * and will notice luringcb->ret has been filled in when it + * eventually runs later. Coroutines cannot be entered recursively + * so avoid doing that! + */ + if (!qemu_coroutine_entered(luringcb->co)) { + aio_co_wake(luringcb->co); + } + } + qemu_bh_cancel(s->completion_bh); +} + +static void luring_process_completions_and_submit(LuringState *s) +{ + aio_context_acquire(s->aio_context); + luring_process_completions(s); + + if (!s->io_q.plugged && s->io_q.in_queue > 0) { + ioq_submit(s); + } + aio_context_release(s->aio_context); +} + +static void qemu_luring_completion_bh(void *opaque) +{ + LuringState *s = opaque; + luring_process_completions_and_submit(s); +} + +static void qemu_luring_completion_cb(void *opaque) +{ + LuringState *s = opaque; + luring_process_completions_and_submit(s); +} + +static void ioq_init(LuringQueue *io_q) +{ + QSIMPLEQ_INIT(&io_q->submit_queue); + io_q->plugged = 0; + io_q->in_queue = 0; + io_q->in_flight = 0; + io_q->blocked = false; +} + +static int ioq_submit(LuringState *s) +{ + int ret = 0; + LuringAIOCB *luringcb, *luringcb_next; + + while (s->io_q.in_queue > 0) { + /* + * Try to fetch sqes from the ring for requests waiting in + * the overflow queue + */ + QSIMPLEQ_FOREACH_SAFE(luringcb, &s->io_q.submit_queue, next, + luringcb_next) { + struct io_uring_sqe *sqes = io_uring_get_sqe(&s->ring); + if (!sqes) { + break; + } + /* Prep sqe for submission */ + *sqes = luringcb->sqeq; + QSIMPLEQ_REMOVE_HEAD(&s->io_q.submit_queue, next); + } + ret = io_uring_submit(&s->ring); + /* Prevent infinite loop if submission is refused */ + if (ret <= 0) { + if (ret == -EAGAIN) { + continue; + } + break; + } + s->io_q.in_flight += ret; + s->io_q.in_queue -= ret; + } + s->io_q.blocked = (s->io_q.in_queue > 0); + + if (s->io_q.in_flight) { + /* + * We can try to complete something just right away if there are + * still requests in-flight. + */ + luring_process_completions(s); + } + return ret; +} + +void luring_io_plug(BlockDriverState *bs, LuringState *s) +{ + s->io_q.plugged++; +} + +void luring_io_unplug(BlockDriverState *bs, LuringState *s) +{ + assert(s->io_q.plugged); + if (--s->io_q.plugged == 0 && + !s->io_q.blocked && s->io_q.in_queue > 0) { + ioq_submit(s); + } +} + +/** + * luring_do_submit: + * @fd: file descriptor for I/O + * @luringcb: AIO control block + * @s: AIO state + * @offset: offset for request + * @type: type of request + * + * Fetches sqes from ring, adds to pending queue and preps them + * + */ +static int luring_do_submit(int fd, LuringAIOCB *luringcb, LuringState *s, + uint64_t offset, int type) +{ + struct io_uring_sqe *sqes = &luringcb->sqeq; + + switch (type) { + case QEMU_AIO_WRITE: + io_uring_prep_writev(sqes, fd, luringcb->qiov->iov, + luringcb->qiov->niov, offset); + break; + case QEMU_AIO_READ: + io_uring_prep_readv(sqes, fd, luringcb->qiov->iov, + luringcb->qiov->niov, offset); + break; + case QEMU_AIO_FLUSH: + io_uring_prep_fsync(sqes, fd, IORING_FSYNC_DATASYNC); + break; + default: + fprintf(stderr, "%s: invalid AIO request type, aborting 0x%x.\n", + __func__, type); + abort(); + } + io_uring_sqe_set_data(sqes, luringcb); + + QSIMPLEQ_INSERT_TAIL(&s->io_q.submit_queue, luringcb, next); + s->io_q.in_queue++; + + if (!s->io_q.blocked && + (!s->io_q.plugged || + s->io_q.in_flight + s->io_q.in_queue >= MAX_EVENTS)) { + return ioq_submit(s); + } + return 0; +} + +int coroutine_fn luring_co_submit(BlockDriverState *bs, LuringState *s, int fd, + uint64_t offset, QEMUIOVector *qiov, int type) +{ + int ret; + LuringAIOCB luringcb = { + .co = qemu_coroutine_self(), + .ret = -EINPROGRESS, + .qiov = qiov, + .is_read = (type == QEMU_AIO_READ), + }; + + ret = luring_do_submit(fd, &luringcb, s, offset, type); + if (ret < 0) { + return ret; + } + + if (luringcb.ret == -EINPROGRESS) { + qemu_coroutine_yield(); + } + return luringcb.ret; +} + +void luring_detach_aio_context(LuringState *s, AioContext *old_context) +{ + aio_set_fd_handler(old_context, s->ring.ring_fd, false, NULL, NULL, NULL, + s); + qemu_bh_delete(s->completion_bh); + s->aio_context = NULL; +} + +void luring_attach_aio_context(LuringState *s, AioContext *new_context) +{ + s->aio_context = new_context; + s->completion_bh = aio_bh_new(new_context, qemu_luring_completion_bh, s); + aio_set_fd_handler(s->aio_context, s->ring.ring_fd, false, + qemu_luring_completion_cb, NULL, NULL, s); +} + +LuringState *luring_init(Error **errp) +{ + int rc; + LuringState *s; + s = g_new0(LuringState, 1); + struct io_uring *ring = &s->ring; + rc = io_uring_queue_init(MAX_EVENTS, ring, 0); + if (rc < 0) { + error_setg_errno(errp, errno, "failed to init linux io_uring ring"); + g_free(s); + return NULL; + } + + ioq_init(&s->io_q); + return s; + +} + +void luring_cleanup(LuringState *s) +{ + io_uring_queue_exit(&s->ring); + g_free(s); +} diff --git a/include/block/aio.h b/include/block/aio.h index 6b0d52f732..7ba9bd7874 100644 --- a/include/block/aio.h +++ b/include/block/aio.h @@ -49,6 +49,7 @@ typedef void IOHandler(void *opaque); struct Coroutine; struct ThreadPool; struct LinuxAioState; +struct LuringState; struct AioContext { GSource source; @@ -117,11 +118,19 @@ struct AioContext { struct ThreadPool *thread_pool; #ifdef CONFIG_LINUX_AIO - /* State for native Linux AIO. Uses aio_context_acquire/release for + /* + * State for native Linux AIO. Uses aio_context_acquire/release for * locking. */ struct LinuxAioState *linux_aio; #endif +#ifdef CONFIG_LINUX_IO_URING + /* + * State for Linux io_uring. Uses aio_context_acquire/release for + * locking. + */ + struct LuringState *linux_io_uring; +#endif /* TimerLists for calling timers - one per clock type. Has its own * locking. @@ -386,6 +395,11 @@ struct LinuxAioState *aio_setup_linux_aio(AioContext *ctx, Error **errp); /* Return the LinuxAioState bound to this AioContext */ struct LinuxAioState *aio_get_linux_aio(AioContext *ctx); +/* Setup the LuringState bound to this AioContext */ +struct LuringState *aio_setup_linux_io_uring(AioContext *ctx, Error **errp); + +/* Return the LuringState bound to this AioContext */ +struct LuringState *aio_get_linux_io_uring(AioContext *ctx); /** * aio_timer_new_with_attrs: * @ctx: the aio context diff --git a/include/block/raw-aio.h b/include/block/raw-aio.h index 0cb7cc74a2..71d7d1395f 100644 --- a/include/block/raw-aio.h +++ b/include/block/raw-aio.h @@ -55,6 +55,18 @@ void laio_attach_aio_context(LinuxAioState *s, AioContext *new_context); void laio_io_plug(BlockDriverState *bs, LinuxAioState *s); void laio_io_unplug(BlockDriverState *bs, LinuxAioState *s); #endif +/* io_uring.c - Linux io_uring implementation */ +#ifdef CONFIG_LINUX_IO_URING +typedef struct LuringState LuringState; +LuringState *luring_init(Error **errp); +void luring_cleanup(LuringState *s); +int coroutine_fn luring_co_submit(BlockDriverState *bs, LuringState *s, int fd, + uint64_t offset, QEMUIOVector *qiov, int type); +void luring_detach_aio_context(LuringState *s, AioContext *old_context); +void luring_attach_aio_context(LuringState *s, AioContext *new_context); +void luring_io_plug(BlockDriverState *bs, LuringState *s); +void luring_io_unplug(BlockDriverState *bs, LuringState *s); +#endif #ifdef _WIN32 typedef struct QEMUWin32AIOState QEMUWin32AIOState; From patchwork Tue Jul 30 17:34:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066387 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 236881395 for ; Tue, 30 Jul 2019 17:42:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 10771286BE for ; Tue, 30 Jul 2019 17:42:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0498B28716; Tue, 30 Jul 2019 17:42:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 9DEC0285E5 for ; Tue, 30 Jul 2019 17:42:21 +0000 (UTC) Received: from localhost ([::1]:35242 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW8j-0001Su-6j for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:42:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35619) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW2V-0004za-1Y for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:35:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW2T-0000Cg-7d for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:35:54 -0400 Received: from mail-pg1-x541.google.com ([2607:f8b0:4864:20::541]:38981) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW2T-0000CE-2N; Tue, 30 Jul 2019 13:35:53 -0400 Received: by mail-pg1-x541.google.com with SMTP id u17so30423368pgi.6; Tue, 30 Jul 2019 10:35:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=A+f1nTAYThN43NLD0uFt8nEj4oW9MitsnNvRn4dZPNs=; b=iEvjzGuYgahHWT1Z3PIRJl/R9ajdp30ubHk9xsq76TkimbsYzRGfnX6YfC5MvbrayB iKP8ffwy1HSAytSpToGhcbmoHxnerHFpZkuHZE0ER0E26pdeV14fcowI1flaa3vjwnWP KPL6Ty3df1TGm6sIA0YSZ474zx9bS34fRoNLOe9LXiCfROKtgIq5l3wpiTui4/rwF6dk 0jl5ukFY7Z4IcmX9FbzqyQFQPICljUUe42IQ8m2KzpGWq+7yaIN4jRl1ThrtdQOX2LU7 ODHUBukN+saMmuBPFKf6zDGu+b/rrqE7F/O+qC0dN99mk+SP/NHOfCGx6ASYSY/5mGFh v72Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=A+f1nTAYThN43NLD0uFt8nEj4oW9MitsnNvRn4dZPNs=; b=W7RK0fyupHNH9IfK1yIAUvD24NhpFSOl8NCOf8b44S91xz1vWwOOKMjbn8w+cZtPRw 5/B7eYJf3aDxWmeQq/nrMtR89wWZBoAscNeucJkGB1ezFeGe7uBfJe23ZwAiV9tTd5GG H7A9BQAGzU7l82I93vicvnDNel/VzlAAxcAMf5D0sXxTTmbQyVDPL0jkc1zQ9ohrZUQl 74xsnPwH6qfBE1jt/jELKbfP3WVed3DPTg/0kmnYEnsdx5sp+AMwuLibhgvEBNikoelE 0T/9h3unXHE7qha2kGQ6Dlxy5AMI3GJHAgSQYEJXphYMZa9VOY6BRtBCkOdqKUwm+GIt lOJw== X-Gm-Message-State: APjAAAXaA+Fh/tDpjFras5JovdN6p96saawkJUju/RIeaM9dg9xuu7KI XLZL9X5r0bZ/6GjqkgKSXxZZGSCeujpT7w== X-Google-Smtp-Source: APXvYqwzZFj3rRlwa8lFyoT2yc4Ndyp7IdpMr3rwZTLSSuPV8lO0dsY01HSoWEh7qqiCJ4xCLYTyNQ== X-Received: by 2002:a17:90a:380d:: with SMTP id w13mr115837061pjb.138.1564508150964; Tue, 30 Jul 2019 10:35:50 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.35.45 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:35:50 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:30 +0530 Message-Id: <20190730173441.26486-6-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::541 Subject: [Qemu-devel] [PATCH v8 05/16] stubs: add stubs for io_uring interface 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi --- MAINTAINERS | 1 + stubs/Makefile.objs | 1 + stubs/io_uring.c | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 stubs/io_uring.c diff --git a/MAINTAINERS b/MAINTAINERS index be688fcd5e..bca5de7d6c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2536,6 +2536,7 @@ R: Stefan Hajnoczi L: qemu-block@nongnu.org S: Maintained F: block/io_uring.c +F: stubs/io_uring.c qcow2 M: Kevin Wolf diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs index 9c7393b08c..5cf160a9c8 100644 --- a/stubs/Makefile.objs +++ b/stubs/Makefile.objs @@ -13,6 +13,7 @@ stub-obj-y += iothread.o stub-obj-y += iothread-lock.o stub-obj-y += is-daemonized.o stub-obj-$(CONFIG_LINUX_AIO) += linux-aio.o +stub-obj-$(CONFIG_LINUX_IO_URING) += io_uring.o stub-obj-y += machine-init-done.o stub-obj-y += migr-blocker.o stub-obj-y += change-state-handler.o diff --git a/stubs/io_uring.c b/stubs/io_uring.c new file mode 100644 index 0000000000..622d1e4648 --- /dev/null +++ b/stubs/io_uring.c @@ -0,0 +1,32 @@ +/* + * Linux io_uring support. + * + * Copyright (C) 2009 IBM, Corp. + * Copyright (C) 2009 Red Hat, Inc. + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ +#include "qemu/osdep.h" +#include "block/aio.h" +#include "block/raw-aio.h" + +void luring_detach_aio_context(LuringState *s, AioContext *old_context) +{ + abort(); +} + +void luring_attach_aio_context(LuringState *s, AioContext *new_context) +{ + abort(); +} + +LuringState *luring_init(Error **errp) +{ + abort(); +} + +void luring_cleanup(LuringState *s) +{ + abort(); +} From patchwork Tue Jul 30 17:34:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066389 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E61AE1395 for ; Tue, 30 Jul 2019 17:42:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D39812885F for ; Tue, 30 Jul 2019 17:42:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C7CEF28862; Tue, 30 Jul 2019 17:42:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 701C7285E5 for ; Tue, 30 Jul 2019 17:42:42 +0000 (UTC) Received: from localhost ([::1]:35246 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW93-0002Fm-RI for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:42:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35663) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW2Y-00056E-UE for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW2X-0000EZ-SI for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:35:58 -0400 Received: from mail-pf1-x441.google.com ([2607:f8b0:4864:20::441]:44006) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW2X-0000ED-Mh; Tue, 30 Jul 2019 13:35:57 -0400 Received: by mail-pf1-x441.google.com with SMTP id i189so30209422pfg.10; Tue, 30 Jul 2019 10:35:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=eFjnzxuAegStXPBjOt40eXvFDqL2hXLnGuTLIfY9ow8=; b=IEHBNA4wCzR/WLVY69tWk23bixlghsSjEiZvxxlGvrqVQn9n8DBA5+UmPBmNjAJ+lZ XKZq9mXA59WfOn2kOACQs09eAJp93AgUtvQ1lLhAUiHKu0XAf6pt65jcQ1VevzJUpghK TyY4kuWGGzBk73gFP2katugWZtNG9+C/k3U5d0kNFLhTRUw/LSY4yXiPzFRyxL6Y6sTK fpZtC+Jw/t3Le2pxIT08KasZ8NkAC8SgoFIlYraUJbb99qDCHF4l3mzk9Mzw5XzX8MBO yrUvIS8MVjQo65A9CEG1saB9svIGblDx5S5M1lIvMMSEnVAgjEsAy1C/ZJTmJ+LRrFyu srsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=eFjnzxuAegStXPBjOt40eXvFDqL2hXLnGuTLIfY9ow8=; b=nIOeWxdhhGZ/+k9BGPz10X+c3PyU4ViEaapTjxZCuiONgwBoq5IBgEoke6WlweJ8Na zaQai1wnMf/1dSYpob2yWqy5p5EmB2VTRT33egfwHPHetsLitLbHsiuSfDnA+ZZw14Qm /fNtqtitEzWdzFqSUYRMIjDJ2gT9o93+lHMN8X+dOBi8L8MkPDTjuohoJGGX56Q6gUZn sedJvA3hSz5Nuakwb/0oOtRGmz1alqzyHux4jN8P4QZpcwscxckXIx9gMVYwlod0gYma CiaDAZRuqtkWYd2yg+ChKr4sAiimlpThxvmXNer1gFdGhKq/J1TH7OMN2jxC91ebXTdx 0yYw== X-Gm-Message-State: APjAAAU7sdDk7wTqsaxfQq4eatalLcIfPFpu663bYYdb/qJ1Q5oLrFEq oDaNsQ7yRWGfBGR66e4VQSRbyC3eyB5Eug== X-Google-Smtp-Source: APXvYqznxYt4YP/D+oo4aKEEFg6OqbhMxzdw9MuaJIM8ksCrZqUV2e1Wa83Rso4ALoiYPzPYM5UD2A== X-Received: by 2002:a17:90a:d998:: with SMTP id d24mr90531674pjv.89.1564508156399; Tue, 30 Jul 2019 10:35:56 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.35.51 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:35:55 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:31 +0530 Message-Id: <20190730173441.26486-7-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::441 Subject: [Qemu-devel] [PATCH v8 06/16] util/async: add aio interfaces for io_uring 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi --- util/async.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/util/async.c b/util/async.c index 8d2105729c..2e0a5e20ac 100644 --- a/util/async.c +++ b/util/async.c @@ -276,6 +276,14 @@ aio_ctx_finalize(GSource *source) } #endif +#ifdef CONFIG_LINUX_IO_URING + if (ctx->linux_io_uring) { + luring_detach_aio_context(ctx->linux_io_uring, ctx); + luring_cleanup(ctx->linux_io_uring); + ctx->linux_io_uring = NULL; + } +#endif + assert(QSLIST_EMPTY(&ctx->scheduled_coroutines)); qemu_bh_delete(ctx->co_schedule_bh); @@ -340,6 +348,29 @@ LinuxAioState *aio_get_linux_aio(AioContext *ctx) } #endif +#ifdef CONFIG_LINUX_IO_URING +LuringState *aio_setup_linux_io_uring(AioContext *ctx, Error **errp) +{ + if (ctx->linux_io_uring) { + return ctx->linux_io_uring; + } + + ctx->linux_io_uring = luring_init(errp); + if (!ctx->linux_io_uring) { + return NULL; + } + + luring_attach_aio_context(ctx->linux_io_uring, ctx); + return ctx->linux_io_uring; +} + +LuringState *aio_get_linux_io_uring(AioContext *ctx) +{ + assert(ctx->linux_io_uring); + return ctx->linux_io_uring; +} +#endif + void aio_notify(AioContext *ctx) { /* Write e.g. bh->scheduled before reading ctx->notify_me. Pairs @@ -431,6 +462,11 @@ AioContext *aio_context_new(Error **errp) #ifdef CONFIG_LINUX_AIO ctx->linux_aio = NULL; #endif + +#ifdef CONFIG_LINUX_IO_URING + ctx->linux_io_uring = NULL; +#endif + ctx->thread_pool = NULL; qemu_rec_mutex_init(&ctx->lock); timerlistgroup_init(&ctx->tlg, aio_timerlist_notify, ctx); From patchwork Tue Jul 30 17:34:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066367 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C96DF1823 for ; Tue, 30 Jul 2019 17:38:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B2019286BC for ; Tue, 30 Jul 2019 17:38:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A5F3028710; Tue, 30 Jul 2019 17:38:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4B1C4286BC for ; Tue, 30 Jul 2019 17:38:10 +0000 (UTC) Received: from localhost ([::1]:35142 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW4f-0007zD-LU for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:38:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35686) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW2l-00056p-Pi for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW2i-0000I7-F8 for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:11 -0400 Received: from mail-pf1-x444.google.com ([2607:f8b0:4864:20::444]:36270) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW2i-0000GV-9I; Tue, 30 Jul 2019 13:36:08 -0400 Received: by mail-pf1-x444.google.com with SMTP id r7so30210150pfl.3; Tue, 30 Jul 2019 10:36:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LR9iVRChMwWQAhc5h02KM+c31gdyfKaD2veUCMmmXek=; b=ljNqGT0v88BWGitSuQxQKxdBATRBE7iYjEir8Vzs1vhSMHNf2w/PO7Raw/WOOJwSLS g9jDSKkHIwHx2dBRvRPLnZN4I4hIHzMoUV6U6RsZHvwM3D4DAEB+VfEY9qHpxqEKb4sV vK9CnjGxN71EdBlec9/WEQJSmFeS9fz29L+UMq6o/NeFEFaqenwxO63b0LjdLEI0uMU0 /Emh1a6wMmmRDNlZwg9VfpFOwwX2slLdUTwaSOQpjzakGCzW8ql7zwzBx1F8iOffj0w9 bFsGfTRX7npRHqbDQc1H18xMy8aCS3Ecil+2sKuiq5HdzHBqxA/cvCRvFfErFkMceLls 53rA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LR9iVRChMwWQAhc5h02KM+c31gdyfKaD2veUCMmmXek=; b=OlVYX9mUsn1F+4o/Kil3iALxtOpqH6tkfxOx3Cde640DARtjRJ4SLr4LYGT6YhcJhS ys6VFSvqPGGLol1MVY/Shpfg82XXN4t6YU4a+HuxAo/AB48G40FMyZh1TWiUMdlNClit yn/ZNo+uXN/ZnIL3lIUFIrAjx85ZmersVJFI0oRuy3VmDPrGhNJenEJuy42WLzqFdVDI gBvqa3k7su/t2l3HqEcj34/I7TOujDvfHyCpG575oFGXbGfz6c+RW7Hf+KaHqftC4Yjp FOgSl5LC9MlcCpW+ZmsZIDKVyv0SEnoky1w0wjwars4/EJ40KynPgIaoSTgF5bJ3AmBG B0Kg== X-Gm-Message-State: APjAAAXeoptLn+CaLFdRFDBTNd0hiEjPWj70pZVMo2+Qut+oa3RqksVw kmtcgnpw9BZRrGvZCZHR19a9ZxmpbIzHkw== X-Google-Smtp-Source: APXvYqzw5R8eFhUbe7Q6LffvmT2UY0cd+SGO8NIhkQ1AG5GNq3pLAowycUwvGxiLCsBPeamWRZWZdQ== X-Received: by 2002:a62:874d:: with SMTP id i74mr42127209pfe.94.1564508161933; Tue, 30 Jul 2019 10:36:01 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.35.56 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:36:01 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:32 +0530 Message-Id: <20190730173441.26486-8-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::444 Subject: [Qemu-devel] [PATCH v8 07/16] blockdev: adds bdrv_parse_aio to use io_uring 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi --- block.c | 22 ++++++++++++++++++++++ blockdev.c | 12 ++++-------- include/block/block.h | 1 + 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/block.c b/block.c index cbd8da5f3b..401831e28d 100644 --- a/block.c +++ b/block.c @@ -844,6 +844,28 @@ static BlockdevDetectZeroesOptions bdrv_parse_detect_zeroes(QemuOpts *opts, return detect_zeroes; } +/** + * Set open flags for aio engine + * + * Return 0 on success, -1 if the engine specified is invalid + */ +int bdrv_parse_aio(const char *mode, int *flags) +{ + if (!strcmp(mode, "threads")) { + /* do nothing, default */ + } else if (!strcmp(mode, "native")) { + *flags |= BDRV_O_NATIVE_AIO; +#ifdef CONFIG_LINUX_IO_URING + } else if (!strcmp(mode, "io_uring")) { + *flags |= BDRV_O_IO_URING; +#endif + } else { + return -1; + } + + return 0; +} + /** * Set open flags for a given discard mode * diff --git a/blockdev.c b/blockdev.c index 4d141e9a1f..a41623ae9a 100644 --- a/blockdev.c +++ b/blockdev.c @@ -383,13 +383,9 @@ static void extract_common_blockdev_options(QemuOpts *opts, int *bdrv_flags, } if ((aio = qemu_opt_get(opts, "aio")) != NULL) { - if (!strcmp(aio, "native")) { - *bdrv_flags |= BDRV_O_NATIVE_AIO; - } else if (!strcmp(aio, "threads")) { - /* this is the default */ - } else { - error_setg(errp, "invalid aio option"); - return; + if (bdrv_parse_aio(aio, bdrv_flags) < 0) { + error_setg(errp, "invalid aio option"); + return; } } } @@ -4574,7 +4570,7 @@ QemuOptsList qemu_common_drive_opts = { },{ .name = "aio", .type = QEMU_OPT_STRING, - .help = "host AIO implementation (threads, native)", + .help = "host AIO implementation (threads, native, io_uring)", },{ .name = BDRV_OPT_CACHE_WB, .type = QEMU_OPT_BOOL, diff --git a/include/block/block.h b/include/block/block.h index e29baa172c..ec6b9ea4c8 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -297,6 +297,7 @@ void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top, void bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, Error **errp); +int bdrv_parse_aio(const char *mode, int *flags); int bdrv_parse_cache_mode(const char *mode, int *flags, bool *writethrough); int bdrv_parse_discard_flags(const char *mode, int *flags); BdrvChild *bdrv_open_child(const char *filename, From patchwork Tue Jul 30 17:34:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066397 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5BF9F1395 for ; Tue, 30 Jul 2019 17:44:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 48FE1287D4 for ; Tue, 30 Jul 2019 17:44:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3D0B627DA4; Tue, 30 Jul 2019 17:44:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5D86F285C8 for ; Tue, 30 Jul 2019 17:44:45 +0000 (UTC) Received: from localhost ([::1]:35286 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsWB2-00066v-Pi for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:44:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35714) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW2n-0005AK-HV for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW2l-0000Iz-Ph for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:13 -0400 Received: from mail-pg1-x544.google.com ([2607:f8b0:4864:20::544]:33701) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW2j-0000IC-3s; Tue, 30 Jul 2019 13:36:11 -0400 Received: by mail-pg1-x544.google.com with SMTP id f20so21195355pgj.0; Tue, 30 Jul 2019 10:36:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=VIbCCiqkXwkRR3OlBzyvEa8q9jsIq4iRUCXYKqboH9I=; b=XJdxCO1WiNG7haTrUsFKhB6QVaJv2Eo4LghlqaQPjJUiFl+pVWiqvPaSwsBrMZGBbo FqgHbZbROmy8hGVK9tx2/xv8++wOfi2pnoUWKKNsVz10wVXvccsVYwjWG94hVTjsI6is Gfp7vOB63mOkUAWH9mWM50LDvFgAaz4Pu5iSEi9rvoJgOtldwqFBWQfoWbSj+7+3jBie grCylFl1cMUCeovhqd6h6lAyPC/bXOmSbAA9Blzqf6c+9t5B8bJ1tWln2QgV6IsuK9Bm 3HWXS5Ki6mAx/dX0SoR1e0lfFaWl4PcakydgDFfA176cmuffLWXwfkXKMGBW2TmKF99S JKfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VIbCCiqkXwkRR3OlBzyvEa8q9jsIq4iRUCXYKqboH9I=; b=q5ZwMoY+UnD9Re/169/4xfgGUsr8o/mgd07X1ojxfsKrMVZaYzmGBQhWAcxuOsKDn0 yqlZ36/jhH1aC6zW7z9Ybx9XI0KyC58FvNnxwhamPaxQE3Syw1l1trj7VqcMd5mClELr 3oO2uRc21+eD3RrEWZwg7JcVMWi9Ctz0ySKQ7lqozccIoWBrnsdazOtk9eh7sbMgl7Tz bATRXZ6BIo8EMvEZF+HnGCSij0Gzz3POpyVTM+TQicyyk7zKgWSTyjNQGUoF1DTOQJ+E /AxOMsSYwuQqItK7M/UAzT8AtykrvFRgyx2Y2g2eluN7wicFIVg2KPbaneEAyEuZ+g56 vQEQ== X-Gm-Message-State: APjAAAXdxsqKAktm5jaXkvlBrHVXlppcixSHFFax2o3G/7vx/X+9THI4 3CbB13TWoWE89BqLGo3WK0mQUYnWGsrYjg== X-Google-Smtp-Source: APXvYqy+eiQlA+yWiCZKa7wL+ahjjhY+peGsf/z9SL3jbtpI723aTLAhtZSXaRvO1/Il6JzuJ5XIPw== X-Received: by 2002:a63:d84e:: with SMTP id k14mr110248982pgj.234.1564508167632; Tue, 30 Jul 2019 10:36:07 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.36.02 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:36:07 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:33 +0530 Message-Id: <20190730173441.26486-9-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::544 Subject: [Qemu-devel] [PATCH v8 08/16] block/file-posix.c: extend to use io_uring 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta , Maxim Levitsky Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi Reviewed-by: Maxim Levitsky --- block/file-posix.c | 99 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 79 insertions(+), 20 deletions(-) diff --git a/block/file-posix.c b/block/file-posix.c index 4479cc7ab4..4aa42f826f 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -156,6 +156,7 @@ typedef struct BDRVRawState { bool has_write_zeroes:1; bool discard_zeroes:1; bool use_linux_aio:1; + bool use_linux_io_uring:1; bool page_cache_inconsistent:1; bool has_fallocate; bool needs_alignment; @@ -425,7 +426,7 @@ static QemuOptsList raw_runtime_opts = { { .name = "aio", .type = QEMU_OPT_STRING, - .help = "host AIO implementation (threads, native)", + .help = "host AIO implementation (threads, native, io_uring)", }, { .name = "locking", @@ -484,9 +485,15 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, goto fail; } - aio_default = (bdrv_flags & BDRV_O_NATIVE_AIO) - ? BLOCKDEV_AIO_OPTIONS_NATIVE - : BLOCKDEV_AIO_OPTIONS_THREADS; + if (bdrv_flags & BDRV_O_NATIVE_AIO) { + aio_default = BLOCKDEV_AIO_OPTIONS_NATIVE; +#ifdef CONFIG_LINUX_IO_URING + } else if (bdrv_flags & BDRV_O_IO_URING) { + aio_default = BLOCKDEV_AIO_OPTIONS_IO_URING; +#endif + } else { + aio_default = BLOCKDEV_AIO_OPTIONS_THREADS; + } aio = qapi_enum_parse(&BlockdevAioOptions_lookup, qemu_opt_get(opts, "aio"), aio_default, &local_err); @@ -495,7 +502,11 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, ret = -EINVAL; goto fail; } + s->use_linux_aio = (aio == BLOCKDEV_AIO_OPTIONS_NATIVE); +#ifdef CONFIG_LINUX_IO_URING + s->use_linux_io_uring = (aio == BLOCKDEV_AIO_OPTIONS_IO_URING); +#endif locking = qapi_enum_parse(&OnOffAuto_lookup, qemu_opt_get(opts, "locking"), @@ -559,7 +570,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, s->shared_perm = BLK_PERM_ALL; #ifdef CONFIG_LINUX_AIO - /* Currently Linux does AIO only for files opened with O_DIRECT */ + /* Currently Linux does AIO only for files opened with O_DIRECT */ if (s->use_linux_aio) { if (!(s->open_flags & O_DIRECT)) { error_setg(errp, "aio=native was specified, but it requires " @@ -581,6 +592,22 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, } #endif /* !defined(CONFIG_LINUX_AIO) */ +#ifdef CONFIG_LINUX_IO_URING + if (s->use_linux_io_uring) { + if (!aio_setup_linux_io_uring(bdrv_get_aio_context(bs), errp)) { + error_prepend(errp, "Unable to use io_uring: "); + goto fail; + } + } +#else + if (s->use_linux_io_uring) { + error_setg(errp, "aio=io_uring was specified, but is not supported " + "in this build."); + ret = -EINVAL; + goto fail; + } +#endif /* !defined(CONFIG_LINUX_IO_URING) */ + s->has_discard = true; s->has_write_zeroes = true; if ((bs->open_flags & BDRV_O_NOCACHE) != 0) { @@ -1874,21 +1901,25 @@ static int coroutine_fn raw_co_prw(BlockDriverState *bs, uint64_t offset, return -EIO; /* - * Check if the underlying device requires requests to be aligned, - * and if the request we are trying to submit is aligned or not. - * If this is the case tell the low-level driver that it needs - * to copy the buffer. + * When using O_DIRECT, the request must be aligned to be able to use + * either libaio or io_uring interface. If not fail back to regular thread + * pool read/write code which emulates this for us if we + * set QEMU_AIO_MISALIGNED. */ - if (s->needs_alignment) { - if (!bdrv_qiov_is_aligned(bs, qiov)) { - type |= QEMU_AIO_MISALIGNED; + if (s->needs_alignment && !bdrv_qiov_is_aligned(bs, qiov)) { + type |= QEMU_AIO_MISALIGNED; +#ifdef CONFIG_LINUX_IO_URING + } else if (s->use_linux_io_uring) { + LuringState *aio = aio_get_linux_io_uring(bdrv_get_aio_context(bs)); + assert(qiov->size == bytes); + return luring_co_submit(bs, aio, s->fd, offset, qiov, type); +#endif #ifdef CONFIG_LINUX_AIO - } else if (s->use_linux_aio) { - LinuxAioState *aio = aio_get_linux_aio(bdrv_get_aio_context(bs)); - assert(qiov->size == bytes); - return laio_co_submit(bs, aio, s->fd, offset, qiov, type); + } else if (s->use_linux_aio) { + LinuxAioState *aio = aio_get_linux_aio(bdrv_get_aio_context(bs)); + assert(qiov->size == bytes); + return laio_co_submit(bs, aio, s->fd, offset, qiov, type); #endif - } } acb = (RawPosixAIOData) { @@ -1924,24 +1955,36 @@ static int coroutine_fn raw_co_pwritev(BlockDriverState *bs, uint64_t offset, static void raw_aio_plug(BlockDriverState *bs) { + BDRVRawState __attribute__((unused)) *s = bs->opaque; #ifdef CONFIG_LINUX_AIO - BDRVRawState *s = bs->opaque; if (s->use_linux_aio) { LinuxAioState *aio = aio_get_linux_aio(bdrv_get_aio_context(bs)); laio_io_plug(bs, aio); } #endif +#ifdef CONFIG_LINUX_IO_URING + if (s->use_linux_io_uring) { + LuringState *aio = aio_get_linux_io_uring(bdrv_get_aio_context(bs)); + luring_io_plug(bs, aio); + } +#endif } static void raw_aio_unplug(BlockDriverState *bs) { + BDRVRawState __attribute__((unused)) *s = bs->opaque; #ifdef CONFIG_LINUX_AIO - BDRVRawState *s = bs->opaque; if (s->use_linux_aio) { LinuxAioState *aio = aio_get_linux_aio(bdrv_get_aio_context(bs)); laio_io_unplug(bs, aio); } #endif +#ifdef CONFIG_LINUX_IO_URING + if (s->use_linux_io_uring) { + LuringState *aio = aio_get_linux_io_uring(bdrv_get_aio_context(bs)); + luring_io_unplug(bs, aio); + } +#endif } static int raw_co_flush_to_disk(BlockDriverState *bs) @@ -1961,14 +2004,20 @@ static int raw_co_flush_to_disk(BlockDriverState *bs) .aio_type = QEMU_AIO_FLUSH, }; +#ifdef CONFIG_LINUX_IO_URING + if (s->use_linux_io_uring) { + LuringState *aio = aio_get_linux_io_uring(bdrv_get_aio_context(bs)); + return luring_co_submit(bs, aio, s->fd, 0, NULL, QEMU_AIO_FLUSH); + } +#endif return raw_thread_pool_submit(bs, handle_aiocb_flush, &acb); } static void raw_aio_attach_aio_context(BlockDriverState *bs, AioContext *new_context) { + BDRVRawState __attribute__((unused)) *s = bs->opaque; #ifdef CONFIG_LINUX_AIO - BDRVRawState *s = bs->opaque; if (s->use_linux_aio) { Error *local_err; if (!aio_setup_linux_aio(new_context, &local_err)) { @@ -1978,6 +2027,16 @@ static void raw_aio_attach_aio_context(BlockDriverState *bs, } } #endif +#ifdef CONFIG_LINUX_IO_URING + if (s->use_linux_io_uring) { + Error *local_err; + if (!aio_setup_linux_io_uring(new_context, &local_err)) { + error_reportf_err(local_err, "Unable to use linux io_uring, " + "falling back to thread pool: "); + s->use_linux_io_uring = false; + } + } +#endif } static void raw_close(BlockDriverState *bs) From patchwork Tue Jul 30 17:34:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066375 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2B4A61395 for ; Tue, 30 Jul 2019 17:39:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 133E1286BC for ; Tue, 30 Jul 2019 17:39:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 04DC928714; Tue, 30 Jul 2019 17:39:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7C5A0286BC for ; Tue, 30 Jul 2019 17:39:51 +0000 (UTC) Received: from localhost ([::1]:35188 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW6I-00045q-Tq for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:39:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35741) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW2q-0005J0-2u for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW2o-0000Kb-Pz for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:15 -0400 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]:37774) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW2o-0000KD-Jv; Tue, 30 Jul 2019 13:36:14 -0400 Received: by mail-pl1-x641.google.com with SMTP id b3so29199116plr.4; Tue, 30 Jul 2019 10:36:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YV45qQhKBYcgy7M+83zm2On/zv8fGJao/jdhsTQQqnI=; b=cLp8M79Alo4xZU5GP50FGQSmBMItuktrE+x3+4FH25eX0A3WScYXYL0veArSgC72yb PnHz51QYBzwHUvkfxdj36WfauUw2hfMrMR5Id5jvwpK9r1flR7epZ5EaxzAGKHvkMgKx nsOxtPoXt2FA5UAx8tSxZozEIrC2aBnXGGPFCwqkUN+nWqRm+7x6I/fpIJgIIaNM+T5V 5sZ93trKzTRNQS5l/S+JosFiwHc2qhHv+siCg2b2uY6SHpPd4eu9wdpjDta0sjIruTMY JgMXDwJapBoTw2TvhJZIchOH0gPL8Cz6sydCJ+WH02Ilcb5JEq0NDzE3YLt167feTQYl Odag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YV45qQhKBYcgy7M+83zm2On/zv8fGJao/jdhsTQQqnI=; b=UmXFTuAGCPUr8q+lahcv/PL5+tkoGrn3gIX36kmbnR7vgfQGrKZRWVzlF8y4LF8/uH SroXeDAtYi1ZOLQ8kZoi9rSxNADBqX+wi/iQFgMco2lufbu0zJScpikoIdkaZOGlDKo3 tI1rPAKXgdJKJ0rScfIMs3sCdgVtXPqx8b8SPNc5gyrqvvbkGvPdJUYCG3/Z7wHDMovE tdSKlBcjtpS4t4YcM3/Xopb1p9fkDeCSnrB4iFyjvzg4BlXFk3gvztojdrcv32XM9igf 2ierJuRuhVIPnuZCbL93dC0o48qCHWWbLoG3F2FgOadv0Y8jHpvMtRWcl7a/Cl1YUpeU a5fA== X-Gm-Message-State: APjAAAXlgayMjCSzzpuQIR6axEODC5yaZbFUZlaqfNo9sL8znRJ94k87 cKwO3FXQOQK/3jKU3Y/ANvPrM73k4GOUcA== X-Google-Smtp-Source: APXvYqwbkL7x7QUAEvJmbtCqwxVTYLLHEpFi+ReE0r04Sbg9oblCodLor33RA05ps1w94Jc/9aZcmA== X-Received: by 2002:a17:902:28e9:: with SMTP id f96mr111611810plb.114.1564508173234; Tue, 30 Jul 2019 10:36:13 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.36.08 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:36:12 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:34 +0530 Message-Id: <20190730173441.26486-10-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::641 Subject: [Qemu-devel] [PATCH v8 09/16] block: add trace events for io_uring 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi --- block/io_uring.c | 22 +++++++++++++++++++--- block/trace-events | 12 ++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/block/io_uring.c b/block/io_uring.c index b1f14d2461..ba739ebe06 100644 --- a/block/io_uring.c +++ b/block/io_uring.c @@ -17,6 +17,7 @@ #include "block/raw-aio.h" #include "qemu/coroutine.h" #include "qapi/error.h" +#include "trace.h" #define MAX_EVENTS 128 @@ -93,6 +94,8 @@ static void luring_resubmit_short_read(LuringState *s, LuringAIOCB *luringcb, QEMUIOVector *resubmit_qiov; size_t remaining; + trace_luring_resubmit_short_read(s, luringcb, nread); + /* Update read position */ luringcb->total_read = nread; remaining = luringcb->qiov->size - luringcb->total_read; @@ -164,6 +167,7 @@ static void luring_process_completions(LuringState *s) /* Change counters one-by-one because we can be nested. */ s->io_q.in_flight--; + trace_luring_process_completion(s, luringcb, ret); /* total_read is non-zero only for resubmitted read requests */ total_bytes = ret + luringcb->total_read; @@ -264,6 +268,7 @@ static int ioq_submit(LuringState *s) QSIMPLEQ_REMOVE_HEAD(&s->io_q.submit_queue, next); } ret = io_uring_submit(&s->ring); + trace_luring_io_uring_submit(s, ret); /* Prevent infinite loop if submission is refused */ if (ret <= 0) { if (ret == -EAGAIN) { @@ -288,12 +293,15 @@ static int ioq_submit(LuringState *s) void luring_io_plug(BlockDriverState *bs, LuringState *s) { + trace_luring_io_plug(s); s->io_q.plugged++; } void luring_io_unplug(BlockDriverState *bs, LuringState *s) { assert(s->io_q.plugged); + trace_luring_io_unplug(s, s->io_q.blocked, s->io_q.plugged, + s->io_q.in_queue, s->io_q.in_flight); if (--s->io_q.plugged == 0 && !s->io_q.blocked && s->io_q.in_queue > 0) { ioq_submit(s); @@ -314,6 +322,7 @@ void luring_io_unplug(BlockDriverState *bs, LuringState *s) static int luring_do_submit(int fd, LuringAIOCB *luringcb, LuringState *s, uint64_t offset, int type) { + int ret; struct io_uring_sqe *sqes = &luringcb->sqeq; switch (type) { @@ -337,11 +346,14 @@ static int luring_do_submit(int fd, LuringAIOCB *luringcb, LuringState *s, QSIMPLEQ_INSERT_TAIL(&s->io_q.submit_queue, luringcb, next); s->io_q.in_queue++; - + trace_luring_do_submit(s, s->io_q.blocked, s->io_q.plugged, + s->io_q.in_queue, s->io_q.in_flight); if (!s->io_q.blocked && (!s->io_q.plugged || s->io_q.in_flight + s->io_q.in_queue >= MAX_EVENTS)) { - return ioq_submit(s); + ret = ioq_submit(s); + trace_luring_do_submit_done(s, ret); + return ret; } return 0; } @@ -356,8 +368,10 @@ int coroutine_fn luring_co_submit(BlockDriverState *bs, LuringState *s, int fd, .qiov = qiov, .is_read = (type == QEMU_AIO_READ), }; - + trace_luring_co_submit(bs, s, &luringcb, fd, offset, qiov ? qiov->size : 0, + type); ret = luring_do_submit(fd, &luringcb, s, offset, type); + if (ret < 0) { return ret; } @@ -389,6 +403,7 @@ LuringState *luring_init(Error **errp) int rc; LuringState *s; s = g_new0(LuringState, 1); + trace_luring_init_state(s, sizeof(*s)); struct io_uring *ring = &s->ring; rc = io_uring_queue_init(MAX_EVENTS, ring, 0); if (rc < 0) { @@ -406,4 +421,5 @@ void luring_cleanup(LuringState *s) { io_uring_queue_exit(&s->ring); g_free(s); + trace_luring_cleanup_state(s); } diff --git a/block/trace-events b/block/trace-events index d724df0117..66aaf8352b 100644 --- a/block/trace-events +++ b/block/trace-events @@ -60,6 +60,18 @@ qmp_block_stream(void *bs) "bs %p" file_paio_submit(void *acb, void *opaque, int64_t offset, int count, int type) "acb %p opaque %p offset %"PRId64" count %d type %d" file_copy_file_range(void *bs, int src, int64_t src_off, int dst, int64_t dst_off, int64_t bytes, int flags, int64_t ret) "bs %p src_fd %d offset %"PRIu64" dst_fd %d offset %"PRIu64" bytes %"PRIu64" flags %d ret %"PRId64 +#io_uring.c +luring_init_state(void *s, size_t size) "s %p size %zu" +luring_cleanup_state(void *s) "%p freed" +luring_io_plug(void *s) "LuringState %p plug" +luring_io_unplug(void *s, int blocked, int plugged, int queued, int inflight) "LuringState %p blocked %d plugged %d queued %d inflight %d" +luring_do_submit(void *s, int blocked, int plugged, int queued, int inflight) "LuringState %p blocked %d plugged %d queued %d inflight %d" +luring_do_submit_done(void *s, int ret) "LuringState %p submitted to kernel %d" +luring_co_submit(void *bs, void *s, void *luringcb, int fd, uint64_t offset, size_t nbytes, int type) "bs %p s %p luringcb %p fd %d offset %" PRId64 " nbytes %zd type %d" +luring_process_completion(void *s, void *aiocb, int ret) "LuringState %p luringcb %p ret %d" +luring_io_uring_submit(void *s, int ret) "LuringState %p ret %d" +luring_resubmit_short_read(void *s, void *luringcb, int nread) "LuringState %p luringcb %p nread %d" + # qcow2.c qcow2_writev_start_req(void *co, int64_t offset, int bytes) "co %p offset 0x%" PRIx64 " bytes %d" qcow2_writev_done_req(void *co, int ret) "co %p ret %d" From patchwork Tue Jul 30 17:34:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066373 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 36A9414DB for ; Tue, 30 Jul 2019 17:39:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1F990286BC for ; Tue, 30 Jul 2019 17:39:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 113E928714; Tue, 30 Jul 2019 17:39:35 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id B7ADD286BC for ; Tue, 30 Jul 2019 17:39:34 +0000 (UTC) Received: from localhost ([::1]:35186 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW62-0003Jv-4g for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:39:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35774) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW2v-0005Yi-CI for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW2u-0000N0-EO for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:21 -0400 Received: from mail-pf1-x442.google.com ([2607:f8b0:4864:20::442]:44704) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW2u-0000Md-9I; Tue, 30 Jul 2019 13:36:20 -0400 Received: by mail-pf1-x442.google.com with SMTP id t16so30174718pfe.11; Tue, 30 Jul 2019 10:36:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NXuVmvKVvaaCTBLbPMTd941jc9j4FEh2ipsZBGZH/Ck=; b=BK8Zti3K0yzBkniUOUGbVHiOjeuxOxWLKH2CU926tyFH7UUYCswvnyjVRjYIkmeGUh Qv3Yan/DpDIvggy9DtItC3tNf9Pei/ZTrkSr7rIUTQybc05sye1Ob8CjA6fkFWE5g/ng Ad73wwDje8MoKvBLw/n06Yd/M57GEY5GlKYw1ZUPbLGI1eWnzNRMCXbOWcdS2Q1huSCh ylGPOE8pqwbpRlA7B3vISm024tLTzeFizjO6RZ6Z9Kbk5a7UdIYfBS08xysozVvjKqm5 C/jGQB8hXjDMJtulx/ZDpwu7zd1ttlFfoOoLHYao53L3gZVwWk0IdyeRFCftYoWNnzuy yJUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NXuVmvKVvaaCTBLbPMTd941jc9j4FEh2ipsZBGZH/Ck=; b=JuI8l89YWQKuW2xR71vPCqmblnN1reuUePtSk5DDLKEKSWmenc5Kp6Y5YtlGcw7J78 lAzlOExvlEvpIn9I6t6EuZqUuGSASsaVFYf8JUzPjJAm7buVqQlmA5ZtG1B+2p52lyEe xtq68oGEhcOxfRDGIWdQ12v02iPbwJl9V4msl/nO4V7PuBLjo3xgPg0sbqr/R/UsZ80S z2YmR6dhYnk7lrbIG1Ab2uAynP72PuRErhn/R9hdV5XDzO9v6cW51ohck3IWHBPPuqaj Cer3R5gWWI0tL/R9xpd5UHXRFzUZ42mqb6FiKc3wXCuA5KWwE5FL08IyFOsG5IfY8215 ExfA== X-Gm-Message-State: APjAAAVgsy0JZKWUVg9xCeFQ1UPAWb2KgC3ssd8v8TpTJzmIJta+EB73 V0HDVLSkPMnzrGbNdWlHbc/zhZyVFUBlcg== X-Google-Smtp-Source: APXvYqxsesaQAvRgWcFtxDQ8PhkYZt+CXNDx10IKa3OSN0UaLV+DN67OUlDWFxnB1ehrrh4DmQJHCg== X-Received: by 2002:a17:90a:258b:: with SMTP id k11mr113181991pje.110.1564508178658; Tue, 30 Jul 2019 10:36:18 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.36.13 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:36:18 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:35 +0530 Message-Id: <20190730173441.26486-11-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::442 Subject: [Qemu-devel] [PATCH v8 10/16] block/io_uring: adds userspace completion polling 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi --- block/io_uring.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/block/io_uring.c b/block/io_uring.c index ba739ebe06..e2bef380e7 100644 --- a/block/io_uring.c +++ b/block/io_uring.c @@ -238,6 +238,21 @@ static void qemu_luring_completion_cb(void *opaque) luring_process_completions_and_submit(s); } +static bool qemu_luring_poll_cb(void *opaque) +{ + LuringState *s = opaque; + struct io_uring_cqe *cqes; + + if (io_uring_peek_cqe(&s->ring, &cqes) == 0) { + if (cqes) { + luring_process_completions_and_submit(s); + return true; + } + } + + return false; +} + static void ioq_init(LuringQueue *io_q) { QSIMPLEQ_INIT(&io_q->submit_queue); @@ -395,7 +410,7 @@ void luring_attach_aio_context(LuringState *s, AioContext *new_context) s->aio_context = new_context; s->completion_bh = aio_bh_new(new_context, qemu_luring_completion_bh, s); aio_set_fd_handler(s->aio_context, s->ring.ring_fd, false, - qemu_luring_completion_cb, NULL, NULL, s); + qemu_luring_completion_cb, NULL, qemu_luring_poll_cb, s); } LuringState *luring_init(Error **errp) From patchwork Tue Jul 30 17:34:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066385 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 61A321395 for ; Tue, 30 Jul 2019 17:41:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4C8F1286BE for ; Tue, 30 Jul 2019 17:41:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4107E28716; Tue, 30 Jul 2019 17:41:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D1076287E5 for ; Tue, 30 Jul 2019 17:41:30 +0000 (UTC) Received: from localhost ([::1]:35220 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW7u-0007rk-5d for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:41:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35836) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW30-0005rH-Pf for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW2z-0000PX-KB for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:26 -0400 Received: from mail-pf1-x441.google.com ([2607:f8b0:4864:20::441]:33817) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW2z-0000P8-Da; Tue, 30 Jul 2019 13:36:25 -0400 Received: by mail-pf1-x441.google.com with SMTP id b13so30208413pfo.1; Tue, 30 Jul 2019 10:36:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ipr3iNyxvPc1pw+FEpkLWVBnB0CK9mROZwdZiLP7cbc=; b=cAL0ShHQZsLPdL3PFRrNQ17vNpwMi7pb5aJ6MHfW9L0DGYWgLq3IkrFSqczAw0Jet8 gnHlgUBtDE9tUGDaywSxy+IiIosKd6qqOWG6kNIeBqsjcnU3XsnHqdMNa8y2sYdIe00I jSCPwPV1RJuvd3WpYUsVuf1J3RA0ub9FBWINxtdBRqeCPQhd/IJXlgZ4+FAH4AfZidJB m8gqn1UL26q+Xjh51ujr2I606s+jd+mGntWlqZBNZwL7/FCUMtD2D/Yz/WWNAF//SEQt wuCaMsofIhqijK15HnSX2bp5p9kM6x+8kKQpuvKqDFJBmdc4S/wj/yj3Cf6Uiv/9IuZh dZ5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ipr3iNyxvPc1pw+FEpkLWVBnB0CK9mROZwdZiLP7cbc=; b=GW/Q09BrpEtHaB7iZJvhYgLMswTadqR5lyC4LwLGuHTlYS1KTKLymWd0bwRThzJMli fV5JggEYZZ49CvSIwgBiNgu4/9p1CjJppwPrb4Vz4HtIfklBrFvurhDVV6jiNLFS9GKq 7rjioO34Y95IGDedH4a1On2JyZHPosnpedyTIHvmlkzCDmnOwOakCuuCpjjfSS4Wzgxq gq3xDHMTbemgiE/9uVswzof4J737QKKukhkN3rcwh/DsguJcm+8JfuYATTFtsybP5MSn LXiIe/Sh/ehQUXxtTCnIpIIkl2Ql9wIF+eMDpQIosozMY7Urj8ltxNxE3LIdwFSLcQCR Ol6Q== X-Gm-Message-State: APjAAAXduR0EKBh6p367afi5+kH/6kZinzjFbQPk1m6252tU+ZUja7xG SXXAFXh/NVloE7Lfn0M7Pni5lP+3P+oKxA== X-Google-Smtp-Source: APXvYqxh12DVKX8vkQ9g3bjhtCaX/MJjbIzLvGJhl2gB1qocXPsxfSCkcVLdieKmIcBoy4Hyy2xQRQ== X-Received: by 2002:a17:90a:9f4a:: with SMTP id q10mr117732468pjv.95.1564508184100; Tue, 30 Jul 2019 10:36:24 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.36.18 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:36:23 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:36 +0530 Message-Id: <20190730173441.26486-12-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::441 Subject: [Qemu-devel] [PATCH v8 11/16] qemu-io: adds option to use aio engine 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Aarushi Mehta --- qemu-io.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/qemu-io.c b/qemu-io.c index f64eca6940..0abb4af134 100644 --- a/qemu-io.c +++ b/qemu-io.c @@ -130,7 +130,8 @@ static void open_help(void) " -C, -- use copy-on-read\n" " -n, -- disable host cache, short for -t none\n" " -U, -- force shared permissions\n" -" -k, -- use kernel AIO implementation (on Linux only)\n" +" -k, -- use kernel AIO implementation (Linux only, prefer use of -i)\n" +" -i, -- use AIO mode (threads, native or io_uring)\n" " -t, -- use the given cache mode for the image\n" " -d, -- use the given discard mode for the image\n" " -o, -- options to be given to the block driver" @@ -172,7 +173,7 @@ static int open_f(BlockBackend *blk, int argc, char **argv) QDict *opts; bool force_share = false; - while ((c = getopt(argc, argv, "snCro:kt:d:U")) != -1) { + while ((c = getopt(argc, argv, "snCro:ki:t:d:U")) != -1) { switch (c) { case 's': flags |= BDRV_O_SNAPSHOT; @@ -204,6 +205,13 @@ static int open_f(BlockBackend *blk, int argc, char **argv) return -EINVAL; } break; + case 'i': + if (bdrv_parse_aio(optarg, &flags) < 0) { + error_report("Invalid aio option: %s", optarg); + qemu_opts_reset(&empty_opts); + return -EINVAL; + } + break; case 'o': if (imageOpts) { printf("--image-opts and 'open -o' are mutually exclusive\n"); @@ -291,7 +299,9 @@ static void usage(const char *name) " -n, --nocache disable host cache, short for -t none\n" " -C, --copy-on-read enable copy-on-read\n" " -m, --misalign misalign allocations for O_DIRECT\n" -" -k, --native-aio use kernel AIO implementation (on Linux only)\n" +" -k, --native-aio use kernel AIO implementation\n" +" (Linux only, prefer use of -i)\n" +" -i, --aio=MODE use AIO mode (threads, native or io_uring)\n" " -t, --cache=MODE use the given cache mode for the image\n" " -d, --discard=MODE use the given discard mode for the image\n" " -T, --trace [[enable=]][,events=][,file=]\n" @@ -489,7 +499,7 @@ static QemuOptsList file_opts = { int main(int argc, char **argv) { int readonly = 0; - const char *sopt = "hVc:d:f:rsnCmkt:T:U"; + const char *sopt = "hVc:d:f:rsnCmki:t:T:U"; const struct option lopt[] = { { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, 'V' }, @@ -501,6 +511,7 @@ int main(int argc, char **argv) { "copy-on-read", no_argument, NULL, 'C' }, { "misalign", no_argument, NULL, 'm' }, { "native-aio", no_argument, NULL, 'k' }, + { "aio", required_argument, NULL, 'i' }, { "discard", required_argument, NULL, 'd' }, { "cache", required_argument, NULL, 't' }, { "trace", required_argument, NULL, 'T' }, @@ -568,6 +579,12 @@ int main(int argc, char **argv) case 'k': flags |= BDRV_O_NATIVE_AIO; break; + case 'i': + if (bdrv_parse_aio(optarg, &flags) < 0) { + error_report("Invalid aio option: %s", optarg); + exit(1); + } + break; case 't': if (bdrv_parse_cache_mode(optarg, &flags, &writethrough) < 0) { error_report("Invalid cache option: %s", optarg); From patchwork Tue Jul 30 17:34:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066381 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 061F41395 for ; Tue, 30 Jul 2019 17:41:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E5D2A285C8 for ; Tue, 30 Jul 2019 17:41:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D9D7F28848; Tue, 30 Jul 2019 17:41:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 61ABC2861D for ; Tue, 30 Jul 2019 17:41:07 +0000 (UTC) Received: from localhost ([::1]:35218 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW7W-00070o-PT for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:41:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35902) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW36-00067D-Fs for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW35-0000Sn-9k for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:32 -0400 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]:36278) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW35-0000SV-4K; Tue, 30 Jul 2019 13:36:31 -0400 Received: by mail-pl1-x641.google.com with SMTP id k8so29190848plt.3; Tue, 30 Jul 2019 10:36:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WeED2N/xrRXHqk+R3uuiNy7p3rAfCPFvDRDie7m+ELM=; b=qp3uAKviqkfeBIM9MIhXrztFnkqmqUWbrS8MqIiQ5C4NPufwyt7IVWJSqbqLscOVT5 MWhFTXSdwGzRhbu31GJxJbD5d4I/DKE9OkCzaCVF5ws+eY4B+6xQ9NsB3Cb1l4+SMd7S dDfvWxSFNNaG321fR28pX1SgryqRCc9+H7azrRvC18j+8EJK+Z+8gC4RSt4DkfnBLxWT x9zOhh62PJHaJIsuR9ReWE3wO64nPwnSw/o7f6rXoCxWkkvvQX0oiEmCDacmTLChiV9v XWZgU6JXyn39ElQbB0+X+rX90VdENUbu8k6gCjc93fqEH/Yfk76mYjrD3SuYFxoYfmkI thfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WeED2N/xrRXHqk+R3uuiNy7p3rAfCPFvDRDie7m+ELM=; b=k0eHI6tKLjN/2gc46IbZhla+Kl6xqNCTzqqKU6v6Fu9HIMeNT0JkMnsw4oz1HgbIg6 B03eJJwAm4sztqOvaFJBag7HG7DrXeXAEAJDlUZQvc/Bvo0AkQXRqxEvg36v5pWtBCQ9 JCarAcStRV7zky+hflRP6dRqGo+D0I12d8g4TscuHS9y6QlCkWD9QEiDoeDHXg4YC8uv /Fhixm31yFAh1HmZvZslh5TzulaqHm8bDvHnEfARsrJ7KVnfuIsBIDtMQTNcqrE9/Q9u kMI0uG5LLISd1XcAGR2kFa5nPjwCPeufWMSPvtDZleLbSmC1OV3mbi9F5jBTW54x89VY bspA== X-Gm-Message-State: APjAAAUWFC34t27l50JsO70DS0AmCQc5B64FN8kOGvgD6N+fOBqqh9Mu RwlM7520hKiDlAou51ezi5Nj3AQaI+mqeQ== X-Google-Smtp-Source: APXvYqz8a57OYeh8SToMuLF1BntaaMs+IP8K8g7VTQwnDBH37gMsD/21FTZhqdSaamVQeyuHW7qrcA== X-Received: by 2002:a17:902:16f:: with SMTP id 102mr112077523plb.94.1564508189898; Tue, 30 Jul 2019 10:36:29 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.36.24 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:36:29 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:37 +0530 Message-Id: <20190730173441.26486-13-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::641 Subject: [Qemu-devel] [PATCH v8 12/16] qemu-img: adds option to use aio engine for benchmarking 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Aarushi Mehta --- qemu-img-cmds.hx | 4 ++-- qemu-img.c | 11 ++++++++++- qemu-img.texi | 5 ++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx index 1c93e6d185..77b5a8dda8 100644 --- a/qemu-img-cmds.hx +++ b/qemu-img-cmds.hx @@ -20,9 +20,9 @@ STEXI ETEXI DEF("bench", img_bench, - "bench [-c count] [-d depth] [-f fmt] [--flush-interval=flush_interval] [-n] [--no-drain] [-o offset] [--pattern=pattern] [-q] [-s buffer_size] [-S step_size] [-t cache] [-w] [-U] filename") + "bench [-c count] [-d depth] [-f fmt] [--flush-interval=flush_interval] [-n] [--no-drain] [-o offset] [--pattern=pattern] [-q] [-s buffer_size] [-S step_size] [-t cache] [-i aio] [-w] [-U] filename") STEXI -@item bench [-c @var{count}] [-d @var{depth}] [-f @var{fmt}] [--flush-interval=@var{flush_interval}] [-n] [--no-drain] [-o @var{offset}] [--pattern=@var{pattern}] [-q] [-s @var{buffer_size}] [-S @var{step_size}] [-t @var{cache}] [-w] [-U] @var{filename} +@item bench [-c @var{count}] [-d @var{depth}] [-f @var{fmt}] [--flush-interval=@var{flush_interval}] [-n] [--no-drain] [-o @var{offset}] [--pattern=@var{pattern}] [-q] [-s @var{buffer_size}] [-S @var{step_size}] [-t @var{cache}] [-i @var{aio}] [-w] [-U] @var{filename} ETEXI DEF("check", img_check, diff --git a/qemu-img.c b/qemu-img.c index 79983772de..27ac33f7d7 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -4192,7 +4192,8 @@ static int img_bench(int argc, char **argv) {"force-share", no_argument, 0, 'U'}, {0, 0, 0, 0} }; - c = getopt_long(argc, argv, ":hc:d:f:no:qs:S:t:wU", long_options, NULL); + c = getopt_long(argc, argv, ":hc:d:f:ni:o:qs:S:t:wU", long_options, + NULL); if (c == -1) { break; } @@ -4235,6 +4236,14 @@ static int img_bench(int argc, char **argv) case 'n': flags |= BDRV_O_NATIVE_AIO; break; + case 'i': + ret = bdrv_parse_aio(optarg, &flags); + if (ret < 0) { + error_report("Invalid aio option: %s", optarg); + ret = -1; + goto out; + } + break; case 'o': { offset = cvtnum(optarg); diff --git a/qemu-img.texi b/qemu-img.texi index c8e9bba515..0a2eccea85 100644 --- a/qemu-img.texi +++ b/qemu-img.texi @@ -206,7 +206,7 @@ Command description: Amends the image format specific @var{options} for the image file @var{filename}. Not all file formats support this operation. -@item bench [-c @var{count}] [-d @var{depth}] [-f @var{fmt}] [--flush-interval=@var{flush_interval}] [-n] [--no-drain] [-o @var{offset}] [--pattern=@var{pattern}] [-q] [-s @var{buffer_size}] [-S @var{step_size}] [-t @var{cache}] [-w] [-U] @var{filename} +@item bench [-c @var{count}] [-d @var{depth}] [-f @var{fmt}] [--flush-interval=@var{flush_interval}] [-n] [-i @var{aio}][--no-drain] [-o @var{offset}] [--pattern=@var{pattern}] [-q] [-s @var{buffer_size}] [-S @var{step_size}] [-t @var{cache}] [-w] [-U] @var{filename} Run a simple sequential I/O benchmark on the specified image. If @code{-w} is specified, a write test is performed, otherwise a read test is performed. @@ -227,6 +227,9 @@ If @code{-n} is specified, the native AIO backend is used if possible. On Linux, this option only works if @code{-t none} or @code{-t directsync} is specified as well. +If @code{-i} is specified, aio option can be used to specify different AIO +backends: @var{threads}, @var{native} or @var{io_uring}. + For write tests, by default a buffer filled with zeros is written. This can be overridden with a pattern byte specified by @var{pattern}. From patchwork Tue Jul 30 17:34:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066391 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5570B14DB for ; Tue, 30 Jul 2019 17:42:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3EF8727DA4 for ; Tue, 30 Jul 2019 17:42:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 32B03286BC; Tue, 30 Jul 2019 17:42:45 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id CBBB527DA4 for ; Tue, 30 Jul 2019 17:42:44 +0000 (UTC) Received: from localhost ([::1]:35248 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW95-0002LV-66 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:42:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35957) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW3C-0006DV-JC for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW3B-0000VD-5z for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:38 -0400 Received: from mail-pg1-x542.google.com ([2607:f8b0:4864:20::542]:42893) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW3B-0000Ud-0o; Tue, 30 Jul 2019 13:36:37 -0400 Received: by mail-pg1-x542.google.com with SMTP id t132so30415569pgb.9; Tue, 30 Jul 2019 10:36:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=g0K4nld1/KlLZhCdPIvk0WNLZIE9E/uK4u0beC76QwY=; b=m+ytI4RJPZBikUfBrRcPS/JoOb6Ntd9Rxy9sd2lGuM3oWF2PFgYWoaLsWVFCuGFtoH tzAy4j77JPFSg8KJAjcYM5+gUM3yBBWxPyvMIso6urPlWnD0Iuxz2EVNfhh6aYlhOh7K iz+akdi9xp7+JFFuqWMCr7HMRK8owwdtTmISZEbpE0bX4PaJQCU9NyTgIuRjy7mBA4Y1 tYCRr8AudHca/1vYi9N/9HBnIaSB0KQmNIKR5npTeA56Ng4CUyr0nGeRNyS43KMqnu0I 4Xny0+JSfJqWhBWEryafq9Fdn5B9dW2k7QiZXjzFs3I9O2WxrESR73UaNH4PPHkbko5w fWoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=g0K4nld1/KlLZhCdPIvk0WNLZIE9E/uK4u0beC76QwY=; b=I4EY7wHuBqgrtZcYmqit9vpfx+q0Zi1J7VHoYcjK/JQ2zpTj5ftwEIq9IlVuI2ZDch y7Md0m1AzF1NtUprJchEtQ/DlS2OkCX1RcILw4zrd2QWIfccbYLRTLH8WBg2sQLi1rCq sddHwmJl15qgpBZBsdoE57Lpi47NZl6dDFfUj6EoqiirLkkr+jzd7iSV1VCyWOSyLC9u u/hTMKQFi+u0msTMQocxLnz4v536z3+DXuCdNjvVrpI8/1vpS/oJu3tymy3JQfnIJLgX PFS9CH/ZU5ViJVGIp+DHHiU7uzPTaXE3JZOWl93CTJfYkgbmiVsX3CKN6QIUvXdAk08r n5IA== X-Gm-Message-State: APjAAAX3JTyrYGaPlp5gbfPDdMDP/TnQfss6e/G4ejGmJ3IHKtvio1UW c/Yybb0Yi7FmOphPi1SXb8vI/4YRZr905Q== X-Google-Smtp-Source: APXvYqz9EKbjBA0G5zeSoD1utUUwwjD1rCLG06OqHI9J8i003v0u16m6/X+PY4FJ7r0/FrAravmKEQ== X-Received: by 2002:a63:e54:: with SMTP id 20mr107554157pgo.244.1564508195481; Tue, 30 Jul 2019 10:36:35 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.36.30 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:36:34 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:38 +0530 Message-Id: <20190730173441.26486-14-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::542 Subject: [Qemu-devel] [PATCH v8 13/16] qemu-nbd: adds option for aio engines 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi Acked-by: Eric Blake --- qemu-nbd.c | 12 ++++-------- qemu-nbd.texi | 4 ++-- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/qemu-nbd.c b/qemu-nbd.c index a8cb39e510..7bb479f3c0 100644 --- a/qemu-nbd.c +++ b/qemu-nbd.c @@ -135,7 +135,7 @@ static void usage(const char *name) " '[ID_OR_NAME]'\n" " -n, --nocache disable host cache\n" " --cache=MODE set cache mode (none, writeback, ...)\n" -" --aio=MODE set AIO mode (native or threads)\n" +" --aio=MODE set AIO mode (native, io_uring or threads)\n" " --discard=MODE set discard mode (ignore, unmap)\n" " --detect-zeroes=MODE set detect-zeroes mode (off, on, unmap)\n" " --image-opts treat FILE as a full set of image options\n" @@ -718,13 +718,9 @@ int main(int argc, char **argv) exit(EXIT_FAILURE); } seen_aio = true; - if (!strcmp(optarg, "native")) { - flags |= BDRV_O_NATIVE_AIO; - } else if (!strcmp(optarg, "threads")) { - /* this is the default */ - } else { - error_report("invalid aio mode `%s'", optarg); - exit(EXIT_FAILURE); + if (bdrv_parse_aio(optarg, &flags) < 0) { + error_report("Invalid aio mode '%s'", optarg); + exit(EXIT_FAILURE); } break; case QEMU_NBD_OPT_DISCARD: diff --git a/qemu-nbd.texi b/qemu-nbd.texi index 7f55657722..3ee3e4bdee 100644 --- a/qemu-nbd.texi +++ b/qemu-nbd.texi @@ -77,8 +77,8 @@ as an read-only device, @var{snapshot_param} format is The cache mode to be used with the file. See the documentation of the emulator's @code{-drive cache=...} option for allowed values. @item --aio=@var{aio} -Set the asynchronous I/O mode between @samp{threads} (the default) -and @samp{native} (Linux only). +Set the asynchronous I/O mode between @samp{threads} (the default), +@samp{native} (Linux only) and @samp{io_uring} (Linux 5.1+). @item --discard=@var{discard} Control whether @dfn{discard} (also known as @dfn{trim} or @dfn{unmap}) requests are ignored or passed to the filesystem. @var{discard} is one of From patchwork Tue Jul 30 17:34:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066393 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1C5BD14DB for ; Tue, 30 Jul 2019 17:44:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0A45E285C8 for ; Tue, 30 Jul 2019 17:44:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F2DED28716; Tue, 30 Jul 2019 17:44:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7FDB7285C8 for ; Tue, 30 Jul 2019 17:44:42 +0000 (UTC) Received: from localhost ([::1]:35282 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsWAz-0005uo-FW for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:44:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36003) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW3I-0006Eu-64 for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW3G-0000Yp-RN for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:44 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]:41142) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW3G-0000YU-Ju; Tue, 30 Jul 2019 13:36:42 -0400 Received: by mail-pf1-x429.google.com with SMTP id m30so30216578pff.8; Tue, 30 Jul 2019 10:36:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IkdMZ1ySU5K9IoJU/TAak65ZSyC3YEsojkXSiNxLvTQ=; b=CVIO7NCaRQSauUapswvRsXrNZvWvuF0wK/AdV+mOvbx1rcS8Rx5pbeUDmYdbShi6VA c8DOBrFd9tD9FLLqXpu8wURzvwOPuDDHck6L2l00hjy1dFQG5K5rwcFgS6VtJMZgHerp vxAgxJteYEYvyh6U33fXUk0t0e5k/yUxvpE/K0Bqy2T7gS79gymmTwWKCCESYSNL9Uu5 s7EIpeHSETv7PHHPWDVa5pGarXcdB9LyMK87PZ9Xt/2yX34nKY/YpLqSZezfXg5N/+Ua MrITyh3Ph4iOUWPyPDLMZRY6ysUfIUCbMYzpmRE4GCY4DNCuxOTYGq8EGC1hTBNvMUq8 DTQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IkdMZ1ySU5K9IoJU/TAak65ZSyC3YEsojkXSiNxLvTQ=; b=LwbuXjVpTDBDjuqoTtLPQTwjfIqtFtgMVmyt2YxrCUxC5G9Blr88PxdO5rB9LIQMn/ jrC8jZSEZy5XrmTUayJ/q/NUY1J7I/Lv7Lwo5DoDAV/poCKEkvsglQdD0DwbHZokQvOa zknvUeUkaHWqHR3DJwAGBNkgWU6PqJpbQ6wm3741Ofrjyq0v1rhSaZyeqHcezHlBphr7 kWoxPO3lHE9VkpIgv89vFk9aq2Bg+6Fwuc3D840AMNZlv0BFV4OLMwIOF9HJK7rAchW5 qUScpXqeREhPfsejItEuxI2Wz0t5ej6JAxs7BpaLBM1gWllEyogLm2rG7c0/wRoJdrB8 Yisg== X-Gm-Message-State: APjAAAUv+h8J2MF1E5ukRH79VBqMnkOnCD9l+45AkCZJnrPP9Ly7RjWd KnbVFmpIVWllCvlz4dBD6VbZrC9J3TV6Qg== X-Google-Smtp-Source: APXvYqzeEfuMtMQRzwhqOpVEFAlvfumHw+Dqt1P6wWi1GIhh/dyhcfaUUC986Kd+2XFoB9f/blkBTQ== X-Received: by 2002:a63:211c:: with SMTP id h28mr109539437pgh.438.1564508201017; Tue, 30 Jul 2019 10:36:41 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.36.35 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:36:40 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:39 +0530 Message-Id: <20190730173441.26486-15-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::429 Subject: [Qemu-devel] [PATCH v8 14/16] tests/qemu-iotests: enable testing with aio options 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi --- tests/qemu-iotests/check | 15 ++++++++++++++- tests/qemu-iotests/common.rc | 14 ++++++++++++++ tests/qemu-iotests/iotests.py | 9 ++++++++- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check index c24874ff4a..1e398923fd 100755 --- a/tests/qemu-iotests/check +++ b/tests/qemu-iotests/check @@ -132,6 +132,7 @@ sortme=false expunge=true have_test_arg=false cachemode=false +aiomode=false tmp="${TEST_DIR}"/$$ rm -f $tmp.list $tmp.tmp $tmp.sed @@ -141,6 +142,7 @@ export IMGFMT_GENERIC=true export IMGPROTO=file export IMGOPTS="" export CACHEMODE="writeback" +export AIOMODE="threads" export QEMU_IO_OPTIONS="" export QEMU_IO_OPTIONS_NO_FMT="" export CACHEMODE_IS_DEFAULT=true @@ -225,6 +227,11 @@ s/ .*//p CACHEMODE_IS_DEFAULT=false cachemode=false continue + elif $aiomode + then + AIOMODE="$r" + aiomode=false + continue fi xpand=true @@ -269,6 +276,7 @@ other options -n show me, do not run tests -o options -o options to pass to qemu-img create/convert -c mode cache mode + -i mode AIO mode -makecheck pretty print output for make check testlist options @@ -433,10 +441,13 @@ testlist options cachemode=true xpand=false ;; + -i) + aiomode=true + xpand=false + ;; -T) # deprecated timestamp option xpand=false ;; - -v) verbose=true xpand=false @@ -515,6 +526,8 @@ done # Set qemu-io cache mode with $CACHEMODE we have QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --cache $CACHEMODE" +# Set qemu-io aio mode with $AIOMODE we have +QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --aio $AIOMODE" QEMU_IO_OPTIONS_NO_FMT="$QEMU_IO_OPTIONS" if [ "$IMGOPTSSYNTAX" != "true" ]; then diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc index 5502c3da2f..03f4a1cd7f 100644 --- a/tests/qemu-iotests/common.rc +++ b/tests/qemu-iotests/common.rc @@ -490,6 +490,20 @@ _default_cache_mode() return fi } +_supported_aio_modes() +{ + for mode; do + if [ "$mode" = "$AIOMODE" ]; then + return + fi + done + _notrun "not suitable for aio mode: $AIOMODE" +} +_default_aio_mode() +{ + AIOMODE="$1" + QEMU_IO="$QEMU_IO --aio $1" +} _unsupported_imgopts() { diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py index ce74177ab1..76f1ab0945 100644 --- a/tests/qemu-iotests/iotests.py +++ b/tests/qemu-iotests/iotests.py @@ -58,6 +58,7 @@ imgproto = os.environ.get('IMGPROTO', 'file') test_dir = os.environ.get('TEST_DIR') output_dir = os.environ.get('OUTPUT_DIR', '.') cachemode = os.environ.get('CACHEMODE') +aiomode = os.environ.get('AIOMODE') qemu_default_machine = os.environ.get('QEMU_DEFAULT_MACHINE') socket_scm_helper = os.environ.get('SOCKET_SCM_HELPER', 'socket_scm_helper') @@ -457,6 +458,7 @@ class VM(qtest.QEMUQtestMachine): options.append('file=%s' % path) options.append('format=%s' % format) options.append('cache=%s' % cachemode) + options.append('aio=%s' % aiomode) if opts: options.append(opts) @@ -799,6 +801,10 @@ def verify_cache_mode(supported_cache_modes=[]): if supported_cache_modes and (cachemode not in supported_cache_modes): notrun('not suitable for this cache mode: %s' % cachemode) +def verify_aio_mode(supported_aio_modes=[]): + if supported_aio_modes and (aiomode not in supported_aio_modes): + notrun('not suitable for this aio mode: %s' % aiomode) + def supports_quorum(): return 'quorum' in qemu_img_pipe('--help') @@ -843,7 +849,7 @@ def skip_if_unsupported(required_formats=[], read_only=False): return skip_test_decorator def main(supported_fmts=[], supported_oses=['linux'], supported_cache_modes=[], - unsupported_fmts=[]): + supported_aio_modes=[], unsupported_fmts=[]): '''Run tests''' global debug @@ -861,6 +867,7 @@ def main(supported_fmts=[], supported_oses=['linux'], supported_cache_modes=[], verify_image_format(supported_fmts, unsupported_fmts) verify_platform(supported_oses) verify_cache_mode(supported_cache_modes) + verify_aio_mode(supported_aio_modes) if debug: output = sys.stdout From patchwork Tue Jul 30 17:34:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066395 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D8B1414DB for ; Tue, 30 Jul 2019 17:44:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C5F83285C8 for ; Tue, 30 Jul 2019 17:44:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B9BF72884B; Tue, 30 Jul 2019 17:44:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id E832F286BC for ; Tue, 30 Jul 2019 17:44:42 +0000 (UTC) Received: from localhost ([::1]:35284 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsWB0-0005xs-AJ for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:44:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36060) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW3R-0006TF-Bf for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW3P-0000cG-M0 for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:53 -0400 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]:41211) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW3N-0000bJ-LH; Tue, 30 Jul 2019 13:36:51 -0400 Received: by mail-pl1-x641.google.com with SMTP id m9so29061782pls.8; Tue, 30 Jul 2019 10:36:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KdKcJ85/JvrdjzDPkuDe3haP60+QMnxCxAmkdd7Z4Xg=; b=biNk9wJ/m3uEuGOVF7zU1tigL/4YVnK1gXHxc25BvtnipilEYCg/jDnq7/E++jhuK6 cpnE4TrppXWpF7KcPEhdVgo+0sqSRpBp8+BfBkjThg3C3V4yKIlTNBrcocDdIbMFCj+I RyL8xRSXPDl+79BBbmv5hq81pkxPMs0IpCmidWgkwmjYPN9/bXmC+XxpAL+SGyih+V8k 6ZJnz4/kFfA7JymvdZjImIh+81H/pBHv92uwJtuaO4brisZ1d81zxUuHfTSM3kD+5z2H jo8gStZSH+EfRi2SwaZ4Wy6EYwX9JaQFMVhRJb4p3SY4//fN9v40r9vJ5ePxs8vSfUmN KzEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KdKcJ85/JvrdjzDPkuDe3haP60+QMnxCxAmkdd7Z4Xg=; b=edskUFMh0jf1N80MFsL+53NDhTEfA3LgFHcv1i6rttYu/egbdqjZEkNRItoInNFss6 qfsA1a4spcXCwZf8K572NzUI1Qz1iIf1nwoJ+jBXVrAqY7XI1FxfddqBCQnpSh3xp/vU zITKTOngzbNE8mUkd1qIUspJuoe7oXy5nMv1M16edYVG2Uz35vhx7TY/KYQh4usc0sy+ ILIIIN+miOTV7QsLrv+CghDRsyswCy+mCReoUB/Qo0mW1rI0Q/IdWnEoYQbpuPXOFFNb o+zx+sUsKp8plBX2oBoQxwmPQ26MQ3Ki1g9YGVU3ID+hybJscRRm3wkJrlRq7s0UMj34 witQ== X-Gm-Message-State: APjAAAVnXxJ61FIA4uydKS42w+mtE375e+QtSpyjbZEvx0n23tXYuPVv kS0oEI/5684Cyn25SPvoVdJmHywlncHnmA== X-Google-Smtp-Source: APXvYqxgzS6Pr41Xe7Ab8MYfjRpqpyqaGYx+hL0YkPKIajj22RrXo0gM6cwEk+6sn11VHctEBFDICQ== X-Received: by 2002:a17:902:424:: with SMTP id 33mr36356321ple.151.1564508208039; Tue, 30 Jul 2019 10:36:48 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.36.41 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:36:47 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:40 +0530 Message-Id: <20190730173441.26486-16-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::641 Subject: [Qemu-devel] [PATCH v8 15/16] tests/qemu-iotests: use AIOMODE with various tests 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi --- tests/qemu-iotests/028 | 3 ++- tests/qemu-iotests/058 | 2 +- tests/qemu-iotests/089 | 4 ++-- tests/qemu-iotests/091 | 7 ++++--- tests/qemu-iotests/109 | 3 ++- tests/qemu-iotests/147 | 5 +++-- tests/qemu-iotests/181 | 10 +++++----- tests/qemu-iotests/183 | 7 ++++--- tests/qemu-iotests/185 | 17 ++++++++++++----- tests/qemu-iotests/200 | 3 ++- tests/qemu-iotests/201 | 10 +++++----- 11 files changed, 42 insertions(+), 29 deletions(-) diff --git a/tests/qemu-iotests/028 b/tests/qemu-iotests/028 index 01f495912f..59e7b670ed 100755 --- a/tests/qemu-iotests/028 +++ b/tests/qemu-iotests/028 @@ -108,7 +108,8 @@ echo block-backup echo qemu_comm_method="monitor" -_launch_qemu -drive file="${TEST_IMG}",cache=${CACHEMODE},id=disk +_launch_qemu -drive file="${TEST_IMG}",cache=${CACHEMODE},aio=${AIOMODE},\ +id=disk h=$QEMU_HANDLE QEMU_COMM_TIMEOUT=1 diff --git a/tests/qemu-iotests/058 b/tests/qemu-iotests/058 index 8c3212a72f..38d1ed90c0 100755 --- a/tests/qemu-iotests/058 +++ b/tests/qemu-iotests/058 @@ -64,7 +64,7 @@ nbd_snapshot_img="nbd:unix:$nbd_unix_socket" converted_image=$TEST_IMG.converted # Use -f raw instead of -f $IMGFMT for the NBD connection -QEMU_IO_NBD="$QEMU_IO -f raw --cache=$CACHEMODE" +QEMU_IO_NBD="$QEMU_IO -f raw --cache=$CACHEMODE --aio=$AIOMODE" echo echo "== preparing image ==" diff --git a/tests/qemu-iotests/089 b/tests/qemu-iotests/089 index ad029f1f09..059ad75e28 100755 --- a/tests/qemu-iotests/089 +++ b/tests/qemu-iotests/089 @@ -64,7 +64,7 @@ $QEMU_IO -c 'write -P 42 0 512' -c 'write -P 23 512 512' \ $QEMU_IMG convert -f raw -O $IMGFMT "$TEST_IMG.base" "$TEST_IMG" -$QEMU_IO_PROG --cache $CACHEMODE \ +$QEMU_IO_PROG --cache $CACHEMODE --aio $AIOMODE \ -c 'read -P 42 0 512' -c 'read -P 23 512 512' \ -c 'read -P 66 1024 512' "json:{ \"driver\": \"$IMGFMT\", @@ -111,7 +111,7 @@ $QEMU_IO -c 'write -P 42 0x38000 512' "$TEST_IMG" | _filter_qemu_io # The "image.filename" part tests whether "a": { "b": "c" } and "a.b": "c" do # the same (which they should). -$QEMU_IO_PROG --cache $CACHEMODE \ +$QEMU_IO_PROG --cache $CACHEMODE --aio $AIOMODE \ -c 'read -P 42 0x38000 512' "json:{ \"driver\": \"$IMGFMT\", \"file\": { diff --git a/tests/qemu-iotests/091 b/tests/qemu-iotests/091 index d62ef18a02..78741d3fe7 100755 --- a/tests/qemu-iotests/091 +++ b/tests/qemu-iotests/091 @@ -60,14 +60,15 @@ echo === Starting QEMU VM1 === echo qemu_comm_method="monitor" -_launch_qemu -drive file="${TEST_IMG}",cache=${CACHEMODE},id=disk +_launch_qemu -drive file="${TEST_IMG}",cache=${CACHEMODE},aio=${AIOMODE},\ + id=disk h1=$QEMU_HANDLE echo echo === Starting QEMU VM2 === echo -_launch_qemu -drive file="${TEST_IMG}",cache=${CACHEMODE},id=disk \ - -incoming "exec: cat '${MIG_FIFO}'" +_launch_qemu -drive file="${TEST_IMG}",cache=${CACHEMODE},aio=${AIOMODE},\ + id=disk -incoming "exec: cat '${MIG_FIFO}'" h2=$QEMU_HANDLE echo diff --git a/tests/qemu-iotests/109 b/tests/qemu-iotests/109 index 9897ceb6cd..451709689a 100755 --- a/tests/qemu-iotests/109 +++ b/tests/qemu-iotests/109 @@ -52,7 +52,8 @@ run_qemu() local qmp_format="$3" local qmp_event="$4" - _launch_qemu -drive file="${source_img}",format=raw,cache=${CACHEMODE},id=src + _launch_qemu -drive file="${source_img}",format=raw,cache=${CACHEMODE},\ + aio=${AIOMODE},id=src _send_qemu_cmd $QEMU_HANDLE "{ 'execute': 'qmp_capabilities' }" "return" _send_qemu_cmd $QEMU_HANDLE \ diff --git a/tests/qemu-iotests/147 b/tests/qemu-iotests/147 index 2d84fddb01..632973b23c 100755 --- a/tests/qemu-iotests/147 +++ b/tests/qemu-iotests/147 @@ -24,7 +24,7 @@ import socket import stat import time import iotests -from iotests import cachemode, imgfmt, qemu_img, qemu_nbd, qemu_nbd_early_pipe +from iotests import cachemode, aiomode, imgfmt, qemu_img, qemu_nbd, qemu_nbd_early_pipe NBD_PORT_START = 32768 NBD_PORT_END = NBD_PORT_START + 1024 @@ -134,7 +134,8 @@ class BuiltinNBD(NBDBlockdevAddBase): self.server.add_drive_raw('if=none,id=nbd-export,' + 'file=%s,' % test_img + 'format=%s,' % imgfmt + - 'cache=%s' % cachemode) + 'cache=%s' % cachemode + + 'aio=%s' % aiomode) self.server.launch() def tearDown(self): diff --git a/tests/qemu-iotests/181 b/tests/qemu-iotests/181 index e317e63422..547c1b47b0 100755 --- a/tests/qemu-iotests/181 +++ b/tests/qemu-iotests/181 @@ -58,21 +58,21 @@ qemu_comm_method="monitor" if [ "$IMGOPTSSYNTAX" = "true" ]; then _launch_qemu \ - -drive "${TEST_IMG}",cache=${CACHEMODE},id=disk + -drive "${TEST_IMG}",cache=${CACHEMODE},aio=$AIOMODE,id=disk else _launch_qemu \ - -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk + -drive file="${TEST_IMG}",cache=${CACHEMODE},aio=$AIOMODE,driver=$IMGFMT,id=disk fi src=$QEMU_HANDLE if [ "$IMGOPTSSYNTAX" = "true" ]; then _launch_qemu \ - -drive "${TEST_IMG}",cache=${CACHEMODE},id=disk \ + -drive "${TEST_IMG}",cache=${CACHEMODE},aio=$AIOMODE,id=disk \ -incoming "unix:${MIG_SOCKET}" else _launch_qemu \ - -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk \ - -incoming "unix:${MIG_SOCKET}" + -drive file="${TEST_IMG}",cache=${CACHEMODE},aio=$AIOMODE,driver=$IMGFMT,\ + id=disk -incoming "unix:${MIG_SOCKET}" fi dest=$QEMU_HANDLE diff --git a/tests/qemu-iotests/183 b/tests/qemu-iotests/183 index fbe5a99beb..b16db9466d 100755 --- a/tests/qemu-iotests/183 +++ b/tests/qemu-iotests/183 @@ -56,13 +56,14 @@ echo qemu_comm_method="qmp" _launch_qemu \ - -drive file="${TEST_IMG}",cache=$CACHEMODE,driver=$IMGFMT,id=disk + -drive file="${TEST_IMG}",cache=$CACHEMODE,aio=$AIOMODE,\ + driver=$IMGFMT,id=disk src=$QEMU_HANDLE _send_qemu_cmd $src "{ 'execute': 'qmp_capabilities' }" 'return' _launch_qemu \ - -drive file="${TEST_IMG}.dest",cache=$CACHEMODE,driver=$IMGFMT,id=disk \ - -incoming "unix:${MIG_SOCKET}" + -drive file="${TEST_IMG}.dest",cache=$CACHEMODE,aio=$AIOMODE,\ + driver=$IMGFMT,id=disk -incoming "unix:${MIG_SOCKET}" dest=$QEMU_HANDLE _send_qemu_cmd $dest "{ 'execute': 'qmp_capabilities' }" 'return' diff --git a/tests/qemu-iotests/185 b/tests/qemu-iotests/185 index 454ff600cc..1c74a0ef5a 100755 --- a/tests/qemu-iotests/185 +++ b/tests/qemu-iotests/185 @@ -54,7 +54,8 @@ echo qemu_comm_method="qmp" _launch_qemu \ - -drive file="${TEST_IMG}.base",cache=$CACHEMODE,driver=$IMGFMT,id=disk + -drive file="${TEST_IMG}.base",cache=$CACHEMODE,aio=$AIOMODE,\ + driver=$IMGFMT,id=disk h=$QEMU_HANDLE _send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" 'return' @@ -125,7 +126,8 @@ echo === Start active commit job and exit qemu === echo _launch_qemu \ - -drive file="${TEST_IMG}",cache=$CACHEMODE,driver=$IMGFMT,id=disk + -drive file="${TEST_IMG}",cache=$CACHEMODE,aio=$AIOMODE,driver=$IMGFMT,\ + id=disk h=$QEMU_HANDLE _send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" 'return' @@ -147,7 +149,8 @@ echo === Start mirror job and exit qemu === echo _launch_qemu \ - -drive file="${TEST_IMG}",cache=$CACHEMODE,driver=$IMGFMT,id=disk + -drive file="${TEST_IMG}",cache=$CACHEMODE,aio=$AIOMODE,driver=$IMGFMT,\ + id=disk h=$QEMU_HANDLE _send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" 'return' @@ -172,7 +175,9 @@ echo === Start backup job and exit qemu === echo _launch_qemu \ - -drive file="${TEST_IMG}",cache=$CACHEMODE,driver=$IMGFMT,id=disk + _launch_qemu \ + -drive file="${TEST_IMG}",cache=$CACHEMODE,aio=$AIOMODE,driver=$IMGFMT,\ + id=disk h=$QEMU_HANDLE _send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" 'return' @@ -196,7 +201,9 @@ echo === Start streaming job and exit qemu === echo _launch_qemu \ - -drive file="${TEST_IMG}",cache=$CACHEMODE,driver=$IMGFMT,id=disk + _launch_qemu \ + -drive file="${TEST_IMG}",cache=$CACHEMODE,aio=$AIOMODE,driver=$IMGFMT,\ + id=disk h=$QEMU_HANDLE _send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" 'return' diff --git a/tests/qemu-iotests/200 b/tests/qemu-iotests/200 index 72d431f251..b554dd947b 100755 --- a/tests/qemu-iotests/200 +++ b/tests/qemu-iotests/200 @@ -66,7 +66,8 @@ echo === Starting QEMU VM === echo qemu_comm_method="qmp" _launch_qemu -object iothread,id=iothread0 $virtio_scsi \ - -drive file="${TEST_IMG}",media=disk,if=none,cache=$CACHEMODE,id=drive_sysdisk,format=$IMGFMT \ + -drive file="${TEST_IMG}",media=disk,if=none,cache=$CACHEMODE,\ + aio=$AIOMODE,id=drive_sysdisk,format=$IMGFMT \ -device scsi-hd,drive=drive_sysdisk,bus=scsi0.0,id=sysdisk,bootindex=0 h1=$QEMU_HANDLE diff --git a/tests/qemu-iotests/201 b/tests/qemu-iotests/201 index 7abf740fe4..48837c4f30 100755 --- a/tests/qemu-iotests/201 +++ b/tests/qemu-iotests/201 @@ -58,21 +58,21 @@ qemu_comm_method="monitor" if [ "$IMGOPTSSYNTAX" = "true" ]; then _launch_qemu \ - -drive "${TEST_IMG}",cache=${CACHEMODE},id=disk + -drive "${TEST_IMG}",cache=${CACHEMODE},aio=$AIOMODE,id=disk else _launch_qemu \ - -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk + -drive file="${TEST_IMG}",cache=${CACHEMODE},aio=$AIOMODE,driver=$IMGFMT,id=disk fi src=$QEMU_HANDLE if [ "$IMGOPTSSYNTAX" = "true" ]; then _launch_qemu \ - -drive "${TEST_IMG}",cache=${CACHEMODE},id=disk \ + -drive "${TEST_IMG}",cache=${CACHEMODE},aio=$AIOMODE,id=disk \ -incoming "unix:${MIG_SOCKET}" else _launch_qemu \ - -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk \ - -incoming "unix:${MIG_SOCKET}" + -drive file="${TEST_IMG}",cache=${CACHEMODE},aio=$AIOMODE,driver=$IMGFMT,\ + id=disk -incoming "unix:${MIG_SOCKET}" fi dest=$QEMU_HANDLE From patchwork Tue Jul 30 17:34:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aarushi Mehta X-Patchwork-Id: 11066399 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 672591395 for ; Tue, 30 Jul 2019 17:46:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 568BC285C8 for ; Tue, 30 Jul 2019 17:46:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4AD6F28755; Tue, 30 Jul 2019 17:46:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id C56312854F for ; Tue, 30 Jul 2019 17:46:17 +0000 (UTC) Received: from localhost ([::1]:35330 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsWCX-0000sP-58 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 30 Jul 2019 13:46:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36091) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hsW3V-0006es-2u for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hsW3T-0000eB-Qa for qemu-devel@nongnu.org; Tue, 30 Jul 2019 13:36:57 -0400 Received: from mail-pl1-x644.google.com ([2607:f8b0:4864:20::644]:36284) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hsW3T-0000dv-K1; Tue, 30 Jul 2019 13:36:55 -0400 Received: by mail-pl1-x644.google.com with SMTP id k8so29191277plt.3; Tue, 30 Jul 2019 10:36:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HtKAermb8jkRwDYfQy50ghQZAMoE/J4HCHa8w9p4Lso=; b=gnIzVVagb+U1OgCSEAHTh91dBUTV+FtB00D8rn9inJSJyVA4vADj4Jh3b9BbTLzcjE vqxopa6rup94AFxpJvzSFdLkwao57bU+P8edBiejmlf/DATB5w8rNH4VgjtgbW4SF6fv s4uF++H2SoRgzwRa5AoPeqZLhBnvDh1A/3gH8OYitOIpoQ9nUOwPOrpDhkmi4EHofHy+ kv5JBf42GELq4GynQTmhTHKhPYdVR+2/uRZwF8fRrC6/Hocvrk4a6PGFuNl8tyVRLk/9 rtvYonmH743vHrCHXvOzBg7bjzEOpxMediT32PudI5VDWwjLE+GodIpR4IXC7iGHYK27 7KSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HtKAermb8jkRwDYfQy50ghQZAMoE/J4HCHa8w9p4Lso=; b=Go1CJUCfGKKGPcW+Pac3c6XC0CHv2YAVOZ27aiO+LJHD1LRmCB/9fU2kzZhCCcfpV/ VTYABNKT4M8qh6HcDOJfbMS48spx++bchIthjkmtQdYB3MNIWyc1A60TI+Ky3DXI6Ekq mOmi3PIPAXZafebkg5NSOPYeXDvbbjpPRmpZy7F0ALcPk6RS/KzHWCDDQEks2AwrNLQE 4Ry2zXBMMr03bEFQMPOsVuCAF7Za7loJRINPxUUnSy1sWoZu2YsqhLMsjcXQ72a9NrAE yx6fkopaqJmNHnzBSfTC1GCDM4cVeRp2iORsu/MyaPuIFsFY2btOjc88gbaAJixMfcmw 1+BQ== X-Gm-Message-State: APjAAAWIweG/aDtZlmmtx6xI51tJw/5uDkAK7UwSvs3IWacWQcGueDkq zcil/pQYsvmKgY6QeI6xb7tzWHHRdb7dtA== X-Google-Smtp-Source: APXvYqzQDfmcDvr5w3sX0fH6XYiec33MvZN/Bz81R3aRCDBv3hmVBtrSD9OyWfLa+PCUI8+Y85dg9Q== X-Received: by 2002:a17:902:e202:: with SMTP id ce2mr111846858plb.272.1564508214262; Tue, 30 Jul 2019 10:36:54 -0700 (PDT) Received: from localhost.localdomain ([136.233.9.97]) by smtp.gmail.com with ESMTPSA id q24sm59122895pjp.14.2019.07.30.10.36.48 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 10:36:53 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Tue, 30 Jul 2019 23:04:41 +0530 Message-Id: <20190730173441.26486-17-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190730173441.26486-1-mehta.aaru20@gmail.com> References: <20190730173441.26486-1-mehta.aaru20@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::644 Subject: [Qemu-devel] [PATCH v8 16/16] block/io_uring: adds fd registration 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: Kevin Wolf , Fam Zheng , Sergio Lopez , qemu-block@nongnu.org, Markus Armbruster , Maxim Levitsky , saket.sinha89@gmail.com, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP The fd registration API in io_uring registers a series of fds together that cannot be modified later. Thus, a hashtable maintains an index of fds registered and their index in the internally registered array. The existing fd array is unregistered and a new one submitted. Signed-off-by: Aarushi Mehta --- block/io_uring.c | 86 ++++++++++++++++++++++++++++++++++++++++++++-- block/trace-events | 1 + 2 files changed, 85 insertions(+), 2 deletions(-) diff --git a/block/io_uring.c b/block/io_uring.c index e2bef380e7..eb8fd23822 100644 --- a/block/io_uring.c +++ b/block/io_uring.c @@ -45,10 +45,17 @@ typedef struct LuringQueue { QSIMPLEQ_HEAD(, LuringAIOCB) submit_queue; } LuringQueue; +typedef struct LuringFd { + int *fd_array; + int *fd_index; + GHashTable *fd_lookup; +} LuringFd; + typedef struct LuringState { AioContext *aio_context; struct io_uring ring; + LuringFd fd_reg; /* io queue for submit at batch. Protected by AioContext lock. */ LuringQueue io_q; @@ -305,6 +312,70 @@ static int ioq_submit(LuringState *s) } return ret; } +/** + * luring_fd_register: + * + * Register and unregisters file descriptors, see luring_fd_lookup + */ +static int luring_fd_register(struct io_uring *ring, LuringFd *fd_reg, int fd) +{ + int ret, nr; + GHashTable *lookup = fd_reg->fd_lookup; + nr = g_hash_table_size(lookup); + + /* Unregister */ + if (!fd) { + ret = io_uring_unregister_files(ring); + g_hash_table_remove_all(lookup); + return ret; + } + + /* If adding new, API requires older registrations to be removed */ + if (nr) { + io_uring_unregister_files(ring); + } + + fd_reg->fd_array = g_realloc_n(fd_reg->fd_array, nr + 1, sizeof(int)); + fd_reg->fd_array[nr] = fd; + fd_reg->fd_index = g_realloc_n(fd_reg->fd_index, nr + 1, sizeof(int)); + fd_reg->fd_index[nr] = nr; + + g_hash_table_insert(lookup, &fd_reg->fd_array[nr], &fd_reg->fd_index[nr]); + trace_luring_fd_register(fd, nr); + return io_uring_register_files(ring, fd_reg->fd_array, nr + 1); +} + +/** + * luring_fd_lookup: + * + * Used to lookup fd index in registered array at submission time + * If the lookup table has not been created or the fd is not in the table, + * the fd is registered. + * + * If registration errors, the hash is cleared and the fd used directly + * + * Unregistering is done at luring_detach_aio_context + */ +static int luring_fd_lookup(LuringState *s, int fd) +{ + int *index, ret; + if (!s->fd_reg.fd_lookup) { + s->fd_reg.fd_lookup = g_hash_table_new_full(g_int_hash, g_int_equal, + g_free, g_free); + luring_fd_register(&s->ring, &s->fd_reg, fd); + } + index = g_hash_table_lookup(s->fd_reg.fd_lookup, &fd); + + if (!index) { + ret = luring_fd_register(&s->ring, &s->fd_reg, fd); + if (ret < 0) { + g_hash_table_remove_all(s->fd_reg.fd_lookup); + return ret; + } + index = g_hash_table_lookup(s->fd_reg.fd_lookup, &fd); + } + return *index; +} void luring_io_plug(BlockDriverState *bs, LuringState *s) { @@ -357,7 +428,11 @@ static int luring_do_submit(int fd, LuringAIOCB *luringcb, LuringState *s, __func__, type); abort(); } + io_uring_sqe_set_data(sqes, luringcb); + if (s->fd_reg.fd_array) { + io_uring_sqe_set_flags(sqes, IOSQE_FIXED_FILE); + } QSIMPLEQ_INSERT_TAIL(&s->io_q.submit_queue, luringcb, next); s->io_q.in_queue++; @@ -374,15 +449,21 @@ static int luring_do_submit(int fd, LuringAIOCB *luringcb, LuringState *s, } int coroutine_fn luring_co_submit(BlockDriverState *bs, LuringState *s, int fd, uint64_t offset, QEMUIOVector *qiov, int type) { - int ret; + int ret, fd_index; LuringAIOCB luringcb = { .co = qemu_coroutine_self(), .ret = -EINPROGRESS, .qiov = qiov, .is_read = (type == QEMU_AIO_READ), }; + + fd_index = luring_fd_lookup(s, fd); + if (fd_index >= 0) { + fd = fd_index; + } + trace_luring_co_submit(bs, s, &luringcb, fd, offset, qiov ? qiov->size : 0, type); ret = luring_do_submit(fd, &luringcb, s, offset, type); @@ -399,6 +480,7 @@ int coroutine_fn luring_co_submit(BlockDriverState *bs, LuringState *s, int fd, void luring_detach_aio_context(LuringState *s, AioContext *old_context) { + luring_fd_register(&s->ring, &s->fd_reg, 0); aio_set_fd_handler(old_context, s->ring.ring_fd, false, NULL, NULL, NULL, s); qemu_bh_delete(s->completion_bh); diff --git a/block/trace-events b/block/trace-events index 66aaf8352b..13571aa182 100644 --- a/block/trace-events +++ b/block/trace-events @@ -71,6 +71,7 @@ luring_co_submit(void *bs, void *s, void *luringcb, int fd, uint64_t offset, siz luring_process_completion(void *s, void *aiocb, int ret) "LuringState %p luringcb %p ret %d" luring_io_uring_submit(void *s, int ret) "LuringState %p ret %d" luring_resubmit_short_read(void *s, void *luringcb, int nread) "LuringState %p luringcb %p nread %d" +luring_fd_register(int fd, int index) "fd %d index %d" # qcow2.c qcow2_writev_start_req(void *co, int64_t offset, int bytes) "co %p offset 0x%" PRIx64 " bytes %d"