From nobody Wed Dec 17 10:48:53 2025 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E4B141CD208 for ; Wed, 19 Mar 2025 00:15:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343355; cv=none; b=Ol3lFSbD+AY0WJ3fUyja9BOGBLdcRuzyA81i2LIBVmn/nJWGJurRowfk7t7APew3iOJTmUzEb9cwDm6eBH82uYfbRen06GZuB/TrjHDS2AUMueOl6k9BpW1iHCKFQsKTEaqWeY+y9awdl6DFhDRHSk6QjLGMjWj4vtJ8k5iBWIA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343355; c=relaxed/simple; bh=l6eI5FceV5Cykwuzpt3OkcP+LeKArrcDOklFOAM4Tzc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=d/J7DIu0HxkZb3ZGngLNslAZavYMIit8JiKLzs089kiJ62+0MVUytQQqPSTWG3OeBy9I6ihs34uTi71YK8Y92VwfIfEtbD3uWIba9mDn6Zx1jlEhdqlpKhlSzjAjEFWpFU0KsD24kGGuLeAnKloaHHD3D8b4lLHNLAfTY1KCm50= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=vYT0YI/q; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="vYT0YI/q" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-22435603572so102465425ad.1 for ; Tue, 18 Mar 2025 17:15:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1742343353; x=1742948153; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=GCjuaqhwOiDHFc+loZsxbFlVswHaNNd+fRkOYDgDDk0=; b=vYT0YI/qIAMQv3nwASjjKB0WzkosloZq27M6ZaOiU5+It2z5k7Ckq1fd8arWHQ05i3 wxR1l1GQrwWKjpIlNNTBNYB2rEzDuaQJgbUfW/2mHQsbksSmYmMTVPYFOmI7E5UQKA1C xYAsqpUnAZ9BU3ZJQJTRdY0g5RYiuHIfb6Iqo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742343353; x=1742948153; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GCjuaqhwOiDHFc+loZsxbFlVswHaNNd+fRkOYDgDDk0=; b=oxfDAtLR0qUIuwyoZDaHtnPC5ufSVLq8NouMwutmhUfvMhaPwey2xc5kdsKF9KCRX7 4ng5LzsluW7apxZzS2r7n0lOKce0sRzjbavM5PKzLiJzOGm2Tqlhpx1aDfcNTNaS9MNG v5P1mc+VyZsSq3TlFdAMNR+GD2IC2vqwG6pEZxkK1Qu/pt+pv1+0MMj1n4zgShSCPkG7 JGGT5uAv6RFylXLrIiscBqIRvK8O3rKI0H4l57ntCYFRShdZ/jitvD7Qwh7FRSfO2VlC uyjMMos3Gt8Qd6JlKDnZAHNd2gkeUeD5WqDK3xlBPLvQeHPyHDOMYb7BIg/+ypGHFTLu M1XQ== X-Gm-Message-State: AOJu0YyUXTWesNvGu2OL6y/Dxhvpbh1MGERKcujnDA/zIOM0OxXaOvTZ AGqf54LDBAzMceJE4noOwT+hkXX4IVbZx9velRFaKEWCEFb04I/nao9rnYo5BCc= X-Gm-Gg: ASbGncudwItsUrtaxWmdJ9hnY2znuw7Our5+3F3cOY0JjBodP7h/8iIpnPhpzicYK1+ h3f4JnmXd1E5+Liebe9OdldkDEZDSUdggnUJy4iCk+ow/NFaDgOfzS4K6FztJ8XK0Eu4FRohU+X ouK/CWqOd1Kry91GCUkk69akevIi3iB+GAIeDWPzw5TyJHsrqnfacXLN50uzT67pwHQS++XrQev RWdmtm305+KLqL2TtiNRK0pH/LLDnMQpmJK0fnUlyEBUeP4392E92CxeVUc2VxyKN4h5IvcEJiI /e+XMwc9cRRF/f1rhxDJS7ikejTJVQgOoyBf6QckON/JL4/Wcc4KMxaiqpHP2to= X-Google-Smtp-Source: AGHT+IGyJJUfiVi7domxxVJWnLd5oPGvI2NnmEftJelHGqwd1vZMeJiUnL793ZEEGGeMZjX9WP3DFw== X-Received: by 2002:a17:902:f60d:b0:223:3b76:4e22 with SMTP id d9443c01a7336-2264980c773mr9656025ad.6.1742343353358; Tue, 18 Mar 2025 17:15:53 -0700 (PDT) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-225c68a4876sm101281375ad.70.2025.03.18.17.15.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Mar 2025 17:15:52 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, asml.silence@gmail.com, linux-fsdevel@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, horms@kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, viro@zeniv.linux.org.uk, jack@suse.cz, kuba@kernel.org, shuah@kernel.org, sdf@fomichev.me, mingo@redhat.com, arnd@arndb.de, brauner@kernel.org, akpm@linux-foundation.org, tglx@linutronix.de, jolsa@kernel.org, linux-kselftest@vger.kernel.org, Joe Damato Subject: [RFC -next 10/10] selftests: Add sendfile zerocopy notification test Date: Wed, 19 Mar 2025 00:15:21 +0000 Message-ID: <20250319001521.53249-11-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250319001521.53249-1-jdamato@fastly.com> References: <20250319001521.53249-1-jdamato@fastly.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend the existing the msg_zerocopy test to allow testing sendfile to ensure that notifications are generated. Signed-off-by: Joe Damato --- tools/testing/selftests/net/msg_zerocopy.c | 54 ++++++++++++++++++++- tools/testing/selftests/net/msg_zerocopy.sh | 5 ++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/net/msg_zerocopy.c b/tools/testing/sel= ftests/net/msg_zerocopy.c index 7ea5fb28c93d..20e334b25fbd 100644 --- a/tools/testing/selftests/net/msg_zerocopy.c +++ b/tools/testing/selftests/net/msg_zerocopy.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -50,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -74,6 +76,14 @@ #define MSG_ZEROCOPY 0x4000000 #endif =20 +#ifndef SENDFILE_ZC +#define SENDFILE_ZC (0x2) +#endif + +#ifndef __NR_sendfile2 +#define __NR_sendfile2 467 +#endif + static int cfg_cork; static bool cfg_cork_mixed; static int cfg_cpu =3D -1; /* default: pin to last cpu */ @@ -87,6 +97,8 @@ static int cfg_verbose; static int cfg_waittime_ms =3D 500; static int cfg_notification_limit =3D 32; static bool cfg_zerocopy; +static bool cfg_sendfile; +static const char *cfg_sendfile_path; =20 static socklen_t cfg_alen; static struct sockaddr_storage cfg_dst_addr; @@ -182,6 +194,37 @@ static void add_zcopy_cookie(struct msghdr *msg, uint3= 2_t cookie) memcpy(CMSG_DATA(cm), &cookie, sizeof(cookie)); } =20 +static bool do_sendfile(int fd) +{ + int from_fd =3D open(cfg_sendfile_path, O_RDONLY, 0); + struct stat buf; + ssize_t total =3D 0; + ssize_t ret =3D 0; + off_t off =3D 0; + + if (fd < 0) + error(1, errno, "couldn't open sendfile path"); + + if (fstat(from_fd, &buf)) + error(1, errno, "couldn't fstat"); + + while (total < buf.st_size) { + ret =3D syscall(__NR_sendfile2, fd, from_fd, &off, buf.st_size, + SENDFILE_ZC); + if (ret < 0) + error(1, errno, "unable to sendfile"); + total +=3D ret; + sends_since_notify++; + bytes +=3D ret; + packets++; + if (ret > 0) + expected_completions++; + } + + close(from_fd); + return total =3D=3D buf.st_size; +} + static bool do_sendmsg(int fd, struct msghdr *msg, bool do_zerocopy, int d= omain) { int ret, len, i, flags; @@ -550,6 +593,8 @@ static void do_tx(int domain, int type, int protocol) do { if (cfg_cork) do_sendmsg_corked(fd, &msg); + else if (cfg_sendfile) + do_sendfile(fd); else do_sendmsg(fd, &msg, cfg_zerocopy, domain); =20 @@ -715,7 +760,7 @@ static void parse_opts(int argc, char **argv) =20 cfg_payload_len =3D max_payload_len; =20 - while ((c =3D getopt(argc, argv, "46c:C:D:i:l:mp:rs:S:t:vz")) !=3D -1) { + while ((c =3D getopt(argc, argv, "46c:C:D:i:l:mp:rs:S:t:vzf:w:")) !=3D -1= ) { switch (c) { case '4': if (cfg_family !=3D PF_UNSPEC) @@ -767,9 +812,16 @@ static void parse_opts(int argc, char **argv) case 'v': cfg_verbose++; break; + case 'f': + cfg_sendfile =3D true; + cfg_sendfile_path =3D optarg; + break; case 'z': cfg_zerocopy =3D true; break; + case 'w': + cfg_waittime_ms =3D 200 + strtoul(optarg, NULL, 10) * 1000; + break; } } =20 diff --git a/tools/testing/selftests/net/msg_zerocopy.sh b/tools/testing/se= lftests/net/msg_zerocopy.sh index 89c22f5320e0..c735e4ab86b5 100755 --- a/tools/testing/selftests/net/msg_zerocopy.sh +++ b/tools/testing/selftests/net/msg_zerocopy.sh @@ -74,6 +74,7 @@ esac cleanup() { ip netns del "${NS2}" ip netns del "${NS1}" + rm -f sendfile_data } =20 trap cleanup EXIT @@ -106,6 +107,9 @@ ip -netns "${NS2}" addr add fd::2/64 dev "${DEV}"= nodad # Optionally disable sg or csum offload to test edge cases # ip netns exec "${NS1}" ethtool -K "${DEV}" sg off =20 +# create sendfile test data +dd if=3D/dev/zero of=3Dsendfile_data bs=3D1M count=3D8 2> /dev/null + do_test() { local readonly ARGS=3D"$1" =20 @@ -118,4 +122,5 @@ do_test() { =20 do_test "${EXTRA_ARGS}" do_test "-z ${EXTRA_ARGS}" +do_test "-z -f sendfile_data ${EXTRA_ARGS}" echo ok --=20 2.43.0