본문으로 건너뛰기

raw_block PR Landscape (2026-06-05 기준)

[!tldr] 업무 관점 takeaway upstream/dev 34de7177 기준 raw_block 관련 열린 PR이 12개. 우리 팀 PR은 #3526(L1), #3494(L3). I/O 계층 개선의 대부분은 #3274가 이미 커버하지만, 인덱스/락 계층(G1~G3)은 손 안 탄 빈틈이다. 다음 착수 순서: G1(쉬움, #3526 연장) → G2(#3274 머지 후) → G3.


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

PR제목영역비고
#3274Missing io_uring changes + nvme io_uring_cmdI/O 계층_write_buffers/_read_buffers dispatcher, fixed buffer, use_uring_cmd, MDTS split
#3526[Perf][RawBlock] Reduce put_many lock count 4N→2N우리 팀 (L1)
#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 backendeviction
#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정합성DRAFT
#3154Add Rust BlkioBlockDevice backend (libblkio I/O)I/O 대체엔진io_engine="libblkio"
#3272[Tool] flame-graph profiling into bench l2 adapter측정 도구io_uring 벤치 확장

우선순위 항목 ↔ PR 매핑

항목정의진행 PR상태
T1delete() TOCTOU 과대계상#3480✅ PR 있음
L1put_many key당 4→2 lock#3526✅ PR 있음 (우리 팀)
L2legacy batched_submit_put_task N-key 배치 분해— (priv/ny/legacy_batch_put)🔧 로컬 구현됨, upstream PR 미제출
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 분리⏸ 미착수

#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, MDTS split)

단, 한계가 남음:

  • 🆕 dispatcher 호출자 대다수가 길이-1 listbatched_*의 의미 소실 (P3 여전히 유효)
  • 🆕 _read_uring_cmd_buffers는 chunk마다 동기 read_uring (batched_read 미사용)
  • 🆕 MP/L2 경로(RawBlockL2Adapter)는 fixed buffer 등록 안 함 — 경고만, zero-copy 미적용

#3274와 겹치지 않는 미착수 Gap

I/O 계층 외 인덱스/락 계층은 손 안 탐:

Gap내용난이도#3274와 독립?
G1put_many 배치 슬롯 일괄 할당 (_allocate_slots_locked(n))낮음✅ (L1=#3526 다음 단계)
G2dispatcher 호출자를 다중 키 단위로 (P3 핵심)중간✅ (#3274 머지 후 follow-up)
G3MP/L2 경로 fixed-buffer 등록 hook중간
G4단일 _lock N-way 샤딩 (D3)높음 (체크포인트/복구까지)

L2(legacy batched_submit_put_task 배치)는 이미 priv/ny/legacy_batch_put에 로컬 구현됨 — upstream PR 제출만 남음.

착수 순서: G1(쉬움, #3526 연장) → G2(#3274 머지 후) → G3 → G4
G4(D3)는 I/O가 이미 lock 밖이라 실측 contention 확인 후 착수 판단 권장.


다음 액션

  • #3274 머지 여부/타임라인 확인 → G2는 머지 후 follow-up으로만 의미
  • G1을 #3526의 후속 시리즈로 묶을지 검토
  • D3(G4) 착수 전 단일 lock 실측 contention 프로파일 (#3272 flame-graph 활용)