[PR] blkdiscard_on_init (init 시 BLKDISCARD)
[!tldr] 업무 관점 takeaway 권상윤(팀) 브랜치 — 체크포인트 로드 없이 디바이스를 깨끗이 초기화하는
blkdiscard_on_init옵션. init 시BLKDISCARDioctl로 전체 범위를 trim. NVMe trim/WAF·초기화 동작에 닿아 Storage 관점에서 추적 가치. 아키텍처 관점 핵심 = 검증을 가장 바깥(Config) 레이어에서 일관되게 해야 하고, 무관한 시그니처 순서 변경을 기능 PR에 섞지 말 것.
- 브랜치:
priv/sy/feat/raw-block-blkdiscard(커밋 3개, 2026-06-01) - 작성자: Sangyoon Kwon (권상윤) · 출처:
raw/work/reviews/cr-4b176cfa-*.md
문제
load_checkpoint_on_init=False로 새로 시작할 때, 디바이스를 완전히 초기화(trim/zero)하는 표준 경로가 없었음.
변경
RustRawBlockBackend/RawBlockCore/RawBlockL2Adapter에 blkdiscard_on_init 추가. 초기화 순서에서 _discard_full_device() → Rust discard()가 detect_blkdiscard_max_bytes()(sysfs)로 청크 크기 정해 BLKDISCARD ioctl 루프. load_checkpoint_on_init=False와만 병용(충돌 검증).
아키텍처 관점 지적 (큰 흐름)
- 검증 레이어 불일치 —
blkdiscard_on_init + load_checkpoint_on_init충돌이RawBlockCore.__init__에서만ValueError.RawBlockL2AdapterConfig/from_dict엔 없어, Config 객체가 무효 상태로 존재 가능(다른 제약은 Config 생성 시 즉시 검증하는 패턴과 어긋남). → 가장 바깥 Config 레이어에서 일관되게 검증. - 무관한 시그니처 순서 변경 혼입 —
meta_verify_on_load↔load_checkpoint_on_init파라미터 순서가 이 기능 추가에 묻어 swap됨 → 위치 인자 호출이 silent break될 수 있고 리뷰에서 놓치기 쉽다. → 기능 PR에 관계없는 시그니처 변경을 섞지 말 것. - (Storage 관점) discard 범위가 메타 영역까지 포함 — 의도가 docstring에 미명시. best-effort 실패(청크 중간 OSError 후 계속) 안전성 근거도 문서화 필요.
상태
브랜치 3커밋(2026-06-01). chunk 분할·discard 실패 경로 테스트 누락.
관련 페이지
- [[WAF]] — trim/discard와 Write Amplification 관계
- [[raw_block-내부구조]] — 디바이스 레이아웃·메타 영역
- [[Samsung-LMCache-팀]] — 권상윤 담당 영역