44 lines
4.2 KiB
Markdown
44 lines
4.2 KiB
Markdown
# control/setup path 는 QEMU 를 지나고 data path 는 backend 에 따라 QEMU 를 지나기도 안 지나기도 한다
|
||
|
||
## Alternative text
|
||
|
||
위쪽 줄은 virsh, libvirt, QEMU, virtio-net Device Model 로 이어지는 control/setup path 이고 아래쪽 줄은 Physical NIC 에서 TAP 까지 이어지는 data path 다. 두 줄이 vhost-net 과 QEMU virtio backend 에서 만나 virtqueue 를 지나 Guest 로 모이는 구성도.
|
||
|
||
## Long 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 를 쓰고 있는지는 그림이 말하지 않는다.
|
||
|
||
## Elements and evidence
|
||
|
||
- **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: 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: L5684–L5684, L5725–L5727.
|
||
- **Physical NIC Driver → Linux Bridge /
|
||
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.
|