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
@@ -4,31 +4,31 @@
"title": "게스트 두 대는 호스트에서 qemu 프로세스 두 개다",
"question": "호스트에서 게스트는 무엇으로 존재하고, 게스트가 보는 장치는 누가 만들어 주는가",
"type": "deployment",
"direction": "TB",
"direction": "LR",
"audience": [
"실험대를 운영하는 사람",
"호스트와 게스트의 측정값을 대조하는 사람"
],
"summary": "libvirtd 가 게스트마다 qemu-system-x86_64 를 띄우고, 게스트가 보는 디스크와 네트워크는 그 프로세스가 virtio 로 내주며, 두 프로세스는 machine.slice 아래에서 메모리 상한을 받는다.",
"alt": "호스트 안에 libvirtd·machine.slice·virbr0 와 qemu 프로세스 두 개가 있고, 프로세스가 게스트 하나씩을 담는 배치도.",
"long_description": "위에서 아래로 읽는다. 호스트 test-server 경계 안에 libvirtd 있고 그 아래에 qemu-system-x86_64 프로세스가 게스트 수만큼 있다. 경계 밖 아래쪽에 게스트 kc-lab-1 과 kc-lab-2 가 각각 따로 있고, 게스트가 보는 디스크와 인터페이스는 자기를 담은 프로세스 virtio 로 내준다. 프로세스에 적힌 RSS 와 게스트에 적힌 available 은 같은 메모리를 다른 껍질에서 읽은 값이다. machine.slice 와 virbr0 는 이 그림에 넣지 않았고 본문이 맡는다.",
"summary": "호스트에서는 게스트 두 대가 qemu-system-x86_64 프로세스 두 개로 존재하고, 각 프로세스가 virtio 장치를 게스트 커널에 내준다.",
"alt": "호스트 영역의 libvirtd qemu 프로세스 두 개를 만들고, 프로세스 집합이 virtio 경계를 넘어 Debian 게스트 커널 두 개를 제공하는 구조.",
"long_description": "호스트 test-server에 libvirtd가 게스트마다 qemu-system-x86_64 프로세스를 하나씩 띄운다. kc-lab-1과 kc-lab-2는 호스트에서 qemu 프로세스 두 개로 보이며 RSS는 호스트 관점의 값이다. 각 프로세스 virtio 디스크와 네트워크를 게스트에 제공하고, 게스트 안에서는 Debian 커널이 자기 메모리와 인터페이스를 본다.",
"source_context": {
"document": "docs/keycloak-session-store/final/document.md",
"document_sha256": "0ae5674723f25dc85d5069529890f07be1a11b768b56901103fa3ea6ac3dcf55",
"document_sha256": "28aef96a2bbb94fbb10ade26a71238fee62a5a4d9fa6e7749ae98cfd0a65e560",
"anchor": {
"kind": "heading",
"value": "0층. 가상화 — 「바닥」 아래에 있는 것",
"line": 935
"line": 3274
}
},
"composition": {
"profile": "component-flow",
"profile": "two-zone-pipeline",
"diagram_only": true,
"reference_ids": [
"payment-event-flow"
"localization-pipeline"
],
"rationale": "게스트가 호스트에서 어떻게 존재하는지는 libvirtd 에서 qemu 프로세스로, 다시 게스트 커널로 내려가는 한 방향 경로다. sequence 는 이 절에 시각 순서가 없어서 맞지 않고, orchestrator-workers 는 게스트 둘을 교체 가능한 워커로 그리는데 둘은 할당량도 역할도 다르다.",
"focus_node": "qemu-kc-lab-1"
"rationale": "호스트에서 관리되는 qemu 프로세스 집합과 게스트 커널 집합을 두 영역으로 나누고 virtio 경계만 보인다.",
"focus_node": "qemu-pairs"
},
"groups": [
{
@@ -36,51 +36,29 @@
"label": "호스트 test-server",
"kind": "system",
"role": "zone",
"description": "libvirtd 게스트 프로세스가 함께 도는 호스트 경계.",
"description": "libvirtd와 qemu-system-x86_64 프로세스가 도는 영역.",
"evidence": [
{
"start_line": 946,
"end_line": 948
},
{
"start_line": 956,
"end_line": 956
"start_line": 3285,
"end_line": 3295
}
],
"assumption": false
},
{
"id": "guest-1-zone",
"label": "게스트 kc-lab-1",
"id": "guest-zone",
"label": "게스트 VM",
"kind": "system",
"role": "zone",
"description": "qemu 프로세스 하나가 담는 Debian 게스트.",
"description": "kc-lab-1과 kc-lab-2의 Debian 커널이 도는 영역.",
"evidence": [
{
"start_line": 987,
"end_line": 990
"start_line": 3326,
"end_line": 3337
},
{
"start_line": 1039,
"end_line": 1039
}
],
"assumption": false
},
{
"id": "guest-2-zone",
"label": "게스트 kc-lab-2",
"kind": "system",
"role": "zone",
"description": "나머지 qemu 프로세스가 담는 Debian 게스트.",
"evidence": [
{
"start_line": 1033,
"end_line": 1033
},
{
"start_line": 1040,
"end_line": 1040
"start_line": 3378,
"end_line": 3379
}
],
"assumption": false
@@ -93,129 +71,63 @@
"kind": "service",
"role": "source",
"group": "host-zone",
"shape": "box",
"emphasis": "normal",
"description": "게스트마다 qemu-system-x86_64 프로세스를 띄운다.",
"details": [
"qemu:///system"
],
"description": "게스트마다 qemu-system-x86_64 를 하나씩 띄우는 호스트 데몬. htop 트리 뷰에서 그 아래에 게스트 프로세스가 달린다.",
"evidence": [
{
"start_line": 946,
"end_line": 948
},
{
"start_line": 956,
"end_line": 956
"start_line": 3285,
"end_line": 3295
}
],
"assumption": false
},
{
"id": "qemu-kc-lab-1",
"label": "qemu-system-x86_64",
"id": "qemu-pairs",
"label": "qemu 프로세스 2개",
"kind": "service",
"role": "service",
"group": "host-zone",
"shape": "box",
"emphasis": "primary",
"description": "각 프로세스 하나가 게스트 하나를 담는다.",
"details": [
"kc-lab-1",
"vCPU 2",
"할당 3584MB",
"RSS 3765MB"
"kc-lab-1 · 3584MB · RSS 3765MB",
"kc-lab-2 · 2560MB · RSS 2633~2670MB"
],
"description": "kc-lab-1 게스트 전체가 들어 있는 호스트 프로세스. vCPU 는 이 프로세스의 스레드이고 RSS 는 게스트가 터치한 페이지만큼이다.",
"evidence": [
{
"start_line": 946,
"end_line": 948
"start_line": 3326,
"end_line": 3326
},
{
"start_line": 987,
"end_line": 987
},
{
"start_line": 1032,
"end_line": 1032
"start_line": 3371,
"end_line": 3372
}
],
"assumption": false
},
{
"id": "qemu-kc-lab-2",
"label": "qemu-system-x86_64",
"id": "guest-kernels",
"label": "Debian 게스트 커널 2개",
"kind": "service",
"role": "service",
"group": "host-zone",
"shape": "box",
"role": "target",
"group": "guest-zone",
"emphasis": "primary",
"description": "게스트는 qemu가 내준 virtio 장치와 자기 메모리만 본다.",
"details": [
"kc-lab-2",
"할당 2560MB",
"RSS 2633MB"
"kc-lab-1 · 192.168.122.11 · available 1959MB",
"kc-lab-2 · 192.168.122.12 · available 1899MB"
],
"description": "kc-lab-2 게스트 전체가 들어 있는 호스트 프로세스. A-4 의 virsh destroy 가 끊는 것이 이 프로세스다.",
"evidence": [
{
"start_line": 946,
"end_line": 948
"start_line": 3333,
"end_line": 3337
},
{
"start_line": 967,
"end_line": 976
},
{
"start_line": 1033,
"end_line": 1033
}
],
"assumption": false
},
{
"id": "guest-kernel-1",
"label": "Debian 게스트 커널",
"kind": "service",
"role": "sink",
"group": "guest-1-zone",
"shape": "box",
"details": [
"enp1s0 · 192.168.122.11",
"총 3423MB",
"available 1959MB"
],
"description": "virtio 장치만 보는 게스트. free 가 읽는 값이 여기 있다.",
"evidence": [
{
"start_line": 994,
"end_line": 998
},
{
"start_line": 1039,
"end_line": 1039
}
],
"assumption": false
},
{
"id": "guest-kernel-2",
"label": "Debian 게스트 커널",
"kind": "service",
"role": "sink",
"group": "guest-2-zone",
"shape": "box",
"details": [
"enp1s0 · 192.168.122.12",
"총 2480MB",
"available 1899MB"
],
"description": "같은 방식으로 붙은 두 번째 게스트.",
"evidence": [
{
"start_line": 994,
"end_line": 998
},
{
"start_line": 1040,
"end_line": 1040
"start_line": 3378,
"end_line": 3379
}
],
"assumption": false
@@ -223,77 +135,29 @@
],
"edges": [
{
"id": "libvirtd-spawns-1",
"id": "spawn",
"from": "libvirtd",
"to": "qemu-kc-lab-1",
"to": "qemu-pairs",
"label": "프로세스 생성",
"kind": "control",
"style": "solid",
"evidence": [
{
"start_line": 946,
"end_line": 948
},
{
"start_line": 956,
"end_line": 956
"start_line": 3285,
"end_line": 3295
}
],
"assumption": false
},
{
"id": "libvirtd-spawns-2",
"from": "libvirtd",
"to": "qemu-kc-lab-2",
"label": "프로세스 생성",
"kind": "control",
"style": "solid",
"evidence": [
{
"start_line": 946,
"end_line": 948
},
{
"start_line": 956,
"end_line": 956
}
],
"assumption": false
},
{
"id": "qemu1-virtio",
"from": "qemu-kc-lab-1",
"to": "guest-kernel-1",
"label": "virtio 디스크 · virtio-net",
"id": "virtio",
"from": "qemu-pairs",
"to": "guest-kernels",
"label": "virtio 장치",
"kind": "data",
"style": "solid",
"evidence": [
{
"start_line": 987,
"end_line": 990
},
{
"start_line": 994,
"end_line": 998
}
],
"assumption": false
},
{
"id": "qemu2-virtio",
"from": "qemu-kc-lab-2",
"to": "guest-kernel-2",
"label": "virtio 디스크 · virtio-net",
"kind": "data",
"style": "solid",
"evidence": [
{
"start_line": 987,
"end_line": 990
},
{
"start_line": 994,
"end_line": 998
"start_line": 3326,
"end_line": 3337
}
],
"assumption": false
@@ -301,6 +165,6 @@
],
"legend": [],
"metadata": {
"rationale": "배치도로 고른 이유는 이 절이 주장하는 것이 순서가 아니라 담김이기 때문이다 — 게스트 하나가 호스트 프로세스 하나 안에 있고, 스트가 보는 장치는 그 프로세스가 내준다. 메모리를 읽는 곳 셋과 machine.slice·virbr0 는 본문 표와 문단이 맡는다."
"rationale": "개별 VM마다 같은 qemu→guest 경로를 두 번 반복하지 않고, 스트 프로세스 집합과 게스트 커널 집합의 대응을 한 경계로 묶었다."
}
}