feat: 가상화 문서들 추가

This commit is contained in:
DongHyeonka
2026-09-10 08:54:05 +09:00
parent e9f6a93327
commit 43e1aadef0
695 changed files with 153404 additions and 12754 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,306 @@
{
"version": "1.1",
"id": "guest-as-host-process",
"title": "게스트 두 대는 호스트에서 qemu 프로세스 두 개다",
"question": "호스트에서 게스트는 무엇으로 존재하고, 게스트가 보는 장치는 누가 만들어 주는가",
"type": "deployment",
"direction": "TB",
"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 는 이 그림에 넣지 않았고 본문이 맡는다.",
"source_context": {
"document": "docs/keycloak-session-store/final/document.md",
"document_sha256": "0ae5674723f25dc85d5069529890f07be1a11b768b56901103fa3ea6ac3dcf55",
"anchor": {
"kind": "heading",
"value": "0층. 가상화 — 「바닥」 아래에 있는 것",
"line": 935
}
},
"composition": {
"profile": "component-flow",
"diagram_only": true,
"reference_ids": [
"payment-event-flow"
],
"rationale": "게스트가 호스트에서 어떻게 존재하는지는 libvirtd 에서 qemu 프로세스로, 다시 게스트 커널로 내려가는 한 방향 경로다. sequence 는 이 절에 시각 순서가 없어서 맞지 않고, orchestrator-workers 는 게스트 둘을 교체 가능한 워커로 그리는데 둘은 할당량도 역할도 다르다.",
"focus_node": "qemu-kc-lab-1"
},
"groups": [
{
"id": "host-zone",
"label": "호스트 test-server",
"kind": "system",
"role": "zone",
"description": "libvirtd 와 게스트 프로세스가 함께 도는 호스트 경계.",
"evidence": [
{
"start_line": 946,
"end_line": 948
},
{
"start_line": 956,
"end_line": 956
}
],
"assumption": false
},
{
"id": "guest-1-zone",
"label": "게스트 kc-lab-1",
"kind": "system",
"role": "zone",
"description": "qemu 프로세스 하나가 담는 Debian 게스트.",
"evidence": [
{
"start_line": 987,
"end_line": 990
},
{
"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
}
],
"assumption": false
}
],
"nodes": [
{
"id": "libvirtd",
"label": "libvirtd",
"kind": "service",
"role": "source",
"group": "host-zone",
"shape": "box",
"details": [
"qemu:///system"
],
"description": "게스트마다 qemu-system-x86_64 를 하나씩 띄우는 호스트 데몬. htop 트리 뷰에서 그 아래에 게스트 프로세스가 달린다.",
"evidence": [
{
"start_line": 946,
"end_line": 948
},
{
"start_line": 956,
"end_line": 956
}
],
"assumption": false
},
{
"id": "qemu-kc-lab-1",
"label": "qemu-system-x86_64",
"kind": "service",
"role": "service",
"group": "host-zone",
"shape": "box",
"emphasis": "primary",
"details": [
"kc-lab-1",
"vCPU 2",
"할당 3584MB",
"RSS 3765MB"
],
"description": "kc-lab-1 게스트 전체가 들어 있는 호스트 프로세스. vCPU 는 이 프로세스의 스레드이고 RSS 는 게스트가 터치한 페이지만큼이다.",
"evidence": [
{
"start_line": 946,
"end_line": 948
},
{
"start_line": 987,
"end_line": 987
},
{
"start_line": 1032,
"end_line": 1032
}
],
"assumption": false
},
{
"id": "qemu-kc-lab-2",
"label": "qemu-system-x86_64",
"kind": "service",
"role": "service",
"group": "host-zone",
"shape": "box",
"details": [
"kc-lab-2",
"할당 2560MB",
"RSS 2633MB"
],
"description": "kc-lab-2 게스트 전체가 들어 있는 호스트 프로세스. A-4 의 virsh destroy 가 끊는 것이 이 프로세스다.",
"evidence": [
{
"start_line": 946,
"end_line": 948
},
{
"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
}
],
"assumption": false
}
],
"edges": [
{
"id": "libvirtd-spawns-1",
"from": "libvirtd",
"to": "qemu-kc-lab-1",
"label": "프로세스 생성",
"kind": "control",
"style": "solid",
"evidence": [
{
"start_line": 946,
"end_line": 948
},
{
"start_line": 956,
"end_line": 956
}
],
"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",
"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
}
],
"assumption": false
}
],
"legend": [],
"metadata": {
"rationale": "배치도로 고른 이유는 이 절이 주장하는 것이 순서가 아니라 담김이기 때문이다 — 게스트 하나가 호스트 프로세스 하나 안에 있고, 게스트가 보는 장치는 그 프로세스가 내준다. 메모리를 읽는 곳 셋과 machine.slice·virbr0 는 본문 표와 문단이 맡는다."
}
}