• V
    tests/vhost-user-bridge: add vhost-user bridge application · 3595e2eb
    Victor Kaplansky 提交于
    The test existing in QEMU for vhost-user feature is good for
    testing the management protocol, but does not allow actual
    traffic. This patch proposes Vhost-User Bridge application, which
    can serve the QEMU community as a comprehensive test by running
    real internet traffic by means of vhost-user interface.
    
    Essentially the Vhost-User Bridge is a very basic vhost-user
    backend for QEMU. It runs as a standalone user-level process.
    For packet processing Vhost-User Bridge uses an additional QEMU
    instance with a backend configured by "-net socket" as a shared
    VLAN.  This way another QEMU virtual machine can effectively
    serve as a shared bus by means of UDP communication.
    
    For a more simple setup, the another QEMU instance running the
    SLiRP backend can be the same QEMU instance running vhost-user
    client.
    
    This Vhost-User Bridge implementation is very preliminary.  It is
    missing many features. I has been studying vhost-user protocol
    internals, so I've written vhost-user-bridge bit by bit as I
    progressed through the protocol.  Most probably its internal
    architecture will change significantly.
    
    To run Vhost-User Bridge application:
    
    1. Build vhost-user-bridge with a regular procedure. This will
    create a vhost-user-bridge executable under tests directory:
    
        $ configure; make tests/vhost-user-bridge
    
    2. Ensure the machine has hugepages enabled in kernel with
    command line like:
    
        default_hugepagesz=2M hugepagesz=2M hugepages=2048
    
    3. Run Vhost-User Bridge with:
    
        $ tests/vhost-user-bridge
    
    The above will run vhost-user server listening for connections
    on UNIX domain socket /tmp/vubr.sock, and will try to connect
    by UDP to VLAN bridge to localhost:5555, while listening on
    localhost:4444
    
    Run qemu with a virtio-net backed by vhost-user:
    
        $ qemu \
            -enable-kvm -m 512 -smp 2 \
            -object memory-backend-file,id=mem,size=512M,mem-path=/dev/hugepages,share=on \
            -numa node,memdev=mem -mem-prealloc \
            -chardev socket,id=char0,path=/tmp/vubr.sock \
            -netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \
            -device virtio-net-pci,netdev=mynet1 \
            -net none \
            -net socket,vlan=0,udp=localhost:4444,localaddr=localhost:5555 \
            -net user,vlan=0 \
            disk.img
    
    vhost-user-bridge was tested very lightly: it's able to bringup a
    linux on client VM with the virtio-net driver, and execute transmits
    and receives to the internet. I tested with "wget redhat.com",
    "dig redhat.com".
    
    PS. I've consulted DPDK's code for vhost-user during Vhost-User
    Bridge implementation.
    Signed-off-by: NVictor Kaplansky <victork@redhat.com>
    Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
    Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
    3595e2eb
Makefile 29.7 KB