From patchwork Fri May 24 14:03: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: 1104937 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="fGvlprkO"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 459Snp4gsYz9s6w for ; Sat, 25 May 2019 00:05:50 +1000 (AEST) Received: from localhost ([127.0.0.1]:55103 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUApQ-0003VI-IS for incoming@patchwork.ozlabs.org; Fri, 24 May 2019 10:05:48 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40481) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAoP-0003SB-2Z for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hUAnj-0002OP-5q for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:03 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:42637) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hUAnj-0002Nf-0X; Fri, 24 May 2019 10:04:03 -0400 Received: by mail-pg1-x52f.google.com with SMTP id 33so2162792pgv.9; Fri, 24 May 2019 07:04:02 -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; bh=MOLjMhKSGechndhxC45XWXBaUt38Hb0jpsQqlDASuQI=; b=fGvlprkOGqYCx4shyGCXwfblzCKE0Jui6v0XhIbUPpbOAlKZ3i92xPf2Brz9hun9RG HrhZw5Rly2nxpT7Wl5fNvIj1bkNcHOkYN3VHLoyph3fV8C1BaQSl5OSOBZGYEXs3e5rf kjuQ78sFSR5L092ejLITDJ7t72QPg2A0T2uX8DAEtIWcdXzY7FAtAQQhf15fecaQiYlY OnY/Qd/OGXofsKrK43C0ZitTERn62AksTaBSNFWrfgrQABt9ptClsVXd4NpVsXZLcIUo BK/1R8kJJLjlMFdbrC5r4OdjkmE8g4ecq+t2A+Efb3jjc/JiNgc6EbIX0bWaGc/xlIa4 nVsw== 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; bh=MOLjMhKSGechndhxC45XWXBaUt38Hb0jpsQqlDASuQI=; b=qQRv8o462FApOmSdwABrnOb6ka/ZzOnZMmLb+uqVchF/JLnoAa2cYk3+Efr11aX2Wf 1ACP9kTbXD4mPAqR6xdC4UoMbNwAFzyNM4NR3jPu/oKHNlvWUah7S8fkrKsZj/dF3xHB NV0S6U9hj9r8zl4+rRGlVrCQtDzpZ22VHO32q4bguL818JYHnZZ7UTVV+q2qGU2K1MAM dE5MgAVWFRTgAx/lNLYDbKPDm1czVYXtrafodicW5NzvI5ieeoPkgcMstGZKjbN3fhsF kztJmOeSUv5YcXCI+s9xf9trOIS3LAAFaE8mgLYwebKDLWMpMevftDGH0g4f/z/rZB0O Jv2A== X-Gm-Message-State: APjAAAXmqEnkGQ2p/l9fgwRbVId0Cy+4GMfGOaLYhHHSnBOBKRkzaSw3 8xZqvjvXVmtaWCnEiHsxAeiWKfUXujZxmQ== X-Google-Smtp-Source: APXvYqxI41XB2iojAX6k1A6EenTsYGvVYmRkHnYZX6Hi+pyNFL0uIouqGFdvoL94qtml9EdtvhXglQ== X-Received: by 2002:a62:2e46:: with SMTP id u67mr114236791pfu.206.1558706641550; Fri, 24 May 2019 07:04:01 -0700 (PDT) Received: from localhost.localdomain ([120.57.120.132]) by smtp.gmail.com with ESMTPSA id u11sm2556766pfh.130.2019.05.24.07.03.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 May 2019 07:04:00 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Fri, 24 May 2019 19:33:29 +0530 Message-Id: <20190524140337.13415-2-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190524140337.13415-1-mehta.aaru20@gmail.com> References: <20190524140337.13415-1-mehta.aaru20@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::52f Subject: [Qemu-devel] [RFC PATCH v2 1/9] qapi/block-core: add option for io_uring X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , qemu-block@nongnu.org, saket.sinha89@gmail.com, Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Aarushi Mehta --- qapi/block-core.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) -- 2.17.1 diff --git a/qapi/block-core.json b/qapi/block-core.json index 7ccbfff9d0..0e927b247d 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -2776,11 +2776,13 @@ # # @threads: Use qemu's thread pool # @native: Use native AIO backend (only Linux and Windows) +# @io_uring: Use linux io_uring (only Linux) # -# Since: 2.9 +# Since: 4.1 ## { 'enum': 'BlockdevAioOptions', - 'data': [ 'threads', 'native' ] } + 'data': [ 'threads', 'native', + { 'name': 'io_uring', 'if': 'defined(CONFIG_LINUX)' } ] } ## # @BlockdevCacheOptions: From patchwork Fri May 24 14:03: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: 1104941 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="a4855LGh"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 459SsL71PFz9s6w for ; Sat, 25 May 2019 00:08:54 +1000 (AEST) Received: from localhost ([127.0.0.1]:55163 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAsO-00061U-VY for incoming@patchwork.ozlabs.org; Fri, 24 May 2019 10:08:53 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40414) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAoO-0003KZ-4h for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hUAnn-0002RN-Br for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:08 -0400 Received: from mail-pf1-x443.google.com ([2607:f8b0:4864:20::443]:37440) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hUAnn-0002Ql-5F; Fri, 24 May 2019 10:04:07 -0400 Received: by mail-pf1-x443.google.com with SMTP id a23so5409603pff.4; Fri, 24 May 2019 07:04:07 -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; bh=3FKBJA17va/jv2u1TvUxLDB1xiagIFwWCBsEV/clovc=; b=a4855LGhNEYcj8uL4x3QndWURkakTYZkaqqP4d4oYiu192b2tsudRdYqWJjtJis+CR aSGOvI1YVvX6dqwTqTGW29AuQf40xqhZzMW8uBfIQpfChhAJ/in/L3PdYlto6au16/G3 5ax5wdRu9u30VKEXCfdle3XWpyNPfA8vcnGnA/+MbmGNzlxhE5zkL2j8U5tm/FVnsquz g5QOxGHjg0Y9Jgj5ogUH3+oETzqsGLFsaX2i6EsUFxEmqAzBGWm4dqbxNUg6KBJ2TuFT NU9Bdvp+D2+MKrUfzrC7D7k+SPYLQkPBZdu10Eku1h+VhIO7pbyIi9R7R+Cfhamp3ae3 Nasg== 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; bh=3FKBJA17va/jv2u1TvUxLDB1xiagIFwWCBsEV/clovc=; b=tqOFfloyBsYgf0IboauHwc/PnO4DF6Po/YQxmgL8ft27JZuZsmjmst9e/KqDhYeYY6 ohQ/CEZiOLKcCc89vQ7y9TA4E0TMEs4v2YrBwvUCR6MMUqG1Zt48il4W7piuavzTJRxN KCWc8wm4o3Y6sGLoSkFNH0NcpJqPbs1/b0UBS59dLw9roAYBUtGzUJBBylEj1j+y1pdZ sSDkeOiwMbJjoCStopIyUt5Dxo2oZEsve/qLpvFHXThqeRPu9+qTmsq7p0MekKyfJdgM 9TDiDL7VstKW8Mea4sbTfxWFdj3KwFzuFDE2cAJJjW/qZcM7XQTQQLdsXGMtE69AseNQ Sn/g== X-Gm-Message-State: APjAAAUuF//OpYlFcMovV8twNy3grYlKavmdR3mlP3PxTkbKvDRNHk+w QeXrlMqmIjfZxh4vQmdFFzl66Eu2Vxk+Hw== X-Google-Smtp-Source: APXvYqy4l/3ibeoF9lugxLRcZk2nFEzQ/rSSZqVuB3NnKQayxkGKq4FFbqh7sQgtkZ/6z2qw5pyqqw== X-Received: by 2002:a63:d00d:: with SMTP id z13mr9056359pgf.368.1558706645836; Fri, 24 May 2019 07:04:05 -0700 (PDT) Received: from localhost.localdomain ([120.57.120.132]) by smtp.gmail.com with ESMTPSA id u11sm2556766pfh.130.2019.05.24.07.04.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 May 2019 07:04:05 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Fri, 24 May 2019 19:33:30 +0530 Message-Id: <20190524140337.13415-3-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190524140337.13415-1-mehta.aaru20@gmail.com> References: <20190524140337.13415-1-mehta.aaru20@gmail.com> 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] [RFC PATCH v2 2/9] block/block: add BDRV flag for io_uring X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , qemu-block@nongnu.org, saket.sinha89@gmail.com, Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi --- include/block/block.h | 1 + 1 file changed, 1 insertion(+) -- 2.17.1 diff --git a/include/block/block.h b/include/block/block.h index 9b083e2bca..60f7c6c01c 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 Fri May 24 14:03: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: 1104945 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="OelFy3qu"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 459T1f6vBHz9s6w for ; Sat, 25 May 2019 00:16:05 +1000 (AEST) Received: from localhost ([127.0.0.1]:55344 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAzL-0004Qr-Ga for incoming@patchwork.ozlabs.org; Fri, 24 May 2019 10:16:03 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40414) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAoJ-0003KZ-Vm for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hUAns-0002Un-0q for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:13 -0400 Received: from mail-pg1-x543.google.com ([2607:f8b0:4864:20::543]:45822) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hUAnr-0002Ts-RW; Fri, 24 May 2019 10:04:11 -0400 Received: by mail-pg1-x543.google.com with SMTP id w34so459018pga.12; Fri, 24 May 2019 07:04:11 -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; bh=IwdgR4CAZqUTgzHR3HV5kaLH/wCH1Pdav2fxuHWxNdY=; b=OelFy3qun/4+OUHJQRyLVzDM+eEQL4qik9A9v8slQ9W6cEbTswGtRi82C0zmqSfCaR dS6JSXll7U8ISYEfBeQVbTUn7o1A1/He+M+3XD8+BWM/4eYq665adwH95B1BSuG3cJAP ShXhmYwghDh+L5lD7Bu7b0NU7BNdsmRcpnxCBkBTS5lGBB5ePBnDQW9cXq64VkdeT8Md 2YFbSRDcIp2d3cjL9ds0P/+mE6xeNBXkuLH8Xvv+EGhK/QmUgOl5OqHeA6YpmDdpY7eR ZWwIKRdeWvFdR0UTTzR2WNCHmR4ZlT96wysHBIXIvyuHIUt9b9gktpHUXbStR46wsnIA LQWQ== 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; bh=IwdgR4CAZqUTgzHR3HV5kaLH/wCH1Pdav2fxuHWxNdY=; b=LFOSJmDd/Cgqtqw1UwO5jMFsK9sMPrUUengVO2+TSvOdlsXdKLF66RNgQQzGCTO4x4 mrvACiUmCM7R6ygGshAeikXhdv5JEffcWxeptFMD1ftGw/2oaVb/UyV5yLqVJYrZBJlP IVHeoDchKc7h7Ze2kO0mfWf613Clt7PPZa4SDElE/+ya9IPaB7/2iA+5p+T6mMrUVQ2+ ur4ft6GXRupRAfG6qRzNCHLc1Svlyu0PBsTxS189zefE7doeRPjOHfrfUYvlmeJh0POT GbE7HzWimbPvAuopytPlb0/vbj1nDIgjVHttEHzKWFjitVpLuSXj38Iw+bYFZrwOV7ir U3jw== X-Gm-Message-State: APjAAAXEm5Jctu7WM0xspSX24gn5UTeHn18W/1TDTg4iJh44szOKKn49 NhQU5PqzR/Tbw+7QwDBWDuYkddpUe4nHqw== X-Google-Smtp-Source: APXvYqz4WYDo2X5tT4guQwyOQkqYM0FFIUm67mo71cQI3kVT2QYmZXCiMjJfENV32WGaRBE1/w/F+A== X-Received: by 2002:a63:4c14:: with SMTP id z20mr13272594pga.360.1558706650426; Fri, 24 May 2019 07:04:10 -0700 (PDT) Received: from localhost.localdomain ([120.57.120.132]) by smtp.gmail.com with ESMTPSA id u11sm2556766pfh.130.2019.05.24.07.04.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 May 2019 07:04:09 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Fri, 24 May 2019 19:33:31 +0530 Message-Id: <20190524140337.13415-4-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190524140337.13415-1-mehta.aaru20@gmail.com> References: <20190524140337.13415-1-mehta.aaru20@gmail.com> 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] [RFC PATCH v2 3/9] include/block: declare interfaces for io_uring X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , qemu-block@nongnu.org, saket.sinha89@gmail.com, Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Aarushi Mehta --- include/block/aio.h | 16 +++++++++++++++- include/block/raw-aio.h | 15 +++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) -- 2.17.1 diff --git a/include/block/aio.h b/include/block/aio.h index 0ca25dfec6..9da3fd9793 100644 --- a/include/block/aio.h +++ b/include/block/aio.h @@ -50,6 +50,7 @@ typedef void IOHandler(void *opaque); struct Coroutine; struct ThreadPool; struct LinuxAioState; +struct LuringState; struct AioContext { GSource source; @@ -118,11 +119,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. @@ -387,6 +396,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 ba223dd1f1..28a836151e 100644 --- a/include/block/raw-aio.h +++ b/include/block/raw-aio.h @@ -58,6 +58,21 @@ 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); +BlockAIOCB *luring_submit(BlockDriverState *bs, LuringState *s, int fd, + int64_t sector_num, QEMUIOVector *qiov, BlockCompletionFunc *cb, + void *opaque, 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 Fri May 24 14:03: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: 1104943 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="as+Vk1dQ"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 459Szb4Sjbz9s00 for ; Sat, 25 May 2019 00:14:19 +1000 (AEST) Received: from localhost ([127.0.0.1]:55279 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAxd-0002zN-E3 for incoming@patchwork.ozlabs.org; Fri, 24 May 2019 10:14:17 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40414) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAoF-0003KZ-FB for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hUAnw-0002YT-1d for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:17 -0400 Received: from mail-pf1-x443.google.com ([2607:f8b0:4864:20::443]:39268) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hUAnv-0002Y9-SF; Fri, 24 May 2019 10:04:15 -0400 Received: by mail-pf1-x443.google.com with SMTP id z26so5400650pfg.6; Fri, 24 May 2019 07:04:15 -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; bh=FCCo4ZKd5wKU/RZQx2PmB632H55T8NWp+BdOu+4KPVU=; b=as+Vk1dQb/OXplBcCrodEcfjzrOyUFTkmKNpRxw4yv6TfUS5817UwshGDj0XJ6ejnM 9+ioAfKcEBh7hWfuzfrzaeimZSP183So3K2xgOBvf2HvS2mv64ogRTgzP2mAonU/TgMp qKXaqD/Ii1f/FqshcpBCxukvQFy4BqZDUCgmfyfKVXY4UWEZXhsmXl1YEtJIjCrkji3x ELwQPsQvwBt1oFOeMW6FQgejkECNLrBVhWDgSx3kgb22PLsCDaaKddiV95mMvTBlES9L 4zrPrSbKD/tjuwPtCnyO5+2dLmPMZ0VOBgpS92vYTxFP5bZR3iHZM1paYvMWCBvDNxt2 X4wA== 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; bh=FCCo4ZKd5wKU/RZQx2PmB632H55T8NWp+BdOu+4KPVU=; b=Z6eo/z18iDMw/CLxIYhmK/Y643IYUbyw9HJynLSJUGuEDCf2yJb7WqhfTUh1s86r95 WmIMgt/HeOqUtHpS12ll3WQkPh0l8rVL3ZGRmKy+n2WIz6hm7v4f1ghH1sEgb8++23Dl VSBh5M2U7WucgRIWjX0tWZkUz3EwbPCVJAw4FMnURzi6fhwNiwsebnOAsm5HJZk1aiQV 4HPd+jTK5AV5rB/8qTpd4TyXGrIZ/3D0YrK78W12v8gRX4mACyJ0A4SljRk1/VeHv1FM UU5DBHo7Kft6JyWPmd4ze85WvWsK+5Wi+AukWN/9vPDHUMMJsvxDpmSGYMV39a3aNEc2 ofqw== X-Gm-Message-State: APjAAAW2eLTenmYS1/dq7CSYBnfqe0Za4yVr6LqTFx1Wp/eVZZTIq1nr FIA5k58uKIzxGcStQPO5b2GNoDPXslUbTQ== X-Google-Smtp-Source: APXvYqyblh9DSPxCfWtwBOq4be18VYrZfmBpEm3WGqUYA9EKA1eo8NqDaKBKhFGyKgiknrfFTbWuRg== X-Received: by 2002:a17:90a:6348:: with SMTP id v8mr9485166pjs.34.1558706654512; Fri, 24 May 2019 07:04:14 -0700 (PDT) Received: from localhost.localdomain ([120.57.120.132]) by smtp.gmail.com with ESMTPSA id u11sm2556766pfh.130.2019.05.24.07.04.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 May 2019 07:04:13 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Fri, 24 May 2019 19:33:32 +0530 Message-Id: <20190524140337.13415-5-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190524140337.13415-1-mehta.aaru20@gmail.com> References: <20190524140337.13415-1-mehta.aaru20@gmail.com> 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] [RFC PATCH v2 4/9] stubs: add aio interface stubs for io_uring X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , qemu-block@nongnu.org, saket.sinha89@gmail.com, Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Aarushi Mehta --- MAINTAINERS | 10 ++++++++++ stubs/Makefile.objs | 1 + stubs/io_uring.c | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 stubs/io_uring.c -- 2.17.1 diff --git a/MAINTAINERS b/MAINTAINERS index 3cacd751bf..b8fc1e3fe3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2504,6 +2504,16 @@ 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: stubs/io_uring.c + + +L: qemu-block@nongnu.original + qcow2 M: Kevin Wolf M: Max Reitz diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs index 73452ad265..ea158cf0ee 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 Fri May 24 14:03: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: 1104942 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Evo77aYy"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 459SwT23Lpz9s4V for ; Sat, 25 May 2019 00:11:36 +1000 (AEST) Received: from localhost ([127.0.0.1]:55227 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAuz-0008KP-20 for incoming@patchwork.ozlabs.org; Fri, 24 May 2019 10:11:33 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40377) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAoD-0003K3-Cx for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hUAo0-0002cW-4d for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:21 -0400 Received: from mail-pf1-x444.google.com ([2607:f8b0:4864:20::444]:37443) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hUAnz-0002c2-UU; Fri, 24 May 2019 10:04:20 -0400 Received: by mail-pf1-x444.google.com with SMTP id a23so5409939pff.4; Fri, 24 May 2019 07:04: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; bh=sX7eykaQ8cZK+ytZ0RoclnVS3C7FzTjrBrMveeNkyW0=; b=Evo77aYyLdCC6UeBeVsvqOqPSwLYkA7QMFLp3xjnKJei1ewqe8E1faz511cNBpd2t4 bNetoCn7+HmrJflvUtarj8sNiY5ZpAzC0T4JCBdEDaU4Dp2RwjPMyY8NKHnf0MsLrUR5 ejiL813hYUVBkGfWc4F/5g4Dl4OU9Yzy9Q29kCbIPJLSzgKxToZQYCWDTFhVxiuiFX7P GpPVGxojzRrk1dvXXyAFHp2QAS4gaLIpkHiSlQMYTHFN/GTugLUGEYwX7dK1H42+HGxl AyJ10GlZj+N9ytF2z+ngMwUDF1WAHh06Pwm59KfEr3OQIwsTzloHtmh05hT2DODLSUwE 9S/Q== 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; bh=sX7eykaQ8cZK+ytZ0RoclnVS3C7FzTjrBrMveeNkyW0=; b=FiAl5+1qsajmcMH2u5V1FLrfE9Qvg8J4xUXoppla/MT9Q4RIM2ZjbfeJAPJ3S+Mw5F mcsD5IUCmU63/71l8u9HWKmCiNbLyhRBS2zcpfqUVL1jyBh1kDb5bCyzIEtb4HItCGtj hkQRMuL7aX9JmXuTPR1MKPtTYfeTyTFWBZlBrrmtSHf0TwRwuM7mg0pvCy+mg7U1OJes ViLYXQexqxjf6NX6M4x+WZeToLmu92CkaH8AN556DFNj6/rQwVJrBDv1TjLxZS3rx7hM HtPCtR9CMv5lm3U5i/4/Y8lU74hobz+OZeKu+LvaADt8PJ9U4Sm2qWyPifa4O6udG94V HakQ== X-Gm-Message-State: APjAAAUdfdRgmKC0NvkHuAcZ/thoWoS39Rml4m60eI5WnkAvhkkS9zbG LeIr56F4mNC/BQWIAyOy6WhY2WnQ0Mxdgw== X-Google-Smtp-Source: APXvYqwLhpJDTAMkQDahfqbOoPmf7EOgUKZcljgITJVmaQJmhrI5gTmiuNfr+kuGyHE/2e4mSBwhYg== X-Received: by 2002:a63:1854:: with SMTP id 20mr103061860pgy.366.1558706658608; Fri, 24 May 2019 07:04:18 -0700 (PDT) Received: from localhost.localdomain ([120.57.120.132]) by smtp.gmail.com with ESMTPSA id u11sm2556766pfh.130.2019.05.24.07.04.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 May 2019 07:04:18 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Fri, 24 May 2019 19:33:33 +0530 Message-Id: <20190524140337.13415-6-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190524140337.13415-1-mehta.aaru20@gmail.com> References: <20190524140337.13415-1-mehta.aaru20@gmail.com> 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] [RFC PATCH v2 5/9] util/async: add aio interfaces for io_uring X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , qemu-block@nongnu.org, saket.sinha89@gmail.com, Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi --- util/async.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) -- 2.17.1 diff --git a/util/async.c b/util/async.c index c10642a385..2709f0edc3 100644 --- a/util/async.c +++ b/util/async.c @@ -277,6 +277,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); @@ -341,6 +349,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 @@ -432,6 +463,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 Fri May 24 14:03: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: 1104933 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="hnARXkqD"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 459SnW3kFfz9sB3 for ; Sat, 25 May 2019 00:05:31 +1000 (AEST) Received: from localhost ([127.0.0.1]:55087 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAoz-0003KA-GU for incoming@patchwork.ozlabs.org; Fri, 24 May 2019 10:05:21 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40377) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAo6-0003K3-8M for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hUAo4-0002f2-Lv for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:26 -0400 Received: from mail-pg1-x544.google.com ([2607:f8b0:4864:20::544]:40352) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hUAo4-0002eW-E1; Fri, 24 May 2019 10:04:24 -0400 Received: by mail-pg1-x544.google.com with SMTP id d30so5127519pgm.7; Fri, 24 May 2019 07:04:24 -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; bh=HHUEovWF7EXR7rQLHGWiE3cCOALQt2MWSiGE0Lugumc=; b=hnARXkqDXehZrh41tvfk/VvinNqGoFHEaHO7S9P9BWbveGmrHUX8YlP2d6xwwvxPp8 TqhdbzMQA8ZdDXlR9pwWvR8xlC/74TG2OOnYlJ0QV2Z8ZEoazCTm36XvdWFE6zt9chXy 7nhAbjyCDlQkdz4grnkMS62+3HqqrT8MO8ADoCVKHdBmXppJH/bXTXVP9I8mE52K8gHO 6wWSL724oNpzSZN7FYgZUd/37FF+IdLO+xRiLU0qdZiTZH1S3hcKsx/tgUu2Oe7tfIGr mKRyOXvZSMO3Y5RbzgDIs/sz50LBzsXh/riZE+1zu3xJtOjwrcDBZvRBvLuY+XLcrrES HPqg== 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; bh=HHUEovWF7EXR7rQLHGWiE3cCOALQt2MWSiGE0Lugumc=; b=lxhMIbXy/wnywi2JR1wuEC+jEQYb0pGJyXLn0PlDKDiYytUKJ/m93n7ULRiVJ9B3jR 8eMStQdYm91aRI4FbNslqIvdOoXh3CRcAPkXv4gsYG7+B1AHTdPphpF3Tc3KLr8SbL8F 9q9av74ruy36xywRhypLziTjJhe/zFQqtBjdcwl7KCz4SisPfkPwwtp99sURMJHQH9/R Tg0/NRLD+rnk3ovaPA+xjdpTW81qQNFNDO2tHPeKF8jDxjV8LYveTvHxKVn36ynvjjKK bs9nOt1/ThAQZLOk7fv619coJiBDRLcuCjEb3Q8byebn+A3WrCVt5XtIFdOXwQi/Xp9e ttyg== X-Gm-Message-State: APjAAAWV/sRTt0RdiDxggmb59ZV3fec208FSYNiZNI4/EAlt6z5J9NpW gdl8Yr48F/WF6UKu7yM3yrjTbXABNGVArA== X-Google-Smtp-Source: APXvYqyXiM6EZJrCb2ZykyUnksHiYEAKLkNKPtqbjWanj+f4XdxTvmsXzsCwtgV6Haj/PCx6GjixEw== X-Received: by 2002:a63:e018:: with SMTP id e24mr22720005pgh.361.1558706662971; Fri, 24 May 2019 07:04:22 -0700 (PDT) Received: from localhost.localdomain ([120.57.120.132]) by smtp.gmail.com with ESMTPSA id u11sm2556766pfh.130.2019.05.24.07.04.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 May 2019 07:04:22 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Fri, 24 May 2019 19:33:34 +0530 Message-Id: <20190524140337.13415-7-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190524140337.13415-1-mehta.aaru20@gmail.com> References: <20190524140337.13415-1-mehta.aaru20@gmail.com> 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] [RFC PATCH v2 6/9] block/io_uring: implements interfaces for io_uring X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , qemu-block@nongnu.org, saket.sinha89@gmail.com, Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Aarushi Mehta --- MAINTAINERS | 1 + block/Makefile.objs | 2 + block/io_uring.c | 306 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 309 insertions(+) create mode 100644 block/io_uring.c -- 2.17.1 diff --git a/MAINTAINERS b/MAINTAINERS index b8fc1e3fe3..770d562c6c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2510,6 +2510,7 @@ R: Stefan Hajnoczi L: qemu-block@nongnu.org S: Maintained F: stubs/io_uring.c +F: block/io_uring.c L: qemu-block@nongnu.original diff --git a/block/Makefile.objs b/block/Makefile.objs index 7a81892a52..262d413c6d 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,6 @@ 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-libs := -luring 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..817ec055db --- /dev/null +++ b/block/io_uring.c @@ -0,0 +1,306 @@ +/* + * 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 + +#include "qemu/osdep.h" +#include "qemu-common.h" +#include "block/aio.h" +#include "qemu/queue.h" +#include "block/block.h" +#include "block/raw-aio.h" +#include "qemu/event_notifier.h" +#include "qemu/coroutine.h" +#include "qapi/error.h" + +#define MAX_EVENTS 128 + +typedef struct LuringAIOCB { + BlockAIOCB common; + Coroutine *co; + struct io_uring_sqe sqeq; + int ret; + QSIMPLEQ_ENTRY(LuringAIOCB) next; +} LuringAIOCB; + +typedef struct LuringQueue { + int plugged; + unsigned int in_queue; + unsigned int in_flight; + bool blocked; + QSIMPLEQ_HEAD(, LuringAIOCB) pending; +} 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; + int event_idx; + int event_max; +} LuringState; + +static void ioq_submit(LuringState *s); + +static inline int io_cqe_ret(struct io_uring_cqe *cqe) +{ + return cqe->res; +} + +/** + * qemu_luring_process_completions: + * @s: AIO state + * + * Fetches completed I/O requests, consumes cqes and invokes their callbacks. + * + */ +static void qemu_luring_process_completions(LuringState *s) +{ + struct io_uring_cqe *cqes; + + qemu_bh_schedule(s->completion_bh); + + while ((s->event_max = s->io_q.in_flight) && + !io_uring_peek_cqe(&s->ring, &cqes)) { + for (s->event_idx = 0; s->event_idx < s->event_max;) { + io_uring_cqe_seen(&s->ring, cqes); + + LuringAIOCB *luringcb; + luringcb = g_malloc0(sizeof(luringcb)); + luringcb->ret = io_cqe_ret(cqes); + /* Change counters one-by-one because we can be nested. */ + s->io_q.in_flight--; + s->event_idx++; + } + } + + qemu_bh_cancel(s->completion_bh); + + /* + *If we are nested we have to notify the level above that we are done + * by setting event_max to zero, upper level will then jump out of it's + * own `for` loop. If we are the last all counters dropped to zero. + */ + s->event_max = 0; + s->event_idx = 0; +} + +static void qemu_luring_process_completions_and_submit(LuringState *s) +{ + aio_context_acquire(s->aio_context); + qemu_luring_process_completions(s); + + if (!s->io_q.plugged && !QSIMPLEQ_EMPTY(&s->io_q.pending)) { + ioq_submit(s); + } + aio_context_release(s->aio_context); +} + +static void qemu_luring_completion_bh(void *opaque) +{ + LuringState *s = opaque; + qemu_luring_process_completions_and_submit(s); +} + +static void qemu_luring_completion_cb(void *opaque) +{ + LuringState *s = opaque; + qemu_luring_process_completions_and_submit(s); +} + +static const AIOCBInfo luring_aiocb_info = { + .aiocb_size = sizeof(LuringAIOCB), +}; + + +static void ioq_init(LuringQueue *io_q) +{ + QSIMPLEQ_INIT(&io_q->pending); + io_q->plugged = 0; + io_q->in_queue = 0; + io_q->in_flight = 0; + io_q->blocked = false; +} + +static void ioq_submit(LuringState *s) +{ + int ret, len; + LuringAIOCB *luringcb; + QSIMPLEQ_HEAD(, LuringAIOCB) completed; + + while (s->io_q.in_flight >= MAX_EVENTS && s->io_q.in_queue) { + len = 0; + QSIMPLEQ_FOREACH(luringcb, &s->io_q.pending, next) { + if (s->io_q.in_flight + len++ >= MAX_EVENTS) { + break; + } + struct io_uring_sqe *sqes = io_uring_get_sqe(&s->ring); + if (sqes) { /* Prep sqe for subission */ + memset(sqes, 0, sizeof(*sqes)); + *sqes = luringcb->sqeq; + QSIMPLEQ_REMOVE_HEAD(&s->io_q.pending, next); + } else { + break; + } + } + + ret = io_uring_submit(&s->ring); + if (ret == -EAGAIN) { + break; + } + + s->io_q.in_flight += ret; + s->io_q.in_queue -= ret; + QSIMPLEQ_SPLIT_AFTER(&s->io_q.pending, luringcb, next, &completed); + } + 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. + */ + qemu_luring_process_completions(s); + } +} + +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 && !QSIMPLEQ_EMPTY(&s->io_q.pending)) { + ioq_submit(s); + } +} + +static int luring_do_submit(int fd, LuringAIOCB *luringcb, LuringState *s, + uint64_t offset, QEMUIOVector *qiov, int type) +{ + struct io_uring_sqe *sqes = io_uring_get_sqe(&s->ring); + if (!sqes) { + sqes = &luringcb->sqeq; + QSIMPLEQ_INSERT_TAIL(&s->io_q.pending, luringcb, next); + } + + switch (type) { + case QEMU_AIO_WRITE: + io_uring_prep_writev(sqes, fd, qiov->iov, qiov->niov, offset); + break; + case QEMU_AIO_READ: + io_uring_prep_readv(sqes, fd, qiov->iov, 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(); + } + + 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)) { + 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, + }; + + ret = luring_do_submit(fd, &luringcb, s, offset, qiov, type); + if (ret < 0) { + return ret; + } + + if (luringcb.ret == -EINPROGRESS) { + qemu_coroutine_yield(); + } + return luringcb.ret; +} + +BlockAIOCB *luring_submit(BlockDriverState *bs, LuringState *s, int fd, + int64_t sector_num, QEMUIOVector *qiov, BlockCompletionFunc *cb, + void *opaque, int type) +{ + LuringAIOCB *luringcb; + off_t offset = sector_num * BDRV_SECTOR_SIZE; + int ret; + + luringcb = qemu_aio_get(&luring_aiocb_info, bs, cb, opaque); + luringcb->ret = -EINPROGRESS; + ret = luring_do_submit(fd, luringcb, s, offset, qiov, type); + if (ret < 0) { + qemu_aio_unref(luringcb); + return NULL; + } + + return &luringcb->common; +} + +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, + (IOHandler *)qemu_luring_completion_cb, NULL, NULL, &s); +} + +LuringState *luring_init(Error **errp) +{ + int rc; + LuringState *s; + s = g_malloc0(sizeof(*s)); + struct io_uring *ring = &s->ring; + rc = io_uring_queue_init(MAX_EVENTS, ring, 0); + if (rc == -1) { + error_setg_errno(errp, errno, "failed to init linux io_uring ring"); + goto out_close_efd; + } + + ioq_init(&s->io_q); + return s; + +out_close_efd: + g_free(s); + return NULL; +} + +void luring_cleanup(LuringState *s) +{ + io_uring_queue_exit(&s->ring); + g_free(s); +} From patchwork Fri May 24 14:03: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: 1104939 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Oyf7mzRb"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 459Srt0XGtz9s6w for ; Sat, 25 May 2019 00:08:30 +1000 (AEST) Received: from localhost ([127.0.0.1]:55155 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUArz-0005ie-UB for incoming@patchwork.ozlabs.org; Fri, 24 May 2019 10:08:28 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40414) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAo9-0003KZ-M2 for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hUAo8-0002hm-Qa for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:29 -0400 Received: from mail-pf1-x444.google.com ([2607:f8b0:4864:20::444]:35973) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hUAo8-0002hC-H8; Fri, 24 May 2019 10:04:28 -0400 Received: by mail-pf1-x444.google.com with SMTP id v80so5410456pfa.3; Fri, 24 May 2019 07:04:28 -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; bh=bhbpjK0JQSStbd9y2pHNMHs1B0N4hnvXiiUW+QxkFQ4=; b=Oyf7mzRbIXIQby8DetG/3EjqhHBVqDNz9Y1nM/7bDJBnz7izbKc4ZzHBAbOyCdyXTD GArTtt7UgKx91rvU8Sn3yYtB/DAeQqN/z09uhD7mxo9nDuD+tCiQ17WF1B0n/Krciz6K dXXrkKy6G/w/Bcj+UjwtM4Xj2Zvh1CWy6ARQUfVYe7voE64rQBFJfErCwidNCgDwNUKM Q9/8Y8l+WzFLTubJpfJg93yLpHN0pY9WW+zxO/L7dba6ygmsbkc/3iXS+Lg3nlZv37vM Ij+p+IpK2AeWdS/EBHj2NDS1OJiEK4tnRqQU0QMGkzSK5vBhfLYQ+TNTvld/n35sQ8/4 j2yg== 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; bh=bhbpjK0JQSStbd9y2pHNMHs1B0N4hnvXiiUW+QxkFQ4=; b=fcb9nwjcLNJNm3AjNB1OB9oXeWmSjS5smDC5oQ9/MKofABv75YrLhhoPVDjrpOyQoe 6kss7OcWXN1qNCvt1r1NIXeBTWlXQRCRNB7tPB8nG1EE65iQgnRaW1OOsutezg3JHvDh S9WbHwtq7t/ZTfvtx0yLP6KIUIyJfY8bDeHELUXT244Yb/PBPSYlgpDLZ8raVLZp1faH HSGahLA+5KtqqJxvhy4j3xfFhoHoiuWjHVK/0f4z1P/iiamxXqLOSmx5gk9SZlHMNKOl hFfxOHUa8LkuKg5WUTKP/2ksun3L7xUBDeWpWEeutt+xL5l1tLOzFe9CGpezBeRZBLhI gmkA== X-Gm-Message-State: APjAAAX/6fY2/N/TFFazmd3HxZWJImkZ67PN++DvR9AZTDm/aBOxV+vf INGh2KfENmv6O8OgRWxsWoIf5KifRmeRjA== X-Google-Smtp-Source: APXvYqzpUrPhyOLEahTBrIgFjV89enubrXhSOEQ9zwPafgN7rEwry7KLVKssKuwOFyBNu0q9HFI0Cw== X-Received: by 2002:a63:5342:: with SMTP id t2mr2778154pgl.410.1558706667199; Fri, 24 May 2019 07:04:27 -0700 (PDT) Received: from localhost.localdomain ([120.57.120.132]) by smtp.gmail.com with ESMTPSA id u11sm2556766pfh.130.2019.05.24.07.04.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 May 2019 07:04:26 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Fri, 24 May 2019 19:33:35 +0530 Message-Id: <20190524140337.13415-8-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190524140337.13415-1-mehta.aaru20@gmail.com> References: <20190524140337.13415-1-mehta.aaru20@gmail.com> 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] [RFC PATCH v2 7/9] blockdev: accept io_uring as option X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , qemu-block@nongnu.org, saket.sinha89@gmail.com, Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi --- blockdev.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) -- 2.17.1 diff --git a/blockdev.c b/blockdev.c index 79fbac8450..b44b9d660d 100644 --- a/blockdev.c +++ b/blockdev.c @@ -386,6 +386,8 @@ 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, "io_uring")) { + *bdrv_flags |= BDRV_O_IO_URING; } else if (!strcmp(aio, "threads")) { /* this is the default */ } else { @@ -4547,7 +4549,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, From patchwork Fri May 24 14:03: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: 1104936 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="bNnXPd7J"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 459Snp0YLXz9s4V for ; Sat, 25 May 2019 00:05:50 +1000 (AEST) Received: from localhost ([127.0.0.1]:55101 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUApQ-0003UV-2B for incoming@patchwork.ozlabs.org; Fri, 24 May 2019 10:05:48 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40481) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAoN-0003SB-OH for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hUAoF-0002mX-Gj for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:38 -0400 Received: from mail-pl1-x643.google.com ([2607:f8b0:4864:20::643]:36270) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hUAoD-0002jz-DO; Fri, 24 May 2019 10:04:35 -0400 Received: by mail-pl1-x643.google.com with SMTP id d21so4229668plr.3; Fri, 24 May 2019 07:04:32 -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; bh=Bnl7EcppW2nmeABcnfX52ya1ob5IiGizIyyR9kXL2Gs=; b=bNnXPd7JvwWstWPX8lmMgxJrEHeWAR1s2EKh4rM9xhcIzuyrbzvzpi/nHsom79twv2 orN87HOU+iXcgsBdp9RFN4tzu1dNGcqO1MYuB3U0V/4nUHYjclnOe7dw8eOGbpN6VceL XdSmrwwBa1ax3LuLgrvovFPkzCo1nPti38Sn9+0MCzsvXQdoJ+OuYY1BE44CuxyEWrkE Nyux5H2E0naq2crKddGkBcwFu7+HkGe8de6ICD/icxavMa7KMMdqRWl24n+P3AmZY1+u yUIpEVeSGfVHTiYNyogOSdZ3t62J3U0Sy7NFUzuucPpen3yo+b0BV+kJeJ34G+LvYFF/ XiYA== 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; bh=Bnl7EcppW2nmeABcnfX52ya1ob5IiGizIyyR9kXL2Gs=; b=QKh84w03PWP9TmTGuPbPLERNIZeN2ZPzRnpbEtUg4MoWmNVDBaLAHxOjjHcINjKOkq zZfuleaV3EBuPVrcjCnkorgLis7lWf/zt5KsEePKV7c0Q7HEFucrVn8ZcyIbIDqb20sS ElMLx8cQKCv9JAFbGDEE+NG36MVu6OKXY2shqLaderLSDEdGDTK037KubXUXG1yAZ7I3 6L0IiU/Stog6oArq4SZdJodJjuj6WFnf5uVq+6Ite1Hsyrj20BQMPYvCQyOsX3MDe1Nt vtEFGwSLvjS2aXUf3h0HSu3rpzYXtl+6bLJa2mF6LO6lUU8k4xt96gMoDcv8ybfJevBg R7dg== X-Gm-Message-State: APjAAAUzBpqJbEke7/G4wfab9rkmSHxGQcu6IWoD/qpHd87NlE5ieBDW 2kC/J4wDpXT+lBgKMWmhfSFKyPL2v/VN+A== X-Google-Smtp-Source: APXvYqwuUsZku1PsiUrPWU5Qh/Ew67T39Hr95s6ATRLvE+izQYzjGoYuGOWJc+z1Zn8/VkzbKsukRg== X-Received: by 2002:a17:902:a982:: with SMTP id bh2mr2403318plb.224.1558706671221; Fri, 24 May 2019 07:04:31 -0700 (PDT) Received: from localhost.localdomain ([120.57.120.132]) by smtp.gmail.com with ESMTPSA id u11sm2556766pfh.130.2019.05.24.07.04.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 May 2019 07:04:30 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Fri, 24 May 2019 19:33:36 +0530 Message-Id: <20190524140337.13415-9-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190524140337.13415-1-mehta.aaru20@gmail.com> References: <20190524140337.13415-1-mehta.aaru20@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::643 Subject: [Qemu-devel] [RFC PATCH v2 8/9] block/file-posix: extends to use with io_uring X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , qemu-block@nongnu.org, saket.sinha89@gmail.com, Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Aarushi Mehta --- block/file-posix.c | 63 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 5 deletions(-) -- 2.17.1 diff --git a/block/file-posix.c b/block/file-posix.c index d018429672..1f24618cfc 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -154,6 +154,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; @@ -423,7 +424,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", @@ -494,6 +495,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, goto fail; } s->use_linux_aio = (aio == BLOCKDEV_AIO_OPTIONS_NATIVE); + s->use_linux_io_uring = (aio == BLOCKDEV_AIO_OPTIONS_IO_URING); locking = qapi_enum_parse(&OnOffAuto_lookup, qemu_opt_get(opts, "locking"), @@ -557,7 +559,9 @@ 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 " @@ -578,6 +582,21 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, goto fail; } #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; @@ -1883,6 +1902,12 @@ static int coroutine_fn raw_co_prw(BlockDriverState *bs, uint64_t offset, 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 +#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 } } @@ -1920,24 +1945,40 @@ static int coroutine_fn raw_co_pwritev(BlockDriverState *bs, uint64_t offset, static void raw_aio_plug(BlockDriverState *bs) { -#ifdef CONFIG_LINUX_AIO +#if defined CONFIG_LINUX_AIO || defined CONFIG_LINUX_IO_URING BDRVRawState *s = bs->opaque; +#endif +#ifdef CONFIG_LINUX_AIO 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) { -#ifdef CONFIG_LINUX_AIO +#if defined CONFIG_LINUX_AIO || defined CONFIG_LINUX_IO_URING BDRVRawState *s = bs->opaque; +#endif +#ifdef CONFIG_LINUX_AIO 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_aio) { + 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) @@ -1963,8 +2004,10 @@ static int raw_co_flush_to_disk(BlockDriverState *bs) static void raw_aio_attach_aio_context(BlockDriverState *bs, AioContext *new_context) { +#if defined CONFIG_LINUX_AIO || defined CONFIG_LINUX_IO_URING + BDRVRawState *s = bs->opaque; +#endif #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)) { @@ -1974,6 +2017,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 Fri May 24 14:03: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: 1104938 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="P0nP2Dog"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 459SpY75Ljz9s6w for ; Sat, 25 May 2019 00:06:29 +1000 (AEST) Received: from localhost ([127.0.0.1]:55143 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAq3-0004AU-Sd for incoming@patchwork.ozlabs.org; Fri, 24 May 2019 10:06:27 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40530) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hUAoR-0003TT-IV for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hUAoP-0002sY-1w for qemu-devel@nongnu.org; Fri, 24 May 2019 10:04:47 -0400 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]:33486) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hUAoN-0002nD-4M; Fri, 24 May 2019 10:04:44 -0400 Received: by mail-pl1-x641.google.com with SMTP id g21so4248170plq.0; Fri, 24 May 2019 07:04:37 -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; bh=mXSPb6nljQ3a7CRCQcFUnmtz50HC0QCQI3eoM4YTe0A=; b=P0nP2DogfxS5wY12rUxQWWz3RGjT4JdvKAbWC1/SknUminwjmvB6o5KbqV/6SCZibu WgzOVrk2tgw+NX0KvOCUwqY416wLuJWTwRJ3tqP12UoEH+dOqk3AX+J1nGREP02C95CR x5uT6iIjlo0t3ge3vgtc2g8/SoPWzB77dx1ifTMUt0Yti+9WtRs4pDl1tALvfsSk23wc mZ4mQ7bFxJb4YzZZyFUo+amZEGJklxwx2NQpFkLAKwjqJC/mIVPrK1g/UC3CV/rNBhT+ tyWpFlKSoisRZcsePk8iZPVVJjRIjkaZH3WouCQDHfekDjsT99PyBdse3Gd4zl0sJb+2 xLmQ== 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; bh=mXSPb6nljQ3a7CRCQcFUnmtz50HC0QCQI3eoM4YTe0A=; b=scWgOB1xFlXXFxeQRVKbKl8LzFt6uxW/UntBTsB/a7ZWuSFMxkSA5IaqXkMADO9FJH xT7odSUzSiL+Pxax7Z49SpHhSeZmkIY0d2vy5r7/iwHZ8XLxp+3slq0PtKXukIwY47if WkUTflDUtDC2Uf89qBGrOuUXJCw21aaBMU1hQ8oGIm6PHo/btUBnrxlLJIayy5QT7lKz oq6sPptNBOoHMJRy8prUE3Wrh1/8jGz3y9Ge0ccasfJ5pae2Gyu5nL+cLnbYxm+phjPH DCbrvdP6om7eJ8Byb4ocNS/HJF/O4xFV5PE73q/OazKb1pbu0ADKklhthtFDMlxp4qda lGSg== X-Gm-Message-State: APjAAAX9lpsJb46U1LHmB6Bv7M+cmO58ooW9Fs5ugv2wS2IF2zI0NvyR IAy2vPpqaqMX+am1GvkOJBngAE3MrEw+wA== X-Google-Smtp-Source: APXvYqz+uEgCOuj5OWmzqFp83Bm3XQTh9XCt8zY2DbjkXp8WE5g41uS68yMCdvVAlQihd83rGSnSWg== X-Received: by 2002:a17:902:ac90:: with SMTP id h16mr42558597plr.162.1558706675701; Fri, 24 May 2019 07:04:35 -0700 (PDT) Received: from localhost.localdomain ([120.57.120.132]) by smtp.gmail.com with ESMTPSA id u11sm2556766pfh.130.2019.05.24.07.04.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 May 2019 07:04:35 -0700 (PDT) From: Aarushi Mehta To: qemu-devel@nongnu.org Date: Fri, 24 May 2019 19:33:37 +0530 Message-Id: <20190524140337.13415-10-mehta.aaru20@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190524140337.13415-1-mehta.aaru20@gmail.com> References: <20190524140337.13415-1-mehta.aaru20@gmail.com> 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] [RFC PATCH v2 9/9] configure: permit use of io_uring X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , qemu-block@nongnu.org, saket.sinha89@gmail.com, Stefan Hajnoczi , Julia Suvorova , Aarushi Mehta Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Aarushi Mehta Reviewed-by: Stefan Hajnoczi --- configure | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) -- 2.17.1 diff --git a/configure b/configure index 528b9ff705..86383dc0b3 100755 --- a/configure +++ b/configure @@ -365,6 +365,7 @@ xen="" xen_ctrl_version="" xen_pci_passthrough="" linux_aio="" +linux_io_uring="" cap_ng="" attr="" libattr="" @@ -1255,6 +1256,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" @@ -1773,6 +1778,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 @@ -3962,6 +3968,23 @@ EOF linux_aio=no fi fi +########################################## +# linux-io-uring probe + +if test "$linux_io_uring" != "no" ; then + cat > $TMPC < +int main(void) { io_uring_queue_init(0, NULL, 0); io_uring_submit(NULL); return 0; } +EOF + if compile_prog "" "-luring" ; then + linux_io_uring=yes + else + if test "$linux_io_uring" = "yes" ; then + feature_not_found "linux io_uring" "Install liburing" + fi + linux_io_uring=no + fi +fi ########################################## # TPM emulation is only on POSIX @@ -6378,6 +6401,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" @@ -6858,6 +6882,9 @@ 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 +fi if test "$attr" = "yes" ; then echo "CONFIG_ATTR=y" >> $config_host_mak fi