From nobody Mon Jun 8 19:55:31 2026 Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.174]) (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 3B06519E96D for ; Wed, 27 May 2026 05:45:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779860716; cv=none; b=kOyH7UrdGucQbsGY00U4Cv691XEQsz1sDQ6VyccMzk3jatDTtGv4tkfHoqgIAr54znnIJe02zbW3hMK6DLVVPt8MUvTgYcUpFGh39ZnbPMf4JH/vsawWBzljUsQlx3ttlWlf2EgIaXjawPJ8b/DdEEXL9oBJae7ne2EN/tFjjmM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779860716; c=relaxed/simple; bh=PyYkHpXF16JRctVZ/w4gU/3KEOtKkVQTky7EuOT+//Y=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=rpAAd+RpC/rIsnxe6b/lLpaLTWVcHVTE25p+Dz6uD/dctxvfmPbhypDJCtDYEDIWJ0/4v6r8laTs+syT/nguNMCyZsz5116DZ2pfUwO9uIoUH6oUo1GHNiBrUmB5/P319qeVJfPdqjdr2vx7lRylTW7OvD3dTOaJjsb8MnUmVw0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=oX9v/vMg; arc=none smtp.client-ip=209.85.215.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="oX9v/vMg" Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-c8026aa4d53so8266093a12.3 for ; Tue, 26 May 2026 22:45:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779860714; x=1780465514; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=h+X4DuQvTJQaN7iaXZhQ6y46vX3ezvOd+9jCvVhO4J8=; b=oX9v/vMgV72vpeBNYtvsgBXtJev4ENA/OBXJ/nw7+5dYv/LtUgJ+WccnWU4h4yGqeb IRMefgrHzLRfCJgGZ5zxS/pntXFV3LRMJ5J9nzOwqzwDp2CK4dCOt2jchsiZ3nSzJYea Hesxtk7zG7B9YFAhvfYJZQ2vqLWsJOIWtgWywgZNWMIfNtVE3O8/HpalB7hM4hOAuW4W Kn/4phbiKnySmNr86lmtkw3hP+H8gkNdboFwDNZD46288DG4P9lAcaJb0AAaaSggh4Sx JwhIu/ixotZfKJWAjjk0tQJsj5d/Ft5655OaQSIDfa/sEko9QSEyqvk7iuQEPW4UqoPl dboQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779860714; x=1780465514; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=h+X4DuQvTJQaN7iaXZhQ6y46vX3ezvOd+9jCvVhO4J8=; b=rCn2xyIMhAH1dWWoYqoWfldGIQwxtPy15HAiYsdOUaQLMRVW8AGMjbrEb3xS99s9eh CahmpohOZ4FOwIhIgy4GAhN41nQTEM2QNXk+0YY/X3ycbGErblg1gfs++QGDoWvIRilV E8OqSYtPuB9QWu81gG3MJqk6HJjKRnJyy7VjCA9IXZyl2ZiZb7haPnJVScIhK0GJ1SRL hzdFpp65KCqVlQ6x+5QRTlXdRLYxpQDuwZAQz02nrXoDk/S9ITu0JdLtj+Zg5FD7y1E+ Ftcy2UY/pI1SaCoKhnPlK5GXVqzVVpZT4bYjIV/doKfm0VV25JMt5QafR/CJVLwv3hXJ CRig== X-Forwarded-Encrypted: i=1; AFNElJ9khqytvKB+9BFtG7lolt1YVnxIb3YUkr5t4XK0YPFfxc31pcuMiVzhT2T011iHLdjnPBC+A9Rk+dozuXU=@vger.kernel.org X-Gm-Message-State: AOJu0YxO13eCW8pRlL4Fb/Xm0iNJADKh6fmIX5DZZKewXx/+XQ0/OzIf wtWd0oRi3mCn4SmLpeH9BkQFo67lVt280PqU8aOQfOlSBoj9/kZvzdqX X-Gm-Gg: Acq92OF5rv4os7e9hmlY8OXL2BECotUwD5FC/8/bZdwJz9bgdeoB4qZa3ksJom9NY2s 8px5xmcKSh2o4Si0nMbfFHpw6Mrx+R0WQ7lrwFMx6zO2A/BNX7DtXmsReo2q7tykL8ncnYHU7B4 qyGqBsndSn0krYRBlxqXBvZ/7zo/ITJ/lV8oboE8RI80Fawhd2lN17OfL1E2J2BYVx6Z/QhEPdn L1hS56yfPlMPpdZRfsD2hcHz1xPkOLkJEtK7/55EiiXvJumYYDMOqrgspVwDX01ww/9SiKq67fI LI9Eb7BxkkICU6CHrigFVVAiJ7DiVOJ/SqGXbJsTEjln+kcVVQ9zI000+74cTpeT0jLukDiBxMl vVsTEVZBuWeWq6sqB8b1GRJHzFQd/m1SEWVteXZ9M2zTAvQcU9yBSW/QtaKkw3TFbxbaEcXJvv5 wseVFO351u08yhU7U7CvkQ7+JT4ciCWELTbJxBtrowHF/7D626m0981qBFJzp4Ing/+aFu4w== X-Received: by 2002:a05:6a20:244c:b0:39f:3efb:e888 with SMTP id adf61e73a8af0-3b328eac3e7mr21571072637.25.1779860714494; Tue, 26 May 2026 22:45:14 -0700 (PDT) Received: from qiwenjie-ThinkCentre-M760t.mioffice.cn ([43.224.245.241]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c85200c3feesm11941196a12.0.2026.05.26.22.45.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 May 2026 22:45:14 -0700 (PDT) From: Wenjie Qi X-Google-Original-From: Wenjie Qi To: jaegeuk@kernel.org, chao@kernel.org Cc: linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org, qiwenjie@xiaomi.com, qwjhust@gmail.com Subject: [PATCH] f2fs: skip direct I/O iostat work when disabled Date: Wed, 27 May 2026 13:45:07 +0800 Message-ID: <20260527054507.1900373-1-qiwenjie@xiaomi.com> X-Mailer: git-send-email 2.43.0 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" F2FS iostat is optional and is disabled by default, but the direct I/O submit path still allocates and binds a bio_iostat_ctx, updates the submit timestamp, and replaces bi_end_io for every DIO bio even when sbi->iostat_enable is false. The end_io path also calls f2fs_update_iostat(), which returns immediately when iostat is disabled. This adds avoidable per-bio overhead to the default direct I/O hot path. Skip DIO iostat context setup and the direct read/write byte updates when iostat is disabled. If iostat is enabled through sysfs before submission, the existing context allocation and latency accounting path is still used. QEMU benchmark on a 1GiB F2FS virtio-blk image, with iostat_enable=3D0, 4KiB O_DIRECT I/O over a 64MiB file, 50000 iterations per run: baseline patched direct_read median 65264.50 ns 55470.95 ns direct_read recheck 65553.75 ns 55470.95 ns direct_write median 68054.62 ns 56309.44 ns direct_write recheck 66873.51 ns 56309.44 ns Signed-off-by: Wenjie Qi --- fs/f2fs/file.c | 9 +++++++-- fs/f2fs/iostat.h | 6 ++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index 6edf0105dbc8..3ad8bd660b33 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -4799,6 +4799,9 @@ static void f2fs_dio_iostat_start(struct f2fs_sb_info= *sbi, struct bio *bio) { void *bi_private =3D bio->bi_private; =20 + if (!f2fs_iostat_enabled(sbi)) + return; + iostat_alloc_and_bind_ctx(sbi, bio, bi_private); iostat_update_submit_ctx(bio, DATA); bio->bi_end_io =3D f2fs_dio_end_bio; @@ -4816,7 +4819,8 @@ static int f2fs_dio_read_end_io(struct kiocb *iocb, s= size_t size, int error, dec_page_count(sbi, F2FS_DIO_READ); if (error) return error; - f2fs_update_iostat(sbi, NULL, APP_DIRECT_READ_IO, size); + if (f2fs_iostat_enabled(sbi)) + f2fs_update_iostat(sbi, NULL, APP_DIRECT_READ_IO, size); return 0; } =20 @@ -5097,7 +5101,8 @@ static int f2fs_dio_write_end_io(struct kiocb *iocb, = ssize_t size, int error, if (error) return error; f2fs_update_time(sbi, REQ_TIME); - f2fs_update_iostat(sbi, NULL, APP_DIRECT_IO, size); + if (f2fs_iostat_enabled(sbi)) + f2fs_update_iostat(sbi, NULL, APP_DIRECT_IO, size); return 0; } =20 diff --git a/fs/f2fs/iostat.h b/fs/f2fs/iostat.h index 2025225b5bed..d3ef787575be 100644 --- a/fs/f2fs/iostat.h +++ b/fs/f2fs/iostat.h @@ -44,6 +44,11 @@ struct bio_iostat_ctx { struct bio_post_read_ctx *post_read_ctx; }; =20 +static inline bool f2fs_iostat_enabled(struct f2fs_sb_info *sbi) +{ + return sbi->iostat_enable; +} + static inline void iostat_update_submit_ctx(struct bio *bio, enum page_type type) { @@ -72,6 +77,7 @@ static inline void f2fs_update_iostat(struct f2fs_sb_info= *sbi, struct inode *in enum iostat_type type, unsigned long long io_bytes) {} static inline void f2fs_update_read_folio_count(struct f2fs_sb_info *sbi, struct folio *folio) {} +static inline bool f2fs_iostat_enabled(struct f2fs_sb_info *sbi) { return = false; } static inline void iostat_update_and_unbind_ctx(struct bio *bio) {} static inline void iostat_alloc_and_bind_ctx(struct f2fs_sb_info *sbi, struct bio *bio, struct bio_post_read_ctx *ctx) {} --=20 2.43.0