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

4.2 KiB
Raw Blame History

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: L5675L5675, L5700L5702.
  • libvirt (service): VM lifecycle 과 NIC/network configuration 을 관리한다. Evidence: L5676L5676, L5704L5704.
  • QEMU (process): 실제로 실행되는 프로세스. 이 안에 virtio-net device model 이 있다. Evidence: L5679L5679, L5706L5706.
  • virtio-net Device Model (service): control/setup path 가 닿는 자리. 장치를 만들고 backend 를 연결한다. Evidence: L5679L5679, L5708L5713.
  • Physical NIC (hardware): 밖에서 온 packet 이 처음 닿는 하드웨어. Evidence: L5719L5721.
  • Physical NIC Driver (driver): 그 하드웨어를 제어하는 Host kernel driver. Evidence: L5687L5687, L5723L5723.
  • Linux Bridge / Routing / NAT (network): L2 software switch 와 L3 routing, 주소 변환이 놓이는 자리. Evidence: L5685L5686, L5725L5725.
  • TAP (network): VM 의 Ethernet frame 과 Host Linux networking 을 잇는 접점. Evidence: L5684L5684, L5727L5727.
  • vhost-net (kernel): 반복되는 packet datapath 를 Host kernel 에서 처리하는 backend. Evidence: L5682L5682, L5729L5729.
  • QEMU virtio backend (process): vhost-net 을 쓰지 않을 때 datapath backend 를 맡는 쪽. Evidence: L5681L5681, L5755L5755.
  • virtqueue (queue): Guest 와 Host backend 가 I/O buffer 를 주고받는 descriptor 기반 공유 큐. Evidence: L5680L5680, L5731L5731.
  • Guest (service): packet 이 올라가 애플리케이션 socket 에 닿는 쪽. Evidence: L5677L5678, L5733L5739.

Relationships

  • Linux Bridge / Routing / NAT → TAP: Ethernet Frame. Evidence: L5684L5684, L5725L5727.
  • Physical NIC Driver → Linux Bridge / Routing / NAT: L2 forwarding. Evidence: L5685L5685, L5723L5725.
  • libvirt → QEMU: NIC config. Evidence: L5676L5676, L5704L5706.
  • Physical NIC → Physical NIC Driver: Ethernet Frame. Evidence: L5684L5684, L5721L5723.
  • QEMU virtio backend → virtqueue: Data Path. Evidence: L5742L5742, L5755L5757.
  • QEMU → virtio-net Device Model: QEMU process. Evidence: L5679L5679, L5706L5708.
  • virtio-net Device Model → QEMU virtio backend: control. Evidence: L5681L5681, L5713L5713.
  • virtio-net Device Model → vhost-net: vhost-net backend 설정. Evidence: L5713L5713, L5729L5729.
  • TAP → QEMU virtio backend: data. Evidence: L5742L5742, L5753L5755.
  • TAP → vhost-net: vhost-net 사용. Evidence: L5716L5716, L5727L5729.
  • vhost-net → virtqueue: Data Path. Evidence: L5716L5716, L5729L5731.
  • virsh → libvirt: Control / Setup. Evidence: L5675L5676, L5697L5704.
  • virtqueue → Guest: frontend. Evidence: L5677L5677, L5731L5739.