본문으로 건너뛰기

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_lens validation

직접 돌리면 좋은 검증

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가 PASS
  • test_raw_block_device_odirect_optional_smoke가 PASS
  • EINVAL, 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_cmd path는 기존처럼 동작하는지

주의:

  • 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):