Skip to content

implement pcpu bio caching for IRQ I/O

Pavel Begunkov linux-block 4 versions – Applied

Status from this message: Applied, thanks!

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v4 Latest6 patches 1 replyApplied
  2. v33 patches 3 repliesApplied
  3. v2 RFC4 patches 8 repliesApplied
Earlier versions · 1
VersionPostedPatchesRepliesStatus
v1 RFC4 patches1 replySuperseded

Patches in v4 Applied

#Subject and filesSizeRepliesApplied
1/6mempool: introduce mempool_is_saturatedinclude/linux/mempool.h+5 -00 replies
2/6bio: don't rob starving biosets of biosblock/bio.c+2 -00 replies
3/6bio: split pcpu cache part of bio_put into a helperblock/bio.c+25 -130 replies
4/6bio: add pcpu caching for non-polling bio_putblock/bio.c+54 -160 replies
5/6bio: shrink max number of pcpu cached biosblock/bio.c+1 -10 replies
6/6io_uring/rw: enable bio caches for IRQ rwio_uring/rw.c+2 -10 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v4 yet.

Read the v4 thread

Cover letter [PATCH for-next v4 0/6] implement pcpu bio caching for IRQ I/O

Add bio pcpu caching for IRQ-driven I/O. We extend the currently limited to iopoll REQ_ALLOC_CACHE infra. Benchmarked with t/io_uring and an Optane SSD:
2.22 -> 2.32 MIOPS for qd32 (+4.5%) and 2.60 vs 2.82 for qd128 (+8.4%).

Works best with per-cpu queues, otherwise there might be some effects at play, e.g. bios allocated by one cpu but freed by another, but the worst case (always goes to mempool) doesn't show any performance degradation.

Currently, it's only enabled for previous REQ_ALLOC_CACHE users but will be turned on system-wide later.

v2: fix botched splicing threshold checks
v3: remove merged patch limit scope of flags var in bio_put_percpu_cache
v4: correct outdated comment
fix in-irq put -> splice modifying the non-irq safe cache list fix alloc null dereference

Pavel Begunkov (6):
mempool: introduce mempool_is_saturated
bio: don't rob starving biosets of bios
bio: split pcpu cache part of bio_put into a helper
bio: add pcpu caching for non-polling bio_put
bio: shrink max number of pcpu cached bios io_uring/rw: enable bio caches for IRQ rw

 block/bio.c             | 98 +++++++++++++++++++++++++++++++----------
 include/linux/mempool.h |  5 +++
 io_uring/rw.c           |  3 +-
 3 files changed, 82 insertions(+), 24 deletions(-)
Signature · 1 line
2.38.0