Received: by 2002:a05:7412:37c9:b0:e2:908c:2ebd with SMTP id jz9csp1720293rdb; Wed, 20 Sep 2023 18:45:29 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFWE1rDL+EP89n4MDLOJvx82Sv0Hp1Bov7uiSC8k7tRjJJ95NtIDV7vYsswYt/sRCT5vn6q X-Received: by 2002:a05:6a20:5494:b0:14d:d9f8:83f8 with SMTP id i20-20020a056a20549400b0014dd9f883f8mr4828361pzk.1.1695260729553; Wed, 20 Sep 2023 18:45:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695260729; cv=none; d=google.com; s=arc-20160816; b=t5oRsEnQCuAOQVBLnLKu3Sqdiev9iEjG5sJS9dVka1xXDH6dZxSZBLt+pdaDl2xjm0 AVPKdhVIwIezRc0y1eV+C6ue+GB887DTZTQVaTDJqJDycpTbx3bNLSnJvWGlIaWseo3N dWqLbXXYENGSznIfHIKZWWaIygKcCz3IxGm3e5IxUWW7zQt4kMiaa7763lf66tyMqC5s /IGareax8qmpOh15S73uhUckQVFEpd4Qo4H/myF2kjJ/G1O7SLIUbu9AFVeyqKs2lCqJ K+GX09FYrZ5ao2BWaX367DPl6d7QMliiDAZpZlRDeEQUpOaY26qJDZdDZOlCNqFbUeXB JS4g== 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=3xEcAxdVo0QbYUsmze3l+A9lWAZy7tCqYqfeJQv6WXY=; fh=w7b4NG8ulAt6eBvap6Myi0JpDyl4pl4XsJ4OcGBZIpE=; b=W9JhO7a9XyDSIXs+WAx6TWq0upe8HcivtC38u6g09GL1sFfgeriy8wmp1C3lMMbxYj Ta2mvP+AWIooj7P393HuZR8LfmRO8LFPgSRD57wGf4KMUkVjIMVQY7VrN5bWNzBKfq2l DlYBn0CKTMU7K003fSChcRYIe8E26sb79P4pDcBQ+ud723fTseiqOJ0lLcgPl72C2X0m plQUbiQ3LUZZSjNJedEhcb/rd0KOMdBgXapGC1GisPl5Yi8MpWJGrzVsYdq2kjTdANVL 00FA1utATLGCs57Bz3UPtsKqiwFRS+G8VImZKwDTXc3w/bpWBxxcysxi8bckOp9V0UKl 8O7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=V7wX0UoM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id n3-20020a170903404300b001b8921fbd87si301351pla.490.2023.09.20.18.45.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Sep 2023 18:45:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=V7wX0UoM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 24A04802373E; Wed, 20 Sep 2023 06:05:16 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236423AbjITNFK (ORCPT + 99 others); Wed, 20 Sep 2023 09:05:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53226 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234829AbjITNFI (ORCPT ); Wed, 20 Sep 2023 09:05:08 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 88833AD for ; Wed, 20 Sep 2023 06:04:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695215051; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=3xEcAxdVo0QbYUsmze3l+A9lWAZy7tCqYqfeJQv6WXY=; b=V7wX0UoM3Fm36V1546bJVhk1V8H9co4538K9YPx3IvnaXMz+29619lpzrzcbKc+FjYzxS3 h8mRJNo2adYqKYa+v6YGy0KZKw655/w+AoWixY6NBwLfdaBVvz+Nf7lupOZmFgc652bTBu ZW9yH5xJfll7nmydZRdjUhatWSvFkgM= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-602-mff24TgoP1-vGnBtTIgghw-1; Wed, 20 Sep 2023 09:04:08 -0400 X-MC-Unique: mff24TgoP1-vGnBtTIgghw-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A1BA03812592; Wed, 20 Sep 2023 13:04:07 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id EB7DA10F1BE7; Wed, 20 Sep 2023 13:04:03 +0000 (UTC) From: David Howells To: Jens Axboe Cc: David Howells , Al Viro , Linus Torvalds , Christoph Hellwig , Christian Brauner , David Laight , Matthew Wilcox , Brendan Higgins , David Gow , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org Subject: [RFC PATCH v2 0/9] iov_iter: kunit: Cleanup, abstraction and more tests Date: Wed, 20 Sep 2023 14:03:51 +0100 Message-ID: <20230920130400.203330-1-dhowells@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Spam-Status: No, score=2.7 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_SBL_CSS,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.6 X-Spam-Level: ** X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Wed, 20 Sep 2023 06:05:16 -0700 (PDT) Hi Jens, Can you consider taking this through the block tree? These patches make some changes to the kunit tests previously added for iov_iter testing, in particular adding testing of UBUF/IOVEC iterators and some benchmarking: (1) Clean up a couple of checkpatch style complaints. (2) Consolidate some repeated bits of code into helper functions and use the same struct to represent straight offset/address ranges and partial page lists. (3) Add a function to set up a userspace VM, attach the VM to the kunit testing thread, create an anonymous file, stuff some pages into the file and map the file into the VM to act as a buffer that can be used with UBUF/IOVEC iterators. I map an anonymous file with pages attached rather than using MAP_ANON so that I can check the pages obtained from iov_iter_extract_pages() without worrying about them changing due to swap, migrate, etc.. [?] Is this the best way to do things? Mirroring execve, it requires a number of extra core symbols to be exported. Should this be done in the core code? (4) Add tests for copying into and out of UBUF and IOVEC iterators. (5) Add tests for extracting pages from UBUF and IOVEC iterators. (6) Add tests to benchmark copying 256MiB to UBUF, IOVEC, KVEC, BVEC and XARRAY iterators. (7) Add a test to benchmark copying 256MiB through dynamically allocated 256-page bvecs to simulate bio construction. Example benchmarks output: iov_kunit_benchmark_ubuf: avg 4474 uS, stddev 1340 uS iov_kunit_benchmark_iovec: avg 6619 uS, stddev 23 uS iov_kunit_benchmark_kvec: avg 2672 uS, stddev 14 uS iov_kunit_benchmark_bvec: avg 3189 uS, stddev 19 uS iov_kunit_benchmark_bvec_split: avg 3403 uS, stddev 8 uS iov_kunit_benchmark_xarray: avg 3709 uS, stddev 7 uS I've pushed the patches here also: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=iov-kunit David Changes ======= ver #2) - Use MAP_ANON to make the user buffer if we don't want a list of pages. - KUNIT_ASSERT_NOT_ERR_OR_NULL() doesn't like __user pointers as the condition, so cast. - Make the UBUF benchmark loop, doing an iterator per page so that the overhead from the iterator code is not negligible. - Make the KVEC benchmark use an iovec per page so that the iteration is not not negligible. - Switch the benchmarking to use copy_from_iter() so that only a single page is needed in the userspace buffer (as it can be shared R/O), not 256MiB's worth. Link: https://lore.kernel.org/r/20230914221526.3153402-1-dhowells@redhat.com/ # v1 David Howells (9): iov_iter: Fix some checkpatch complaints in kunit tests iov_iter: Consolidate some of the repeated code into helpers iov_iter: Consolidate the test vector struct in the kunit tests iov_iter: Consolidate bvec pattern checking iov_iter: Create a function to prepare userspace VM for UBUF/IOVEC tests iov_iter: Add copy kunit tests for ITER_UBUF and ITER_IOVEC iov_iter: Add extract kunit tests for ITER_UBUF and ITER_IOVEC iov_iter: Add benchmarking kunit tests iov_iter: Add benchmarking kunit tests for UBUF/IOVEC arch/loongarch/include/asm/page.h | 1 + arch/s390/kernel/vdso.c | 1 + fs/anon_inodes.c | 1 + kernel/fork.c | 2 + lib/kunit_iov_iter.c | 1241 ++++++++++++++++++++++++----- mm/mmap.c | 1 + mm/util.c | 3 + 7 files changed, 1058 insertions(+), 192 deletions(-)