perf(transfer): batch io_uring l2 reads#62
Open
GentleCold wants to merge 1 commit into
Open
Conversation
GentleCold
marked this pull request as ready for review
May 29, 2026 18:29
GentleCold
force-pushed
the
perf/long-prefill-direct
branch
from
May 29, 2026 19:16
072c3af to
5b591ee
Compare
- add batched positioned read submissions to the native io_uring wrapper - group fixed-memory L2 miss reloads across existing io_uring workers - cover batched native reads and grouped L2 miss batching
GentleCold
force-pushed
the
perf/long-prefill-direct
branch
from
May 30, 2026 05:05
5b591ee to
8415d87
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Root Cause
The 200-prompt multi_news long-prefill workload is about 72.68 GiB, while the DaseR L1 pinned-memory tier is fixed at about 64 GiB. Warm runs therefore still reread many KV blocks from L2 after L1 churn. Prefix-hash lookup and staging GPU-to-GPU copy are not the dominant cost in the current traces; the dominant warm cost is large batches of L2 misses under io_uring/O_DIRECT.
This patch improves the constant factor for that L2 path without adding memory, changing replacement policy, bypassing staging, or changing benchmark behavior. It does not make DaseR beat LMCache on this parameter set because LMCache is configured with enough CPU memory for the whole workload.
What This Does Not Do
Validation
source /data/zwt/vllm/bin/activate && ruff check daser/transfer/iouring/native.py daser/transfer/iouring/layer.py tests/transfer/test_tiered_iouring_transfer.pyAll checks passed!source /data/zwt/vllm/bin/activate && ruff format --check daser/transfer/iouring/native.py daser/transfer/iouring/layer.py tests/transfer/test_tiered_iouring_transfer.py3 files already formattedsource /data/zwt/vllm/bin/activate && pytest -q tests/transfer/test_tiered_iouring_transfer.py18 passed in 1.69ssource /data/zwt/vllm/bin/activate && PYTHONHASHSEED=0 pytest -q -m "not integration" --ignore=tests/integration --ignore=tests/connector/test_daser_connector.py --ignore=tests/connector/test_gds_transfer.py tests/177 passed in 5.94sBenchmark
Command used the issue parameters:
multi_news, 200 prompts, GPU 2,--gpu-util 0.90,--max-num-seqs 64, comparison modeiouring-mem-vs-lmcache-local-ssd-mem.Results written to
/data/zwt/daser_bench/pr62-longbench-multinews-n200-gpu09-batched-iouring.json.Compared with the after-revert baseline (
DaseR warm 133.53s), batching improves warm time to100.41s, but the remaining L2 rereads still dominate.