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
@@ -4,7 +4,7 @@
"title": "게스트가 하드웨어에 닿는 갈래는 셋이고 깊이가 다르다",
"question": "게스트의 CPU 실행·virtio I/O·직접 할당한 장치는 각각 어디까지 내려가고 호스트 유저공간을 지나는가",
"type": "architecture",
"direction": "TB",
"direction": "LR",
"audience": [
"가상화 구조를 처음 읽는 사람",
"이 실험대가 무엇 위에서 도는지 알아야 하는 사람"
@@ -14,11 +14,11 @@
"long_description": "위에서 아래로 읽는다. 맨 위 QEMU 에서 갈래 셋이 갈린다. 왼쪽 CPU 갈래는 KVM_RUN 으로 커널의 KVM 에 들어가고 KVM 이 VM entry 로 물리 CPU 에 올리며 게스트 코드가 VMX non-root 로 거기서 돈다. 물리 CPU 상자에 VM exit 이 함께 적혀 있고 나온 이유는 KVM 상자의 struct kvm_run 으로 유저공간에 돌아간다. 가운데 패스스루 갈래는 QEMU 가 VFIO 로 장치 fd 를 받고 vfio-pci 가 장치를 묶으며 그 장치의 DMA 가 IOMMU 를 지난다. 오른쪽 virtio 갈래는 virtqueue 가 게스트 드라이버에 닿고 같은 virtqueue 를 커널 vhost 와 나누는 길이 따로 있다. 앞의 둘은 이 실험대가 쓰고 패스스루는 쓰지 않는다.",
"source_context": {
"document": "docs/keycloak-session-store/final/document.md",
"document_sha256": "0ae5674723f25dc85d5069529890f07be1a11b768b56901103fa3ea6ac3dcf55",
"document_sha256": "28aef96a2bbb94fbb10ade26a71238fee62a5a4d9fa6e7749ae98cfd0a65e560",
"anchor": {
"kind": "heading",
"value": "이 층 아래의 구조 — 조사한 것",
"line": 1091
"line": 3430
}
},
"composition": {
@@ -46,8 +46,8 @@
"description": "KVM 핸들을 열고 VM 과 vCPU 를 만드는 유저공간 프로세스. vcpu ioctl 은 그 vcpu 를 만든 스레드에서 낸다.",
"evidence": [
{
"start_line": 1102,
"end_line": 1108
"start_line": 3441,
"end_line": 3447
}
],
"assumption": false
@@ -66,8 +66,8 @@
"description": "IOMMU 보호 아래 장치 접근을 유저공간에 여는 프레임워크. 소유 단위가 IOMMU 그룹이다.",
"evidence": [
{
"start_line": 1131,
"end_line": 1146
"start_line": 3470,
"end_line": 3485
}
],
"assumption": false
@@ -84,12 +84,12 @@
"description": "호스트 드라이버에서 떼어 vfio-pci 에 묶은 장치.",
"evidence": [
{
"start_line": 1131,
"end_line": 1133
"start_line": 3470,
"end_line": 3472
},
{
"start_line": 1144,
"end_line": 1146
"start_line": 3483,
"end_line": 3485
}
],
"assumption": false
@@ -106,8 +106,8 @@
"description": "장치가 아무 메모리나 건드리지 못하게 막는 리매핑 장치.",
"evidence": [
{
"start_line": 1144,
"end_line": 1146
"start_line": 3483,
"end_line": 3485
}
],
"assumption": false
@@ -125,8 +125,8 @@
"description": "mmap 한 공유 메모리로 나온 이유를 유저공간에 알리는 커널 쪽.",
"evidence": [
{
"start_line": 1105,
"end_line": 1108
"start_line": 3444,
"end_line": 3447
}
],
"assumption": false
@@ -145,8 +145,8 @@
"description": "VM entry 때 guest-state 영역에서 상태를 싣고 VM exit 때 그리로 저장하는 프로세서.",
"evidence": [
{
"start_line": 1111,
"end_line": 1113
"start_line": 3450,
"end_line": 3452
}
],
"assumption": false
@@ -163,8 +163,8 @@
"description": "VMX non-root 로 물리 CPU 에서 도는 게스트 명령.",
"evidence": [
{
"start_line": 1111,
"end_line": 1113
"start_line": 3450,
"end_line": 3452
}
],
"assumption": false
@@ -182,8 +182,8 @@
"description": "게스트가 보는 반가상화 장치의 드라이버. 주고받는 통로가 virtqueue 다.",
"evidence": [
{
"start_line": 1116,
"end_line": 1118
"start_line": 3455,
"end_line": 3457
}
],
"assumption": false
@@ -201,8 +201,8 @@
"description": "virtqueue 를 QEMU 밖과 나누는 커널 구현. vhost-user 규약이 이것을 제어하는 ioctl 인터페이스를 보완한다.",
"evidence": [
{
"start_line": 1125,
"end_line": 1129
"start_line": 3464,
"end_line": 3468
}
],
"assumption": false
@@ -218,8 +218,8 @@
"style": "solid",
"evidence": [
{
"start_line": 1138,
"end_line": 1141
"start_line": 3477,
"end_line": 3480
}
],
"assumption": false
@@ -233,8 +233,8 @@
"style": "solid",
"evidence": [
{
"start_line": 1144,
"end_line": 1146
"start_line": 3483,
"end_line": 3485
}
],
"assumption": false
@@ -248,8 +248,8 @@
"style": "solid",
"evidence": [
{
"start_line": 1144,
"end_line": 1146
"start_line": 3483,
"end_line": 3485
}
],
"assumption": false
@@ -263,8 +263,8 @@
"style": "solid",
"evidence": [
{
"start_line": 1104,
"end_line": 1106
"start_line": 3443,
"end_line": 3445
}
],
"assumption": false
@@ -278,8 +278,8 @@
"style": "solid",
"evidence": [
{
"start_line": 1111,
"end_line": 1112
"start_line": 3450,
"end_line": 3451
}
],
"assumption": false
@@ -293,8 +293,8 @@
"style": "solid",
"evidence": [
{
"start_line": 1111,
"end_line": 1112
"start_line": 3450,
"end_line": 3451
}
],
"assumption": false
@@ -308,12 +308,12 @@
"style": "solid",
"evidence": [
{
"start_line": 1116,
"end_line": 1118
"start_line": 3455,
"end_line": 3457
},
{
"start_line": 1128,
"end_line": 1128
"start_line": 3467,
"end_line": 3467
}
],
"assumption": false
@@ -327,8 +327,8 @@
"style": "dashed",
"evidence": [
{
"start_line": 1125,
"end_line": 1129
"start_line": 3464,
"end_line": 3468
}
],
"assumption": false