Thread (8 messages) flat view 8 messages, 2 authors, 2d ago

Re: [PATCH 1/4] blk-iocost: charge flushes as pageless random writes

From: Christoph Hellwig <hch@infradead.org>
Date: 2026-09-10 05:41:31
Also in: linux-block, lkml

On Tue, Sep 08, 2026 at 10:21:32AM +0800, Tao Cui wrote:
From: Tao Cui <redacted>

Standalone flushes issued by blkdev_issue_flush() are represented as
dataless REQ_OP_WRITE | REQ_PREFLUSH bios, which
calc_vtime_cost_builtin() prices at zero.  The flush component of
flush-heavy workloads such as database commits, journal flushes, and
metadata sync is thus neither charged nor throttled: a cgroup at 1% weight
can issue ~510k flushes per 12s, monopolizing the device while iocost
reports zero usage.

Price them as pageless random writes (LCOEF_WRANDIO), which provides
an approximation of the device time consumed by a flush.  For
profiles where WRANDIO clamps to zero (ssd_dfl / ssd_fast), use a
one-page floor (LCOEF_WPAGE).  After this patch, the same 1%-weight
cgroup is limited to 24 flushes per 12s; on ext4, write+fsync
workloads are correctly accounted through the journal layer (~2.2us
per flush on the ssd_fast profile).
Flushes are actually a really interesting case.  For devics with
a non-volatile write cache they are no-ops, but submit_bio should
ensure we never see them here.  But devices with a volatile write
cache they are significantly more expensive than any kind of write.
If we touch this we should probably figure out a way to model that.
Note that this includes standalone flushes and PREFLUSH ones,
so this patch might be a good start, but still is missing a very
important part.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help