본문으로 건너뛰기

tasks/todo 통합 원장 (2026-06-25)

11개 문서에 흩어진 raw_block/NVMe 작업 항목을 중복 제거해 한 장으로 통합. PR/issue 상태는 2026-06-25 gh 직접 확인.

ID 체계 (AREA-N)

AREA범위
RBraw_block 코어 (슬롯·인덱스·락·체크포인트·slot geometry·TRIM·correctness)
IOio_uring write/read 경로 & NVMe passthrough (batched submit/read·setup flag·coalescing·uring_cmd·queue-depth)
L2MP L2 어댑터·분산 (원격 connector·sharding·capability·serde·P2P·device-aware policy)
FSfilesystem/file backend — LocalDisk·fs L2·fs_connector (raw_block 외 storage tier)
OBSobservability / telemetry / stats
SYShost memory / CPU backend accounting / engine 레벨
  • 번호 N = 영역 내 고유 식별자일 뿐 우선순위 아님. 우선순위는 §0·§7.
  • 옛 문서 ID(H1·E-5·B2·G1·T1…)는 변경 불가라 그대로 두고, 각 행에 (구 …)로 병기 + §6 매핑.
  • repo 전체 문서 맵은 tasks/index.md. 이 파일은 아이템 status SSOT.

0. 30초 요약

  • 열린 우리 PR 5개: IO-1(#3636) · RB-4(#3835, DG) · RB-2(#3698) · RB-3(#3494) · RB-1(#3480) — 전부 OPEN.
  • 로컬 완료·PR 대기 2개: IO-3(P0-B, #3636 stacked) · IO-2(recovery batched read, #3835 base) — 실 NVMe 6.08×.
  • 즉시 착수 5개: RB-5(free_slots O(1)) · RB-6(FIFO) · IO-4(setup flag) · RB-7(RU 정렬) · FS-1(disk/fs 실배칭).
  • 외부 대기: RB-8(TRIM, #3519+상윤) · RB-9(HC overflow, Daejun #3449) · IO-5(uring_cmd EINVAL, @DongDongJu) · OBS-1(텔레메트리, 이슈 #3752).
  • 신규/후보: §4 (FS·SYS·OBS·IO·L2 12건).

1. 진행 중 — 열린 PR (리뷰 단계)

ID (구)항목PR상태(06-25)상세
IO-1 (P0·G1+G2)put_many io_uring batched submit (_put_many_batch_io)#3636OPEN · 리뷰 반영 중P0 계획 · finalize
RB-4 (Recovery·DG)_validate_loaded_entries POSIX 병렬 검증 (이슈 #3753) · recovery 쌍 ↔ IO-2#3835OPENNY+DG 총괄
RB-2 (L2-fix)dispatch 실패 시 ref/put-task 롤백 (dedup은 폐기)#3698OPEN · Gemini medium 1건정리
RB-3 (L3)RustRawBlockBackend.batched_remove 락 N→1#3494OPENL3 노트
RB-1 (T1)delete() TOCTOU → _total_bytes_used 과대계상 (was_indexed)#3480OPENpriority T1

2. 로컬 구현 완료 — base 머지 대기 (PR 미생성)

ID (구)항목base상태
IO-3 (P0-B)padded O_DIRECT write도 batched_write (Rust payload_lens + 꼬리 zero-fill, can_batch 게이트 제거)#3636 stacked커밋 4개·테스트 green. #3636 머지 후 rebase→PR
IO-2 (V1)io_uring batched recovery read (_validate_loaded_entries batched_read N헤더 1제출) · recovery 쌍 ↔ RB-4#3835 base실 NVMe 524K 6.08×. uring_cmd 경로는 IO-5로 분리

3. 착수 가능 / 대기 (열린 PR 없음)

ID (구·별칭)항목상태선행/메모
RB-5 (H1·E-5·C3)_free_slots 멤버십 O(n)→O(1) (병렬 set)🟢 즉시충돌 PR 없음. ~20줄
RB-6 (H2·B2+P2)_free_slots LIFO→FIFO (deque, wear leveling)🟢 즉시RB-5와 독립. FDP 선행
IO-4 (M2)io_uring setup flag 튜닝 (SINGLE_ISSUER 등)🟢 즉시#3274✓ + #3271✓(05-26 머지) 둘 다 충족
RB-7 (A3)RU-aligned slot geometry (erase-block/FDP RU 정렬 config)🟢 즉시정렬=정책 아님 → 독립. FDP 시 효과
RB-8 (N1·E-2)런타임 TRIM (슬롯 free 시 discard)🟡 대기#3519 머지 + 상윤 조율 선행. #3519 discard() 재사용
RB-9 (S2·D1·C1·E-6)checkpoint payload overflow (HC-SSD 15/30TB)🟡 대기Daejun #3449 답변. Std SSD는 #3449 zlib로 해소
IO-5 (F2·E-3)uring_cmd checkpoint read EINVAL (multi-page PRP 정렬)🟡 대기이슈 미등록. Rust bounce @DongDongJu(lib.rs:2092). #3841/#3812 모두 미해결
OBS-1 (B1·v1T1·v2B1·E-1)L2/TTFT 단계별 latency 텔레메트리 (EventBus→OTel)🟡 대기공식 이슈 #3752 OPEN·PR 공백. 규모 큼(메트릭6+모드별 plumbing 2벌)
RB-10 (P1·E-4·C2)_snapshot_state lock 내 직렬화 분리⏸ 미착수⚠️ 코드가 노트보다 악화: lock 잡은 채 entry별 .tolist()
L2-1 (G3)MP/L2 fixed-buffer 등록 hook (zero-copy)⏸ 미착수raw_block_l2_adapter.py:347 경고만
RB-11 (D2)max_dirty_threshold (sustained write 중 checkpoint)⏸ 미착수비정상 종료 시 index 손실
RB-12 (D3·G4)단일 _lock N-way 샤딩⏸ 낮음I/O 이미 lock 밖 → 실측 contention 후 판단
IO-6 (F1)write coalescing (벡터드 writev, Tier1)📋 plannedRust Writev 필요. IO-3와 batched_write 시그니처 공동설계

4. 신규 발굴 / 후보 풀 (2026-06-25) — task 미등록

🆕 = 2026-06-25 신규 발굴 · 📎 = 기존 문서서 이월. 근거는 코드 file:line / 점유 PR.

ID (구·출처)항목Mode근거 (코드 / 점유 PR)판단
FS-1 (N-1·disc) 🆕LocalDisk/fs L2 진짜 배칭 안 함 (키마다 직렬 write)Bothlocal_disk_backend.py:370(TODO) · fs_l2_adapter.py:582신규 최선. upstream TODO 명시·raw_block 배칭 경험 재사용·인터페이스 무변경
FS-2 (N-2·disc) 🆕LocalDisk 디스크 공간 allocator 부재 (단편화)non-MPlocal_disk_backend.py:155,328큰 설계(eviction 얽힘). MP는 #3859 점유 → 맨 뒤
FS-3 (Task3·pool/v1) 📎fs_connector O_DIRECT 메타데이터 경로 (save_chunk_meta padding이 O_DIRECT 끔)In-processfs_connector.py:100Samsung SSD 성능 검증 직결. #3191과 무관
SYS-1 (N-3·disc) 🆕EngineCore RssAnon 무한증가 (embedded)non-MP이슈 #3767 · 부분 PR #3793raw_block/MemoryObj 관여 여부 빠른 확인(5분). #3793 중복 가능
SYS-2 (pool) 🆕LocalCPU batched_allocate eviction accounting gapBothlocal_cpu_backend.py:788(TODO) · #3634 인접메모리 계층 정합성. storage 직접성 중간
OBS-2 (N-4·disc) 🆕GDS backend Statistics 미연결non-MPgds_backend.py:327OBS-1에 흡수 권장
IO-7 (pool) 🆕io_uring queue-depth / sysfs autotune·preflightBothcore.py:149 · rust/raw_block/src/lib.rs:965IO-4(setup flag) 인접하나 device QD/MDTS 읽어 추천·검증은 별도
L2-2 (pool) 🆕P2P read-only adapter store success semantics 정리MPp2p_l2_adapter.py:186 · store_policy.py:144correctness gap이나 NVMe 비주력 → upstream hygiene 후보
L2-3 (pool) 🆕L2 adapter capability bit / descriptor 확장MPstore_policy.py:22store/lookup-only/capacity/latency capability를 policy가 못 봄. L2-2 해결 토대
L2-4 (pool) 🆕variable-size serde exact-size를 FS/mock 밖으로 확장MPserde_wrapper.py:241 · s3_l2_adapter.py:427 · #3796 후속#3796은 FS/mock만. S3/HFBucket/native exact-size 후속
L2-5 (pool) 🆕GCS/Azure MP L2 adapter parityMPs3_l2_adapter.py:427 · #3854/#3686(non-MP만)upstream diversity엔 좋으나 NVMe/FDP 직접성 낮음
L2-6 (pool) 🆕raw_block multi-device health/capacity/latency-aware shardingMP#3689 후속#3689는 단순 rank % len(paths). 머지 후 routing/rebalance 후속 (base는 점유)
L2-7 (Task5·pool/v1) 📎device-aware store/prefetch policyMPprefetch_policy.py:129 · store_policy.py:144 · 이슈 #2923OBS-1(B1) 텔레메트리 선행이면 효과 증명 쉬움

출처 (아이템별 어느 문서를 볼지):

  • disc = discovery_2026-06-25N-1~N-4 신규 발굴 + 우선순위 정렬 (FS-1·FS-2·SYS-1·OBS-2).
  • pool = upstream_gap_pool넓은 MP/remote/serde 후보 풀 + 점유 회피 (FS-3·SYS-2·IO-7·L2-2~7).
  • v1 = v1 roadmap (Task3·Task5) · nvme TRIM/A3/B1 근거 = nvme feature 발굴.
  • ⚠️ disc·poolN-1~N-4·E-items에서 내용이 겹친다(같은 항목 다른 각도). 위 출처가 각 항목의 primary.

5. 폐기 / 타인 점유 (참고 — 착수 금지)

구 ID항목사유
L1 (#3526)put_many 락 4N→2Ndrop — NVMe 50µs서 이득 <1%
L2 deduplegacy batched_submit_put_task dedupdrop — NVMe regression. ref-rollback만 RB-2(#3698) 생존
M1non-MP io_uring 적용IO-1/#3274에 흡수(머지 완료)
B2-kernel커널 down-to-NVMe 추적#3272(flamegraph)가 커버
S1non-MP 자체 evictiondaegyu94 — 이제 PR #3527 OPEN
MP-CMP raw_block multi-device sharding (base)#3689 OPEN 점유 (health-aware 후속만 L2-6)
A1/A2FDP placement 정책daegyu94 레인 (ankit-sam#1) — geometry(RB-7)만 우리 몫

6. ID 매핑 (새 AREA-N ↔ 옛 문서 ID)

새 ID항목v3prioritypr_landscapenvme_discv1/v2discovery_06-25
RB-1delete TOCTOUT1T1
RB-2dispatch ref rollbackL2(잔존분)L2/G(노트)
RB-3batched_remove 락L3L3
RB-4recovery POSIX 병렬
RB-5free_slots O(1)H1B2+P2B2+P2C3E-5
RB-6free_slots FIFOH2B2+P2B2+P2E-5
RB-7RU geometryA3
RB-8runtime TRIMN1E-2
RB-9checkpoint overflowS2D1D1/D2C1E-6
RB-10snapshot lockP1P1C2E-4
RB-11max_dirty_thresholdD2C5
RB-12single lock shardD3G4
IO-1put_many batched submitM1흡수G1/G2/P3
IO-2io_uring recovery read
IO-3padded O_DIRECT batched_write
IO-4setup flagsM2
IO-5uring_cmd EINVALE-3
IO-6write coalescing
IO-7queue-depth autotune
L2-1MP fixed-buffer hookG3MP-B
L2-2P2P store semantics
L2-3L2 capability bit
L2-4serde exact-size 확장
L2-5GCS/Azure MP parity
L2-6multi-device health shardingMP-C후속
L2-7device-aware policyC2(nvme)v1 Task5
FS-1disk/fs 실배칭N-1
FS-2disk allocatorN-2
FS-3fs_connector O_DIRECT metav1 Task3
OBS-1L2/TTFT 텔레메트리B1(latent별개)B1v1 Task1·v2 B1E-1
OBS-2GDS StatisticsN-4
SYS-1RssAnon #3767N-3
SYS-2LocalCPU accounting

분석 본문: raw_block_line · raw_block_split, perf findings는 docs/notes/.


7. 임박 액션 (의존 체인)

  1. #3636 머지 → IO-3(P0-B) PR (rebase --onto dev)
  2. #3835(DG) 머지 → IO-2(io_uring recovery) PR
  3. IO-5 EINVAL 이슈 등록 (병목 언블록·~1h) → Rust bounce(@DongDongJu, lib.rs:2092 use_odirect||use_uring_cmd) → recovery 재활성화
  4. 즉시 병렬 착수: RB-5(H1) · IO-4(M2) · FS-1(신규 최선) · SYS-1(빠른 확인)
  5. 외부 대기: RB-8(#3519+상윤) · RB-9(Daejun #3449)

갱신 규칙: 아이템 status/추가 시 이 표 우선 갱신(SSOT). repo 문서 맵·분류 변경은 tasks/index.md.