refactor: 문서 개선 중
This commit is contained in:
+17
-17
@@ -10,23 +10,23 @@
|
||||
|
||||
## Elements and evidence
|
||||
|
||||
- **Boundary: Guest Userspace** (boundary): 게스트 사용자 공간. 저장장치를 직접 다루지 않는다. Evidence: L5807–L5809.
|
||||
- **Boundary: Guest Kernel** (boundary): 게스트 커널 공간. VM Boundary 위쪽 계층이 전부 여기 있다. Evidence: L5815–L5833.
|
||||
- **PostgreSQL / Keycloak** (service): 파일 연산을 요청하는 게스트 프로세스. Evidence: L5807–L5809, L5885–L5885, L5811–L5813.
|
||||
- **VFS** (service): 열린 파일이 어느 filesystem 구현에 속하는지 보고 연산을 넘기는 공통 계층. Evidence: L5815–L5817, L5905–L5905.
|
||||
- **ext4 / XFS** (service): 파일과 디렉터리를 block 공간에 배치하는 게스트 filesystem. Evidence: L5819–L5819.
|
||||
- **Guest Page Cache** (store): 게스트 RAM 에 있는 cache. write() 가 성공해도 데이터는 아직 여기까지만 확정된다. Evidence: L5821–L5821.
|
||||
- **Guest Block Layer** (service): 파일 세계의 요청을 block device 세계의 요청으로 바꾸는 계층. Evidence: L5825–L5825.
|
||||
- **/dev/vda** (device): 게스트 Linux 가 하나의 block device 로 인식하는 이름. Evidence: L5829–L5829, L5879–L5879.
|
||||
- **virtio-blk Frontend** (service): 그 가상 block device 를 제어하는 게스트 커널 driver. Evidence: L5831–L5831, L5789–L5789.
|
||||
- **virtqueue** (queue): 요청이 실리는 자리. 바로 아래가 VM Boundary 다. Evidence: L5833–L5835.
|
||||
- **Boundary: Guest Userspace** (boundary): 게스트 사용자 공간. 저장장치를 직접 다루지 않는다. Evidence: L5820–L5822.
|
||||
- **Boundary: Guest Kernel** (boundary): 게스트 커널 공간. VM Boundary 위쪽 계층이 전부 여기 있다. Evidence: L5828–L5846.
|
||||
- **PostgreSQL / Keycloak** (service): 파일 연산을 요청하는 게스트 프로세스. Evidence: L5820–L5822, L5898–L5898, L5824–L5826.
|
||||
- **VFS** (service): 열린 파일이 어느 filesystem 구현에 속하는지 보고 연산을 넘기는 공통 계층. Evidence: L5828–L5830, L5918–L5918.
|
||||
- **ext4 / XFS** (service): 파일과 디렉터리를 block 공간에 배치하는 게스트 filesystem. Evidence: L5832–L5832.
|
||||
- **Guest Page Cache** (store): 게스트 RAM 에 있는 cache. write() 가 성공해도 데이터는 아직 여기까지만 확정된다. Evidence: L5834–L5834.
|
||||
- **Guest Block Layer** (service): 파일 세계의 요청을 block device 세계의 요청으로 바꾸는 계층. Evidence: L5838–L5838.
|
||||
- **/dev/vda** (device): 게스트 Linux 가 하나의 block device 로 인식하는 이름. Evidence: L5842–L5842, L5892–L5892.
|
||||
- **virtio-blk Frontend** (service): 그 가상 block device 를 제어하는 게스트 커널 driver. Evidence: L5844–L5844, L5802–L5802.
|
||||
- **virtqueue** (queue): 요청이 실리는 자리. 바로 아래가 VM Boundary 다. Evidence: L5846–L5848.
|
||||
|
||||
## Relationships
|
||||
|
||||
- **PostgreSQL / Keycloak → VFS:** data. Evidence: L5811–L5813, L5890–L5890.
|
||||
- **VFS → ext4 / XFS:** data. Evidence: L5817–L5819.
|
||||
- **ext4 / XFS → Guest Page Cache:** data. Evidence: L5819–L5821.
|
||||
- **Guest Page Cache → Guest Block Layer:** writeback. Evidence: L5823–L5825.
|
||||
- **Guest Block Layer → /dev/vda:** WRITE / FLUSH. Evidence: L5827–L5829.
|
||||
- **/dev/vda → virtio-blk Frontend:** data. Evidence: L5829–L5831.
|
||||
- **virtio-blk Frontend → virtqueue:** Virtio block request. Evidence: L5831–L5833.
|
||||
- **PostgreSQL / Keycloak → VFS:** data. Evidence: L5824–L5826, L5903–L5903.
|
||||
- **VFS → ext4 / XFS:** data. Evidence: L5830–L5832.
|
||||
- **ext4 / XFS → Guest Page Cache:** data. Evidence: L5832–L5834.
|
||||
- **Guest Page Cache → Guest Block Layer:** writeback. Evidence: L5836–L5838.
|
||||
- **Guest Block Layer → /dev/vda:** WRITE / FLUSH. Evidence: L5840–L5842.
|
||||
- **/dev/vda → virtio-blk Frontend:** data. Evidence: L5842–L5844.
|
||||
- **virtio-blk Frontend → virtqueue:** Virtio block request. Evidence: L5844–L5846.
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
digraph techviz {
|
||||
graph [rankdir=TB, 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];
|
||||
subgraph cluster_0 {
|
||||
label="Guest Userspace";
|
||||
style="rounded,dashed";
|
||||
color="#66788a";
|
||||
n0 [label="PostgreSQL / Keycloak", shape=box, style="rounded,filled"];
|
||||
}
|
||||
subgraph cluster_1 {
|
||||
label="Guest Kernel";
|
||||
style="rounded,dashed";
|
||||
color="#66788a";
|
||||
n1 [label="VFS", shape=box, style="rounded,filled"];
|
||||
n2 [label="ext4 / XFS", shape=box, style="rounded,filled"];
|
||||
n3 [label="Guest Page Cache", shape=box, style="rounded,filled"];
|
||||
n4 [label="Guest Block Layer", shape=box, style="rounded,filled"];
|
||||
n5 [label="/dev/vda", shape=box, style="rounded,filled"];
|
||||
n6 [label="virtio-blk Frontend", shape=box, style="rounded,filled"];
|
||||
n7 [label="virtqueue", shape=oval, style="rounded,filled"];
|
||||
}
|
||||
n0 -> n1 [label="", style=solid];
|
||||
n1 -> n2 [label="", style=solid];
|
||||
n2 -> n3 [label="", style=solid];
|
||||
n3 -> n4 [label="writeback", style=solid];
|
||||
n4 -> n5 [label="WRITE / FLUSH", style=solid];
|
||||
n5 -> n6 [label="", style=solid];
|
||||
n6 -> n7 [label="Virtio block request", style=solid];
|
||||
}
|
||||
+26
-26
@@ -1,73 +1,73 @@
|
||||
<?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="guest-block-io-to-virtqueue" name="게스트의 write() 가 virtqueue 에 실리기까지">
|
||||
<mxGraphModel dx="680" dy="1360" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1360" math="0" shadow="0">
|
||||
<mxGraphModel dx="680" dy="2501" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="2501" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="g_guest-userspace" value="Guest Userspace" style="swimlane;html=1;rounded=1;startSize=30;horizontal=1;dashed=1;strokeWidth=1.5;fillColor=#f7f9fb;strokeColor=#66788a;fontStyle=1;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="40.0" y="35.0" width="241.0" height="160.0" as="geometry"/>
|
||||
<mxGeometry x="35.0" y="99.0" width="241.0" height="160.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="g_guest-kernel" value="Guest Kernel" style="swimlane;html=1;rounded=1;startSize=30;horizontal=1;dashed=1;strokeWidth=1.5;fillColor=#f7f9fb;strokeColor=#66788a;fontStyle=1;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="47.0" y="219.0" width="227.0" height="1096.0" as="geometry"/>
|
||||
<mxGeometry x="47.0" y="440.0" width="227.0" height="2016.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_app" value="PostgreSQL / Keycloak<br/>read / write<br/>fsync / sync" tooltip="파일 연산을 요청하는 게스트 프로세스. | Evidence: L5807-L5809, L5885-L5885, L5811-L5813" 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="70.0" y="81.0" width="181.0" height="88.0" as="geometry"/>
|
||||
<mxCell id="n_app" value="PostgreSQL / Keycloak<br/>read / write<br/>fsync / sync" tooltip="파일 연산을 요청하는 게스트 프로세스. | Evidence: L5820-L5822, L5898-L5898, L5824-L5826" 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="65.0" y="145.0" width="181.0" height="88.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_vfs" value="VFS" tooltip="열린 파일이 어느 filesystem 구현에 속하는지 보고 연산을 넘기는 공통 계층. | Evidence: L5815-L5817, L5905-L5905" 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="85.5" y="265.0" width="150.0" height="64.0" as="geometry"/>
|
||||
<mxCell id="n_vfs" value="VFS" tooltip="열린 파일이 어느 filesystem 구현에 속하는지 보고 연산을 넘기는 공통 계층. | Evidence: L5828-L5830, L5918-L5918" 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="77.0" y="486.0" width="150.0" height="64.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_fs" value="ext4 / XFS" tooltip="파일과 디렉터리를 block 공간에 배치하는 게스트 filesystem. | Evidence: L5819-L5819" 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="85.5" y="425.0" width="150.0" height="64.0" as="geometry"/>
|
||||
<mxCell id="n_fs" value="ext4 / XFS" tooltip="파일과 디렉터리를 block 공간에 배치하는 게스트 filesystem. | Evidence: L5832-L5832" 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="77.0" y="796.0" width="150.0" height="64.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_page-cache" value="Guest Page Cache" tooltip="게스트 RAM 에 있는 cache. write() 가 성공해도 데이터는 아직 여기까지만 확정된다. | Evidence: L5821-L5821" 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="85.5" y="585.0" width="150.0" height="64.0" as="geometry"/>
|
||||
<mxCell id="n_page-cache" value="Guest Page Cache" tooltip="게스트 RAM 에 있는 cache. write() 가 성공해도 데이터는 아직 여기까지만 확정된다. | Evidence: L5834-L5834" 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="77.0" y="1106.0" width="150.0" height="64.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_block-layer" value="Guest Block Layer" tooltip="파일 세계의 요청을 block device 세계의 요청으로 바꾸는 계층. | Evidence: L5825-L5825" 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="84.0" y="745.0" width="153.0" height="64.0" as="geometry"/>
|
||||
<mxCell id="n_block-layer" value="Guest Block Layer" tooltip="파일 세계의 요청을 block device 세계의 요청으로 바꾸는 계층. | Evidence: L5838-L5838" 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="77.0" y="1416.0" width="153.0" height="64.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_vda" value="/dev/vda" tooltip="게스트 Linux 가 하나의 block device 로 인식하는 이름. | Evidence: L5829-L5829, L5879-L5879" 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="85.5" y="905.0" width="150.0" height="64.0" as="geometry"/>
|
||||
<mxCell id="n_vda" value="/dev/vda" tooltip="게스트 Linux 가 하나의 block device 로 인식하는 이름. | Evidence: L5842-L5842, L5892-L5892" 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="77.0" y="1729.0" width="150.0" height="64.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_virtio-blk" value="virtio-blk Frontend" tooltip="그 가상 block device 를 제어하는 게스트 커널 driver. | Evidence: L5831-L5831, L5789-L5789" 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="77.0" y="1065.0" width="167.0" height="64.0" as="geometry"/>
|
||||
<mxCell id="n_virtio-blk" value="virtio-blk Frontend" tooltip="그 가상 block device 를 제어하는 게스트 커널 driver. | Evidence: L5844-L5844, L5802-L5802" 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="77.0" y="2039.0" width="167.0" height="64.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_virtqueue" value="virtqueue" tooltip="요청이 실리는 자리. 바로 아래가 VM Boundary 다. | Evidence: L5833-L5835" 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="85.5" y="1225.0" width="150.0" height="64.0" as="geometry"/>
|
||||
<mxCell id="n_virtqueue" value="virtqueue" tooltip="요청이 실리는 자리. 바로 아래가 VM Boundary 다. | Evidence: L5846-L5848" 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="77.0" y="2366.0" width="150.0" height="64.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="e_app-to-vfs" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_app" target="n_vfs">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="184.5" y="217.0" as="offset"/>
|
||||
<mxPoint x="153.8" y="331.5" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_vfs-to-fs" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_vfs" target="n_fs">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="184.5" y="377.0" as="offset"/>
|
||||
<mxPoint x="176.0" y="673.0" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_fs-to-page-cache" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_fs" target="n_page-cache">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="184.5" y="537.0" as="offset"/>
|
||||
<mxPoint x="176.0" y="983.0" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_page-cache-to-block-layer" value="writeback" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_page-cache" target="n_block-layer">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="184.5" y="697.0" as="offset"/>
|
||||
<mxPoint x="152.8" y="1265.0" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_block-layer-to-vda" value="WRITE / FLUSH" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_block-layer" target="n_vda">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="184.5" y="857.0" as="offset"/>
|
||||
<mxPoint x="152.8" y="1576.5" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_vda-to-virtio-blk" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_vda" target="n_virtio-blk">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="184.5" y="1017.0" as="offset"/>
|
||||
<mxPoint x="156.2" y="1888.0" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_virtio-blk-to-virtqueue" value="Virtio block request" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_virtio-blk" target="n_virtqueue">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="184.5" y="1177.0" as="offset"/>
|
||||
<mxPoint x="156.2" y="2206.5" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
|
||||
+100
-100
@@ -6,8 +6,8 @@
|
||||
{
|
||||
"id": "group-guest-userspace",
|
||||
"type": "rectangle",
|
||||
"x": 40.0,
|
||||
"y": 35.0,
|
||||
"x": 35.0,
|
||||
"y": 99.0,
|
||||
"width": 241.0,
|
||||
"height": 160.0,
|
||||
"angle": 0,
|
||||
@@ -36,8 +36,8 @@
|
||||
{
|
||||
"id": "group-label-guest-userspace",
|
||||
"type": "text",
|
||||
"x": 56.0,
|
||||
"y": 41.0,
|
||||
"x": 51.0,
|
||||
"y": 105.0,
|
||||
"width": 135,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -76,9 +76,9 @@
|
||||
"id": "group-guest-kernel",
|
||||
"type": "rectangle",
|
||||
"x": 47.0,
|
||||
"y": 219.0,
|
||||
"y": 440.0,
|
||||
"width": 227.0,
|
||||
"height": 1096.0,
|
||||
"height": 2016.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "#f8f9fa",
|
||||
@@ -106,7 +106,7 @@
|
||||
"id": "group-label-guest-kernel",
|
||||
"type": "text",
|
||||
"x": 63.0,
|
||||
"y": 225.0,
|
||||
"y": 446.0,
|
||||
"width": 108,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -144,10 +144,10 @@
|
||||
{
|
||||
"id": "edge-app-to-vfs",
|
||||
"type": "arrow",
|
||||
"x": 160.5,
|
||||
"y": 169.0,
|
||||
"width": 0.0,
|
||||
"height": 96.0,
|
||||
"x": 152.0,
|
||||
"y": 233.0,
|
||||
"width": 3.5,
|
||||
"height": 253.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -170,20 +170,20 @@
|
||||
"locked": false,
|
||||
"points": [
|
||||
[
|
||||
0.0,
|
||||
3.5,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
3.5,
|
||||
126.5
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
126.5
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
96.0
|
||||
253.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -204,10 +204,10 @@
|
||||
{
|
||||
"id": "edge-vfs-to-fs",
|
||||
"type": "arrow",
|
||||
"x": 160.5,
|
||||
"y": 329.0,
|
||||
"x": 152.0,
|
||||
"y": 550.0,
|
||||
"width": 0.0,
|
||||
"height": 96.0,
|
||||
"height": 246.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -235,15 +235,15 @@
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
123.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
123.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
96.0
|
||||
246.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -264,10 +264,10 @@
|
||||
{
|
||||
"id": "edge-fs-to-page-cache",
|
||||
"type": "arrow",
|
||||
"x": 160.5,
|
||||
"y": 489.0,
|
||||
"x": 152.0,
|
||||
"y": 860.0,
|
||||
"width": 0.0,
|
||||
"height": 96.0,
|
||||
"height": 246.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -295,15 +295,15 @@
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
123.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
123.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
96.0
|
||||
246.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -324,10 +324,10 @@
|
||||
{
|
||||
"id": "edge-page-cache-to-block-layer",
|
||||
"type": "arrow",
|
||||
"x": 160.5,
|
||||
"y": 649.0,
|
||||
"width": 0.0,
|
||||
"height": 96.0,
|
||||
"x": 152.0,
|
||||
"y": 1170.0,
|
||||
"width": 1.5,
|
||||
"height": 246.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -355,15 +355,15 @@
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
123.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
1.5,
|
||||
123.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
96.0
|
||||
1.5,
|
||||
246.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -384,8 +384,8 @@
|
||||
{
|
||||
"id": "edge-label-page-cache-to-block-layer",
|
||||
"type": "text",
|
||||
"x": 139.5,
|
||||
"y": 685.0,
|
||||
"x": 107.75,
|
||||
"y": 1253.0,
|
||||
"width": 90,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -423,10 +423,10 @@
|
||||
{
|
||||
"id": "edge-block-layer-to-vda",
|
||||
"type": "arrow",
|
||||
"x": 160.5,
|
||||
"y": 809.0,
|
||||
"width": 0.0,
|
||||
"height": 96.0,
|
||||
"x": 152.0,
|
||||
"y": 1480.0,
|
||||
"width": 1.5,
|
||||
"height": 249.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -449,20 +449,20 @@
|
||||
"locked": false,
|
||||
"points": [
|
||||
[
|
||||
0.0,
|
||||
1.5,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
1.5,
|
||||
124.5
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
124.5
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
96.0
|
||||
249.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -483,8 +483,8 @@
|
||||
{
|
||||
"id": "edge-label-block-layer-to-vda",
|
||||
"type": "text",
|
||||
"x": 132.5,
|
||||
"y": 845.0,
|
||||
"x": 100.75,
|
||||
"y": 1564.5,
|
||||
"width": 104,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -522,10 +522,10 @@
|
||||
{
|
||||
"id": "edge-vda-to-virtio-blk",
|
||||
"type": "arrow",
|
||||
"x": 160.5,
|
||||
"y": 969.0,
|
||||
"width": 0.0,
|
||||
"height": 96.0,
|
||||
"x": 152.0,
|
||||
"y": 1793.0,
|
||||
"width": 8.5,
|
||||
"height": 246.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -553,15 +553,15 @@
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
123.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
8.5,
|
||||
123.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
96.0
|
||||
8.5,
|
||||
246.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -582,10 +582,10 @@
|
||||
{
|
||||
"id": "edge-virtio-blk-to-virtqueue",
|
||||
"type": "arrow",
|
||||
"x": 160.5,
|
||||
"y": 1129.0,
|
||||
"width": 0.0,
|
||||
"height": 96.0,
|
||||
"x": 152.0,
|
||||
"y": 2103.0,
|
||||
"width": 8.5,
|
||||
"height": 263.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -608,20 +608,20 @@
|
||||
"locked": false,
|
||||
"points": [
|
||||
[
|
||||
0.0,
|
||||
8.5,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
8.5,
|
||||
131.5
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
131.5
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
96.0
|
||||
263.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -642,8 +642,8 @@
|
||||
{
|
||||
"id": "edge-label-virtio-blk-to-virtqueue",
|
||||
"type": "text",
|
||||
"x": 104.5,
|
||||
"y": 1165.0,
|
||||
"x": 76.25,
|
||||
"y": 2194.5,
|
||||
"width": 160,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -681,8 +681,8 @@
|
||||
{
|
||||
"id": "node-app",
|
||||
"type": "rectangle",
|
||||
"x": 70.0,
|
||||
"y": 81.0,
|
||||
"x": 65.0,
|
||||
"y": 145.0,
|
||||
"width": 181.0,
|
||||
"height": 88.0,
|
||||
"angle": 0,
|
||||
@@ -711,8 +711,8 @@
|
||||
{
|
||||
"id": "node-label-app",
|
||||
"type": "text",
|
||||
"x": 80.0,
|
||||
"y": 91.0,
|
||||
"x": 75.0,
|
||||
"y": 155.0,
|
||||
"width": 161.0,
|
||||
"height": 68.0,
|
||||
"angle": 0,
|
||||
@@ -750,8 +750,8 @@
|
||||
{
|
||||
"id": "node-vfs",
|
||||
"type": "rectangle",
|
||||
"x": 85.5,
|
||||
"y": 265.0,
|
||||
"x": 77.0,
|
||||
"y": 486.0,
|
||||
"width": 150.0,
|
||||
"height": 64.0,
|
||||
"angle": 0,
|
||||
@@ -780,8 +780,8 @@
|
||||
{
|
||||
"id": "node-label-vfs",
|
||||
"type": "text",
|
||||
"x": 95.5,
|
||||
"y": 275.0,
|
||||
"x": 87.0,
|
||||
"y": 496.0,
|
||||
"width": 130.0,
|
||||
"height": 44.0,
|
||||
"angle": 0,
|
||||
@@ -819,8 +819,8 @@
|
||||
{
|
||||
"id": "node-fs",
|
||||
"type": "rectangle",
|
||||
"x": 85.5,
|
||||
"y": 425.0,
|
||||
"x": 77.0,
|
||||
"y": 796.0,
|
||||
"width": 150.0,
|
||||
"height": 64.0,
|
||||
"angle": 0,
|
||||
@@ -849,8 +849,8 @@
|
||||
{
|
||||
"id": "node-label-fs",
|
||||
"type": "text",
|
||||
"x": 95.5,
|
||||
"y": 435.0,
|
||||
"x": 87.0,
|
||||
"y": 806.0,
|
||||
"width": 130.0,
|
||||
"height": 44.0,
|
||||
"angle": 0,
|
||||
@@ -888,8 +888,8 @@
|
||||
{
|
||||
"id": "node-page-cache",
|
||||
"type": "rectangle",
|
||||
"x": 85.5,
|
||||
"y": 585.0,
|
||||
"x": 77.0,
|
||||
"y": 1106.0,
|
||||
"width": 150.0,
|
||||
"height": 64.0,
|
||||
"angle": 0,
|
||||
@@ -918,8 +918,8 @@
|
||||
{
|
||||
"id": "node-label-page-cache",
|
||||
"type": "text",
|
||||
"x": 95.5,
|
||||
"y": 595.0,
|
||||
"x": 87.0,
|
||||
"y": 1116.0,
|
||||
"width": 130.0,
|
||||
"height": 44.0,
|
||||
"angle": 0,
|
||||
@@ -957,8 +957,8 @@
|
||||
{
|
||||
"id": "node-block-layer",
|
||||
"type": "rectangle",
|
||||
"x": 84.0,
|
||||
"y": 745.0,
|
||||
"x": 77.0,
|
||||
"y": 1416.0,
|
||||
"width": 153.0,
|
||||
"height": 64.0,
|
||||
"angle": 0,
|
||||
@@ -987,8 +987,8 @@
|
||||
{
|
||||
"id": "node-label-block-layer",
|
||||
"type": "text",
|
||||
"x": 94.0,
|
||||
"y": 755.0,
|
||||
"x": 87.0,
|
||||
"y": 1426.0,
|
||||
"width": 133.0,
|
||||
"height": 44.0,
|
||||
"angle": 0,
|
||||
@@ -1026,8 +1026,8 @@
|
||||
{
|
||||
"id": "node-vda",
|
||||
"type": "rectangle",
|
||||
"x": 85.5,
|
||||
"y": 905.0,
|
||||
"x": 77.0,
|
||||
"y": 1729.0,
|
||||
"width": 150.0,
|
||||
"height": 64.0,
|
||||
"angle": 0,
|
||||
@@ -1056,8 +1056,8 @@
|
||||
{
|
||||
"id": "node-label-vda",
|
||||
"type": "text",
|
||||
"x": 95.5,
|
||||
"y": 915.0,
|
||||
"x": 87.0,
|
||||
"y": 1739.0,
|
||||
"width": 130.0,
|
||||
"height": 44.0,
|
||||
"angle": 0,
|
||||
@@ -1096,7 +1096,7 @@
|
||||
"id": "node-virtio-blk",
|
||||
"type": "rectangle",
|
||||
"x": 77.0,
|
||||
"y": 1065.0,
|
||||
"y": 2039.0,
|
||||
"width": 167.0,
|
||||
"height": 64.0,
|
||||
"angle": 0,
|
||||
@@ -1126,7 +1126,7 @@
|
||||
"id": "node-label-virtio-blk",
|
||||
"type": "text",
|
||||
"x": 87.0,
|
||||
"y": 1075.0,
|
||||
"y": 2049.0,
|
||||
"width": 147.0,
|
||||
"height": 44.0,
|
||||
"angle": 0,
|
||||
@@ -1164,8 +1164,8 @@
|
||||
{
|
||||
"id": "node-virtqueue",
|
||||
"type": "rectangle",
|
||||
"x": 85.5,
|
||||
"y": 1225.0,
|
||||
"x": 77.0,
|
||||
"y": 2366.0,
|
||||
"width": 150.0,
|
||||
"height": 64.0,
|
||||
"angle": 0,
|
||||
@@ -1194,8 +1194,8 @@
|
||||
{
|
||||
"id": "node-label-virtqueue",
|
||||
"type": "text",
|
||||
"x": 95.5,
|
||||
"y": 1235.0,
|
||||
"x": 87.0,
|
||||
"y": 2376.0,
|
||||
"width": 130.0,
|
||||
"height": 44.0,
|
||||
"angle": 0,
|
||||
|
||||
+17
-6
@@ -2,30 +2,41 @@
|
||||
"harness_version": "0.2.0",
|
||||
"spec_id": "guest-block-io-to-virtqueue",
|
||||
"spec_version": "1.1",
|
||||
"spec_sha256": "f41eedadcb8a6841cf981bea9e0a9e50a3df836df3cad528b4245a8d42e83915",
|
||||
"spec_sha256": "3c2c2a9e053d25d2277226299d48db325ea1d1af836f6bacf4c23ea3672c38f4",
|
||||
"source_context": {
|
||||
"document": "docs/virtualization/final/document.md",
|
||||
"document_sha256": "181e2b3cc8a45bae81e7e8193d026937c4d586ae4495d3b2c323eb7e6abcfadd",
|
||||
"document_sha256": "8c4ecc64c8cea9a4450ed7131fdd9cb2048dc092b66cd969f6346ed77887c210",
|
||||
"anchor": {
|
||||
"kind": "heading",
|
||||
"value": "128. 전체 구조",
|
||||
"line": 5804
|
||||
"line": 5817
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
"guest-block-io-to-virtqueue.svg",
|
||||
"guest-block-io-to-virtqueue.drawio",
|
||||
"guest-block-io-to-virtqueue.mmd",
|
||||
"guest-block-io-to-virtqueue.d2",
|
||||
"guest-block-io-to-virtqueue.dot",
|
||||
"guest-block-io-to-virtqueue.drawio",
|
||||
"guest-block-io-to-virtqueue.excalidraw",
|
||||
"guest-block-io-to-virtqueue.alt.md"
|
||||
],
|
||||
"lint_issue_count": 5,
|
||||
"lint_issue_count": 6,
|
||||
"assumption_count": 0,
|
||||
"assumptions_allowed": false,
|
||||
"composition_profile": "component-flow",
|
||||
"reference_ids": [
|
||||
"payment-event-flow"
|
||||
],
|
||||
"diagram_only": true
|
||||
"diagram_only": true,
|
||||
"source_spec_file_sha256": "bdb3a2b7f3434ecf75e7dceca28611002766e42aabd96a9c8f521c29049466d9",
|
||||
"output_sha256": {
|
||||
"guest-block-io-to-virtqueue.svg": "5b7be8f61cc3a04b3b490184f7fe4b1cb2b6f62e48fb6d1dd116b4a8253fdc4a",
|
||||
"guest-block-io-to-virtqueue.mmd": "cf6e5a7a029e614d0e0f1f295663f9f733e9fbeeee002b16c545129257f7565d",
|
||||
"guest-block-io-to-virtqueue.d2": "92c96a0b016a4b2b8f3d03ca528574f3c75156588ff66610c47bd7b938181740",
|
||||
"guest-block-io-to-virtqueue.dot": "3f3605120200df313b5476cb4a3b2121aa5b8b3c05052e9e822403b5275f7077",
|
||||
"guest-block-io-to-virtqueue.drawio": "c649f476bed58b768777cbac3d773a5a3ba3d7cfa95a9bb3e598defb670c94b9",
|
||||
"guest-block-io-to-virtqueue.excalidraw": "84f0416128f3a3ac1ceca2a0a2e3cb5b0ebbb74bf522c47ae2c0b558c2fe24c8",
|
||||
"guest-block-io-to-virtqueue.alt.md": "0d45d2ce74a7e2245e046f950fa0bbdd4e037bdb095444e95f14e762d8f4bc53"
|
||||
}
|
||||
}
|
||||
|
||||
+41
-41
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="680" height="1360" viewBox="0 0 680 1360" role="img" aria-labelledby="diagram-title diagram-description">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="680" height="2501" viewBox="0 0 680 2501" role="img" aria-labelledby="diagram-title diagram-description">
|
||||
<title id="diagram-title">게스트의 write() 가 virtqueue 에 실리기까지</title>
|
||||
<desc id="diagram-description">위에서 아래로 읽는다. 맨 위 Guest Userspace 구역에 PostgreSQL / Keycloak 이 있고 write() 가 게스트 커널로 내려간다. Guest Kernel 구역 안에서 VFS 가 먼저 받고, ext4 / XFS 가 파일을 block 공간에 배치하고, Guest Page Cache 가 그 내용을 dirty page 로 받아 두었다가 writeback 으로 Guest Block Layer 에 내려보낸다. Guest Block Layer 는 그것을 WRITE 나 FLUSH 요청으로 바꿔 /dev/vda 에 걸고, virtio-blk Frontend 가 그 요청을 virtqueue 에 게시한다. virtqueue 아래의 VM Boundary 부터는 QEMU 와 호스트 계층이라 이 그림에서 잘랐다. 완료가 같은 virtqueue 로 되돌아오는 역방향은 SSOT 의 다른 절이 대는 사실이라 이 그림에 넣지 않았고 본문 문단이 맡는다.</desc>
|
||||
<metadata>{"techviz":{"spec_version":"1.1","id":"guest-block-io-to-virtqueue","profile":"component-flow"},"source_context":{"document":"docs/virtualization/final/document.md","document_sha256":"181e2b3cc8a45bae81e7e8193d026937c4d586ae4495d3b2c323eb7e6abcfadd","anchor":{"kind":"heading","value":"128. 전체 구조","line":5804}},"evidence_policy":"Each factual element cites source lines or is marked assumption.","diagram_only":true}</metadata>
|
||||
<metadata>{"techviz":{"spec_version":"1.1","id":"guest-block-io-to-virtqueue","profile":"component-flow"},"source_context":{"document":"docs/virtualization/final/document.md","document_sha256":"8c4ecc64c8cea9a4450ed7131fdd9cb2048dc092b66cd969f6346ed77887c210","anchor":{"kind":"heading","value":"128. 전체 구조","line":5817}},"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" />
|
||||
@@ -49,59 +49,59 @@
|
||||
.timeline-detail { font-size: 11px; fill: #4b5563; text-anchor: middle; }
|
||||
</style>
|
||||
</defs>
|
||||
<rect class="canvas" width="680" height="1360" />
|
||||
<rect class="group-box" x="40.0" y="35.0" width="241.0" height="160.0" rx="8" />
|
||||
<rect class="group-label-bg" x="54.0" y="25.0" width="127.0" height="22" />
|
||||
<text class="group-label" x="64.0" y="40.0">Guest Userspace</text>
|
||||
<rect class="group-box" x="47.0" y="219.0" width="227.0" height="1096.0" rx="8" />
|
||||
<rect class="group-label-bg" x="61.0" y="209.0" width="106.0" height="22" />
|
||||
<text class="group-label" x="71.0" y="224.0">Guest Kernel</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="160.5,169.0 160.5,217.0 160.5,217.0 160.5,265.0" data-evidence="5811-5813,5890-5890" />
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="160.5,329.0 160.5,377.0 160.5,377.0 160.5,425.0" data-evidence="5817-5819" />
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="160.5,489.0 160.5,537.0 160.5,537.0 160.5,585.0" data-evidence="5819-5821" />
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="160.5,649.0 160.5,697.0 160.5,697.0 160.5,745.0" data-evidence="5823-5825" />
|
||||
<rect class="edge-label-bg" x="145.3" y="683.0" width="78.3" height="22" rx="3" />
|
||||
<text class="edge-label" x="184.5" y="698.0">writeback</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="160.5,809.0 160.5,857.0 160.5,857.0 160.5,905.0" data-evidence="5827-5829" />
|
||||
<rect class="edge-label-bg" x="131.9" y="843.0" width="105.1" height="22" rx="3" />
|
||||
<text class="edge-label" x="184.5" y="858.0">WRITE / FLUSH</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="160.5,969.0 160.5,1017.0 160.5,1017.0 160.5,1065.0" data-evidence="5829-5831" />
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="160.5,1129.0 160.5,1177.0 160.5,1177.0 160.5,1225.0" data-evidence="5831-5833" />
|
||||
<rect class="edge-label-bg" x="108.5" y="1163.0" width="152.0" height="22" rx="3" />
|
||||
<text class="edge-label" x="184.5" y="1178.0">Virtio block request</text>
|
||||
<rect class="canvas" width="680" height="2501" />
|
||||
<rect class="group-box" x="35.0" y="99.0" width="241.0" height="160.0" rx="8" />
|
||||
<rect class="group-label-bg" x="49.0" y="89.0" width="127.0" height="22" />
|
||||
<text class="group-label" x="59.0" y="104.0">Guest Userspace</text>
|
||||
<rect class="group-box" x="47.0" y="440.0" width="227.0" height="2016.0" rx="8" />
|
||||
<rect class="group-label-bg" x="61.0" y="430.0" width="106.0" height="22" />
|
||||
<text class="group-label" x="71.0" y="445.0">Guest Kernel</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="155.5,233.0 155.5,359.5 152.0,359.5 152.0,486.0" data-evidence="5824-5826,5903-5903" />
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="152.0,550.0 152.0,673.0 152.0,673.0 152.0,796.0" data-evidence="5830-5832" />
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="152.0,860.0 152.0,983.0 152.0,983.0 152.0,1106.0" data-evidence="5832-5834" />
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="152.0,1170.0 152.0,1293.0 153.5,1293.0 153.5,1416.0" data-evidence="5836-5838" />
|
||||
<rect class="edge-label-bg" x="113.6" y="1251.0" width="78.3" height="22" rx="3" />
|
||||
<text class="edge-label" x="152.8" y="1266.0">writeback</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="153.5,1480.0 153.5,1604.5 152.0,1604.5 152.0,1729.0" data-evidence="5840-5842" />
|
||||
<rect class="edge-label-bg" x="100.2" y="1562.5" width="105.1" height="22" rx="3" />
|
||||
<text class="edge-label" x="152.8" y="1577.5">WRITE / FLUSH</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="152.0,1793.0 152.0,1916.0 160.5,1916.0 160.5,2039.0" data-evidence="5842-5844" />
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="160.5,2103.0 160.5,2234.5 152.0,2234.5 152.0,2366.0" data-evidence="5844-5846" />
|
||||
<rect class="edge-label-bg" x="80.2" y="2192.5" width="152.0" height="22" rx="3" />
|
||||
<text class="edge-label" x="156.2" y="2207.5">Virtio block request</text>
|
||||
<g id="node-app">
|
||||
<rect class="node-shape kind-service emphasis-normal role-source" data-evidence="5807-5809,5885-5885,5811-5813" x="70.0" y="81.0" width="181.0" height="88.0" rx="7" />
|
||||
<text class="node-label" x="160.5" y="108.0">PostgreSQL / Keycloak</text>
|
||||
<line class="node-detail-divider" x1="84.0" y1="129.0" x2="237.0" y2="129.0" />
|
||||
<text class="node-detail" x="86.0" y="146.0">read / write</text>
|
||||
<text class="node-detail" x="86.0" y="162.0">fsync / sync</text>
|
||||
<rect class="node-shape kind-service emphasis-normal role-source" data-evidence="5820-5822,5898-5898,5824-5826" x="65.0" y="145.0" width="181.0" height="88.0" rx="7" />
|
||||
<text class="node-label" x="155.5" y="172.0">PostgreSQL / Keycloak</text>
|
||||
<line class="node-detail-divider" x1="79.0" y1="193.0" x2="232.0" y2="193.0" />
|
||||
<text class="node-detail" x="81.0" y="210.0">read / write</text>
|
||||
<text class="node-detail" x="81.0" y="226.0">fsync / sync</text>
|
||||
</g>
|
||||
<g id="node-vfs">
|
||||
<rect class="node-shape kind-service emphasis-normal role-service" data-evidence="5815-5817,5905-5905" x="85.5" y="265.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="160.5" y="295.0">VFS</text>
|
||||
<rect class="node-shape kind-service emphasis-normal role-service" data-evidence="5828-5830,5918-5918" x="77.0" y="486.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="152.0" y="516.0">VFS</text>
|
||||
</g>
|
||||
<g id="node-fs">
|
||||
<rect class="node-shape kind-service emphasis-normal role-service" data-evidence="5819-5819" x="85.5" y="425.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="160.5" y="455.0">ext4 / XFS</text>
|
||||
<rect class="node-shape kind-service emphasis-normal role-service" data-evidence="5832-5832" x="77.0" y="796.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="152.0" y="826.0">ext4 / XFS</text>
|
||||
</g>
|
||||
<g id="node-page-cache">
|
||||
<rect class="node-shape kind-store emphasis-normal role-store" data-evidence="5821-5821" x="85.5" y="585.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="160.5" y="615.0">Guest Page Cache</text>
|
||||
<rect class="node-shape kind-store emphasis-normal role-store" data-evidence="5834-5834" x="77.0" y="1106.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="152.0" y="1136.0">Guest Page Cache</text>
|
||||
</g>
|
||||
<g id="node-block-layer">
|
||||
<rect class="node-shape kind-service emphasis-normal role-service" data-evidence="5825-5825" x="84.0" y="745.0" width="153.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="160.5" y="775.0">Guest Block Layer</text>
|
||||
<rect class="node-shape kind-service emphasis-normal role-service" data-evidence="5838-5838" x="77.0" y="1416.0" width="153.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="153.5" y="1446.0">Guest Block Layer</text>
|
||||
</g>
|
||||
<g id="node-vda">
|
||||
<rect class="node-shape kind-device emphasis-normal role-service" data-evidence="5829-5829,5879-5879" x="85.5" y="905.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="160.5" y="935.0">/dev/vda</text>
|
||||
<rect class="node-shape kind-device emphasis-normal role-service" data-evidence="5842-5842,5892-5892" x="77.0" y="1729.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="152.0" y="1759.0">/dev/vda</text>
|
||||
</g>
|
||||
<g id="node-virtio-blk">
|
||||
<rect class="node-shape kind-service emphasis-normal role-service" data-evidence="5831-5831,5789-5789" x="77.0" y="1065.0" width="167.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="160.5" y="1095.0">virtio-blk Frontend</text>
|
||||
<rect class="node-shape kind-service emphasis-normal role-service" data-evidence="5844-5844,5802-5802" x="77.0" y="2039.0" width="167.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="160.5" y="2069.0">virtio-blk Frontend</text>
|
||||
</g>
|
||||
<g id="node-virtqueue">
|
||||
<rect class="node-shape kind-queue emphasis-primary role-queue" data-evidence="5833-5835" x="85.5" y="1225.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="160.5" y="1255.0">virtqueue</text>
|
||||
<rect class="node-shape kind-queue emphasis-primary role-queue" data-evidence="5846-5848" x="77.0" y="2366.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="152.0" y="2396.0">virtqueue</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Reference in New Issue
Block a user