io_uring padded write 추가 검증 가이드
목적
이 문서는 perf/iouring-batched-padded-write 후속 구현에서 내가 여기서 실행하지 못한
hardware-dependent 검증을 나중에 직접 돌릴 수 있도록 정리한 가이드다.
현재 구현은 regular io_uring serial/batched write의 padding semantics를 통일한다.
payload_len..total_len padding tail은 zero로 기록된다.
tail이 이미 zero면 direct/fixed-buffer path를 유지할 수 있다.
tail이 non-zero/source short/unaligned이면 bounce + zero-fill한다.
이미 완료한 검증
내가 실행한 검증:
cargo check
cargo fmt --check
cargo clippy --all-targets -- -D warnings
결과: 모두 통과.
/home/ny/LMCache/.venv/bin/python -m pytest -q \
tests/v1/storage_backend/test_raw_block_core.py \
tests/v1/storage_backend/test_raw_block_device.py
결과:
25 passed, 2 skipped, 54 warnings in 6.59s
/home/ny/LMCache/.venv/bin/python -m pytest -q \
tests/v1/storage_backend/test_rust_raw_block_backend.py
결과:
29 passed, 55 warnings in 5.42s
추가한 regression:
batched_write()stale-tail zero-fill- serial
write_uring()stale-tail zero-fill - mixed batch: non-padded, padded tail-zero, padded tail-nonzero, short-source padded write를 한 batch에 섞어서 검증
batched_write()payload_lensvalidation
직접 돌리면 좋은 검증
1. O_DIRECT smoke
기본 pytest에서는 O_DIRECT smoke가 LMCACHE_RUN_ODIRECT_SMOKE=1이 없어서 skip된다.
O_DIRECT가 안정적으로 동작하는 파일시스템/디바이스에서 아래를 실행한다.
cd /home/ny/workspace/LMCache-partB
LMCACHE_RUN_ODIRECT_SMOKE=1 /home/ny/LMCache/.venv/bin/python -m pytest -q \
tests/v1/storage_backend/test_raw_block_device.py
확인할 것:
test_raw_block_device_odirect_batched_write_padded_roundtrip가 PASStest_raw_block_device_odirect_optional_smoke가 PASSEINVAL,operation not permitted, filesystem unsupported 계열이면 환경 이슈일 수 있음
결과 기록 예시:
date:
device/filesystem:
command:
result:
notes:
2. clean rebuild 경로 검증
이번 세션에서는 cargo build --release 후 venv의 extension .so를 직접 교체했다.
merge 전에는 실제 개발/CI 설치 경로에 가까운 rebuild가 되는지 확인하는 것이 좋다.
가능한 명령:
cd /home/ny/workspace/LMCache-partB
pip install -e . --no-build-isolation
또는 raw block extension만 확인할 경우:
cd /home/ny/workspace/LMCache-partB/rust/raw_block
maturin develop --release
확인할 것:
- 새
batched_write(offsets, buffers, total_lens, payload_lens)4-argument API가 import 후 동작 - 기존 3-argument
batched_write(offsets, buffers, total_lens)도 계속 동작 - rebuild 후 raw block tests가 PASS
3. 실제 NVMe/raw block 환경 검증
실제 raw device를 쓰는 검증은 위험할 수 있으므로 overwrite 가능한 장치에서만 수행한다.
확인할 것:
- regular io_uring padded write가 batch path를 유지하는지
- O_DIRECT 환경에서 padded write readback tail이 zero인지
io_uring_cmdpath는 기존처럼 동작하는지
주의:
- raw block benchmark나 fixture prepare는 장치 내용을 덮어쓸 수 있다.
- 반드시 disposable device 또는 test namespace에서만 실행한다.
4. 성능/회귀 관찰
이번 구현은 tail이 이미 zero면 direct/fixed-buffer path를 유지하고, tail이 non-zero면 bounce한다. 성능 관찰은 다음 케이스를 나눠 보는 것이 좋다.
- non-padded write
- padded write with zero tail
- padded write with non-zero tail
- short-source padded write
확인할 것:
- padded tail-zero case가 full bounce처럼 과도하게 느려지지 않는지
- mixed batch에서 throughput/latency가 비정상적으로 흔들리지 않는지
- batch size가 커질 때 transient memory 사용량이 과도하지 않은지
결과를 알려줄 때 필요한 정보
결과를 공유할 때는 아래만 있으면 충분하다.
브랜치/커밋:
실행 환경:
O_DIRECT smoke 결과:
clean rebuild 결과:
real-device/NVMe 결과:
성능 관찰 결과(있으면):
실패 로그(있으면 첫 실패 stacktrace):