본문으로 건너뛰기

Raw Block — 열린 PR Landscape & 미착수 Gap (2026-06-05)

⚠️ status canonical → 00_overview.md (2026-06-25 통합). 이 문서는 PR↔우선순위 매핑·Gap(G1~G4) 상세용. 최신 PR 상태는 원장 §1·§5.

기존 [[raw_block_priority]] / [[raw-block-perf-findings_vs_pr3274]] 는 commit 29bbd553(05-28) 기준이라 어느 항목이 PR 로 떠 있는지 추적이 없다. 이 노트는 upstream/dev 34de7177 기준, 2026-06-05 시점 열린 PR 과 우선순위 항목을 매핑하고 아직 PR 없는 빈틈을 추린다.


1. 2026-06-05 현재 열린 raw_block 관련 PR

PR제목영역비고
#3274Missing io_uring changes + nvme io_uring_cmd (passthrough)I/O 계층upstream/dev 머지 완료 (이후 dev HEAD 45c02cbe, 2026-06-11). _write_buffers/_read_buffers dispatcher, register_fixed_buffers_from_allocator, use_uring_cmd(/dev/ngXnY), MDTS split
#3636[Perf][RawBlock] Batch io_uring put_many writes into a single submissionI/O 배칭🆕 우리 팀 (perf/rawblock-put-many-iouring-batch, 2026-06-11 OPEN). G2/P0 = _put_many_batch_io. 후속 plugin-dedup 브랜치는 dedup 폐기 → 순수 ref-rollback fix로 전환 (8046269e, 2026-06-15, 제목 [Fix][RawBlock] Roll back put-task refs when dispatch scheduling fails, test 31 pass + pre-commit pass, PR 생성 예정), validate-batched-read(dc3f5d36)는 PR 미생성
#3526[Perf][RawBlock] Reduce put_many lock count from 4N to 2NPR drop (2026-06-08) — 벤치마크 결과 NVMe 현실 구간(50µs) 기준 이득 <1%. 상세: docs/notes/raw-block-put-many-lock-bench.md
#3494[perf] Reduce lock contention in batched_remove우리 팀 (perf/raw-block-batched-remove)
#3480[Fix] TOCTOU accounting bug in delete() (was_indexed)정합성= T1
#3527[Core] Restore LRU eviction for rust raw-block backendevictionpriv/dg
#3523[Fix] Tighten raw-block alignment validation정합성
#3519[Feat][RawBlock] Add BLKDISCARD startup supportNVMe TRIMdiscard() + blkdiscard_on_init
#3449raw_block: compress checkpoint payload체크포인트= D1 계열
#3226raw_block: incremental base+delta checkpoint format체크포인트= D1/D2 계열
#3305Add raw-block payload checksum validation정합성priv/dg, DRAFT
#3154Add Rust BlkioBlockDevice backend (libblkio I/O)I/O 대체엔진io_engine="libblkio"
#3272[Tool] flame-graph profiling into bench l2 adapter측정 도구io_uring 벤치 확장

2. 우선순위 항목(raw_block_priority) ↔ PR 매핑

항목정의진행 PR상태
T1delete() TOCTOU 과대계상#3480✅ PR 있음
L1put_many key당 4→2 lock#3526PR drop — 이득 <1% at NVMe latency. raw-block-put-many-lock-bench.md 참조
L2legacy batched_submit_put_task N-key 배치 분해🚫 폐기 — P0(iouring-batch)에 흡수 (2026-06-10)
L3RustRawBlockBackend.batched_remove 락 N→1#3494✅ PR 있음 (우리 팀)
P3Rust batch API → io_uring SQ 완전 활용#3274 (부분)⚠️ dispatcher 만 도입, 호출자가 길이-1 list
D1/D2checkpoint 용량/threshold#3449, #3226✅ PR 있음
B2+P2_free_slots deque+set미착수
P1_snapshot_state lock 내 copy 분리미착수
D3단일 글로벌 lock 분리미착수
L4/B1/T2latent 정리⏸ 미착수 (낮음)

