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
@@ -10,24 +10,24 @@ virtio-balloon Driver, virtqueue, QEMU virtio-balloon Device, Host Memory Manage
## Elements and evidence
- **virtio-balloon Driver** (driver): Guest kernel 쪽 balloon driver. target 을 받아 Guest page 를 확보한다. Evidence: L3013L3015, L3046L3046.
- **virtqueue** (queue): Guest 와 QEMU 가 balloon 요청을 주고받는 공유 큐. VM Boundary 바로 안쪽이다. Evidence: L3017L3017.
- **virtio-balloon Driver** (driver): Guest kernel 쪽 balloon driver. target 을 받아 Guest page 를 확보한다. Evidence: L3026L3028, L3059L3059.
- **virtqueue** (queue): Guest 와 QEMU 가 balloon 요청을 주고받는 공유 큐. VM Boundary 바로 안쪽이다. Evidence: L3030L3030.
- **QEMU virtio-balloon
Device** (service): Host 쪽 balloon device. 경계를 넘어온 내용을 Host memory management 로 넘긴다. Evidence: L3022L3022, L3037L3041.
Device** (service): Host 쪽 balloon device. 경계를 넘어온 내용을 Host memory management 로 넘긴다. Evidence: L3035L3035, L3050L3054.
- **Host Memory
Management** (service): balloon target 을 정하는 쪽이자 회수 기회가 생기는 자리. Evidence: L3025L3025, L3034L3037.
Management** (service): balloon target 을 정하는 쪽이자 회수 기회가 생기는 자리. Evidence: L3038L3038, L3047L3050.
## Relationships
- **Host Memory
Management → QEMU virtio-balloon
Device:** Balloon target 조정. Evidence: L3034L3041.
Device:** Balloon target 조정. Evidence: L3047L3054.
- **QEMU virtio-balloon
Device → virtqueue:** VM Boundary. Evidence: L3017L3022, L3041L3046.
- **virtqueue → virtio-balloon Driver:** Balloon target. Evidence: L3013L3017, L3043L3046.
- **virtio-balloon Driver → virtqueue:** Guest pages 확보. Evidence: L3046L3050.
Device → virtqueue:** VM Boundary. Evidence: L3030L3035, L3054L3059.
- **virtqueue → virtio-balloon Driver:** Balloon target. Evidence: L3026L3030, L3056L3059.
- **virtio-balloon Driver → virtqueue:** Guest pages 확보. Evidence: L3059L3063.
- **virtqueue → QEMU virtio-balloon
Device:** VM Boundary. Evidence: L3017L3025.
Device:** VM Boundary. Evidence: L3030L3038.
- **QEMU virtio-balloon
Device → Host Memory
Management:** 회수 가능 backing. Evidence: L3022L3028, L3077L3079.
Management:** 회수 가능 backing. Evidence: L3035L3041, L3090L3092.
@@ -0,0 +1,15 @@
digraph techviz {
graph [rankdir=LR, splines=ortho, nodesep=0.55, ranksep=0.85];
node [fontname=Helvetica, fontsize=11, margin="0.18,0.12", style="rounded,filled", fillcolor=white, color="#2d4357", penwidth=1.5];
edge [fontname=Helvetica, fontsize=10, color="#364b5f", penwidth=1.4, arrowsize=0.75];
n0 [label="virtio-balloon Driver", shape=box, style="rounded,filled"];
n1 [label="virtqueue", shape=oval, style="rounded,filled"];
n2 [label="QEMU virtio-balloon\nDevice", shape=box, style="rounded,filled"];
n3 [label="Host Memory\nManagement", shape=box, style="rounded,filled"];
n3 -> n2 [label="Balloon target 조정", style=solid];
n2 -> n1 [label="VM Boundary", style=solid];
n1 -> n0 [label="Balloon target", style=solid];
n0 -> n1 [label="Guest pages 확보", style=solid];
n1 -> n2 [label="VM Boundary", style=solid];
n2 -> n3 [label="회수 가능 backing", style=solid];
}
@@ -5,18 +5,18 @@
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="n_balloon-driver" value="virtio-balloon Driver&lt;br/&gt;Guest Kernel" tooltip="Guest kernel 쪽 balloon driver. target 을 받아 Guest page 를 확보한다. | Evidence: L3013-L3015, L3046-L3046" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
<mxCell id="n_balloon-driver" value="virtio-balloon Driver&lt;br/&gt;Guest Kernel" tooltip="Guest kernel 쪽 balloon driver. target 을 받아 Guest page 를 확보한다. | Evidence: L3026-L3028, L3059-L3059" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="45.0" y="35.0" width="181.0" height="71.0" as="geometry"/>
</mxCell>
<mxCell id="n_virtqueue" value="virtqueue" tooltip="Guest 와 QEMU 가 balloon 요청을 주고받는 공유 큐. VM Boundary 바로 안쪽이다. | Evidence: L3017-L3017" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
<mxCell id="n_virtqueue" value="virtqueue" tooltip="Guest 와 QEMU 가 balloon 요청을 주고받는 공유 큐. VM Boundary 바로 안쪽이다. | Evidence: L3030-L3030" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="255.0" y="35.0" width="150.0" height="64.0" as="geometry"/>
</mxCell>
<mxCell id="n_qemu-balloon-device" value="QEMU virtio-balloon
Device" tooltip="Host 쪽 balloon device. 경계를 넘어온 내용을 Host memory management 로 넘긴다. | Evidence: L3022-L3022, L3037-L3041" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
Device" tooltip="Host 쪽 balloon device. 경계를 넘어온 내용을 Host memory management 로 넘긴다. | Evidence: L3035-L3035, L3050-L3054" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="465.0" y="35.0" width="167.0" height="74.0" as="geometry"/>
</mxCell>
<mxCell id="n_host-memory-management" value="Host Memory
Management" tooltip="balloon target 을 정하는 쪽이자 회수 기회가 생기는 자리. | Evidence: L3025-L3025, L3034-L3037" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
Management" tooltip="balloon target 을 정하는 쪽이자 회수 기회가 생기는 자리. | Evidence: L3038-L3038, L3047-L3050" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="675.0" y="35.0" width="150.0" height="74.0" as="geometry"/>
</mxCell>
<mxCell id="e_target-adjust" value="Balloon target 조정" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_host-memory-management" target="n_qemu-balloon-device">
@@ -2,21 +2,22 @@
"harness_version": "0.2.0",
"spec_id": "virtio-balloon-inflate-deflate",
"spec_version": "1.1",
"spec_sha256": "1a53fd7e3e5cf5b553be00d6c12f47f8493d302f9a79f660d29e1d85490e61de",
"spec_sha256": "4656ebc5df3dec37c88ef57a973289ffff3ac2d8035c85c09ffc1819d68ab855",
"source_context": {
"document": "docs/virtualization/final/document.md",
"document_sha256": "181e2b3cc8a45bae81e7e8193d026937c4d586ae4495d3b2c323eb7e6abcfadd",
"document_sha256": "8c4ecc64c8cea9a4450ed7131fdd9cb2048dc092b66cd969f6346ed77887c210",
"anchor": {
"kind": "heading",
"value": "65. virtio-balloon 구조",
"line": 3008
"line": 3021
}
},
"outputs": [
"virtio-balloon-inflate-deflate.svg",
"virtio-balloon-inflate-deflate.drawio",
"virtio-balloon-inflate-deflate.mmd",
"virtio-balloon-inflate-deflate.d2",
"virtio-balloon-inflate-deflate.dot",
"virtio-balloon-inflate-deflate.drawio",
"virtio-balloon-inflate-deflate.excalidraw",
"virtio-balloon-inflate-deflate.alt.md"
],
@@ -27,5 +28,15 @@
"reference_ids": [
"payment-approval-sequence"
],
"diagram_only": true
"diagram_only": true,
"source_spec_file_sha256": "3eb87c2e0da87b76563f6611dca1821ffe17b18debb16ede52863436ff74a534",
"output_sha256": {
"virtio-balloon-inflate-deflate.svg": "4722f6147d70def8734f300b7ffdaba8acb341448182ed9666be74136104c7ee",
"virtio-balloon-inflate-deflate.mmd": "a756eba8251ca111a406ff5af80c3e45f537df7f5b03e7536e25e2d14498a945",
"virtio-balloon-inflate-deflate.d2": "4ef3dab8288b8823688910eb416fe922d258a0736d0e4074c1f6931c052df9ed",
"virtio-balloon-inflate-deflate.dot": "5ab4b8d1b4fc02972b5dd270496ed95d98918b34ef8476c4b4bf95b5131eb201",
"virtio-balloon-inflate-deflate.drawio": "20abf47a8865a3569aa1caa56dd7de168c2af3d0052e228381f27087dc60ad83",
"virtio-balloon-inflate-deflate.excalidraw": "0613fa8301e2a5d7eb080f706e6841d828445b4ce7baf23e9b845a7856a90abb",
"virtio-balloon-inflate-deflate.alt.md": "4358baa3745beb79671dc64ed9cf31f445815ab6256d7c65e3924ceb1a0dbc82"
}
}
@@ -2,7 +2,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="870" height="542" viewBox="0 0 870 542" role="img" aria-labelledby="diagram-title diagram-description">
<title id="diagram-title">balloon target 은 VM Boundary 를 건너 driver 에 닿고 확보한 page 는 같은 경계를 되건너 온다</title>
<desc id="diagram-description">참여자는 왼쪽부터 Guest kernel 의 virtio-balloon Driver, virtqueue, QEMU virtio-balloon Device, Host Memory Management 네 개다. 메시지는 위에서 아래로 읽는다. 1번은 Host Memory Management 가 QEMU 쪽 device 에 balloon target 조정을 보내는 것이고, 2번에서 그 요청이 virtqueue 로 내려가면서 VM Boundary 를 넘고, 3번에서 Guest kernel 의 driver 에 balloon target 이 닿는다. 여기서 방향이 바뀐다. 4번에서 driver 가 확보한 Guest page 를 virtqueue 에 올리고, 5번에서 그것이 다시 VM Boundary 를 넘어 QEMU 쪽 device 로 가고, 6번에서 device 가 Host Memory Management 에 회수 가능 backing 으로 넘긴다. target 을 올릴 때와 내릴 때 Guest 가 쓸 수 있는 memory 가 어느 쪽으로 움직이는지는 본문의 표가 맡는다.</desc>
<metadata>{&quot;techviz&quot;:{&quot;spec_version&quot;:&quot;1.1&quot;,&quot;id&quot;:&quot;virtio-balloon-inflate-deflate&quot;,&quot;profile&quot;:&quot;sequence&quot;},&quot;source_context&quot;:{&quot;document&quot;:&quot;docs/virtualization/final/document.md&quot;,&quot;document_sha256&quot;:&quot;181e2b3cc8a45bae81e7e8193d026937c4d586ae4495d3b2c323eb7e6abcfadd&quot;,&quot;anchor&quot;:{&quot;kind&quot;:&quot;heading&quot;,&quot;value&quot;:&quot;65. virtio-balloon 구조&quot;,&quot;line&quot;:3008}},&quot;evidence_policy&quot;:&quot;Each factual element cites source lines or is marked assumption.&quot;,&quot;diagram_only&quot;:true}</metadata>
<metadata>{&quot;techviz&quot;:{&quot;spec_version&quot;:&quot;1.1&quot;,&quot;id&quot;:&quot;virtio-balloon-inflate-deflate&quot;,&quot;profile&quot;:&quot;sequence&quot;},&quot;source_context&quot;:{&quot;document&quot;:&quot;docs/virtualization/final/document.md&quot;,&quot;document_sha256&quot;:&quot;8c4ecc64c8cea9a4450ed7131fdd9cb2048dc092b66cd969f6346ed77887c210&quot;,&quot;anchor&quot;:{&quot;kind&quot;:&quot;heading&quot;,&quot;value&quot;:&quot;65. virtio-balloon 구조&quot;,&quot;line&quot;:3021}},&quot;evidence_policy&quot;:&quot;Each factual element cites source lines or is marked assumption.&quot;,&quot;diagram_only&quot;:true}</metadata>
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" />
@@ -50,38 +50,38 @@
</style>
</defs>
<rect class="canvas" width="870" height="542" />
<rect class="node-shape kind-driver emphasis-primary role-participant" data-evidence="3013-3015,3046-3046" x="45.0" y="35.0" width="181.0" height="71.0" rx="7" />
<rect class="node-shape kind-driver emphasis-primary role-participant" data-evidence="3026-3028,3059-3059" x="45.0" y="35.0" width="181.0" height="71.0" rx="7" />
<text class="node-label" x="135.5" y="62.0">virtio-balloon Driver</text>
<line class="node-detail-divider" x1="59.0" y1="83.0" x2="212.0" y2="83.0" />
<text class="node-detail" x="61.0" y="100.0">Guest Kernel</text>
<line class="lifeline" x1="135.5" y1="106.0" x2="135.5" y2="512.0" />
<rect class="node-shape kind-queue emphasis-normal role-participant" data-evidence="3017-3017" x="255.0" y="35.0" width="150.0" height="64.0" rx="7" />
<rect class="node-shape kind-queue emphasis-normal role-participant" data-evidence="3030-3030" x="255.0" y="35.0" width="150.0" height="64.0" rx="7" />
<text class="node-label" x="330.0" y="65.0">virtqueue</text>
<line class="lifeline" x1="330.0" y1="99.0" x2="330.0" y2="512.0" />
<rect class="node-shape kind-service emphasis-normal role-participant" data-evidence="3022-3022,3037-3041" x="465.0" y="35.0" width="167.0" height="74.0" rx="7" />
<rect class="node-shape kind-service emphasis-normal role-participant" data-evidence="3035-3035,3050-3054" x="465.0" y="35.0" width="167.0" height="74.0" rx="7" />
<text class="node-label" x="548.5" y="62.0">QEMU virtio-balloon</text>
<text class="node-label" x="548.5" y="80.0">Device</text>
<line class="lifeline" x1="548.5" y1="109.0" x2="548.5" y2="512.0" />
<rect class="node-shape kind-service emphasis-normal role-participant" data-evidence="3025-3025,3034-3037" x="675.0" y="35.0" width="150.0" height="74.0" rx="7" />
<rect class="node-shape kind-service emphasis-normal role-participant" data-evidence="3038-3038,3047-3050" x="675.0" y="35.0" width="150.0" height="74.0" rx="7" />
<text class="node-label" x="750.0" y="62.0">Host Memory</text>
<text class="node-label" x="750.0" y="80.0">Management</text>
<line class="lifeline" x1="750.0" y1="109.0" x2="750.0" y2="512.0" />
<polyline class="edge kind-control style-solid emphasis-normal" points="750.0,140.0 548.5,140.0" data-evidence="3034-3041" />
<polyline class="edge kind-control style-solid emphasis-normal" points="750.0,140.0 548.5,140.0" data-evidence="3047-3054" />
<rect class="edge-label-bg" x="573.2" y="114.0" width="152.0" height="22" rx="3" />
<text class="edge-label" x="649.2" y="129.0">1. Balloon target 조정</text>
<polyline class="edge kind-control style-solid emphasis-normal" points="548.5,202.0 330.0,202.0" data-evidence="3017-3022,3041-3046" />
<polyline class="edge kind-control style-solid emphasis-normal" points="548.5,202.0 330.0,202.0" data-evidence="3030-3035,3054-3059" />
<rect class="edge-label-bg" x="383.4" y="176.0" width="111.8" height="22" rx="3" />
<text class="edge-label" x="439.2" y="191.0">2. VM Boundary</text>
<polyline class="edge kind-control style-solid emphasis-normal" points="330.0,264.0 135.5,264.0" data-evidence="3013-3017,3043-3046" />
<polyline class="edge kind-control style-solid emphasis-normal" points="330.0,264.0 135.5,264.0" data-evidence="3026-3030,3056-3059" />
<rect class="edge-label-bg" x="166.8" y="238.0" width="131.9" height="22" rx="3" />
<text class="edge-label" x="232.8" y="253.0">3. Balloon target</text>
<polyline class="edge kind-data style-solid emphasis-normal" points="135.5,326.0 330.0,326.0" data-evidence="3046-3050" />
<polyline class="edge kind-data style-solid emphasis-normal" points="135.5,326.0 330.0,326.0" data-evidence="3059-3063" />
<rect class="edge-label-bg" x="166.8" y="300.0" width="131.9" height="22" rx="3" />
<text class="edge-label" x="232.8" y="315.0">4. Guest pages 확보</text>
<polyline class="edge kind-data style-solid emphasis-normal" points="330.0,388.0 548.5,388.0" data-evidence="3017-3025" />
<polyline class="edge kind-data style-solid emphasis-normal" points="330.0,388.0 548.5,388.0" data-evidence="3030-3038" />
<rect class="edge-label-bg" x="383.4" y="362.0" width="111.8" height="22" rx="3" />
<text class="edge-label" x="439.2" y="377.0">5. VM Boundary</text>
<polyline class="edge kind-data style-solid emphasis-normal" points="548.5,450.0 750.0,450.0" data-evidence="3022-3028,3077-3079" />
<polyline class="edge kind-data style-solid emphasis-normal" points="548.5,450.0 750.0,450.0" data-evidence="3035-3041,3090-3092" />
<rect class="edge-label-bg" x="586.6" y="424.0" width="125.2" height="22" rx="3" />
<text class="edge-label" x="649.2" y="439.0">6. 회수 가능 backing</text>
</svg>

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB