raw_block PR Landscape (2026-06-17 기준)
[!tldr] 업무 관점 takeaway upstream/dev 기준 우리 팀 OPEN PR: #3636(P0 io_uring-batch, dev 대상), #3698(dispatch rollback fix), #3494(L3). #3274 머지 완료 (2026-06-11, dev HEAD
45c02cbe). L2는 P0에 흡수·폐기. V1(batched_read) 로컬 구현 완료·PR 미생성. 다음 큰 탐색: io_uring write coalescing (Tier 1 키 내부 헤더+페이로드 2N→N 커맨드, Step 0 측정 먼저).
2026-06-17 현재 열린 raw_block 관련 PR
| PR | 제목 | 영역 | 비고 |
|---|---|---|---|
| I/O 계층 | ✅ 머지 완료 (2026-06-11, dev HEAD 45c02cbe) — dispatcher, fixed buffer, use_uring_cmd, MDTS split | ||
| #3636 | [Perf][RawBlock] Batch io_uring put_many writes into a single submission | I/O 배칭 | 🆕 우리 팀 OPEN (2026-06-11, dev 대상, perf/rawblock-put-many-iouring-batch) — P0 _put_many_batch_io |
| #3698 | [Fix][RawBlock] Roll back put-task refs when dispatch scheduling fails | correctness | 🆕 우리 팀 OPEN (2026-06-16) — batched_submit_put_task dispatch 실패 시 ref/put_task 누수 롤백 fix |
| 락 | ❌ PR drop (2026-06-08) — NVMe 50µs 구간 <1% 이득 | ||
| #3494 | [perf] Reduce lock contention in batched_remove | 락 | 우리 팀 (L3), OPEN 리뷰 중 |
| #3480 | [Fix] TOCTOU accounting bug in delete() | 정합성 | = T1 |
| #3527 | [Core] Restore LRU eviction for rust raw-block backend | eviction | — |
| #3523 | [Fix] Tighten raw-block alignment validation | 정합성 | — |
| #3519 | [Feat][RawBlock] Add BLKDISCARD startup support | NVMe TRIM | discard() + blkdiscard_on_init |
| #3449 | raw_block: compress checkpoint payload | 체크포인트 | = D1 계열 |
| #3226 | raw_block: incremental base+delta checkpoint format | 체크포인트 | = D1/D2 계열 |
| #3305 | Add raw-block payload checksum validation | 정합성 | DRAFT |
| #3154 | Add Rust BlkioBlockDevice backend (libblkio I/O) | I/O 대체엔진 | io_engine="libblkio" |
| #3272 | [Tool] flame-graph profiling into bench l2 adapter | 측정 도구 | io_uring 벤치 확장 |
우선순위 항목 ↔ PR 매핑
| 항목 | 정의 | 진행 PR | 상태 |
|---|---|---|---|
| T1 | delete() TOCTOU 과대계상 | #3480 | ✅ PR 있음 |
| ❌ PR drop (2026-06-08) | |||
batched_submit_put_task N-key 배치 분해 | — | 🚫 폐기 — P0(iouring-batch)에 흡수 (2026-06-10). dispatch 실패 누수 fix만 #3698로 분리 | |
| P0 | put_many 내부 N-SQE 배치 submit (_put_many_batch_io) | #3636 | ✅ PR OPEN (2026-06-11, dev 대상). 실 NVMe 실측 미검증 |
| V1 | _validate_loaded_entries io_uring batched_read 병렬화 | — (perf/validate-batched-read) | 🔧 로컬 구현 완료. PR 미생성 |
| L3 | RustRawBlockBackend.batched_remove 락 N→1 | #3494 | ✅ PR 있음 (우리 팀) |
| #3698 fix | batched_submit_put_task dispatch 실패 시 ref/put_task 누수 롤백 | #3698 | ✅ PR OPEN (2026-06-16) |
| io_uring write coalescing | 키 내부 헤더+페이로드 2N→N 커맨드 (Tier 1) | — | 🔬 계획 단계. Step 0 실측(go/no-go) 먼저 |
| D1/D2 | checkpoint 용량/threshold | #3449, #3226 | ✅ PR 있음 |
| B2+P2 | _free_slots deque+set | — | ⏸ 미착수 |
| P1 | _snapshot_state lock 내 copy 분리 | — | ⏸ 미착수 |
| D3 | 단일 글로벌 lock 분리 | — | ⏸ 미착수 |
#3274 머지 후 한계 (여전히 남음)
- 🆕
_read_uring_cmd_buffers는 chunk마다 동기read_uring(batched_read 미사용) - 🆕 MP/L2 경로(
RawBlockL2Adapter)는 fixed buffer 등록 안 함 — 경고만, zero-copy 미적용 - ✅ G2(dispatcher 호출자 다중 키 단위) → #3636으로 해결 중
#3274와 겹치지 않는 미착수 Gap
| Gap | 내용 | 난이도 | 상태 |
|---|---|---|---|
| G2 | dispatcher 호출자를 다중 키 단위로 (P0 핵심) | 중간 | ✅ #3636 OPEN |
| G3 | MP/L2 경로 fixed-buffer 등록 hook | 중간 | ⏸ 미착수 |
| G4 | 단일 _lock N-way 샤딩 (D3) | 높음 | ⏸ 미착수 |
다음 액션
- #3636 리뷰 대응 / 실 NVMe 실측 완료 후 결과 업로드
- #3698 리뷰 대응 (Gemini 제안:
except BaseException전환 여부 판단) - V1 PR 제출 (dev 리베이스 → pre-pr-check)
- io_uring write coalescing Step 0 측정 스파이크 (2N→N 커맨드 go/no-go)
- D3(G4) 착수 전 단일 lock 실측 contention 프로파일
2026-06-17 갱신: #3274 머지 완료, #3636/#3698 OPEN, L2 폐기·#3698로 split, io_uring write coalescing 계획 추가.