docs: close D3 fc/OpenZFS upstream review (VALIDATED, no code change)#88
Conversation
D3 review: anvil's coarse-hole diff mitigation (probe→demote/refuse + recordsize=4K) validated against upstream fc (4K sparse dirty-page diff) + OpenZFS (recordsize hole granularity, zfs_dmu_offset_next_sync dirty reporting) semantics — fail-safe, durable, no code change. Verified the read-side guard's invariant holds (creation-side demotion is universal: single resolveSnapshotType->applyD3DiffGuard path). Durable review doc + CONTEXT closure. Also closes the now-merged runes-migration backlog line (#87 doc-sync).
|
Warning Review limit reached
Next review available in: 25 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
요약
백로그 "fc upstream/OpenZFS 참고 보고 검토(D3)"를 VALIDATED로 종결한다(docs-only, 코드 변경 없음). anvil의 D3 방어(coarse-hole 파일시스템에서 sparse diff snapshot 오염 방지)를 upstream Firecracker diff-snapshot + OpenZFS hole-보고 의미론에 대조해 검증했고, 전 지점 정합·fail-safe·근본적 내구임을 확인했다.
D3 배경
ZFS(recordsize>4K)는 sparse diff의 hole을 record 단위로만 보고 →
SEEK_HOLE이 written 영역을 과대보고 → 미기록 padding이 base memory를 덮어써 guest triple-fault(D3). anvil 방어(PR #36):ProbeHoleGranularity로 fs granularity 측정 → 창설측 diff→full 강등(applyD3DiffGuard) + 판독측 overlay 거부 + recordsize=4K dataset 권장.검증 (upstream 대조, deep-worker 조사 + 컨트롤러 코드 검증)
HoleGranularityFine=4096정확?snapshot-support.md(sparse dirty diff), KVM 4K dirty-tracking. fc 자체 merge 도구도 동일 SEEK_HOLE overlay → 취약성은 fc 포맷 고유dnode_next_offsetblock 탐색zfs_dmu_offset_next_syncman컨트롤러 검증(코드 대조): review의 핵심 Note 1(read-side 가드는 현재 fs를 probe, 태생 fs 아님 → 창설측 강등의 보편성에 의존)을 직접 확인 — snapshot 생성 경로는 단일(
api.goresolveSnapshotType→applyD3DiffGuard), coarse fs에서 항상 diff→full 강등하므로 anvil은 coarse-born diff를 절대 생성하지 않음 → Note 1은 이론적 residual(legacy/non-anvil diff)일 뿐 실무 gap 아님.변경
docs/operations/2026-07-19-d3-upstream-review.md신설 — durable 검토 요약(Q1–Q5, 소스, Note 1·2, fail-safe·엣지, 결론).CONTEXT.md— D3 리뷰 백로그 라인 종결 + (겸사) refactor(web): migrate operator UI to Svelte 5 runes (core, behavior-preserving) #87 병합됐으나 미종결이던 runes 마이그레이션 백로그 라인도 종결(doc-sync).부차 발견 (검토 밖·선택, 비차단)
storage.HoleGranularityCoarse헬퍼는 production 호출자 0(데몬은ProbeHoleGranularity직접) — 선택적 cleanup 후보(별도 작업).rebase-snap도 동일 취약 → fc 문서 노트 제보 후보(anvil 책임 아님).lifecycle
docs 검토·종결(코드/계약 변경 없음). deep-worker(Opus) upstream 조사 + 컨트롤러 코드 검증. gofmt clean(
.go무변경).