3. #3274 가 "거의 다" 가져간 것 (중복 주의)

io_uring/NVMe 관점에서 새로 제안하려던 것 대부분이 #3274 에 이미 있음:

  • ✅ write 배치 (_write_buffersbatched_write+wait_iouring)
  • ✅ read dispatcher (load_many_into_read_buffersbatched_read)
  • ✅ fixed-buffer zero-copy 등록 (register_fixed_buffers_from_allocator) — plugin 경로만
  • ✅ NVMe passthrough/queue depth (use_uring_cmd, sysfs max_hw_sectors_kb, MDTS split)

단, 한계가 남음 (상세 근거는 [[raw-block-perf-findings_vs_pr3274]] §2.4):

  • ✅ dispatcher 호출자가 길이-1 list 문제 → P0(iouring-batch) _put_many_batch_io → PR #3636 OPEN (dev 대상, 2026-06-11; perf/rawblock-put-many-iouring-batch origin 3b8260a0)
  • 🆕 _read_uring_cmd_buffers 는 chunk 마다 동기 read_uring (batched_read 안 씀)
  • 🆕 MP/L2 경로(RawBlockL2Adapter)는 fixed buffer 등록 안 함 — 경고만, zero-copy 미적용

4. #3274 와 겹치지 않는 진짜 미착수 Gap

I/O 계층(=#3274 영역)이 아닌 인덱스/락 계층은 손 안 탐:

Gap내용근거난이도#3274 와 독립?
G1put_many 배치 슬롯 일괄 할당 (_allocate_slots_locked(n))core.py:467-516 키마다 lock낮음P0 Phase 1에 포함 (L1=#3526 drop 후 P0에 흡수)
G2dispatcher 호출자를 다중 키 단위로 (P3 핵심)load_many_into/put_many 가 키 1개씩 _read_buffers/_write_buffers 호출중간PR #3636 OPEN — P0(iouring-batch) _put_many_batch_io (dev 대상, 2026-06-11)
G3MP/L2 경로 fixed-buffer 등록 hookraw_block_l2_adapter.py:343 경고만중간
G4단일 _lock N-way 샤딩 (멀티큐 병렬)core.py:240 = D3높음 (체크포인트/복구까지)

L2(legacy batched_submit_put_task 배치)는 별도 PR 예정이었으나 P0(iouring-batch)에 흡수·폐기 (2026-06-10). 브랜치 fix/rawblock-batched-put-toctou 삭제됨.

우선순위 직관: G1·G2 — 둘 다 P0(iouring-batch)에 흡수·로컬 구현 완료G3 → G4(큰 설계). G4(D3)는 raw_block_priority 에서 Tier 6 "경합 제한적" 으로 낮게 평가됨 — I/O 가 이미 lock 밖이라 실측 contention 확인 후 착수 판단 권장.

5. 다음 액션

  • #3274 머지 여부/타임라인 확인 → P0(iouring-batch) PR 제출 — #3274 머지됨, PR #3636 제출 완료 (2026-06-11)
  • G1 을 #3526 후속으로 묶기 — G1·G2 모두 P0에 흡수 완료
  • plugin-dedup(1cc5a74d) 후속 독립 PR 생성dedup 폐기, 순수 ref-rollback fix로 전환(8046269e, 2026-06-15). dedup 배치화(exists_many/단일 _put_lock)는 L2 폐기 판단(<1% gain·미입증)대로 dev 원본 복원, dispatch 실패 시 ref/_put_tasks 롤백만 남김. test 31 pass + pre-commit pass, PR #3698 OPEN(fix/rawblock-put-dispatch-ref-rollback, dev 대상; Gemini medium 1건 ExceptionBaseException). 정리+그림: pr3698_put_dispatch_rollback.md. dedup 필요 시 #3636 후속/벤치 동반 별도 검토
  • validate-batched-read(dc3f5d36) 후속 독립 PR 생성 — push 완료, PR 미생성
  • D3(G4) 착수 전 단일 lock 실측 contention 프로파일 (#3272 flame-graph 활용)