Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp3643595pxu; Tue, 8 Dec 2020 18:27:58 -0800 (PST) X-Google-Smtp-Source: ABdhPJyNUcp1NLLl3yBMRqJrDuw3J8+O/PP9jK4v0ntEmAKRndXwiN22OnL3C6FtypYp87vlZKEl X-Received: by 2002:a17:906:17d1:: with SMTP id u17mr240361eje.229.1607480878197; Tue, 08 Dec 2020 18:27:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607480878; cv=none; d=google.com; s=arc-20160816; b=aS1rlMOGkriis7h05wFglvpAZ+UfspxXzZyPqXUZeIE7y//p8s+FwmncahroeC08E7 aRaWAUo7yahfYA9NEm0RPWjwxmDSju/GBotIb0cuMNJcqTA5Phpl0Xak1TYFWDd09fyV sQjg4EvzaN7sl3phNFBKWKrgr/nKiUk2HWJ0LjQeARZ6s1OVH/JwZOOk4TxiB908/xlJ ahsM+nGvdf9G9i5+pNTDx6oVIgy5ilZthoLQtBTUXXuk1uXgp0Lvu6YHTBEfquyBzH4d ua0q1gTqV/cQX/Trz7dXS/xyri3rHIlYmIku/1LeY9I4t3DPjW8l5go7FglSMC2RJTGR haAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=2oioyFLR2bFNpjjk5al2TpT+eS54q+WK5/M1bDWQq8Y=; b=Vs/k9w1656gJu8NnP6qGxJgD8vXbx7j3v7RAud9gn7kVFOQEdCH2XH47cvNhvrhp2H jecbGU02sdGA2c5ygXqeNMcBP5ClJlGxsHVMxod1yJZNnn/PXR/syBCqD+UMH79fxuoi EiaLdpveCTosoWePFHZUXUcVRHM7b7fbS8ehi0jCxvcSoGRCi9QYInteGqBavox3YyzB N8aP38xIQnvVW76Il3aLqhsB3GjpEx6Fd3YejuYMLbG4MKYn5XM4RS+OmaXDIMYenHc5 5DyuxLP3fggpoRDqkm/liU1yTqY0eDhcNzvE8no/7aktiUE1pDON73tYYkQ64lfSaqsJ Sycw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=oDJccotZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b11si69181edw.463.2020.12.08.18.27.36; Tue, 08 Dec 2020 18:27:58 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=oDJccotZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726732AbgLICYU (ORCPT + 99 others); Tue, 8 Dec 2020 21:24:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37842 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726715AbgLICYJ (ORCPT ); Tue, 8 Dec 2020 21:24:09 -0500 Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6EE2AC0613CF; Tue, 8 Dec 2020 18:23:23 -0800 (PST) Received: by mail-wm1-x343.google.com with SMTP id d3so126230wmb.4; Tue, 08 Dec 2020 18:23:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=2oioyFLR2bFNpjjk5al2TpT+eS54q+WK5/M1bDWQq8Y=; b=oDJccotZxIU1EHGzNTq4hfh5WcKNEFZmeQ3MaKAzRhp3LvOg33xVS5Zts/JLvl79bc 2chccfsoBYt8t4MpQJAs85iFB/9O7NAEX1IDyovACFDFoVOzZHk+GL7pWapo7oTjCVTk mvBhGOBGqIAG066p4hVZcsRiD7WGBxTmTwygzPu1Q9tcNejuRfoKvsFiDlQDDyxPPLfF HTycdtH0HWmnHe5nrXjGKoYySBQAoo/r69ZvKZ9lOf3hQCVrA81/Cx3sKHt5JQprbmdX y34y4++GXIP9gSitcNePRN3/htCNhRuSeovkaVJSkiUHXYudshBP8lnjjElY4oKMBBKd mOew== 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:mime-version :content-transfer-encoding; bh=2oioyFLR2bFNpjjk5al2TpT+eS54q+WK5/M1bDWQq8Y=; b=lFopdHnT+kBA95phFPK6k4Ua95CXHVpBzHnNdrG1iaLeCKGZJyWhmEOaR4TfFbb+Xr ageeeYyiqr9WEzQgWoi5k6QbGj5NJ5FKaRVm34CkrXDXyXVDDThSChOVQ2onu3a0RN4G mQFk6PKs5kuhLrQHaks1hKWrOlOsgkvKANin2a6MTp475aE6qft5dF/y9PpA0jlSWWHg k35GTwXjtT/sSC9CKy5Wrydr2OQhll4BgKQ96xnq1lmBHa1gUj2MDta7wl8O7SBKxtDt It9ZFWHmW04t6SFsZAFXJxn6OvZDaKuHu5lQU3eBg+heULq4qMc9YrE3NYCfl3nyRoHT H5PA== X-Gm-Message-State: AOAM533EtuqduvlShegIjLaPNnb624c61eIRYJUvxAhHtuGIFDrytgGJ xt8dbJKETQz9Y7DGUpALVPI= X-Received: by 2002:a1c:309:: with SMTP id 9mr303633wmd.80.1607480602202; Tue, 08 Dec 2020 18:23:22 -0800 (PST) Received: from localhost.localdomain ([85.255.233.156]) by smtp.gmail.com with ESMTPSA id k64sm330606wmb.11.2020.12.08.18.23.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Dec 2020 18:23:21 -0800 (PST) From: Pavel Begunkov To: Jens Axboe Cc: Alexander Viro , linux-fsdevel@vger.kernel.org, io-uring@vger.kernel.org, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, Christoph Hellwig , Matthew Wilcox , Ming Lei , Johannes Weiner Subject: [RFC 0/2] nocopy bvec for direct IO Date: Wed, 9 Dec 2020 02:19:50 +0000 Message-Id: X-Mailer: git-send-email 2.24.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The idea is to avoid copying, merging, etc. bvec from iterator to bio in direct I/O and use the one we've already got. Hook it up for io_uring. Had an eye on it for a long, and it also was brought up by Matthew just recently. Let me know if I forgot or misplaced some tags. A benchmark got me 430KIOPS vs 540KIOPS, or +25% on bare metal. And perf shows that bio_iov_iter_get_pages() was taking ~20%. The test is pretty silly, but still imposing. I'll redo it closer to reality for next iteration, anyway need to double check some cases. If same applied to iomap, common chunck can be moved from block_dev into bio_iov_iter_get_pages(), but if there any benefit for filesystems, they should explicitly opt in with ITER_BVEC_FLAG_FIXED. # how to apply based on Jens' for-11/block + Ming's nr_vec patch, + io_uring fix, 9c3a205c5ffa36e96903c2 ("io_uring: fix ITER_BVEC check") or there: https://github.com/isilence/linux/commits/bvec_nocopy # how to reproduce null_blk queue_mode=2 completion_nsec=0 submit_queues=NUM_CPU fio/t/io_uring with null blk, no iopoll, BS=16*4096 Cc: Christoph Hellwig Cc: Matthew Wilcox Cc: Ming Lei Cc: Johannes Weiner Pavel Begunkov (2): iov: introduce ITER_BVEC_FLAG_FIXED block: no-copy bvec for direct IO fs/block_dev.c | 30 +++++++++++++++++++++++++++++- fs/io_uring.c | 1 + include/linux/uio.h | 14 +++++++++++--- 3 files changed, 41 insertions(+), 4 deletions(-) -- 2.24.0