# 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.