본문으로 건너뛰기

[PR] blkdiscard_on_init (init 시 BLKDISCARD)

[!tldr] 업무 관점 takeaway 권상윤(팀) 브랜치 — 체크포인트 로드 없이 디바이스를 깨끗이 초기화하는 blkdiscard_on_init 옵션. init 시 BLKDISCARD ioctl로 전체 범위를 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/RawBlockL2Adapterblkdiscard_on_init 추가. 초기화 순서에서 _discard_full_device() → Rust discard()detect_blkdiscard_max_bytes()(sysfs)로 청크 크기 정해 BLKDISCARD ioctl 루프. load_checkpoint_on_init=False와만 병용(충돌 검증).

아키텍처 관점 지적 (큰 흐름)

  1. 검증 레이어 불일치blkdiscard_on_init + load_checkpoint_on_init 충돌이 RawBlockCore.__init__에서만 ValueError. RawBlockL2AdapterConfig/from_dict엔 없어, Config 객체가 무효 상태로 존재 가능(다른 제약은 Config 생성 시 즉시 검증하는 패턴과 어긋남). → 가장 바깥 Config 레이어에서 일관되게 검증.
  2. 무관한 시그니처 순서 변경 혼입meta_verify_on_loadload_checkpoint_on_init 파라미터 순서가 이 기능 추가에 묻어 swap됨 → 위치 인자 호출이 silent break될 수 있고 리뷰에서 놓치기 쉽다. → 기능 PR에 관계없는 시그니처 변경을 섞지 말 것.
  3. (Storage 관점) discard 범위가 메타 영역까지 포함 — 의도가 docstring에 미명시. best-effort 실패(청크 중간 OSError 후 계속) 안전성 근거도 문서화 필요.

상태

브랜치 3커밋(2026-06-01). chunk 분할·discard 실패 경로 테스트 누락.

관련 페이지

  • [[WAF]] — trim/discard와 Write Amplification 관계
  • [[raw_block-내부구조]] — 디바이스 레이아웃·메타 영역
  • [[Samsung-LMCache-팀]] — 권상윤 담당 영역