refactor: 문서 개선 중
This commit is contained in:
+25
-25
@@ -10,34 +10,34 @@
|
||||
|
||||
## Elements and evidence
|
||||
|
||||
- **virsh** (cli): VM/network 관리 CLI. packet datapath 에는 직접 참여하지 않는다. Evidence: L5662–L5662, L5687–L5689.
|
||||
- **libvirt** (service): VM lifecycle 과 NIC/network configuration 을 관리한다. Evidence: L5663–L5663, L5691–L5691.
|
||||
- **QEMU** (process): 실제로 실행되는 프로세스. 이 안에 virtio-net device model 이 있다. Evidence: L5666–L5666, L5693–L5693.
|
||||
- **virtio-net Device Model** (service): control/setup path 가 닿는 자리. 장치를 만들고 backend 를 연결한다. Evidence: L5666–L5666, L5695–L5700.
|
||||
- **Physical NIC** (hardware): 밖에서 온 packet 이 처음 닿는 하드웨어. Evidence: L5706–L5708.
|
||||
- **Physical NIC Driver** (driver): 그 하드웨어를 제어하는 Host kernel driver. Evidence: L5674–L5674, L5710–L5710.
|
||||
- **virsh** (cli): VM/network 관리 CLI. packet datapath 에는 직접 참여하지 않는다. Evidence: L5675–L5675, L5700–L5702.
|
||||
- **libvirt** (service): VM lifecycle 과 NIC/network configuration 을 관리한다. Evidence: L5676–L5676, L5704–L5704.
|
||||
- **QEMU** (process): 실제로 실행되는 프로세스. 이 안에 virtio-net device model 이 있다. Evidence: L5679–L5679, L5706–L5706.
|
||||
- **virtio-net Device Model** (service): control/setup path 가 닿는 자리. 장치를 만들고 backend 를 연결한다. Evidence: L5679–L5679, L5708–L5713.
|
||||
- **Physical NIC** (hardware): 밖에서 온 packet 이 처음 닿는 하드웨어. Evidence: L5719–L5721.
|
||||
- **Physical NIC Driver** (driver): 그 하드웨어를 제어하는 Host kernel driver. Evidence: L5687–L5687, L5723–L5723.
|
||||
- **Linux Bridge /
|
||||
Routing / NAT** (network): L2 software switch 와 L3 routing, 주소 변환이 놓이는 자리. Evidence: L5672–L5673, L5712–L5712.
|
||||
- **TAP** (network): VM 의 Ethernet frame 과 Host Linux networking 을 잇는 접점. Evidence: L5671–L5671, L5714–L5714.
|
||||
- **vhost-net** (kernel): 반복되는 packet datapath 를 Host kernel 에서 처리하는 backend. Evidence: L5669–L5669, L5716–L5716.
|
||||
- **QEMU virtio backend** (process): vhost-net 을 쓰지 않을 때 datapath backend 를 맡는 쪽. Evidence: L5668–L5668, L5742–L5742.
|
||||
- **virtqueue** (queue): Guest 와 Host backend 가 I/O buffer 를 주고받는 descriptor 기반 공유 큐. Evidence: L5667–L5667, L5718–L5718.
|
||||
- **Guest** (service): packet 이 올라가 애플리케이션 socket 에 닿는 쪽. Evidence: L5664–L5665, L5720–L5726.
|
||||
Routing / NAT** (network): L2 software switch 와 L3 routing, 주소 변환이 놓이는 자리. Evidence: L5685–L5686, L5725–L5725.
|
||||
- **TAP** (network): VM 의 Ethernet frame 과 Host Linux networking 을 잇는 접점. Evidence: L5684–L5684, L5727–L5727.
|
||||
- **vhost-net** (kernel): 반복되는 packet datapath 를 Host kernel 에서 처리하는 backend. Evidence: L5682–L5682, L5729–L5729.
|
||||
- **QEMU virtio backend** (process): vhost-net 을 쓰지 않을 때 datapath backend 를 맡는 쪽. Evidence: L5681–L5681, L5755–L5755.
|
||||
- **virtqueue** (queue): Guest 와 Host backend 가 I/O buffer 를 주고받는 descriptor 기반 공유 큐. Evidence: L5680–L5680, L5731–L5731.
|
||||
- **Guest** (service): packet 이 올라가 애플리케이션 socket 에 닿는 쪽. Evidence: L5677–L5678, L5733–L5739.
|
||||
|
||||
## Relationships
|
||||
|
||||
- **Linux Bridge /
|
||||
Routing / NAT → TAP:** Ethernet Frame. Evidence: L5671–L5671, L5712–L5714.
|
||||
Routing / NAT → TAP:** Ethernet Frame. Evidence: L5684–L5684, L5725–L5727.
|
||||
- **Physical NIC Driver → Linux Bridge /
|
||||
Routing / NAT:** L2 forwarding. Evidence: L5672–L5672, L5710–L5712.
|
||||
- **libvirt → QEMU:** NIC/network configuration. Evidence: L5663–L5663, L5691–L5693.
|
||||
- **Physical NIC → Physical NIC Driver:** Ethernet Frame. Evidence: L5671–L5671, L5708–L5710.
|
||||
- **QEMU virtio backend → virtqueue:** Data Path. Evidence: L5729–L5729, L5742–L5744.
|
||||
- **QEMU → virtio-net Device Model:** QEMU process. Evidence: L5666–L5666, L5693–L5695.
|
||||
- **virtio-net Device Model → QEMU virtio backend:** control. Evidence: L5668–L5668, L5700–L5700.
|
||||
- **virtio-net Device Model → vhost-net:** vhost-net backend 설정. Evidence: L5700–L5700, L5716–L5716.
|
||||
- **TAP → QEMU virtio backend:** data. Evidence: L5729–L5729, L5740–L5742.
|
||||
- **TAP → vhost-net:** vhost-net 사용. Evidence: L5703–L5703, L5714–L5716.
|
||||
- **vhost-net → virtqueue:** Data Path. Evidence: L5703–L5703, L5716–L5718.
|
||||
- **virsh → libvirt:** Control / Setup. Evidence: L5662–L5663, L5684–L5691.
|
||||
- **virtqueue → Guest:** virtio-net Frontend Driver. Evidence: L5664–L5664, L5718–L5726.
|
||||
Routing / NAT:** L2 forwarding. Evidence: L5685–L5685, L5723–L5725.
|
||||
- **libvirt → QEMU:** NIC config. Evidence: L5676–L5676, L5704–L5706.
|
||||
- **Physical NIC → Physical NIC Driver:** Ethernet Frame. Evidence: L5684–L5684, L5721–L5723.
|
||||
- **QEMU virtio backend → virtqueue:** Data Path. Evidence: L5742–L5742, L5755–L5757.
|
||||
- **QEMU → virtio-net Device Model:** QEMU process. Evidence: L5679–L5679, L5706–L5708.
|
||||
- **virtio-net Device Model → QEMU virtio backend:** control. Evidence: L5681–L5681, L5713–L5713.
|
||||
- **virtio-net Device Model → vhost-net:** vhost-net backend 설정. Evidence: L5713–L5713, L5729–L5729.
|
||||
- **TAP → QEMU virtio backend:** data. Evidence: L5742–L5742, L5753–L5755.
|
||||
- **TAP → vhost-net:** vhost-net 사용. Evidence: L5716–L5716, L5727–L5729.
|
||||
- **vhost-net → virtqueue:** Data Path. Evidence: L5716–L5716, L5729–L5731.
|
||||
- **virsh → libvirt:** Control / Setup. Evidence: L5675–L5676, L5697–L5704.
|
||||
- **virtqueue → Guest:** frontend. Evidence: L5677–L5677, L5731–L5739.
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
# control/setup path 는 QEMU 를 지나고 data path 는 backend 에 따라 QEMU 를 지나기도 안 지나기도 한다
|
||||
# Question: 설정하는 경로와 packet 이 흐르는 경로는 어디에서 갈라지고, 그 두 갈래 가운데 어느 쪽이 QEMU 사용자 공간을 지나는가
|
||||
direction: down
|
||||
direction: right
|
||||
n0: "virsh" {
|
||||
shape: rectangle
|
||||
}
|
||||
@@ -38,7 +38,7 @@ n11: "Guest" {
|
||||
shape: rectangle
|
||||
}
|
||||
n0 -> n1: "Control / Setup"
|
||||
n1 -> n2: "NIC/network configuration"
|
||||
n1 -> n2: "NIC config"
|
||||
n2 -> n3: "QEMU process"
|
||||
n4 -> n5: "Ethernet Frame"
|
||||
n5 -> n6: "L2 forwarding"
|
||||
@@ -49,4 +49,4 @@ n7 -> n8: "vhost-net 사용"
|
||||
n7 -> n9
|
||||
n8 -> n10: "Data Path"
|
||||
n9 -> n10: "Data Path"
|
||||
n10 -> n11: "virtio-net Frontend Driver"
|
||||
n10 -> n11: "frontend"
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
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="virsh", shape=box, style="rounded,filled"];
|
||||
n1 [label="libvirt", shape=box, style="rounded,filled"];
|
||||
n2 [label="QEMU", shape=box, style="rounded,filled"];
|
||||
n3 [label="virtio-net Device Model", shape=box, style="rounded,filled"];
|
||||
n4 [label="Physical NIC", shape=box, style="rounded,filled"];
|
||||
n5 [label="Physical NIC Driver", shape=box, style="rounded,filled"];
|
||||
n6 [label="Linux Bridge /\nRouting / NAT", shape=box, style="rounded,filled"];
|
||||
n7 [label="TAP", shape=box, style="rounded,filled"];
|
||||
n8 [label="vhost-net", shape=box, style="rounded,filled"];
|
||||
n9 [label="QEMU virtio backend", shape=box, style="rounded,filled"];
|
||||
n10 [label="virtqueue", shape=oval, style="rounded,filled"];
|
||||
n11 [label="Guest", shape=box, style="rounded,filled"];
|
||||
n0 -> n1 [label="Control / Setup", style=solid];
|
||||
n1 -> n2 [label="NIC config", style=solid];
|
||||
n2 -> n3 [label="QEMU process", style=solid];
|
||||
n4 -> n5 [label="Ethernet Frame", style=solid];
|
||||
n5 -> n6 [label="L2 forwarding", style=solid];
|
||||
n6 -> n7 [label="Ethernet Frame", style=solid];
|
||||
n3 -> n8 [label="vhost-net backend 설정", style=solid];
|
||||
n3 -> n9 [label="", style=solid];
|
||||
n7 -> n8 [label="vhost-net 사용", style=solid];
|
||||
n7 -> n9 [label="", style=solid];
|
||||
n8 -> n10 [label="Data Path", style=solid];
|
||||
n9 -> n10 [label="Data Path", style=solid];
|
||||
n10 -> n11 [label="frontend", style=solid];
|
||||
}
|
||||
+40
-40
@@ -1,110 +1,110 @@
|
||||
<?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="packet-control-and-data-paths" name="control/setup path 는 QEMU 를 지나고 data path 는 backend 에 따라 QEMU 를 지나기도 안 지나기도 한다">
|
||||
<mxGraphModel dx="680" dy="1296" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1296" math="0" shadow="0">
|
||||
<mxGraphModel dx="2249" dy="390" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2249" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="n_virsh" value="virsh<br/>User" tooltip="VM/network 관리 CLI. packet datapath 에는 직접 참여하지 않는다. | Evidence: L5662-L5662, L5687-L5689" 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="90.5" y="60.0" width="150.0" height="71.0" as="geometry"/>
|
||||
<mxCell id="n_virsh" value="virsh<br/>User" tooltip="VM/network 관리 CLI. packet datapath 에는 직접 참여하지 않는다. | Evidence: L5675-L5675, L5700-L5702" 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="99.0" width="150.0" height="71.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_physical-nic" value="Physical NIC" tooltip="밖에서 온 packet 이 처음 닿는 하드웨어. | Evidence: L5706-L5708" 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="300.5" y="63.5" width="150.0" height="64.0" as="geometry"/>
|
||||
<mxCell id="n_physical-nic" value="Physical NIC" tooltip="밖에서 온 packet 이 처음 닿는 하드웨어. | Evidence: L5719-L5721" 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="242.0" width="150.0" height="64.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_libvirt" value="libvirt" tooltip="VM lifecycle 과 NIC/network configuration 을 관리한다. | Evidence: L5663-L5663, L5691-L5691" 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="82.0" y="227.0" width="150.0" height="64.0" as="geometry"/>
|
||||
<mxCell id="n_libvirt" value="libvirt" tooltip="VM lifecycle 과 NIC/network configuration 을 관리한다. | Evidence: L5676-L5676, L5704-L5704" 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="388.5" y="102.5" width="150.0" height="64.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_physical-nic-driver" value="Physical NIC Driver" tooltip="그 하드웨어를 제어하는 Host kernel driver. | Evidence: L5674-L5674, L5710-L5710" 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="292.0" y="227.0" width="167.0" height="64.0" as="geometry"/>
|
||||
<mxCell id="n_physical-nic-driver" value="Physical NIC Driver" tooltip="그 하드웨어를 제어하는 Host kernel driver. | Evidence: L5687-L5687, L5723-L5723" 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="380.0" y="238.5" width="167.0" height="64.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_qemu" value="QEMU<br/>Host Userspace" tooltip="실제로 실행되는 프로세스. 이 안에 virtio-net device model 이 있다. | Evidence: L5666-L5666, L5693-L5693" 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="90.5" y="388.5" width="150.0" height="71.0" as="geometry"/>
|
||||
<mxCell id="n_qemu" value="QEMU<br/>Host Userspace" tooltip="실제로 실행되는 프로세스. 이 안에 virtio-net device model 이 있다. | Evidence: L5679-L5679, L5706-L5706" 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="707.0" y="94.0" width="150.0" height="71.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_linux-bridge" value="Linux Bridge /
|
||||
Routing / NAT" tooltip="L2 software switch 와 L3 routing, 주소 변환이 놓이는 자리. | Evidence: L5672-L5673, L5712-L5712" 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="300.5" y="387.0" width="150.0" height="74.0" as="geometry"/>
|
||||
Routing / NAT" tooltip="L2 software switch 와 L3 routing, 주소 변환이 놓이는 자리. | Evidence: L5685-L5686, L5725-L5725" 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="707.0" y="237.0" width="150.0" height="74.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_virtio-net-device-model" value="virtio-net Device Model<br/>virtual NIC 생성<br/>feature negotiation<br/>virtqueue 설정<br/>vhost-net backend 설정" tooltip="control/setup path 가 닿는 자리. 장치를 만들고 backend 를 연결한다. | Evidence: L5666-L5666, L5695-L5700" 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="70.0" y="557.0" width="174.0" height="142.0" as="geometry"/>
|
||||
<mxCell id="n_virtio-net-device-model" value="virtio-net Device Model<br/>virtual NIC 생성<br/>feature negotiation<br/>virtqueue 설정<br/>vhost-net backend 설정" tooltip="control/setup path 가 닿는 자리. 장치를 만들고 backend 를 연결한다. | Evidence: L5679-L5679, L5708-L5713" 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="1017.0" y="60.0" width="174.0" height="142.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_tap" value="TAP<br/>Host-side interface" tooltip="VM 의 Ethernet frame 과 Host Linux networking 을 잇는 접점. | Evidence: L5671-L5671, L5714-L5714" 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="304.0" y="592.5" width="167.0" height="71.0" as="geometry"/>
|
||||
<mxCell id="n_tap" value="TAP<br/>Host-side interface" tooltip="VM 의 Ethernet frame 과 Host Linux networking 을 잇는 접점. | Evidence: L5684-L5684, L5727-L5727" 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="1020.5" y="274.0" width="167.0" height="71.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_qemu-virtio-backend" value="QEMU virtio backend<br/>QEMU Userspace" tooltip="vhost-net 을 쓰지 않을 때 datapath backend 를 맡는 쪽. | Evidence: L5668-L5668, L5742-L5742" 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="82.0" y="795.0" width="167.0" height="71.0" as="geometry"/>
|
||||
<mxCell id="n_qemu-virtio-backend" value="QEMU virtio backend<br/>QEMU Userspace" tooltip="vhost-net 을 쓰지 않을 때 datapath backend 를 맡는 쪽. | Evidence: L5681-L5681, L5755-L5755" 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="1351.0" y="95.5" width="167.0" height="71.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_vhost-net" value="vhost-net<br/>Host Kernel" tooltip="반복되는 packet datapath 를 Host kernel 에서 처리하는 backend. | Evidence: L5669-L5669, L5716-L5716" 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="309.0" y="795.0" width="150.0" height="71.0" as="geometry"/>
|
||||
<mxCell id="n_vhost-net" value="vhost-net<br/>Host Kernel" tooltip="반복되는 packet datapath 를 Host kernel 에서 처리하는 backend. | Evidence: L5682-L5682, L5729-L5729" 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="1359.5" y="238.5" width="150.0" height="71.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_virtqueue" value="virtqueue<br/>shared queue" tooltip="Guest 와 Host backend 가 I/O buffer 를 주고받는 descriptor 기반 공유 큐. | Evidence: L5667-L5667, L5718-L5718" 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="195.5" y="962.0" width="150.0" height="71.0" as="geometry"/>
|
||||
<mxCell id="n_virtqueue" value="virtqueue<br/>shared queue" tooltip="Guest 와 Host backend 가 I/O buffer 를 주고받는 descriptor 기반 공유 큐. | Evidence: L5680-L5680, L5731-L5731" 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="1678.0" y="167.0" width="150.0" height="71.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="n_guest" value="Guest<br/>virtio-net Frontend Driver<br/>Guest TCP/IP Stack<br/>Socket<br/>Keycloak" tooltip="packet 이 올라가 애플리케이션 socket 에 닿는 쪽. | Evidence: L5664-L5665, L5720-L5726" 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="162.5" y="1129.0" width="216.0" height="122.0" as="geometry"/>
|
||||
<mxCell id="n_guest" value="Guest<br/>virtio-net Frontend Driver<br/>Guest TCP/IP Stack<br/>Socket<br/>Keycloak" tooltip="packet 이 올라가 애플리케이션 socket 에 닿는 쪽. | Evidence: L5677-L5678, L5733-L5739" 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="1988.0" y="141.5" width="216.0" height="122.0" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="e_bridge-to-tap" value="Ethernet Frame" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_linux-bridge" target="n_tap">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="381.5" y="498.8" as="offset"/>
|
||||
<mxPoint x="962.8" y="291.8" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_driver-to-bridge" value="L2 forwarding" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_physical-nic-driver" target="n_linux-bridge">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="399.5" y="339.0" as="offset"/>
|
||||
<mxPoint x="651.0" y="272.2" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_libvirt-to-qemu" value="NIC/network configuration" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_libvirt" target="n_qemu">
|
||||
<mxCell id="e_libvirt-to-qemu" value="NIC config" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_libvirt" target="n_qemu">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="161.2" y="311.8" as="offset"/>
|
||||
<mxPoint x="646.8" y="132.0" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_nic-to-driver" value="Ethernet Frame" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_physical-nic" target="n_physical-nic-driver">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="399.5" y="177.2" as="offset"/>
|
||||
<mxPoint x="324.0" y="272.2" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_qemu-backend-to-virtqueue" value="Data Path" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_qemu-virtio-backend" target="n_virtqueue">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="213.5" y="886.0" as="offset"/>
|
||||
<mxPoint x="1622.0" y="162.2" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_qemu-to-device-model" value="QEMU process" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_qemu" target="n_virtio-net-device-model">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="161.2" y="480.2" as="offset"/>
|
||||
<mxPoint x="961.0" y="130.2" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_setup-qemu-backend" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_virtio-net-device-model" target="n_qemu-virtio-backend">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="152.2" y="719.0" as="offset"/>
|
||||
<mxPoint x="1271.0" y="94.0" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_setup-vhost-backend" value="vhost-net backend 설정" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_virtio-net-device-model" target="n_vhost-net">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="270.5" y="719.0" as="offset"/>
|
||||
<mxPoint x="1299.2" y="202.5" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_tap-to-qemu-backend" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_tap" target="n_qemu-virtio-backend">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="276.5" y="701.2" as="offset"/>
|
||||
<mxPoint x="1293.2" y="220.2" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_tap-to-vhost" value="vhost-net 사용" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_tap" target="n_vhost-net">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="394.8" y="701.2" as="offset"/>
|
||||
<mxPoint x="1297.5" y="300.8" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_vhost-to-virtqueue" value="Data Path" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_vhost-net" target="n_virtqueue">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="331.8" y="886.0" as="offset"/>
|
||||
<mxPoint x="1617.8" y="242.8" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_virsh-to-libvirt" value="Control / Setup" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_virsh" target="n_libvirt">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="161.2" y="151.0" as="offset"/>
|
||||
<mxPoint x="304.2" y="106.5" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e_virtqueue-to-guest" value="virtio-net Frontend Driver" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_virtqueue" target="n_guest">
|
||||
<mxCell id="e_virtqueue-to-guest" value="frontend" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_virtqueue" target="n_guest">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="294.5" y="1081.0" as="offset"/>
|
||||
<mxPoint x="1908.0" y="174.5" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
|
||||
+231
-231
@@ -6,10 +6,10 @@
|
||||
{
|
||||
"id": "edge-bridge-to-tap",
|
||||
"type": "arrow",
|
||||
"x": 375.5,
|
||||
"y": 461.0,
|
||||
"width": 12.0,
|
||||
"height": 131.5,
|
||||
"x": 857.0,
|
||||
"y": 274.0,
|
||||
"width": 163.5,
|
||||
"height": 35.5,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -36,16 +36,16 @@
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
65.75
|
||||
81.75,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
12.0,
|
||||
65.75
|
||||
81.75,
|
||||
35.5
|
||||
],
|
||||
[
|
||||
12.0,
|
||||
131.5
|
||||
163.5,
|
||||
35.5
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -66,8 +66,8 @@
|
||||
{
|
||||
"id": "edge-label-bridge-to-tap",
|
||||
"type": "text",
|
||||
"x": 325.5,
|
||||
"y": 486.75,
|
||||
"x": 906.75,
|
||||
"y": 279.75,
|
||||
"width": 112,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -105,10 +105,10 @@
|
||||
{
|
||||
"id": "edge-driver-to-bridge",
|
||||
"type": "arrow",
|
||||
"x": 375.5,
|
||||
"y": 291.0,
|
||||
"width": 0.0,
|
||||
"height": 96.0,
|
||||
"x": 547.0,
|
||||
"y": 270.5,
|
||||
"width": 160.0,
|
||||
"height": 3.5,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -135,16 +135,16 @@
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
80.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
80.0,
|
||||
3.5
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
96.0
|
||||
160.0,
|
||||
3.5
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -165,8 +165,8 @@
|
||||
{
|
||||
"id": "edge-label-driver-to-bridge",
|
||||
"type": "text",
|
||||
"x": 347.5,
|
||||
"y": 327.0,
|
||||
"x": 599.0,
|
||||
"y": 260.25,
|
||||
"width": 104,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -204,10 +204,10 @@
|
||||
{
|
||||
"id": "edge-libvirt-to-qemu",
|
||||
"type": "arrow",
|
||||
"x": 157.0,
|
||||
"y": 291.0,
|
||||
"width": 8.5,
|
||||
"height": 97.5,
|
||||
"x": 538.5,
|
||||
"y": 129.5,
|
||||
"width": 168.5,
|
||||
"height": 5.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -231,19 +231,19 @@
|
||||
"points": [
|
||||
[
|
||||
0.0,
|
||||
5.0
|
||||
],
|
||||
[
|
||||
84.25,
|
||||
5.0
|
||||
],
|
||||
[
|
||||
84.25,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.75
|
||||
],
|
||||
[
|
||||
8.5,
|
||||
48.75
|
||||
],
|
||||
[
|
||||
8.5,
|
||||
97.5
|
||||
168.5,
|
||||
0.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -264,9 +264,9 @@
|
||||
{
|
||||
"id": "edge-label-libvirt-to-qemu",
|
||||
"type": "text",
|
||||
"x": 61.25,
|
||||
"y": 299.75,
|
||||
"width": 200,
|
||||
"x": 601.75,
|
||||
"y": 120.0,
|
||||
"width": 90,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
@@ -292,21 +292,21 @@
|
||||
"locked": false,
|
||||
"fontSize": 13,
|
||||
"fontFamily": 5,
|
||||
"text": "NIC/network configuration",
|
||||
"text": "NIC config",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": null,
|
||||
"originalText": "NIC/network configuration",
|
||||
"originalText": "NIC config",
|
||||
"autoResize": true,
|
||||
"lineHeight": 1.25
|
||||
},
|
||||
{
|
||||
"id": "edge-nic-to-driver",
|
||||
"type": "arrow",
|
||||
"x": 375.5,
|
||||
"y": 127.5,
|
||||
"width": 0.0,
|
||||
"height": 99.5,
|
||||
"x": 220.0,
|
||||
"y": 270.5,
|
||||
"width": 160.0,
|
||||
"height": 3.5,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -330,19 +330,19 @@
|
||||
"points": [
|
||||
[
|
||||
0.0,
|
||||
3.5
|
||||
],
|
||||
[
|
||||
80.0,
|
||||
3.5
|
||||
],
|
||||
[
|
||||
80.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
49.75
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
49.75
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
99.5
|
||||
160.0,
|
||||
0.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -363,8 +363,8 @@
|
||||
{
|
||||
"id": "edge-label-nic-to-driver",
|
||||
"type": "text",
|
||||
"x": 343.5,
|
||||
"y": 165.25,
|
||||
"x": 268.0,
|
||||
"y": 260.25,
|
||||
"width": 112,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -402,10 +402,10 @@
|
||||
{
|
||||
"id": "edge-qemu-backend-to-virtqueue",
|
||||
"type": "arrow",
|
||||
"x": 165.5,
|
||||
"y": 866.0,
|
||||
"width": 96.0,
|
||||
"height": 96.0,
|
||||
"x": 1518.0,
|
||||
"y": 131.0,
|
||||
"width": 160.0,
|
||||
"height": 62.5,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -432,16 +432,16 @@
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
80.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
96.0,
|
||||
48.0
|
||||
80.0,
|
||||
62.5
|
||||
],
|
||||
[
|
||||
96.0,
|
||||
96.0
|
||||
160.0,
|
||||
62.5
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -462,8 +462,8 @@
|
||||
{
|
||||
"id": "edge-label-qemu-backend-to-virtqueue",
|
||||
"type": "text",
|
||||
"x": 168.5,
|
||||
"y": 874.0,
|
||||
"x": 1577.0,
|
||||
"y": 150.25,
|
||||
"width": 90,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -501,10 +501,10 @@
|
||||
{
|
||||
"id": "edge-qemu-to-device-model",
|
||||
"type": "arrow",
|
||||
"x": 157.0,
|
||||
"y": 459.5,
|
||||
"width": 8.5,
|
||||
"height": 97.5,
|
||||
"x": 857.0,
|
||||
"y": 129.5,
|
||||
"width": 160.0,
|
||||
"height": 1.5,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -527,20 +527,20 @@
|
||||
"locked": false,
|
||||
"points": [
|
||||
[
|
||||
8.5,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
8.5,
|
||||
48.75
|
||||
80.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.75
|
||||
80.0,
|
||||
1.5
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
97.5
|
||||
160.0,
|
||||
1.5
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -561,8 +561,8 @@
|
||||
{
|
||||
"id": "edge-label-qemu-to-device-model",
|
||||
"type": "text",
|
||||
"x": 113.25,
|
||||
"y": 468.25,
|
||||
"x": 913.0,
|
||||
"y": 118.25,
|
||||
"width": 96,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -600,10 +600,10 @@
|
||||
{
|
||||
"id": "edge-setup-qemu-backend",
|
||||
"type": "arrow",
|
||||
"x": 148.0,
|
||||
"y": 699.0,
|
||||
"width": 8.5,
|
||||
"height": 96.0,
|
||||
"x": 1191.0,
|
||||
"y": 122.0,
|
||||
"width": 160.0,
|
||||
"height": 0.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -630,16 +630,16 @@
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
80.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
8.5,
|
||||
48.0
|
||||
80.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
8.5,
|
||||
96.0
|
||||
160.0,
|
||||
0.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -660,10 +660,10 @@
|
||||
{
|
||||
"id": "edge-setup-vhost-backend",
|
||||
"type": "arrow",
|
||||
"x": 166.0,
|
||||
"y": 699.0,
|
||||
"width": 209.0,
|
||||
"height": 96.0,
|
||||
"x": 1191.0,
|
||||
"y": 140.0,
|
||||
"width": 168.5,
|
||||
"height": 125.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -690,16 +690,16 @@
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
84.25,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
209.0,
|
||||
48.0
|
||||
84.25,
|
||||
125.0
|
||||
],
|
||||
[
|
||||
209.0,
|
||||
96.0
|
||||
168.5,
|
||||
125.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -720,8 +720,8 @@
|
||||
{
|
||||
"id": "edge-label-setup-vhost-backend",
|
||||
"type": "text",
|
||||
"x": 190.5,
|
||||
"y": 707.0,
|
||||
"x": 1219.25,
|
||||
"y": 190.5,
|
||||
"width": 160,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -759,10 +759,10 @@
|
||||
{
|
||||
"id": "edge-tap-to-qemu-backend",
|
||||
"type": "arrow",
|
||||
"x": 174.5,
|
||||
"y": 663.5,
|
||||
"width": 204.0,
|
||||
"height": 131.5,
|
||||
"x": 1187.5,
|
||||
"y": 140.0,
|
||||
"width": 163.5,
|
||||
"height": 160.5,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -785,20 +785,20 @@
|
||||
"locked": false,
|
||||
"points": [
|
||||
[
|
||||
204.0,
|
||||
0.0,
|
||||
160.5
|
||||
],
|
||||
[
|
||||
81.75,
|
||||
160.5
|
||||
],
|
||||
[
|
||||
81.75,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
204.0,
|
||||
65.75
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
65.75
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
131.5
|
||||
163.5,
|
||||
0.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -819,10 +819,10 @@
|
||||
{
|
||||
"id": "edge-tap-to-vhost",
|
||||
"type": "arrow",
|
||||
"x": 393.0,
|
||||
"y": 663.5,
|
||||
"width": 3.5,
|
||||
"height": 131.5,
|
||||
"x": 1187.5,
|
||||
"y": 283.0,
|
||||
"width": 172.0,
|
||||
"height": 35.5,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -845,20 +845,20 @@
|
||||
"locked": false,
|
||||
"points": [
|
||||
[
|
||||
3.5,
|
||||
0.0,
|
||||
35.5
|
||||
],
|
||||
[
|
||||
86.0,
|
||||
35.5
|
||||
],
|
||||
[
|
||||
86.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
3.5,
|
||||
65.75
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
65.75
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
131.5
|
||||
172.0,
|
||||
0.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -879,8 +879,8 @@
|
||||
{
|
||||
"id": "edge-label-tap-to-vhost",
|
||||
"type": "text",
|
||||
"x": 346.75,
|
||||
"y": 689.25,
|
||||
"x": 1249.5,
|
||||
"y": 288.75,
|
||||
"width": 96,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -918,10 +918,10 @@
|
||||
{
|
||||
"id": "edge-vhost-to-virtqueue",
|
||||
"type": "arrow",
|
||||
"x": 279.5,
|
||||
"y": 866.0,
|
||||
"width": 104.5,
|
||||
"height": 96.0,
|
||||
"x": 1509.5,
|
||||
"y": 211.5,
|
||||
"width": 168.5,
|
||||
"height": 62.5,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -944,20 +944,20 @@
|
||||
"locked": false,
|
||||
"points": [
|
||||
[
|
||||
104.5,
|
||||
0.0,
|
||||
62.5
|
||||
],
|
||||
[
|
||||
84.25,
|
||||
62.5
|
||||
],
|
||||
[
|
||||
84.25,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
104.5,
|
||||
48.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
96.0
|
||||
168.5,
|
||||
0.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -978,8 +978,8 @@
|
||||
{
|
||||
"id": "edge-label-vhost-to-virtqueue",
|
||||
"type": "text",
|
||||
"x": 286.75,
|
||||
"y": 874.0,
|
||||
"x": 1572.75,
|
||||
"y": 230.75,
|
||||
"width": 90,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -1017,10 +1017,10 @@
|
||||
{
|
||||
"id": "edge-virsh-to-libvirt",
|
||||
"type": "arrow",
|
||||
"x": 157.0,
|
||||
"y": 131.0,
|
||||
"width": 8.5,
|
||||
"height": 96.0,
|
||||
"x": 220.0,
|
||||
"y": 134.5,
|
||||
"width": 168.5,
|
||||
"height": 0.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -1043,20 +1043,20 @@
|
||||
"locked": false,
|
||||
"points": [
|
||||
[
|
||||
8.5,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
8.5,
|
||||
48.0
|
||||
84.25,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
84.25,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
96.0
|
||||
168.5,
|
||||
0.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -1077,8 +1077,8 @@
|
||||
{
|
||||
"id": "edge-label-virsh-to-libvirt",
|
||||
"type": "text",
|
||||
"x": 101.25,
|
||||
"y": 139.0,
|
||||
"x": 244.25,
|
||||
"y": 94.5,
|
||||
"width": 120,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
@@ -1116,10 +1116,10 @@
|
||||
{
|
||||
"id": "edge-virtqueue-to-guest",
|
||||
"type": "arrow",
|
||||
"x": 270.5,
|
||||
"y": 1033.0,
|
||||
"width": 0.0,
|
||||
"height": 96.0,
|
||||
"x": 1828.0,
|
||||
"y": 202.5,
|
||||
"width": 160.0,
|
||||
"height": 0.0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
@@ -1146,16 +1146,16 @@
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
80.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
48.0
|
||||
80.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
96.0
|
||||
160.0,
|
||||
0.0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
@@ -1176,9 +1176,9 @@
|
||||
{
|
||||
"id": "edge-label-virtqueue-to-guest",
|
||||
"type": "text",
|
||||
"x": 190.5,
|
||||
"y": 1069.0,
|
||||
"width": 208,
|
||||
"x": 1863.0,
|
||||
"y": 162.5,
|
||||
"width": 90,
|
||||
"height": 24,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
@@ -1204,19 +1204,19 @@
|
||||
"locked": false,
|
||||
"fontSize": 13,
|
||||
"fontFamily": 5,
|
||||
"text": "virtio-net Frontend Driver",
|
||||
"text": "frontend",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": null,
|
||||
"originalText": "virtio-net Frontend Driver",
|
||||
"originalText": "frontend",
|
||||
"autoResize": true,
|
||||
"lineHeight": 1.25
|
||||
},
|
||||
{
|
||||
"id": "node-virsh",
|
||||
"type": "rectangle",
|
||||
"x": 90.5,
|
||||
"y": 60.0,
|
||||
"x": 70.0,
|
||||
"y": 99.0,
|
||||
"width": 150.0,
|
||||
"height": 71.0,
|
||||
"angle": 0,
|
||||
@@ -1245,8 +1245,8 @@
|
||||
{
|
||||
"id": "node-label-virsh",
|
||||
"type": "text",
|
||||
"x": 100.5,
|
||||
"y": 70.0,
|
||||
"x": 80.0,
|
||||
"y": 109.0,
|
||||
"width": 130.0,
|
||||
"height": 51.0,
|
||||
"angle": 0,
|
||||
@@ -1284,8 +1284,8 @@
|
||||
{
|
||||
"id": "node-physical-nic",
|
||||
"type": "rectangle",
|
||||
"x": 300.5,
|
||||
"y": 63.5,
|
||||
"x": 70.0,
|
||||
"y": 242.0,
|
||||
"width": 150.0,
|
||||
"height": 64.0,
|
||||
"angle": 0,
|
||||
@@ -1314,8 +1314,8 @@
|
||||
{
|
||||
"id": "node-label-physical-nic",
|
||||
"type": "text",
|
||||
"x": 310.5,
|
||||
"y": 73.5,
|
||||
"x": 80.0,
|
||||
"y": 252.0,
|
||||
"width": 130.0,
|
||||
"height": 44.0,
|
||||
"angle": 0,
|
||||
@@ -1353,8 +1353,8 @@
|
||||
{
|
||||
"id": "node-libvirt",
|
||||
"type": "rectangle",
|
||||
"x": 82.0,
|
||||
"y": 227.0,
|
||||
"x": 388.5,
|
||||
"y": 102.5,
|
||||
"width": 150.0,
|
||||
"height": 64.0,
|
||||
"angle": 0,
|
||||
@@ -1383,8 +1383,8 @@
|
||||
{
|
||||
"id": "node-label-libvirt",
|
||||
"type": "text",
|
||||
"x": 92.0,
|
||||
"y": 237.0,
|
||||
"x": 398.5,
|
||||
"y": 112.5,
|
||||
"width": 130.0,
|
||||
"height": 44.0,
|
||||
"angle": 0,
|
||||
@@ -1422,8 +1422,8 @@
|
||||
{
|
||||
"id": "node-physical-nic-driver",
|
||||
"type": "rectangle",
|
||||
"x": 292.0,
|
||||
"y": 227.0,
|
||||
"x": 380.0,
|
||||
"y": 238.5,
|
||||
"width": 167.0,
|
||||
"height": 64.0,
|
||||
"angle": 0,
|
||||
@@ -1452,8 +1452,8 @@
|
||||
{
|
||||
"id": "node-label-physical-nic-driver",
|
||||
"type": "text",
|
||||
"x": 302.0,
|
||||
"y": 237.0,
|
||||
"x": 390.0,
|
||||
"y": 248.5,
|
||||
"width": 147.0,
|
||||
"height": 44.0,
|
||||
"angle": 0,
|
||||
@@ -1491,8 +1491,8 @@
|
||||
{
|
||||
"id": "node-qemu",
|
||||
"type": "rectangle",
|
||||
"x": 90.5,
|
||||
"y": 388.5,
|
||||
"x": 707.0,
|
||||
"y": 94.0,
|
||||
"width": 150.0,
|
||||
"height": 71.0,
|
||||
"angle": 0,
|
||||
@@ -1521,8 +1521,8 @@
|
||||
{
|
||||
"id": "node-label-qemu",
|
||||
"type": "text",
|
||||
"x": 100.5,
|
||||
"y": 398.5,
|
||||
"x": 717.0,
|
||||
"y": 104.0,
|
||||
"width": 130.0,
|
||||
"height": 51.0,
|
||||
"angle": 0,
|
||||
@@ -1560,8 +1560,8 @@
|
||||
{
|
||||
"id": "node-linux-bridge",
|
||||
"type": "rectangle",
|
||||
"x": 300.5,
|
||||
"y": 387.0,
|
||||
"x": 707.0,
|
||||
"y": 237.0,
|
||||
"width": 150.0,
|
||||
"height": 74.0,
|
||||
"angle": 0,
|
||||
@@ -1590,8 +1590,8 @@
|
||||
{
|
||||
"id": "node-label-linux-bridge",
|
||||
"type": "text",
|
||||
"x": 310.5,
|
||||
"y": 397.0,
|
||||
"x": 717.0,
|
||||
"y": 247.0,
|
||||
"width": 130.0,
|
||||
"height": 54.0,
|
||||
"angle": 0,
|
||||
@@ -1629,8 +1629,8 @@
|
||||
{
|
||||
"id": "node-virtio-net-device-model",
|
||||
"type": "rectangle",
|
||||
"x": 70.0,
|
||||
"y": 557.0,
|
||||
"x": 1017.0,
|
||||
"y": 60.0,
|
||||
"width": 174.0,
|
||||
"height": 142.0,
|
||||
"angle": 0,
|
||||
@@ -1659,8 +1659,8 @@
|
||||
{
|
||||
"id": "node-label-virtio-net-device-model",
|
||||
"type": "text",
|
||||
"x": 80.0,
|
||||
"y": 567.0,
|
||||
"x": 1027.0,
|
||||
"y": 70.0,
|
||||
"width": 154.0,
|
||||
"height": 122.0,
|
||||
"angle": 0,
|
||||
@@ -1698,8 +1698,8 @@
|
||||
{
|
||||
"id": "node-tap",
|
||||
"type": "rectangle",
|
||||
"x": 304.0,
|
||||
"y": 592.5,
|
||||
"x": 1020.5,
|
||||
"y": 274.0,
|
||||
"width": 167.0,
|
||||
"height": 71.0,
|
||||
"angle": 0,
|
||||
@@ -1728,8 +1728,8 @@
|
||||
{
|
||||
"id": "node-label-tap",
|
||||
"type": "text",
|
||||
"x": 314.0,
|
||||
"y": 602.5,
|
||||
"x": 1030.5,
|
||||
"y": 284.0,
|
||||
"width": 147.0,
|
||||
"height": 51.0,
|
||||
"angle": 0,
|
||||
@@ -1767,8 +1767,8 @@
|
||||
{
|
||||
"id": "node-qemu-virtio-backend",
|
||||
"type": "rectangle",
|
||||
"x": 82.0,
|
||||
"y": 795.0,
|
||||
"x": 1351.0,
|
||||
"y": 95.5,
|
||||
"width": 167.0,
|
||||
"height": 71.0,
|
||||
"angle": 0,
|
||||
@@ -1797,8 +1797,8 @@
|
||||
{
|
||||
"id": "node-label-qemu-virtio-backend",
|
||||
"type": "text",
|
||||
"x": 92.0,
|
||||
"y": 805.0,
|
||||
"x": 1361.0,
|
||||
"y": 105.5,
|
||||
"width": 147.0,
|
||||
"height": 51.0,
|
||||
"angle": 0,
|
||||
@@ -1836,8 +1836,8 @@
|
||||
{
|
||||
"id": "node-vhost-net",
|
||||
"type": "rectangle",
|
||||
"x": 309.0,
|
||||
"y": 795.0,
|
||||
"x": 1359.5,
|
||||
"y": 238.5,
|
||||
"width": 150.0,
|
||||
"height": 71.0,
|
||||
"angle": 0,
|
||||
@@ -1866,8 +1866,8 @@
|
||||
{
|
||||
"id": "node-label-vhost-net",
|
||||
"type": "text",
|
||||
"x": 319.0,
|
||||
"y": 805.0,
|
||||
"x": 1369.5,
|
||||
"y": 248.5,
|
||||
"width": 130.0,
|
||||
"height": 51.0,
|
||||
"angle": 0,
|
||||
@@ -1905,8 +1905,8 @@
|
||||
{
|
||||
"id": "node-virtqueue",
|
||||
"type": "rectangle",
|
||||
"x": 195.5,
|
||||
"y": 962.0,
|
||||
"x": 1678.0,
|
||||
"y": 167.0,
|
||||
"width": 150.0,
|
||||
"height": 71.0,
|
||||
"angle": 0,
|
||||
@@ -1935,8 +1935,8 @@
|
||||
{
|
||||
"id": "node-label-virtqueue",
|
||||
"type": "text",
|
||||
"x": 205.5,
|
||||
"y": 972.0,
|
||||
"x": 1688.0,
|
||||
"y": 177.0,
|
||||
"width": 130.0,
|
||||
"height": 51.0,
|
||||
"angle": 0,
|
||||
@@ -1974,8 +1974,8 @@
|
||||
{
|
||||
"id": "node-guest",
|
||||
"type": "rectangle",
|
||||
"x": 162.5,
|
||||
"y": 1129.0,
|
||||
"x": 1988.0,
|
||||
"y": 141.5,
|
||||
"width": 216.0,
|
||||
"height": 122.0,
|
||||
"angle": 0,
|
||||
@@ -2004,8 +2004,8 @@
|
||||
{
|
||||
"id": "node-label-guest",
|
||||
"type": "text",
|
||||
"x": 172.5,
|
||||
"y": 1139.0,
|
||||
"x": 1998.0,
|
||||
"y": 151.5,
|
||||
"width": 196.0,
|
||||
"height": 102.0,
|
||||
"angle": 0,
|
||||
|
||||
+16
-5
@@ -2,21 +2,22 @@
|
||||
"harness_version": "0.2.0",
|
||||
"spec_id": "packet-control-and-data-paths",
|
||||
"spec_version": "1.1",
|
||||
"spec_sha256": "fa2d5e22352fa6cf975665cd431a236deaa4ae88ea0eb8461bb1b3c8b0b03dc6",
|
||||
"spec_sha256": "5ad8e6e91ced885c14673ed8b75153b054376278d256fa39f26aba1df9ed947b",
|
||||
"source_context": {
|
||||
"document": "docs/virtualization/final/document.md",
|
||||
"document_sha256": "181e2b3cc8a45bae81e7e8193d026937c4d586ae4495d3b2c323eb7e6abcfadd",
|
||||
"document_sha256": "8c4ecc64c8cea9a4450ed7131fdd9cb2048dc092b66cd969f6346ed77887c210",
|
||||
"anchor": {
|
||||
"kind": "heading",
|
||||
"value": "125. 최종 기준 구조",
|
||||
"line": 5682
|
||||
"line": 5695
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
"packet-control-and-data-paths.svg",
|
||||
"packet-control-and-data-paths.drawio",
|
||||
"packet-control-and-data-paths.mmd",
|
||||
"packet-control-and-data-paths.d2",
|
||||
"packet-control-and-data-paths.dot",
|
||||
"packet-control-and-data-paths.drawio",
|
||||
"packet-control-and-data-paths.excalidraw",
|
||||
"packet-control-and-data-paths.alt.md"
|
||||
],
|
||||
@@ -27,5 +28,15 @@
|
||||
"reference_ids": [
|
||||
"payment-event-flow"
|
||||
],
|
||||
"diagram_only": true
|
||||
"diagram_only": true,
|
||||
"source_spec_file_sha256": "cf22eb6977c1e3e1d493881d30604c345489c58bce67e8b76e854f4117ba2788",
|
||||
"output_sha256": {
|
||||
"packet-control-and-data-paths.svg": "82845b88520456296032041122e937ae087fb0521dfcdd510d589f1cbe12eb70",
|
||||
"packet-control-and-data-paths.mmd": "53a570ae187c9f35848eab3df4401d73ebd5be465a05067fb231ff36358a68ed",
|
||||
"packet-control-and-data-paths.d2": "316908b56f29c6b508d133c8c5b6baa9dfe6aa5348540f8877fd798480a21039",
|
||||
"packet-control-and-data-paths.dot": "32fbc68beb83b176eef7e12b966cb8eb6e589881dc6d6a4aeb77434a0c0bc396",
|
||||
"packet-control-and-data-paths.drawio": "ee81cf96da5e4d6b70c8dc35ad0f77c043d493157e9be49608e7ccf5b6aba2a7",
|
||||
"packet-control-and-data-paths.excalidraw": "dec21227b4a33abfdcb8087f417933dd3f00c3ead46890d505bfb05a8b847c3b",
|
||||
"packet-control-and-data-paths.alt.md": "c21d6531f69bc6e02826e1306d327920108cf6b010ac94588011a92387f16125"
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
%% control/setup path 는 QEMU 를 지나고 data path 는 backend 에 따라 QEMU 를 지나기도 안 지나기도 한다
|
||||
%% question: 설정하는 경로와 packet 이 흐르는 경로는 어디에서 갈라지고, 그 두 갈래 가운데 어느 쪽이 QEMU 사용자 공간을 지나는가
|
||||
flowchart TB
|
||||
flowchart LR
|
||||
n0["virsh"]
|
||||
n1["libvirt"]
|
||||
n2["QEMU"]
|
||||
@@ -14,7 +14,7 @@ flowchart TB
|
||||
n10(["virtqueue"])
|
||||
n11["Guest"]
|
||||
n0 -->|"Control / Setup"| n1
|
||||
n1 -->|"NIC/network configuration"| n2
|
||||
n1 -->|"NIC config"| n2
|
||||
n2 -->|"QEMU process"| n3
|
||||
n4 -->|"Ethernet Frame"| n5
|
||||
n5 -->|"L2 forwarding"| n6
|
||||
@@ -25,4 +25,4 @@ flowchart TB
|
||||
n7 --> n9
|
||||
n8 -->|"Data Path"| n10
|
||||
n9 -->|"Data Path"| n10
|
||||
n10 -->|"virtio-net Frontend Driver"| n11
|
||||
n10 -->|"frontend"| n11
|
||||
|
||||
+86
-86
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="680" height="1296" viewBox="0 0 680 1296" role="img" aria-labelledby="diagram-title diagram-description">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="2249" height="390" viewBox="0 0 2249 390" role="img" aria-labelledby="diagram-title diagram-description">
|
||||
<title id="diagram-title">control/setup path 는 QEMU 를 지나고 data path 는 backend 에 따라 QEMU 를 지나기도 안 지나기도 한다</title>
|
||||
<desc id="diagram-description">왼쪽에서 오른쪽으로 읽는다. 위쪽 줄이 control/setup path 다. virsh 에서 libvirt 와 QEMU 를 지나 virtio-net Device Model 에 닿고, 그 device model 이 virtual NIC 생성과 feature negotiation, virtqueue 설정, vhost-net backend 설정을 맡는다. 아래쪽 줄이 data path 다. Physical NIC 에서 Physical NIC Driver 와 Linux Bridge, TAP 까지 온다. 두 줄은 네 번째 열 다음에서 만난다. device model 은 점선으로 backend 둘을 설정하고, TAP 은 실선으로 그 둘 가운데 실제로 쓰는 쪽에 packet 을 넘긴다. vhost-net 을 쓰면 packet 은 Host Kernel 안에서 처리돼 QEMU 사용자 공간을 지나지 않고, QEMU virtio backend 를 쓰면 같은 packet 이 QEMU 사용자 공간을 지난다. 어느 쪽이든 virtqueue 에서 만나 Guest 로 올라간다. 이 Host 가 둘 중 어느 backend 를 쓰고 있는지는 그림이 말하지 않는다.</desc>
|
||||
<metadata>{"techviz":{"spec_version":"1.1","id":"packet-control-and-data-paths","profile":"component-flow"},"source_context":{"document":"docs/virtualization/final/document.md","document_sha256":"181e2b3cc8a45bae81e7e8193d026937c4d586ae4495d3b2c323eb7e6abcfadd","anchor":{"kind":"heading","value":"125. 최종 기준 구조","line":5682}},"evidence_policy":"Each factual element cites source lines or is marked assumption.","diagram_only":true}</metadata>
|
||||
<metadata>{"techviz":{"spec_version":"1.1","id":"packet-control-and-data-paths","profile":"component-flow"},"source_context":{"document":"docs/virtualization/final/document.md","document_sha256":"8c4ecc64c8cea9a4450ed7131fdd9cb2048dc092b66cd969f6346ed77887c210","anchor":{"kind":"heading","value":"125. 최종 기준 구조","line":5695}},"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,112 +49,112 @@
|
||||
.timeline-detail { font-size: 11px; fill: #4b5563; text-anchor: middle; }
|
||||
</style>
|
||||
</defs>
|
||||
<rect class="canvas" width="680" height="1296" />
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="375.5,461.0 375.5,526.8 387.5,526.8 387.5,592.5" data-evidence="5671-5671,5712-5714" />
|
||||
<rect class="edge-label-bg" x="325.6" y="484.8" width="111.8" height="22" rx="3" />
|
||||
<text class="edge-label" x="381.5" y="499.8">Ethernet Frame</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="375.5,291.0 375.5,339.0 375.5,339.0 375.5,387.0" data-evidence="5672-5672,5710-5712" />
|
||||
<rect class="edge-label-bg" x="346.9" y="325.0" width="105.1" height="22" rx="3" />
|
||||
<text class="edge-label" x="399.5" y="340.0">L2 forwarding</text>
|
||||
<polyline class="edge kind-control style-solid emphasis-normal" points="157.0,291.0 157.0,339.8 165.5,339.8 165.5,388.5" data-evidence="5663-5663,5691-5693" />
|
||||
<rect class="edge-label-bg" x="68.5" y="297.8" width="185.5" height="22" rx="3" />
|
||||
<text class="edge-label" x="161.2" y="312.8">NIC/network configuration</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="375.5,127.5 375.5,177.2 375.5,177.2 375.5,227.0" data-evidence="5671-5671,5708-5710" />
|
||||
<rect class="edge-label-bg" x="343.6" y="163.2" width="111.8" height="22" rx="3" />
|
||||
<text class="edge-label" x="399.5" y="178.2">Ethernet Frame</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="165.5,866.0 165.5,914.0 261.5,914.0 261.5,962.0" data-evidence="5729-5729,5742-5744" />
|
||||
<rect class="edge-label-bg" x="174.3" y="872.0" width="78.3" height="22" rx="3" />
|
||||
<text class="edge-label" x="213.5" y="887.0">Data Path</text>
|
||||
<polyline class="edge kind-control style-solid emphasis-normal" points="165.5,459.5 165.5,508.2 157.0,508.2 157.0,557.0" data-evidence="5666-5666,5693-5695" />
|
||||
<rect class="edge-label-bg" x="112.0" y="466.2" width="98.4" height="22" rx="3" />
|
||||
<text class="edge-label" x="161.2" y="481.2">QEMU process</text>
|
||||
<polyline class="edge kind-control style-dashed emphasis-normal" points="148.0,699.0 148.0,747.0 156.5,747.0 156.5,795.0" data-evidence="5668-5668,5700-5700" />
|
||||
<polyline class="edge kind-control style-dashed emphasis-normal" points="166.0,699.0 166.0,747.0 375.0,747.0 375.0,795.0" data-evidence="5700-5700,5716-5716" />
|
||||
<rect class="edge-label-bg" x="194.5" y="705.0" width="152.0" height="22" rx="3" />
|
||||
<text class="edge-label" x="270.5" y="720.0">vhost-net backend 설정</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="378.5,663.5 378.5,729.2 174.5,729.2 174.5,795.0" data-evidence="5729-5729,5740-5742" />
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="396.5,663.5 396.5,729.2 393.0,729.2 393.0,795.0" data-evidence="5703-5703,5714-5716" />
|
||||
<rect class="edge-label-bg" x="345.6" y="687.2" width="98.4" height="22" rx="3" />
|
||||
<text class="edge-label" x="394.8" y="702.2">vhost-net 사용</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="384.0,866.0 384.0,914.0 279.5,914.0 279.5,962.0" data-evidence="5703-5703,5716-5718" />
|
||||
<rect class="edge-label-bg" x="292.6" y="872.0" width="78.3" height="22" rx="3" />
|
||||
<text class="edge-label" x="331.8" y="887.0">Data Path</text>
|
||||
<polyline class="edge kind-control style-solid emphasis-normal" points="165.5,131.0 165.5,179.0 157.0,179.0 157.0,227.0" data-evidence="5662-5663,5684-5691" />
|
||||
<rect class="edge-label-bg" x="102.0" y="137.0" width="118.5" height="22" rx="3" />
|
||||
<text class="edge-label" x="161.2" y="152.0">Control / Setup</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="270.5,1033.0 270.5,1081.0 270.5,1081.0 270.5,1129.0" data-evidence="5664-5664,5718-5726" />
|
||||
<rect class="edge-label-bg" x="198.4" y="1067.0" width="192.2" height="22" rx="3" />
|
||||
<text class="edge-label" x="294.5" y="1082.0">virtio-net Frontend Driver</text>
|
||||
<rect class="canvas" width="2249" height="390" />
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="857.0,274.0 938.8,274.0 938.8,309.5 1020.5,309.5" data-evidence="5684-5684,5725-5727" />
|
||||
<rect class="edge-label-bg" x="906.9" y="277.8" width="111.8" height="22" rx="3" />
|
||||
<text class="edge-label" x="962.8" y="292.8">Ethernet Frame</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="547.0,270.5 627.0,270.5 627.0,274.0 707.0,274.0" data-evidence="5685-5685,5723-5725" />
|
||||
<rect class="edge-label-bg" x="598.5" y="258.2" width="105.1" height="22" rx="3" />
|
||||
<text class="edge-label" x="651.0" y="273.2">L2 forwarding</text>
|
||||
<polyline class="edge kind-control style-solid emphasis-normal" points="538.5,134.5 622.8,134.5 622.8,129.5 707.0,129.5" data-evidence="5676-5676,5704-5706" />
|
||||
<rect class="edge-label-bg" x="604.2" y="118.0" width="85.0" height="22" rx="3" />
|
||||
<text class="edge-label" x="646.8" y="133.0">NIC config</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="220.0,274.0 300.0,274.0 300.0,270.5 380.0,270.5" data-evidence="5684-5684,5721-5723" />
|
||||
<rect class="edge-label-bg" x="268.1" y="258.2" width="111.8" height="22" rx="3" />
|
||||
<text class="edge-label" x="324.0" y="273.2">Ethernet Frame</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="1518.0,131.0 1598.0,131.0 1598.0,193.5 1678.0,193.5" data-evidence="5742-5742,5755-5757" />
|
||||
<rect class="edge-label-bg" x="1582.8" y="148.2" width="78.3" height="22" rx="3" />
|
||||
<text class="edge-label" x="1622.0" y="163.2">Data Path</text>
|
||||
<polyline class="edge kind-control style-solid emphasis-normal" points="857.0,129.5 937.0,129.5 937.0,131.0 1017.0,131.0" data-evidence="5679-5679,5706-5708" />
|
||||
<rect class="edge-label-bg" x="911.8" y="116.2" width="98.4" height="22" rx="3" />
|
||||
<text class="edge-label" x="961.0" y="131.2">QEMU process</text>
|
||||
<polyline class="edge kind-control style-dashed emphasis-normal" points="1191.0,122.0 1271.0,122.0 1271.0,122.0 1351.0,122.0" data-evidence="5681-5681,5713-5713" />
|
||||
<polyline class="edge kind-control style-dashed emphasis-normal" points="1191.0,140.0 1275.2,140.0 1275.2,265.0 1359.5,265.0" data-evidence="5713-5713,5729-5729" />
|
||||
<rect class="edge-label-bg" x="1223.2" y="188.5" width="152.0" height="22" rx="3" />
|
||||
<text class="edge-label" x="1299.2" y="203.5">vhost-net backend 설정</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="1187.5,300.5 1269.2,300.5 1269.2,140.0 1351.0,140.0" data-evidence="5742-5742,5753-5755" />
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="1187.5,318.5 1273.5,318.5 1273.5,283.0 1359.5,283.0" data-evidence="5716-5716,5727-5729" />
|
||||
<rect class="edge-label-bg" x="1248.3" y="286.8" width="98.4" height="22" rx="3" />
|
||||
<text class="edge-label" x="1297.5" y="301.8">vhost-net 사용</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="1509.5,274.0 1593.8,274.0 1593.8,211.5 1678.0,211.5" data-evidence="5716-5716,5729-5731" />
|
||||
<rect class="edge-label-bg" x="1578.6" y="228.8" width="78.3" height="22" rx="3" />
|
||||
<text class="edge-label" x="1617.8" y="243.8">Data Path</text>
|
||||
<polyline class="edge kind-control style-solid emphasis-normal" points="220.0,134.5 304.2,134.5 304.2,134.5 388.5,134.5" data-evidence="5675-5676,5697-5704" />
|
||||
<rect class="edge-label-bg" x="245.0" y="92.5" width="118.5" height="22" rx="3" />
|
||||
<text class="edge-label" x="304.2" y="107.5">Control / Setup</text>
|
||||
<polyline class="edge kind-data style-solid emphasis-normal" points="1828.0,202.5 1908.0,202.5 1908.0,202.5 1988.0,202.5" data-evidence="5677-5677,5731-5739" />
|
||||
<rect class="edge-label-bg" x="1872.2" y="160.5" width="71.6" height="22" rx="3" />
|
||||
<text class="edge-label" x="1908.0" y="175.5">frontend</text>
|
||||
<g id="node-virsh">
|
||||
<rect class="node-shape kind-cli emphasis-normal role-actor" data-evidence="5662-5662,5687-5689" x="90.5" y="60.0" width="150.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="165.5" y="87.0">virsh</text>
|
||||
<line class="node-detail-divider" x1="104.5" y1="108.0" x2="226.5" y2="108.0" />
|
||||
<text class="node-detail" x="106.5" y="125.0">User</text>
|
||||
<rect class="node-shape kind-cli emphasis-normal role-actor" data-evidence="5675-5675,5700-5702" x="70.0" y="99.0" width="150.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="145.0" y="126.0">virsh</text>
|
||||
<line class="node-detail-divider" x1="84.0" y1="147.0" x2="206.0" y2="147.0" />
|
||||
<text class="node-detail" x="86.0" y="164.0">User</text>
|
||||
</g>
|
||||
<g id="node-physical-nic">
|
||||
<rect class="node-shape kind-hardware emphasis-normal role-source" data-evidence="5706-5708" x="300.5" y="63.5" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="375.5" y="93.5">Physical NIC</text>
|
||||
<rect class="node-shape kind-hardware emphasis-normal role-source" data-evidence="5719-5721" x="70.0" y="242.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="145.0" y="272.0">Physical NIC</text>
|
||||
</g>
|
||||
<g id="node-libvirt">
|
||||
<rect class="node-shape kind-service emphasis-normal role-service" data-evidence="5663-5663,5691-5691" x="82.0" y="227.0" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="157.0" y="257.0">libvirt</text>
|
||||
<rect class="node-shape kind-service emphasis-normal role-service" data-evidence="5676-5676,5704-5704" x="388.5" y="102.5" width="150.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="463.5" y="132.5">libvirt</text>
|
||||
</g>
|
||||
<g id="node-physical-nic-driver">
|
||||
<rect class="node-shape kind-driver emphasis-normal role-service" data-evidence="5674-5674,5710-5710" x="292.0" y="227.0" width="167.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="375.5" y="257.0">Physical NIC Driver</text>
|
||||
<rect class="node-shape kind-driver emphasis-normal role-service" data-evidence="5687-5687,5723-5723" x="380.0" y="238.5" width="167.0" height="64.0" rx="7" />
|
||||
<text class="node-label" x="463.5" y="268.5">Physical NIC Driver</text>
|
||||
</g>
|
||||
<g id="node-qemu">
|
||||
<rect class="node-shape kind-process emphasis-normal role-service" data-evidence="5666-5666,5693-5693" x="90.5" y="388.5" width="150.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="165.5" y="415.5">QEMU</text>
|
||||
<line class="node-detail-divider" x1="104.5" y1="436.5" x2="226.5" y2="436.5" />
|
||||
<text class="node-detail" x="106.5" y="453.5">Host Userspace</text>
|
||||
<rect class="node-shape kind-process emphasis-normal role-service" data-evidence="5679-5679,5706-5706" x="707.0" y="94.0" width="150.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="782.0" y="121.0">QEMU</text>
|
||||
<line class="node-detail-divider" x1="721.0" y1="142.0" x2="843.0" y2="142.0" />
|
||||
<text class="node-detail" x="723.0" y="159.0">Host Userspace</text>
|
||||
</g>
|
||||
<g id="node-linux-bridge">
|
||||
<rect class="node-shape kind-network emphasis-normal role-service" data-evidence="5672-5673,5712-5712" x="300.5" y="387.0" width="150.0" height="74.0" rx="7" />
|
||||
<text class="node-label" x="375.5" y="414.0">Linux Bridge /</text>
|
||||
<text class="node-label" x="375.5" y="432.0">Routing / NAT</text>
|
||||
<rect class="node-shape kind-network emphasis-normal role-service" data-evidence="5685-5686,5725-5725" x="707.0" y="237.0" width="150.0" height="74.0" rx="7" />
|
||||
<text class="node-label" x="782.0" y="264.0">Linux Bridge /</text>
|
||||
<text class="node-label" x="782.0" y="282.0">Routing / NAT</text>
|
||||
</g>
|
||||
<g id="node-virtio-net-device-model">
|
||||
<rect class="node-shape kind-service emphasis-primary role-service" data-evidence="5666-5666,5695-5700" x="70.0" y="557.0" width="174.0" height="142.0" rx="7" />
|
||||
<text class="node-label" x="157.0" y="585.0">virtio-net Device</text>
|
||||
<text class="node-label" x="157.0" y="603.0">Model</text>
|
||||
<line class="node-detail-divider" x1="84.0" y1="624.0" x2="230.0" y2="624.0" />
|
||||
<text class="node-detail" x="86.0" y="641.0">virtual NIC 생성</text>
|
||||
<text class="node-detail" x="86.0" y="657.0">feature negotiation</text>
|
||||
<text class="node-detail" x="86.0" y="673.0">virtqueue 설정</text>
|
||||
<text class="node-detail" x="86.0" y="689.0">vhost-net backend 설정</text>
|
||||
<rect class="node-shape kind-service emphasis-primary role-service" data-evidence="5679-5679,5708-5713" x="1017.0" y="60.0" width="174.0" height="142.0" rx="7" />
|
||||
<text class="node-label" x="1104.0" y="88.0">virtio-net Device</text>
|
||||
<text class="node-label" x="1104.0" y="106.0">Model</text>
|
||||
<line class="node-detail-divider" x1="1031.0" y1="127.0" x2="1177.0" y2="127.0" />
|
||||
<text class="node-detail" x="1033.0" y="144.0">virtual NIC 생성</text>
|
||||
<text class="node-detail" x="1033.0" y="160.0">feature negotiation</text>
|
||||
<text class="node-detail" x="1033.0" y="176.0">virtqueue 설정</text>
|
||||
<text class="node-detail" x="1033.0" y="192.0">vhost-net backend 설정</text>
|
||||
</g>
|
||||
<g id="node-tap">
|
||||
<rect class="node-shape kind-network emphasis-normal role-service" data-evidence="5671-5671,5714-5714" x="304.0" y="592.5" width="167.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="387.5" y="619.5">TAP</text>
|
||||
<line class="node-detail-divider" x1="318.0" y1="640.5" x2="457.0" y2="640.5" />
|
||||
<text class="node-detail" x="320.0" y="657.5">Host-side interface</text>
|
||||
<rect class="node-shape kind-network emphasis-normal role-service" data-evidence="5684-5684,5727-5727" x="1020.5" y="274.0" width="167.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="1104.0" y="301.0">TAP</text>
|
||||
<line class="node-detail-divider" x1="1034.5" y1="322.0" x2="1173.5" y2="322.0" />
|
||||
<text class="node-detail" x="1036.5" y="339.0">Host-side interface</text>
|
||||
</g>
|
||||
<g id="node-qemu-virtio-backend">
|
||||
<rect class="node-shape kind-process emphasis-normal role-service" data-evidence="5668-5668,5742-5742" x="82.0" y="795.0" width="167.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="165.5" y="822.0">QEMU virtio backend</text>
|
||||
<line class="node-detail-divider" x1="96.0" y1="843.0" x2="235.0" y2="843.0" />
|
||||
<text class="node-detail" x="98.0" y="860.0">QEMU Userspace</text>
|
||||
<rect class="node-shape kind-process emphasis-normal role-service" data-evidence="5681-5681,5755-5755" x="1351.0" y="95.5" width="167.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="1434.5" y="122.5">QEMU virtio backend</text>
|
||||
<line class="node-detail-divider" x1="1365.0" y1="143.5" x2="1504.0" y2="143.5" />
|
||||
<text class="node-detail" x="1367.0" y="160.5">QEMU Userspace</text>
|
||||
</g>
|
||||
<g id="node-vhost-net">
|
||||
<rect class="node-shape kind-kernel emphasis-normal role-service" data-evidence="5669-5669,5716-5716" x="309.0" y="795.0" width="150.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="384.0" y="822.0">vhost-net</text>
|
||||
<line class="node-detail-divider" x1="323.0" y1="843.0" x2="445.0" y2="843.0" />
|
||||
<text class="node-detail" x="325.0" y="860.0">Host Kernel</text>
|
||||
<rect class="node-shape kind-kernel emphasis-normal role-service" data-evidence="5682-5682,5729-5729" x="1359.5" y="238.5" width="150.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="1434.5" y="265.5">vhost-net</text>
|
||||
<line class="node-detail-divider" x1="1373.5" y1="286.5" x2="1495.5" y2="286.5" />
|
||||
<text class="node-detail" x="1375.5" y="303.5">Host Kernel</text>
|
||||
</g>
|
||||
<g id="node-virtqueue">
|
||||
<rect class="node-shape kind-queue emphasis-normal role-queue" data-evidence="5667-5667,5718-5718" x="195.5" y="962.0" width="150.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="270.5" y="989.0">virtqueue</text>
|
||||
<line class="node-detail-divider" x1="209.5" y1="1010.0" x2="331.5" y2="1010.0" />
|
||||
<text class="node-detail" x="211.5" y="1027.0">shared queue</text>
|
||||
<rect class="node-shape kind-queue emphasis-normal role-queue" data-evidence="5680-5680,5731-5731" x="1678.0" y="167.0" width="150.0" height="71.0" rx="7" />
|
||||
<text class="node-label" x="1753.0" y="194.0">virtqueue</text>
|
||||
<line class="node-detail-divider" x1="1692.0" y1="215.0" x2="1814.0" y2="215.0" />
|
||||
<text class="node-detail" x="1694.0" y="232.0">shared queue</text>
|
||||
</g>
|
||||
<g id="node-guest">
|
||||
<rect class="node-shape kind-service emphasis-normal role-sink" data-evidence="5664-5665,5720-5726" x="162.5" y="1129.0" width="216.0" height="122.0" rx="7" />
|
||||
<text class="node-label" x="270.5" y="1156.0">Guest</text>
|
||||
<line class="node-detail-divider" x1="176.5" y1="1177.0" x2="364.5" y2="1177.0" />
|
||||
<text class="node-detail" x="178.5" y="1194.0">virtio-net Frontend Driver</text>
|
||||
<text class="node-detail" x="178.5" y="1210.0">Guest TCP/IP Stack</text>
|
||||
<text class="node-detail" x="178.5" y="1226.0">Socket</text>
|
||||
<text class="node-detail" x="178.5" y="1242.0">Keycloak</text>
|
||||
<rect class="node-shape kind-service emphasis-normal role-sink" data-evidence="5677-5678,5733-5739" x="1988.0" y="141.5" width="216.0" height="122.0" rx="7" />
|
||||
<text class="node-label" x="2096.0" y="168.5">Guest</text>
|
||||
<line class="node-detail-divider" x1="2002.0" y1="189.5" x2="2190.0" y2="189.5" />
|
||||
<text class="node-detail" x="2004.0" y="206.5">virtio-net Frontend Driver</text>
|
||||
<text class="node-detail" x="2004.0" y="222.5">Guest TCP/IP Stack</text>
|
||||
<text class="node-detail" x="2004.0" y="238.5">Socket</text>
|
||||
<text class="node-detail" x="2004.0" y="254.5">Keycloak</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Reference in New Issue
Block a user