From: Tao Cui <cui.tao@linux.dev>
To: tj@kernel.org, josef@toxicopanda.com, axboe@kernel.dk
Cc: cgroups@vger.kernel.org, linux-block@vger.kernel.org,
linux-kernel@vger.kernel.org, bpf@vger.kernel.org,
andrii@kernel.org, ast@kernel.org, daniel@iogearbox.net,
linux-kselftest@vger.kernel.org, cui.tao@linux.dev,
Tao Cui <cuitao@kylinos.cn>
Subject: [RFC PATCH 4/8] blk-iocost: dispatch cost calculation to registered BPF model
Date: Tue, 8 Sep 2026 18:01:39 +0800 [thread overview]
Message-ID: <20260908100143.47598-5-cui.tao@linux.dev> (raw)
In-Reply-To: <20260908100143.47598-1-cui.tao@linux.dev>
From: Tao Cui <cuitao@kylinos.cn>
Add the bpf_cost_model field to struct ioc and the dispatch hook in
calc_vtime_cost(): when a BPF model is registered and the device has
opted in (bpf_cost_model set), call the model's calc_cost instead of
the builtin formula. If no model is registered anymore the builtin
formula is used as fallback.
The user interface to set bpf_cost_model follows.
Signed-off-by: Tao Cui <cuitao@kylinos.cn>
---
block/blk-iocost.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/block/blk-iocost.c b/block/blk-iocost.c
index c24daa9d72ee9..bdb4bab86a116 100644
--- a/block/blk-iocost.c
+++ b/block/blk-iocost.c
@@ -177,6 +177,7 @@
#include <linux/timer.h>
#include <linux/time64.h>
#include <linux/parser.h>
+#include <linux/blk-iocost.h>
#include <linux/sched/signal.h>
#include <asm/local.h>
#include <asm/local64.h>
@@ -445,6 +446,7 @@ struct ioc {
int autop_idx;
bool user_qos_params:1;
bool user_cost_model:1;
+ bool bpf_cost_model;
};
struct iocg_pcpu_stat {
@@ -2578,6 +2580,23 @@ static u64 calc_vtime_cost(struct bio *bio, struct ioc_gq *iocg, bool is_merge)
{
u64 cost;
+#ifdef CONFIG_BLK_CGROUP_IOCOST_BPF
+ struct ioc *ioc = iocg->ioc;
+
+ if (READ_ONCE(ioc->bpf_cost_model)) {
+ u64 bpf_cost;
+
+ if (iocost_bpf_calc_cost(bio_op(bio),
+ bio->bi_iter.bi_size,
+ bio->bi_iter.bi_sector,
+ iocg->cursor,
+ iocg_to_blkg(iocg)->blkcg->css.id,
+ is_merge ? IOCOST_COST_F_MERGE : 0,
+ &bpf_cost))
+ return bpf_cost;
+ }
+#endif
+
calc_vtime_cost_builtin(bio, iocg, is_merge, &cost);
return cost;
}
--
2.43.0
next prev parent reply other threads:[~2026-09-08 10:02 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-08 10:01 [RFC PATCH 0/8] blk-iocost: BPF struct_ops cost model Tao Cui
2026-09-08 10:01 ` [RFC PATCH 1/8] blk-iocost: add iocost_ioc_tick tracepoint for per-period device summary Tao Cui
2026-09-08 10:01 ` [RFC PATCH 2/8] blk-iocost: define iocost_model_ops cost model interface Tao Cui
2026-09-08 10:13 ` sashiko-bot
2026-09-08 20:31 ` Tejun Heo
2026-09-08 10:01 ` [RFC PATCH 3/8] blk-iocost: implement BPF struct_ops registration Tao Cui
2026-09-08 20:31 ` Tejun Heo
2026-09-08 10:01 ` Tao Cui [this message]
2026-09-08 20:31 ` [RFC PATCH 4/8] blk-iocost: dispatch cost calculation to registered BPF model Tejun Heo
2026-09-08 10:01 ` [RFC PATCH 5/8] blk-iocost: add ctrl=bpf per-device opt-in Tao Cui
2026-09-08 10:01 ` [RFC PATCH 6/8] selftests/bpf: add iocost cost model test Tao Cui
2026-09-08 10:20 ` sashiko-bot
2026-09-08 20:31 ` Tejun Heo
2026-09-08 10:01 ` [RFC PATCH 7/8] selftests/bpf: add multi-stream sequentiality example model Tao Cui
2026-09-08 10:21 ` sashiko-bot
2026-09-08 20:31 ` Tejun Heo
2026-09-08 10:01 ` [RFC PATCH 8/8] docs: cgroup-v2: document io.cost ctrl=bpf option Tao Cui
2026-09-08 20:31 ` [RFC PATCH 0/8] blk-iocost: BPF struct_ops cost model Tejun Heo
2026-09-09 13:12 ` Tao Cui
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260908100143.47598-5-cui.tao@linux.dev \
--to=cui.tao@linux.dev \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=axboe@kernel.dk \
--cc=bpf@vger.kernel.org \
--cc=cgroups@vger.kernel.org \
--cc=cuitao@kylinos.cn \
--cc=daniel@iogearbox.net \
--cc=josef@toxicopanda.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.