refactor: 문서 개선 중
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user