refactor: 문서 개선 중

This commit is contained in:
donghyeon-ka
2026-09-21 14:30:55 +09:00
parent c93cdea150
commit 805a18f486
1497 changed files with 525837 additions and 59152 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,224 @@
{
"version": "1.1",
"id": "qemu-block-backend-forms",
"title": "virtqueue 뒤 QEMU block backend의 세 형태",
"question": "Guest /dev/vda 요청이 VM boundary를 넘은 뒤 QEMU에서 qcow2, RAW, Host block device 중 어느 backend로 이어지는가",
"type": "architecture",
"direction": "LR",
"audience": [
"virtio-blk와 QEMU block backend 경계를 이해하려는 개발자",
"Guest disk 이름만으로 Host backend를 단정하지 않으려는 운영자"
],
"summary": "Guest /dev/vda의 I/O는 virtio-blk·virtqueue를 지나 Host userspace의 QEMU block backend로 넘어간다. backend는 qcow2 file, RAW file, Host block device 세 형태일 수 있다. 파일 backend는 Host filesystem을 경유하고, Host block device는 파일이 아닌 장치를 backend로 쓴다.",
"alt": "Guest의 /dev/vda가 virtio-blk와 virtqueue를 지나 QEMU block backend에 도착한 뒤 qcow2 파일, RAW 파일, Host block device 세 갈래로 나뉘는 구조도. 그 아래 Host block stack은 별도 Concept이 맡아 이 그림에서는 다시 합치지 않는다.",
"long_description": "왼쪽에서 Guest /dev/vda 요청이 virtio-blk와 virtqueue를 지나 VM boundary를 넘는다. QEMU block backend에서 qcow2 file, RAW file, Host block device 세 갈래로 나뉜다. qcow2와 RAW 노드에는 Host filesystem을 경유한다는 차이를, Host block device에는 파일 backend가 아니라는 차이를 적었다. 세 경로 아래의 Host block stack은 별도 Concept이 맡으므로 이 그림에서는 다시 합치지 않는다.",
"source_context": {
"document": "docs/virtualization/final/document.md",
"document_sha256": "8c4ecc64c8cea9a4450ed7131fdd9cb2048dc092b66cd969f6346ed77887c210",
"anchor": {
"kind": "heading",
"value": "제4부 — 스토리지 가상화",
"line": 5791
}
},
"composition": {
"profile": "component-flow",
"diagram_only": true,
"reference_ids": [
"payment-event-flow"
],
"rationale": "핵심은 Guest disk 요청이 QEMU block backend를 지나 세 형태로 갈라지는 방향성이다. zone 상자보다 branch가 읽히는 것이 중요해 component-flow를 쓴다.",
"focus_node": "backend"
},
"groups": [],
"nodes": [
{
"id": "vda",
"label": "/dev/vda",
"kind": "storage",
"role": "source",
"description": "Guest가 보는 virtual disk.",
"evidence": [
{
"start_line": 6355,
"end_line": 6363
}
],
"assumption": false
},
{
"id": "virtio-queue",
"label": "virtio-blk · virtqueue",
"kind": "component",
"role": "service",
"description": "Guest /dev/vda 요청을 virtio-blk가 받아 virtqueue에 싣는 경로를 한 노드로 묶었다.",
"evidence": [
{
"start_line": 6355,
"end_line": 6364
}
],
"assumption": false,
"details": [
"Guest",
"VM boundary 직전"
]
},
{
"id": "backend",
"label": "QEMU block backend",
"kind": "service",
"role": "service",
"emphasis": "primary",
"description": "Guest virtual I/O를 실제 Host backend에 연결한다.",
"evidence": [
{
"start_line": 6367,
"end_line": 6387
}
],
"assumption": false
},
{
"id": "qcow2",
"label": "qcow2 file",
"kind": "storage",
"role": "service",
"details": [
"file backend",
"mapping · metadata",
"→ Host filesystem"
],
"description": "sparse/COW 기능을 가진 file backend.",
"evidence": [
{
"start_line": 6419,
"end_line": 6460
},
{
"start_line": 6512,
"end_line": 6547
}
],
"assumption": false
},
{
"id": "raw",
"label": "RAW file",
"kind": "storage",
"role": "service",
"description": "상대적으로 단순한 offset 대응을 쓰는 file backend.",
"evidence": [
{
"start_line": 6512,
"end_line": 6547
}
],
"assumption": false,
"details": [
"file backend",
"offset 대응",
"→ Host filesystem"
]
},
{
"id": "block-device",
"label": "Host block device",
"kind": "storage",
"role": "service",
"details": [
"/dev/...",
"file 없음",
"→ Host block stack"
],
"description": "QEMU가 Host block device를 직접 backend로 사용할 수 있는 형태.",
"evidence": [
{
"start_line": 6551,
"end_line": 6575
}
],
"assumption": false
}
],
"edges": [
{
"id": "vda-virtio",
"from": "vda",
"to": "virtio-queue",
"label": "block I/O",
"kind": "request",
"evidence": [
{
"start_line": 6355,
"end_line": 6363
}
],
"assumption": false
},
{
"id": "vq-backend",
"from": "virtio-queue",
"to": "backend",
"label": "VM boundary",
"kind": "request",
"evidence": [
{
"start_line": 6362,
"end_line": 6374
}
],
"assumption": false
},
{
"id": "backend-qcow2",
"from": "backend",
"to": "qcow2",
"label": "qcow2 backend",
"kind": "data",
"evidence": [
{
"start_line": 6369,
"end_line": 6379
},
{
"start_line": 6419,
"end_line": 6460
}
],
"assumption": false
},
{
"id": "backend-raw",
"from": "backend",
"to": "raw",
"label": "RAW backend",
"kind": "data",
"evidence": [
{
"start_line": 6512,
"end_line": 6547
}
],
"assumption": false
},
{
"id": "backend-block",
"from": "backend",
"to": "block-device",
"label": "block-device backend",
"kind": "data",
"evidence": [
{
"start_line": 6551,
"end_line": 6575
}
],
"assumption": false
}
],
"legend": [],
"metadata": {
"rationale": "이 그림의 물음은 QEMU backend 세 형태의 경계 차이다. 세 경로가 결국 Host block stack으로 내려가는 것은 별도 Concept이 맡으므로, 재합류 노드는 빼고 각 backend detail에 다음 계층을 적었다."
}
}