신규 아이템 발굴 (2026-06-25)
코드·이슈·PR을 직접 훑어 정리한 발굴 리스트. 각 항목에 🆕 NEW(기존 문서에 없음) 또는 📎 기존(참조 링크) 표시. 이어서 모드 적용(MP / In-process)과 우선순위 정렬을 붙였다.
진행중/대기/폐기 + follow-up(F1·F2)의 canonical 상태는
status_snapshot_2026-06-24.md. 이 문서는 "그 위에서 새로 무엇을 발굴했나"에 한정.
1. 발굴 리스트 — NEW vs 기존
🆕 NEW — 기존 노트 어디에도 없는 것
| # | 항목 | 근거 (코드/이슈) | 비고 |
|---|---|---|---|
| N-1 | LocalDiskBackend/fs L2 adapter 진짜 배칭 안 함 — 키마다 직렬 write | non-MP local_disk_backend.py:370 # TODO(Jiayi): enable real batching (루프만 돔) / MP fs_l2_adapter.py:582 _execute_store 의 for key, obj in zip(...) | 우리 io_uring 배칭(#3636)은 raw_block 전용. 정작 더 널리 쓰이는 disk/file tier는 per-key 직렬 그대로 |
| N-2 | LocalDiskBackend 디스크 공간 allocator 부재 → fragmentation/용량 회계 | local_disk_backend.py:155, 328 # TODO: disk space allocator to avoid fragmentation / # Fragmentation is not considered here | 장기 가동 디스크 캐시 단편화. MP 쪽은 #3859(Daejun, fs L2 capacity eviction)가 점유 |
| N-3 | EngineCore RssAnon 무한 증가 → host OOM (embedded v1) | Issue #3767 (06-20) | ⚠️ 부분 PR 존재: #3793(ctypes heap-type leak fix). 근본 다 잡는지 미검증 — raw_block/MemoryObj 관여 여부 확인 가치 |
| N-4 | GDS backend가 LMCache Statistics에 미연결 | gds_backend.py:327 self.stats = None # TODO: plug into LMCache Statistics | GPU-direct storage 경로 관측 사각. observability 트랙(E-1)에 흡수 가능 |
📎 기존 — 이미 문서에 있던 것 (참조 링크)
| # | 항목 | 기존 문서 | 코드 재확인 결과 (2026-06-25) |
|---|---|---|---|
| E-1 | tier hit-rate + TTFT decomposition 관측 | v2 B1 | upstream Issue #3752(06-22)로 공식화·PR 아직 없음 — 우리 B1보다 스코프 넓어짐 |
| E-2 | 런타임 TRIM (slot free 시 discard) | nvme feature discovery §N1 | core.py에 런타임 discard 호출 0건 재확인. #3519 머지·상윤 조율 선행 |
| E-3 | uring_cmd checkpoint read EINVAL 근본 수정 이슈화 | status_snapshot F2 · followup | #3841·#3812 모두 미해결 분석 완료. 이슈 등록만 남음 |
| E-4 | _snapshot_state lock 보유 중 전체 직렬화 | priority Tier3 P1 | ⚠️ 코드가 노트보다 악화: core.py:1576-1616 lock 잡은 채 entry별 .tolist()·dtype 조회까지 수행. 노트는 "shallow copy 분리"만 언급 |
| E-5 | _free_slots O(n) 멤버십 / LIFO | v3 §H1/H2 | core.py:1488 slot in self._free_slots(O(n)), :1477 .pop()(LIFO) 그대로 존재 |
| E-6 | checkpoint payload overflow silent-skip | v3 §S2 | core.py:1636-1643 payload too large ... return False 여전. JSON 전체 직렬화(:1689)도 그대로 |
2. 모드 적용 (MP / In-process)
모드 경계 근거([[mp-vs-non-mp]]):
- raw_block
core.py=RawBlockCore공유 →RustRawBlockBackend(non-MP) +RawBlockL2Adapter(MP) 둘 다 → 코어 항목은 모두 BOTH LocalDiskBackend= non-MPStorageManager전용 / MP는fs_l2_adapter·fs_native_l2_adapter(별도 코드, 같은 빈틈)gds_backend.py= non-MP / MP의 GDS L1(gds_l1_config, #3589)은 별도 코드- #3767 RssAnon = 이슈가 명시적으로 "embedded mode" = non-MP
| # | 항목 | MP | In-process | 근거 / 코드 경로 |
|---|---|---|---|---|
| 🆕 N-1 | disk/file 실배칭 | ✅ | ✅ | non-MP LocalDiskBackend.batched_submit_put_task(:370) / MP fs_l2_adapter._execute_store(:582). 둘 다 직렬, 코드 다름 |
| 🆕 N-2 | disk allocator/단편화 | ⚠️ | ✅ | non-MP LocalDiskBackend(:155,:328). MP는 #3859가 점유 |
| 🆕 N-3 | RssAnon 무한 증가 | ❌ | ✅ | Issue #3767 "embedded mode" = non-MP 전용 재현. 근본 ctypes는 공유 코드 |
| 🆕 N-4 | GDS Statistics 미연결 | ⚠️ | ✅ | non-MP gds_backend.py:327. MP GDS L1(#3589) 별도 코드 |
| 📎 E-1 | tier hit-rate/TTFT 관측 | ✅ | ✅ | plumbing 다름: non-MP PrometheusLogger/cache_engine vs MP mp_observability. #3752가 양쪽+TP bridge 포함 |
| 📎 E-2 | 런타임 TRIM | ✅ | ✅ | 공유 core.py. MP-leaning — 글로벌 EvictionController churn 집중 |
| 📎 E-3 | uring_cmd EINVAL | ✅ | ✅ | 공유 core.py read/recovery(_load_meta_payload, load_many_into) |
| 📎 E-4 | _snapshot_state lock | ✅ | ✅ | 공유 core.py:1576, checkpoint loop 공통 |
| 📎 E-5 | _free_slots O(n)/LIFO | ✅ | ✅ | 공유 core.py:1488/1477 |
| 📎 E-6 | checkpoint overflow | ✅ | ✅ | 공유 core.py:1636 |
범례: ✅ 해당 · ⚠️ 부분/별도코드·타인 점유 · ❌ 비해당
3. 우선순위 정렬
기준: 선행조건(병목) → 영향도 → 규모·리스크 ([[글로벌 규칙 §우선순위]]). "쉽다/새것"이라고 앞세우지 않음. 모드 가치(BOTH > non-MP 전용) 반영.
| 순위 | # | 항목 | 모드 | 왜 이 순위 |
|---|---|---|---|---|
| 1 | 📎 E-3 | uring_cmd EINVAL 이슈 등록 | BOTH | 병목 언블록. 분석 완료·1시간. 없으면 uring_cmd recovery 무기한 정지. @DongDongJu Rust 수정 선행 |
| 2 | 🆕 N-1 | disk/file 실배칭 | BOTH | 신규 최선. 양쪽 해당·upstream TODO 명시·raw_block 배칭 경험 재사용. 영향 높음·인터페이스 무변경(저리스크)·독립 |
| 3 | 📎 E-2 | 런타임 TRIM | BOTH(MP-lean) | 영향 높음(WAF↓·Samsung 협업). #3519 discard() 재사용. #3519 머지+상윤 조율 선행 |
| 4 | 📎 E-1 | tier hit-rate/TTFT 관측 | BOTH | 영향 높음(#3752 공식화·PR 공백)·독립. N-4 흡수. 규모 큼(메트릭 6종+OTel+JSONL, 모드별 plumbing 2벌) |
| 5 | 🆕 N-3 | RssAnon 분석 | non-MP | 확인 비용 작음(grep 5분). #3793 중복 가능 → 빠른 판단. 영향 미지수·non-MP 전용 |
| 6 | 📎 E-4 | _snapshot_state lock | BOTH | 코드가 노트보다 악화. 영향 중간(대용량 index)·규모 작음 |
| 7 | 📎 E-5 | _free_slots O(n)/LIFO | BOTH | 영향 중간·규모 작음. FDP wear-leveling 선행이나 단독 이득 제한 |
| 8 | 🆕 N-4 | GDS Statistics | non-MP | 영향 낮음·규모 작음. E-1에 흡수 권장 |
| 9 | 📎 E-6 | checkpoint overflow(S2) | BOTH | Std SSD는 #3449로 해소. Daejun 답변 대기로 진행 막힘 |
| 10 | 🆕 N-2 | disk allocator/단편화 | non-MP | 큰 설계(eviction 얽힘)·MP는 #3859 점유. 영향 대비 규모·리스크 과다 → 맨 뒤 |
의존 체인 / 착수 가능
- 즉시 병렬 착수: 1(E-3 이슈) + 2(N-1) + 5(N-3 빠른 확인)
- 외부 선행조건 대기: 3(E-2, #3519+상윤) · 9(E-6, Daejun)
- 흡수 권장: 8(N-4) → 4(E-1)
4. 결론 (한 줄)
신규 중 N-1(disk/file 실배칭) 이 최선 — BOTH 모드 해당 + upstream TODO 명시 + raw_block io_uring 배칭 경험 직접 재사용. 즉시 착수는 E-3 이슈 등록(병목 언블록)이 먼저.