refactor: 문서 개선 중
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
"title": "세 fault 는 변환 사슬의 서로 다른 단계에서 갈라져 나가 서로 다른 계층이 받는다",
|
||||
"question": "Guest Page Fault · EPT Violation · Host Page Fault 는 각각 어느 단계에서 갈라지고 누가 받는가",
|
||||
"type": "flow",
|
||||
"direction": "TB",
|
||||
"direction": "LR",
|
||||
"audience": [
|
||||
"VM 안의 메모리 지연을 계층별로 가르려는 사람",
|
||||
"fault 지표를 어느 쪽부터 볼지 정하려는 사람"
|
||||
@@ -14,11 +14,11 @@
|
||||
"long_description": "위에서 아래로 읽는다. 맨 위 왼쪽에 Guest Page Table 이 있고 거기서 갈래가 둘이다. 하나는 Guest Page Fault 로 Guest Kernel 에 빠지고, 다른 하나는 GPA 를 들고 아래 EPT 로 내려간다. EPT 에서도 갈래가 나뉘어 EPT Violation 은 VM Exit 을 거쳐 KVM 으로 간다. 맨 위 오른쪽에는 QEMU 의 Guest RAM Backing 이 따로 있고 그쪽 갈래인 Host Page Fault 는 Host Kernel 로 간다. 받는 자리의 이름이 그대로 계층 이름이다 — Guest Kernel · KVM · Host Kernel. QEMU 갈래가 EPT 갈래와 선으로 이어져 있지 않은 것은 근거 문서가 둘을 잇는 문장을 두지 않았기 때문이다. 다섯 원인이 무엇인지와 두 사건을 항목별로 견주는 것은 본문의 표가 맡는다.",
|
||||
"source_context": {
|
||||
"document": "docs/virtualization/final/document.md",
|
||||
"document_sha256": "181e2b3cc8a45bae81e7e8193d026937c4d586ae4495d3b2c323eb7e6abcfadd",
|
||||
"document_sha256": "8c4ecc64c8cea9a4450ed7131fdd9cb2048dc092b66cd969f6346ed77887c210",
|
||||
"anchor": {
|
||||
"kind": "heading",
|
||||
"value": "48. Guest Page Fault와 EPT Violation 비교",
|
||||
"line": 2480
|
||||
"line": 2493
|
||||
}
|
||||
},
|
||||
"composition": {
|
||||
@@ -44,12 +44,12 @@
|
||||
"description": "첫 번째 translation 단계. 여기서 접근을 완료할 수 없으면 Guest Page Fault 가 난다.",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 2443,
|
||||
"end_line": 2445
|
||||
"start_line": 2456,
|
||||
"end_line": 2458
|
||||
},
|
||||
{
|
||||
"start_line": 2484,
|
||||
"end_line": 2485
|
||||
"start_line": 2497,
|
||||
"end_line": 2498
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -63,12 +63,12 @@
|
||||
"description": "Guest Page Fault 를 받는 계층.",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 2487,
|
||||
"end_line": 2487
|
||||
"start_line": 2500,
|
||||
"end_line": 2500
|
||||
},
|
||||
{
|
||||
"start_line": 2493,
|
||||
"end_line": 2494
|
||||
"start_line": 2506,
|
||||
"end_line": 2507
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -86,12 +86,12 @@
|
||||
"description": "두 번째 translation 단계. Guest translation 이 성공한 뒤 여기서 막히면 EPT Violation 이 난다.",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 2465,
|
||||
"end_line": 2469
|
||||
"start_line": 2478,
|
||||
"end_line": 2482
|
||||
},
|
||||
{
|
||||
"start_line": 2484,
|
||||
"end_line": 2485
|
||||
"start_line": 2497,
|
||||
"end_line": 2498
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -105,12 +105,12 @@
|
||||
"description": "EPT Violation 을 VM Exit 뒤에 받는 계층.",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 2471,
|
||||
"end_line": 2473
|
||||
"start_line": 2484,
|
||||
"end_line": 2486
|
||||
},
|
||||
{
|
||||
"start_line": 2487,
|
||||
"end_line": 2487
|
||||
"start_line": 2500,
|
||||
"end_line": 2500
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -127,12 +127,12 @@
|
||||
"description": "Host 의 일반 userspace 메모리로 관리되는 자리. demand allocation 이나 reclaim, swap 때문에 여기서 fault 가 난다.",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 2504,
|
||||
"end_line": 2504
|
||||
"start_line": 2517,
|
||||
"end_line": 2517
|
||||
},
|
||||
{
|
||||
"start_line": 2514,
|
||||
"end_line": 2519
|
||||
"start_line": 2527,
|
||||
"end_line": 2532
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -146,8 +146,8 @@
|
||||
"description": "Host Page Fault 를 받아 필요한 Host page 를 처리하는 계층.",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 2521,
|
||||
"end_line": 2525
|
||||
"start_line": 2534,
|
||||
"end_line": 2538
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -158,17 +158,17 @@
|
||||
"id": "guest-fault-branch",
|
||||
"from": "guest-page-table",
|
||||
"to": "guest-kernel",
|
||||
"label": "Guest Page Fault",
|
||||
"label": "Guest #PF",
|
||||
"kind": "event",
|
||||
"style": "solid",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 2484,
|
||||
"end_line": 2487
|
||||
"start_line": 2497,
|
||||
"end_line": 2500
|
||||
},
|
||||
{
|
||||
"start_line": 2493,
|
||||
"end_line": 2494
|
||||
"start_line": 2506,
|
||||
"end_line": 2507
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -182,8 +182,8 @@
|
||||
"style": "solid",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 2461,
|
||||
"end_line": 2467
|
||||
"start_line": 2474,
|
||||
"end_line": 2480
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -197,12 +197,12 @@
|
||||
"style": "solid",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 2467,
|
||||
"end_line": 2473
|
||||
"start_line": 2480,
|
||||
"end_line": 2486
|
||||
},
|
||||
{
|
||||
"start_line": 2487,
|
||||
"end_line": 2487
|
||||
"start_line": 2500,
|
||||
"end_line": 2500
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -211,13 +211,13 @@
|
||||
"id": "host-fault-branch",
|
||||
"from": "qemu-backing",
|
||||
"to": "host-kernel",
|
||||
"label": "Host Page Fault",
|
||||
"label": "Host #PF",
|
||||
"kind": "event",
|
||||
"style": "solid",
|
||||
"evidence": [
|
||||
{
|
||||
"start_line": 2517,
|
||||
"end_line": 2525
|
||||
"start_line": 2530,
|
||||
"end_line": 2538
|
||||
}
|
||||
],
|
||||
"assumption": false
|
||||
@@ -225,6 +225,6 @@
|
||||
],
|
||||
"legend": [],
|
||||
"metadata": {
|
||||
"rationale": "flow 로 고른 이유는 이 절이 답하는 물음이 「어느 단계에서 갈라져 누구에게 가는가」이기 때문이다. 세 fault 를 나란히 늘어놓으면 그것은 본문에 이미 있는 비교표와 같은 것이 되므로, 갈래가 사슬의 어느 자리에서 나오는지를 자리로 보이게 세웠다. EPT 에서 나온 갈래와 QEMU backing 에서 나온 갈래를 선으로 잇지 않은 것은 근거 문서가 EPT 가 얻은 HPA 와 QEMU backing 의 Host physical address 를 같은 것이라고 적지 않았기 때문이다. 없는 문장을 선으로 만들지 않았다. 처음에는 Guest 와 Host 를 group 상자로 두었는데, 레이아웃이 노드를 group 별로 모으지 않아 Host 상자가 Guest 노드까지 감싸 버렸다. 받는 자리의 이름(Guest Kernel · KVM · Host Kernel)이 이미 계층을 말하므로 group 을 빼고 이름에 맡겼다."
|
||||
"rationale": "flow 로 고른 이유는 이 절이 답하는 물음이 「어느 단계에서 갈라져 누구에게 가는가」이기 때문이다. 현재 renderer에서는 LR가 변환 사슬과 세 fault branch를 겹침 없이 보인다. Guest #PF 와 Host #PF 는 본문에서 설명하는 Guest Page Fault·Host Page Fault의 축약 라벨이고 의미를 줄이지 않는다. EPT Violation은 VM Exit까지 포함해 그대로 둔다. 없는 관계는 선으로 만들지 않는다."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user