From: Tao Cui <cui.tao@linux.dev>
To: Tejun Heo <tj@kernel.org>
Cc: cui.tao@linux.dev, josef@toxicopanda.com, axboe@kernel.dk,
cgroups@vger.kernel.org, linux-block@vger.kernel.org,
linux-kernel@vger.kernel.org, bpf@vger.kernel.org,
andrii@kernel.org, eddyz87@gmail.com, ast@kernel.org,
daniel@iogearbox.net, linux-kselftest@vger.kernel.org,
Tao Cui <cuitao@kylinos.cn>,
ameryhung@gmail.com, alexei.starovoitov@gmail.com
Subject: Re: [RFC PATCH v7 0/4] blk-iocost: BPF struct_ops cost model
Date: Tue, 29 Sep 2026 21:39:00 +0800 [thread overview]
Message-ID: <4f1571a1-7e56-4264-aa7f-8dce32931ddb@linux.dev> (raw)
In-Reply-To: <6f80eca83c87b60398110c3a6d735aec@kernel.org>
Hello, Tejun.
在 2026/9/29 08:42, Tejun Heo 写道:
> Hello, Tao.
>
> On Thu, 24 Sep 2026 13:45:45 +0800, Tao Cui wrote:
>
>> loading attaches the model to
>> that device and switches it away from the builtin linear model,
>> detaching the struct_ops restores the builtin model, and the
>> struct_ops core owns the program lifetime.
>
> I don't think attaching should enable the controller. v7 currently turns
> it on without the queue freeze and quiesce that ioc_qos_write() goes
> through. Attaching can create the ioc if needed like an io.cost.model
> write does and switch the model under the same freeze and quiesce,
> leaving enabling to io.cost.qos.
>
> This is different from what I said on v1, where switching back to the
> builtin model detached the struct_ops, but with the controller state left
> to io.cost.qos it seems more consistent to keep the attachment independent
> too. Writing enable=0 or model=linear wouldn't detach the struct_ops,
> model=bpf would switch back to the attached model, and only detaching
> would remove it. This is the same as the linear coefficients, which are
> kept while the BPF model is in use and take effect again when switched
> back.
>
Done. The implicit enable and the wbt_disable_default() are gone.
Attaching now checks disk_live() and creates the ioc under
rq_qos_mutex, like blkg_conf_open_bdev() does, and switches the
active model under the same freeze and quiesce sequence as the
io.cost.model writes.
To make sure I understood correctly: attaching switches the active
model to the attached BPF model, while model=linear and model=bpf
only switch between the attached model and the builtin model without
affecting the attachment itself. The attachment survives enable=0,
and only .unreg removes it. Please shout if I still got that wrong.
>> iocg_init()/iocg_free()
>> callbacks, invoked from the iocg policy init and free paths with
>> the same per (cgroup, device) lifetime, let models manage their own
>> per-cgroup state.
>
> Existing cgroups don't get iocg_init() on attach and iocg_free() isn't
> delivered on detach, so init and free don't pair up. Can you call
> iocg_init() for all existing iocgs on attach and iocg_free() for the
> remaining ones on detach? That's what sched_ext does with
> ops.cgroup_init() and ops.cgroup_exit() on enable and disable.
>
Done. One note on the implementation: the existing iocgs are walked
over q->blkg_list under q->blkcg_mutex, the same walk the blkcg
policy teardown uses, rather than over the cgroup tree - this is a
per-device walk and the queue is frozen and quiesced at that point.
Cgroups without a blkg on the device yet are not missed: their blkg
is created later and ioc_pd_init()/ioc_pd_free() deliver the
callbacks then, so init and free pair up either way.
>> Writing "ctrl=bpf" or "model=bpf" is accepted as a no-op so a saved
>> configuration still parses; re-attaching the model requires loading
>> the struct_ops again, not writing to this file.
>
> ctrl keeps describing the coefficients and never reads back "bpf", so
> ctrl=bpf shouldn't be accepted. model=bpf should fail when no model is
> attached.
>
Done as suggested; the bpf-ci review of v7 reported the same two.
Thanks.
Tao> Thanks.
>
> --
> tejun
next prev parent reply other threads:[~2026-09-29 13:39 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-24 5:45 [RFC PATCH v7 0/4] blk-iocost: BPF struct_ops cost model Tao Cui
2026-09-24 5:45 ` [RFC PATCH v7 1/4] blk-iocost: add BPF struct_ops cost model support Tao Cui
2026-09-24 6:00 ` sashiko-bot
2026-09-24 6:30 ` bot+bpf-ci
2026-09-29 0:42 ` Tejun Heo
2026-09-29 13:42 ` Tao Cui
2026-09-29 16:27 ` Tejun Heo
2026-09-30 4:14 ` Tao Cui
2026-09-24 5:45 ` [RFC PATCH v7 2/4] selftests/bpf: add iocost cost model test Tao Cui
2026-09-24 5:57 ` sashiko-bot
2026-09-24 6:30 ` bot+bpf-ci
2026-09-24 5:45 ` [RFC PATCH v7 3/4] blk-iocost: add iocost_ioc_tick tracepoint for per-period device summary Tao Cui
2026-09-24 6:17 ` bot+bpf-ci
2026-09-29 0:42 ` Tejun Heo
2026-09-29 13:46 ` Tao Cui
2026-09-24 5:45 ` [RFC PATCH v7 4/4] docs: cgroup-v2: document the iocost BPF cost model attachment Tao Cui
2026-09-29 0:42 ` [RFC PATCH v7 0/4] blk-iocost: BPF struct_ops cost model Tejun Heo
2026-09-29 13:39 ` Tao Cui [this message]
2026-09-29 16:27 ` Tejun Heo
2026-09-30 4:09 ` 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=4f1571a1-7e56-4264-aa7f-8dce32931ddb@linux.dev \
--to=cui.tao@linux.dev \
--cc=alexei.starovoitov@gmail.com \
--cc=ameryhung@gmail.com \
--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=eddyz87@gmail.com \
--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.