Files
document-haness/docs/virtualization/final/assets/diagrams/packet-control-and-data-paths/packet-control-and-data-paths.alt.md
T

44 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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: L5662L5662, L5687L5689.
- **libvirt** (service): VM lifecycle 과 NIC/network configuration 을 관리한다. Evidence: L5663L5663, L5691L5691.
- **QEMU** (process): 실제로 실행되는 프로세스. 이 안에 virtio-net device model 이 있다. Evidence: L5666L5666, L5693L5693.
- **virtio-net Device Model** (service): control/setup path 가 닿는 자리. 장치를 만들고 backend 를 연결한다. Evidence: L5666L5666, L5695L5700.
- **Physical NIC** (hardware): 밖에서 온 packet 이 처음 닿는 하드웨어. Evidence: L5706L5708.
- **Physical NIC Driver** (driver): 그 하드웨어를 제어하는 Host kernel driver. Evidence: L5674L5674, L5710L5710.
- **Linux Bridge /
Routing / NAT** (network): L2 software switch 와 L3 routing, 주소 변환이 놓이는 자리. Evidence: L5672L5673, L5712L5712.
- **TAP** (network): VM 의 Ethernet frame 과 Host Linux networking 을 잇는 접점. Evidence: L5671L5671, L5714L5714.
- **vhost-net** (kernel): 반복되는 packet datapath 를 Host kernel 에서 처리하는 backend. Evidence: L5669L5669, L5716L5716.
- **QEMU virtio backend** (process): vhost-net 을 쓰지 않을 때 datapath backend 를 맡는 쪽. Evidence: L5668L5668, L5742L5742.
- **virtqueue** (queue): Guest 와 Host backend 가 I/O buffer 를 주고받는 descriptor 기반 공유 큐. Evidence: L5667L5667, L5718L5718.
- **Guest** (service): packet 이 올라가 애플리케이션 socket 에 닿는 쪽. Evidence: L5664L5665, L5720L5726.
## Relationships
- **Linux Bridge /
Routing / NAT → TAP:** Ethernet Frame. Evidence: L5671L5671, L5712L5714.
- **Physical NIC Driver → Linux Bridge /
Routing / NAT:** L2 forwarding. Evidence: L5672L5672, L5710L5712.
- **libvirt → QEMU:** NIC/network configuration. Evidence: L5663L5663, L5691L5693.
- **Physical NIC → Physical NIC Driver:** Ethernet Frame. Evidence: L5671L5671, L5708L5710.
- **QEMU virtio backend → virtqueue:** Data Path. Evidence: L5729L5729, L5742L5744.
- **QEMU → virtio-net Device Model:** QEMU process. Evidence: L5666L5666, L5693L5695.
- **virtio-net Device Model → QEMU virtio backend:** control. Evidence: L5668L5668, L5700L5700.
- **virtio-net Device Model → vhost-net:** vhost-net backend 설정. Evidence: L5700L5700, L5716L5716.
- **TAP → QEMU virtio backend:** data. Evidence: L5729L5729, L5740L5742.
- **TAP → vhost-net:** vhost-net 사용. Evidence: L5703L5703, L5714L5716.
- **vhost-net → virtqueue:** Data Path. Evidence: L5703L5703, L5716L5718.
- **virsh → libvirt:** Control / Setup. Evidence: L5662L5663, L5684L5691.
- **virtqueue → Guest:** virtio-net Frontend Driver. Evidence: L5664L5664, L5718L5726.