refactor: 문서 개선 중
This commit is contained in:
+27
@@ -0,0 +1,27 @@
|
||||
# Host memory pressure가 storage와 OOM으로 갈라지는 경로
|
||||
|
||||
## Alternative text
|
||||
|
||||
Host memory pressure가 reclaim에서 clean page 재읽기, anonymous page의 Host swap과 storage contention, 메모리 확보 실패에 따른 Host OOM으로 갈라지는 흐름도. QEMU가 OOM victim이 될 때 VM 전체가 중단될 수 있다는 결과는 본문에서 설명한다.
|
||||
|
||||
## Long description
|
||||
|
||||
왼쪽에서 Host memory pressure가 reclaim으로 들어간다. reclaim 이후 clean file-backed page는 버렸다가 필요할 때 storage에서 다시 읽는 경로, anonymous page는 Host swap I/O를 통해 physical storage와 경쟁하는 경로, 필요한 메모리를 확보하지 못하면 Host OOM으로 가는 경로로 갈린다. storage contention이 application latency로 이어지는 결과와 Host OOM이 QEMU를 victim으로 고를 때 VM 전체가 중단될 수 있다는 결과는 본문에서 이어 설명한다.
|
||||
|
||||
## Elements and evidence
|
||||
|
||||
- **Host memory pressure** (resource): 실제 Host RAM 수요가 available physical memory에 접근한 상태. Evidence: L2818–L2831.
|
||||
- **Reclaim** (component): Linux가 회수 가능한 page/cache를 처리하는 첫 대응. Evidence: L2818–L2831.
|
||||
- **clean file-backed page** (data): 원본이 storage에 있어 RAM에서 제거하고 나중에 다시 읽을 수 있다. Evidence: L2834–L2848.
|
||||
- **Host swap I/O** (storage): anonymous page의 backing이 필요할 때 host swap I/O가 생길 수 있다. Evidence: L2850–L2852, L2856–L2886.
|
||||
- **Storage contention** (storage): 여러 I/O가 한 physical device에 몰려 contention을 만든다. Evidence: L2938–L2965.
|
||||
- **Host OOM** (result): reclaim 등으로도 필요한 memory 확보에 실패했을 때 Host kernel에서 발생할 수 있다. Evidence: L3213–L3231, L3249–L3265.
|
||||
|
||||
## Relationships
|
||||
|
||||
- **clean file-backed page → Storage contention:** reread. Evidence: L2834–L2848.
|
||||
- **Host memory pressure → Reclaim:** pressure. Evidence: L2818–L2831.
|
||||
- **Reclaim → clean file-backed page:** file-backed. Evidence: L2834–L2848.
|
||||
- **Reclaim → Host OOM:** 확보 실패. Evidence: L3213–L3231.
|
||||
- **Reclaim → Host swap I/O:** anonymous. Evidence: L2850–L2852.
|
||||
- **Host swap I/O → Storage contention:** swap. Evidence: L2871–L2886, L2940–L2946.
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
# Host memory pressure가 storage와 OOM으로 갈라지는 경로
|
||||
# Question: Host memory pressure가 생겼을 때 reclaim 이후 어떤 경로가 swap I/O와 storage contention으로 이어지고, 확보 실패는 어디서 OOM으로 이어지는가
|
||||
direction: right
|
||||
n0: "Host memory pressure" {
|
||||
shape: rectangle
|
||||
}
|
||||
n1: "Reclaim" {
|
||||
shape: rectangle
|
||||
}
|
||||
n2: "clean file-backed page" {
|
||||
shape: rectangle
|
||||
}
|
||||
n3: "Host swap I/O" {
|
||||
shape: cylinder
|
||||
}
|
||||
n4: "Storage contention" {
|
||||
shape: cylinder
|
||||
}
|
||||
n5: "Host OOM" {
|
||||
shape: rectangle
|
||||
}
|
||||
n0 -> n1: "pressure"
|
||||
n1 -> n2: "file-backed"
|
||||
n2 -> n4: "reread"
|
||||
n1 -> n3: "anonymous"
|
||||
n3 -> n4: "swap"
|
||||
n1 -> n5: "확보 실패"
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
digraph techviz {
|
||||
graph [rankdir=LR, splines=ortho, nodesep=0.55, ranksep=0.85];
|
||||
node [fontname=Helvetica, fontsize=11, margin="0.18,0.12", style="rounded,filled", fillcolor=white, color="#2d4357", penwidth=1.5];
|
||||
edge [fontname=Helvetica, fontsize=10, color="#364b5f", penwidth=1.4, arrowsize=0.75];
|
||||
n0 [label="Host memory pressure", shape=box, style="rounded,filled"];
|
||||
n1 [label="Reclaim", shape=box, style="rounded,filled"];
|
||||
n2 [label="clean file-backed page", shape=box, style="rounded,filled"];
|
||||
n3 [label="Host swap I/O", shape=cylinder, style="rounded,filled"];
|
||||
n4 [label="Storage contention", shape=cylinder, style="rounded,filled"];
|
||||
n5 [label="Host OOM", shape=box, style="rounded,filled"];
|
||||
n0 -> n1 [label="pressure", style=solid];
|
||||
n1 -> n2 [label="file-backed", style=solid];
|
||||
n2 -> n4 [label="reread", style=solid];
|
||||
n1 -> n3 [label="anonymous", style=solid];
|
||||
n3 -> n4 [label="swap", style=solid];
|
||||
n1 -> n5 [label="확보 실패", style=solid];
|
||||
}
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mxfile host="app.diagrams.net" modified="2026-07-23T00:00:00.000Z" agent="techviz-harness" version="24.7.17" type="device">
|
||||
<diagram id="memory-pressure-reclaim-swap-oom" name="Host memory pressure가 storage와 OOM으로 갈라지는 경로">
|
||||
<mxGraphModel dx="1313" dy="455" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1313" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="n_pressure" value="Host memory pressure" tooltip="실제 Host RAM 수요가 available physical memory에 접근한 상태. | Evidence: L2818-L2831" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;shape=document;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="70.0" y="180.0" width="220.0" height="110.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_reclaim" value="Reclaim" tooltip="Linux가 회수 가능한 page/cache를 처리하는 첫 대응. | Evidence: L2818-L2831" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="450.0" y="203.0" width="150.0" height="64.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_clean-page" value="clean file-backed page<br/>discard · reread" tooltip="원본이 storage에 있어 RAM에서 제거하고 나중에 다시 읽을 수 있다. | Evidence: L2834-L2848" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="760.0" y="60.0" width="188.0" height="71.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_host-oom" value="Host OOM" tooltip="reclaim 등으로도 필요한 memory 확보에 실패했을 때 Host kernel에서 발생할 수 있다. | Evidence: L3213-L3231, L3249-L3265" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="779.0" y="203.0" width="150.0" height="64.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_host-swap" value="Host swap I/O<br/>anonymous page" tooltip="anonymous page의 backing이 필요할 때 host swap I/O가 생길 수 있다. | Evidence: L2850-L2852, L2856-L2886" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;shape=cylinder3;boundedLbl=1;backgroundOutline=1;fillColor=#eef6fb;" vertex="1" parent="1">
|
||||
<mxGeometry x="779.0" y="339.0" width="150.0" height="71.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_storage" value="Storage contention<br/>Host swap<br/>DB I/O<br/>writeback" tooltip="여러 I/O가 한 physical device에 몰려 contention을 만든다. | Evidence: L2938-L2965" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;shape=cylinder3;boundedLbl=1;backgroundOutline=1;fillColor=#eef6fb;" vertex="1" parent="1">
|
||||
<mxGeometry x="1108.0" y="182.5" width="160.0" height="105.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="e_clean-storage" value="reread" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_clean-page" target="n_storage">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1052.0" y="160.8" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_pressure-reclaim" value="pressure" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_pressure" target="n_reclaim">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="370.0" y="207.0" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_reclaim-clean" value="file-backed" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_reclaim" target="n_clean-page">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="704.0" y="156.2" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_reclaim-oom" value="확보 실패" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_reclaim" target="n_host-oom">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="689.5" y="207.0" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_reclaim-swap" value="anonymous" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_reclaim" target="n_host-swap">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="713.5" y="313.8" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_swap-storage" value="swap" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_host-swap" target="n_storage">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1042.5" y="309.2" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
+1021
File diff suppressed because it is too large
Load Diff
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"harness_version": "0.2.0",
|
||||
"spec_id": "memory-pressure-reclaim-swap-oom",
|
||||
"spec_version": "1.1",
|
||||
"spec_sha256": "5861e49daf088f0cd326d7fd970908676dca01d984c0f7a0feb1350ad820999b",
|
||||
"source_context": {
|
||||
"document": "docs/virtualization/final/document.md",
|
||||
"document_sha256": "8c4ecc64c8cea9a4450ed7131fdd9cb2048dc092b66cd969f6346ed77887c210",
|
||||
"anchor": {
|
||||
"kind": "heading",
|
||||
"value": "제2부 — 메모리 가상화",
|
||||
"line": 1670
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
"memory-pressure-reclaim-swap-oom.svg",
|
||||
"memory-pressure-reclaim-swap-oom.mmd",
|
||||
"memory-pressure-reclaim-swap-oom.d2",
|
||||
"memory-pressure-reclaim-swap-oom.dot",
|
||||
"memory-pressure-reclaim-swap-oom.drawio",
|
||||
"memory-pressure-reclaim-swap-oom.excalidraw",
|
||||
"memory-pressure-reclaim-swap-oom.alt.md"
|
||||
],
|
||||
"lint_issue_count": 0,
|
||||
"assumption_count": 0,
|
||||
"assumptions_allowed": false,
|
||||
"composition_profile": "component-flow",
|
||||
"reference_ids": [
|
||||
"payment-event-flow"
|
||||
],
|
||||
"diagram_only": true,
|
||||
"source_spec_file_sha256": "ba06d73804fd520863c0cde6749d9b0d64f690e2fc38846e4d798982248feeca",
|
||||
"output_sha256": {
|
||||
"memory-pressure-reclaim-swap-oom.svg": "efcd3add0e205f71dcc42a8b9195dbfedc4db250a45f468f3708522f99f859fd",
|
||||
"memory-pressure-reclaim-swap-oom.mmd": "b2963febc42ddaf0067c1d4e154470cd87c062b6604dd55e8ef3ea2a396d8c40",
|
||||
"memory-pressure-reclaim-swap-oom.d2": "a00a8d24f0bf8967f3248026846562ea03492cdbd9ac89a09f9242864a58d6c2",
|
||||
"memory-pressure-reclaim-swap-oom.dot": "c3d5a50508ffb776c4ad6540535308c80a24dcd61800fba7b661fe4cf9520cac",
|
||||
"memory-pressure-reclaim-swap-oom.drawio": "9e56388949d8012cf7638667f94ac64178eb90a0d552c4b86cf0fbdb7681180c",
|
||||
"memory-pressure-reclaim-swap-oom.excalidraw": "77f8e646292609d6da44308fed8398e9cc1706c1d8379f3a204278f9a4211ece",
|
||||
"memory-pressure-reclaim-swap-oom.alt.md": "88d0c06a087ca774e9ec4e45c0d2c98207b4cf65935272e3fd497c8aef3033f4"
|
||||
}
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
%% Host memory pressure가 storage와 OOM으로 갈라지는 경로
|
||||
%% question: Host memory pressure가 생겼을 때 reclaim 이후 어떤 경로가 swap I/O와 storage contention으로 이어지고, 확보 실패는 어디서 OOM으로 이어지는가
|
||||
flowchart LR
|
||||
n0["Host memory pressure"]
|
||||
n1["Reclaim"]
|
||||
n2["clean file-backed page"]
|
||||
n3[("Host swap I/O")]
|
||||
n4[("Storage contention")]
|
||||
n5["Host OOM"]
|
||||
n0 -->|"pressure"| n1
|
||||
n1 -->|"file-backed"| n2
|
||||
n2 -->|"reread"| n4
|
||||
n1 -->|"anonymous"| n3
|
||||
n3 -->|"swap"| n4
|
||||
n1 -->|"확보 실패"| n5
|
||||
+103
@@ -0,0 +1,103 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1313" height="455" viewBox="0 0 1313 455" role="img" aria-labelledby="diagram-title diagram-description">
|
||||
<title id="diagram-title">Host memory pressure가 storage와 OOM으로 갈라지는 경로</title>
|
||||
<desc id="diagram-description">왼쪽에서 Host memory pressure가 reclaim으로 들어간다. reclaim 이후 clean file-backed page는 버렸다가 필요할 때 storage에서 다시 읽는 경로, anonymous page는 Host swap I/O를 통해 physical storage와 경쟁하는 경로, 필요한 메모리를 확보하지 못하면 Host OOM으로 가는 경로로 갈린다. storage contention이 application latency로 이어지는 결과와 Host OOM이 QEMU를 victim으로 고를 때 VM 전체가 중단될 수 있다는 결과는 본문에서 이어 설명한다.</desc>
|
||||
<metadata>{"techviz":{"spec_version":"1.1","id":"memory-pressure-reclaim-swap-oom","profile":"component-flow"},"source_context":{"document":"docs/virtualization/final/document.md","document_sha256":"8c4ecc64c8cea9a4450ed7131fdd9cb2048dc092b66cd969f6346ed77887c210","anchor":{"kind":"heading","value":"제2부 — 메모리 가상화","line":1670}},"evidence_policy":"Each factual element cites source lines or is marked assumption.","diagram_only":true}</metadata>
|
||||
<defs>
|
||||
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" />
|
||||
</marker>
|
||||
<style>
|
||||
:root { color-scheme: light; }
|
||||
text { font-family: Inter, Pretendard, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #111827; }
|
||||
.canvas { fill: #ffffff; }
|
||||
.group-box { fill: #ffffff; stroke: #9ca3af; stroke-width: 1.4; stroke-dasharray: 7 5; }
|
||||
.group-label-bg { fill: #ffffff; }
|
||||
.group-label { font-size: 13px; font-weight: 650; fill: #374151; }
|
||||
.edge { fill: none; stroke: #374151; stroke-width: 1.8; stroke-linejoin: round; stroke-linecap: round; marker-end: url(#arrow); }
|
||||
.edge.style-dashed, .edge.semantic-dashed, .edge.assumption { stroke-dasharray: 7 5; }
|
||||
.edge.style-dotted { stroke-dasharray: 2 5; }
|
||||
.edge.emphasis-primary { stroke: #2563eb; stroke-width: 2.2; }
|
||||
.edge.emphasis-muted { stroke: #9ca3af; }
|
||||
.edge.emphasis-warning, .edge.kind-failure, .edge.kind-error { stroke: #dc2626; stroke-width: 2.2; }
|
||||
.edge-label-bg { fill: #ffffff; }
|
||||
.edge-label { font-size: 12px; font-weight: 560; text-anchor: middle; }
|
||||
.node-shape { fill: #ffffff; stroke: #4b5563; stroke-width: 1.7; }
|
||||
.node-shape.emphasis-primary { stroke: #2563eb; stroke-width: 2.2; }
|
||||
.node-shape.emphasis-muted { stroke: #9ca3af; fill: #f9fafb; }
|
||||
.node-shape.emphasis-warning { stroke: #d97706; stroke-width: 2; fill: #fffdf5; }
|
||||
.node-shape.kind-database, .node-shape.kind-datastore, .node-shape.kind-storage { fill: #f8fafc; }
|
||||
.node-shape.kind-queue, .node-shape.kind-event, .node-shape.kind-topic { fill: #fafafa; }
|
||||
.node-shape.assumption { stroke-dasharray: 4 4; }
|
||||
.storage-bottom, .controller-divider { fill: none; stroke: #4b5563; stroke-width: 1.4; }
|
||||
.controller-led { fill: #4b5563; }
|
||||
.actor-symbol { fill: none; stroke: #4b5563; stroke-width: 1.8; stroke-linecap: round; }
|
||||
.actor-symbol.emphasis-primary { stroke: #2563eb; stroke-width: 2.2; }
|
||||
.node-label { font-size: 14px; font-weight: 650; text-anchor: middle; }
|
||||
.node-role { font-size: 10px; letter-spacing: 0.04em; text-anchor: middle; fill: #6b7280; }
|
||||
.node-detail-divider { stroke: #d1d5db; stroke-width: 1; }
|
||||
.node-detail { font-size: 11px; fill: #374151; }
|
||||
.assumption-badge { font-size: 9px; font-weight: 700; fill: #92400e; }
|
||||
.failure-mark { stroke: #dc2626; stroke-width: 4; stroke-linecap: round; }
|
||||
.lifeline { stroke: #9ca3af; stroke-width: 1.2; stroke-dasharray: 5 5; }
|
||||
.timeline-axis { stroke: #374151; stroke-width: 1.8; marker-end: url(#arrow); }
|
||||
.timeline-stem { stroke: #6b7280; stroke-width: 1.3; }
|
||||
.timeline-marker { fill: #ffffff; stroke: #374151; stroke-width: 1.7; }
|
||||
.timeline-marker.primary { fill: #2563eb; stroke: #2563eb; }
|
||||
.timeline-marker.warning { fill: #dc2626; stroke: #dc2626; }
|
||||
.timeline-label { font-size: 13px; font-weight: 650; text-anchor: middle; }
|
||||
.timeline-detail { font-size: 11px; fill: #4b5563; text-anchor: middle; }
|
||||
</style>
|
||||
</defs>
|
||||
<rect class="canvas" width="1313" height="455" />
|
||||
<polyline class="edge kind-data style-dashed emphasis-normal" points="948.0,95.5 1028.0,95.5 1028.0,226.0 1108.0,226.0" data-evidence="2834-2848" />
|
||||
<rect class="edge-label-bg" x="1022.9" y="146.8" width="58.2" height="22" rx="3" />
|
||||
<text class="edge-label" x="1052.0" y="161.8">reread</text>
|
||||
<polyline class="edge kind-control style-solid emphasis-normal" points="290.0,235.0 370.0,235.0 370.0,235.0 450.0,235.0" data-evidence="2818-2831" />
|
||||
<rect class="edge-label-bg" x="334.2" y="193.0" width="71.6" height="22" rx="3" />
|
||||
<text class="edge-label" x="370.0" y="208.0">pressure</text>
|
||||
<polyline class="edge kind-control style-solid emphasis-normal" points="600.0,217.0 680.0,217.0 680.0,95.5 760.0,95.5" data-evidence="2834-2848" />
|
||||
<rect class="edge-label-bg" x="658.1" y="142.2" width="91.7" height="22" rx="3" />
|
||||
<text class="edge-label" x="704.0" y="157.2">file-backed</text>
|
||||
<polyline class="edge kind-control style-dashed emphasis-normal" points="600.0,235.0 689.5,235.0 689.5,235.0 779.0,235.0" data-evidence="3213-3231" />
|
||||
<rect class="edge-label-bg" x="663.8" y="193.0" width="51.5" height="22" rx="3" />
|
||||
<text class="edge-label" x="689.5" y="208.0">확보 실패</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="600.0,253.0 689.5,253.0 689.5,374.5 779.0,374.5" data-evidence="2850-2852" />
|
||||
<rect class="edge-label-bg" x="674.4" y="299.8" width="78.3" height="22" rx="3" />
|
||||
<text class="edge-label" x="713.5" y="314.8">anonymous</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="929.0,374.5 1018.5,374.5 1018.5,244.0 1108.0,244.0" data-evidence="2871-2886,2940-2946" />
|
||||
<rect class="edge-label-bg" x="1020.1" y="295.2" width="44.8" height="22" rx="3" />
|
||||
<text class="edge-label" x="1042.5" y="310.2">swap</text>
|
||||
<g id="node-pressure">
|
||||
<path class="node-shape kind-resource emphasis-normal role-source" data-evidence="2818-2831" d="M 70.0 180.0 H 259.2 L 290.0 210.8 V 290.0 H 70.0 Z M 259.2 180.0 V 210.8 H 290.0" />
|
||||
<text class="node-label" x="180.0" y="233.0">Host memory pressure</text>
|
||||
</g>
|
||||
<g id="node-reclaim">
|
||||
<rect class="node-shape kind-component emphasis-primary role-service" data-evidence="2818-2831" x="450.0" y="203.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="525.0" y="233.0">Reclaim</text>
|
||||
</g>
|
||||
<g id="node-clean-page">
|
||||
<rect class="node-shape kind-data emphasis-normal role-service" data-evidence="2834-2848" x="760.0" y="60.0" width="188.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="854.0" y="87.0">clean file-backed page</text>
|
||||
<line class="node-detail-divider" x1="774.0" y1="108.0" x2="934.0" y2="108.0" />
|
||||
<text class="node-detail" x="776.0" y="125.0">discard · reread</text>
|
||||
</g>
|
||||
<g id="node-host-oom">
|
||||
<rect class="node-shape kind-result emphasis-normal role-service" data-evidence="3213-3231,3249-3265" x="779.0" y="203.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="854.0" y="233.0">Host OOM</text>
|
||||
</g>
|
||||
<g id="node-host-swap">
|
||||
<rect class="node-shape kind-storage emphasis-normal role-store" data-evidence="2850-2852,2856-2886" x="779.0" y="350.8" width="150.0" height="47.3" /><ellipse class="node-shape kind-storage emphasis-normal role-store" cx="854.0" cy="350.8" rx="75.0" ry="11.8" /><path class="storage-bottom" d="M 779.0 398.2 A 75.0 11.8 0 0 0 929.0 398.2" />
|
||||
<text class="node-label" x="854.0" y="366.0">Host swap I/O</text>
|
||||
<line class="node-detail-divider" x1="793.0" y1="387.0" x2="915.0" y2="387.0" />
|
||||
<text class="node-detail" x="795.0" y="404.0">anonymous page</text>
|
||||
</g>
|
||||
<g id="node-storage">
|
||||
<rect class="node-shape kind-storage emphasis-normal role-store" data-evidence="2938-2965" x="1108.0" y="195.5" width="160.0" height="79.0" /><ellipse class="node-shape kind-storage emphasis-normal role-store" cx="1188.0" cy="195.5" rx="80.0" ry="13.0" /><path class="storage-bottom" d="M 1108.0 274.5 A 80.0 13.0 0 0 0 1268.0 274.5" />
|
||||
<text class="node-label" x="1188.0" y="209.5">Storage contention</text>
|
||||
<line class="node-detail-divider" x1="1122.0" y1="230.5" x2="1254.0" y2="230.5" />
|
||||
<text class="node-detail" x="1124.0" y="247.5">Host swap</text>
|
||||
<text class="node-detail" x="1124.0" y="263.5">DB I/O</text>
|
||||
<text class="node-detail" x="1124.0" y="279.5">writeback</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.7 KiB |
Reference in New Issue
Block a user