dpdk vhost应用
dpdk 目录下有examples/vhost 测试使用vhost-user 的例子,相当与网卡直通到虚拟机网卡
[root@HP14QY2 build]# ./vhost-switch
EAL: Detected 112 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: No free hugepages reported in hugepages-2048kB
EAL: No free hugepages reported in hugepages-2048kB
EAL: No free hugepages reported in hugepages-2048kB
EAL: No free hugepages reported in hugepages-1048576kB
EAL: FATAL: Cannot get hugepage information.
EAL: Cannot get hugepage information.
EAL: Error - exiting with code: 1
Cause: Error with EAL initialization
[root@HP14QY2 build]# pwd
/data/dpdk-stable-18.11.2/examples/vhost/build
先启用 gdb ./vhost-switch
(gdb) set args -l 0-3 -n 4 --socket-mem 1024 -- --socket-file /tmp/sock0 --client -p 0x1
(gdb) r
创建 共享内存通道 /tmp/sock0
启用虚拟机 xml 配置添加
-chardev socket,id=char1,path=/tmp/sock0,server
-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce
-device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1
启动虚拟机
[root@HP14QY2 ~]# vim runqemu.sh
#!/bin/bash
qemu="/usr/local/qemu-4.0.0/bin/qemu-system-x86_64"
USER_SOCK="/tmp/sock0"
MPATH="/dev/hugepages"
NPAGE=4096
MEMSZ=2048
cat /proc/mounts | grep huge>/dev/null
if [ $? -ne 0 ]; then
[-e ${MPATH} ] || mkdir ${MPATH}
sudomount -t hugetlbfs none ${MPATH}
fi
# assuming 2MB page
num_huge_page=`cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages`
if [ ${num_huge_page} -ne ${NPAGE} ];then
bash -c "echo ${NPAGE} > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages"
fi
num_huge_page=`cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages`
#if [ ${num_huge_page} -ne ${NPAGE} ];then
# echo"cannot run: only $num_huge_page hugepages reserved"
# exit1
#fi
sudo ${qemu} -enable-kvm -cpu host -m ${MEMSZ}M \
-object memory-backend-file,id=hugemem,size=${MEMSZ}M,mem-path=${MPATH},share=on \
-mem-prealloc -smp 2 -numa node,memdev=hugemem \
-chardev socket,id=char1,path=${USER_SOCK},server \
-netdev vhost-user,id=user0,chardev=char1 \
-device virtio-net-pci,id=net0,netdev=user0,mac=52:54:00:00:00:14 \
-drive file=/data/modecentos7.qcow2
[root@HP14QY2 ~]# ./runqemu.sh
qemu-system-x86_64: -chardev socket,id=char1,path=/tmp/sock0,server: info: QEMU waiting for connection on: disconnected:unix:/tmp/sock0,server
VNC server running on ::1:5900
学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂
更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,久学习,或点击这里加qun免费
领取,关注我持续更新哦! !
启动 vhost_swittch
[root@HP14QY2 vhost]# ./build/vhost-switch -l 0-3 -n 4 --socket-mem 1024 -- --socket-file /tmp/sock0 --client -p 0x1
EAL: Detected 112 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
VHOST_PORT:
Specified port number(1) exceeds total system port number(0)
VHOST_DATA: Procesing on Core 1 started
VHOST_DATA: Procesing on Core 2 started
VHOST_DATA: Procesing on Core 3 started
VHOST_CONFIG: vhost-user client: socket created, fd: 534
VHOST_CONFIG: failed to connect to /tmp/sock0: Connection refused
VHOST_CONFIG: /tmp/sock0: reconnecting...
VHOST_CONFIG: /tmp/sock0: connected
VHOST_CONFIG: new device, handle is 0
VHOST_CONFIG: recvmsg failed
VHOST_CONFIG: vhost peer closed
VHOST_CONFIG: vhost-user client: socket created, fd: 534
VHOST_CONFIG: failed to connect to /tmp/sock0: Connection refused
VHOST_CONFIG: /tmp/sock0: reconnecting...
VHOST_CONFIG: /tmp/sock0: connected
VHOST_CONFIG: new device, handle is 0
VHOST_CONFIG: recvmsg failed
VHOST_CONFIG: vhost peer closed
VHOST_CONFIG: vhost-user client: socket created, fd: 534
VHOST_CONFIG: failed to connect to /tmp/sock0: Connection refused
VHOST_CONFIG: /tmp/sock0: reconnecting...
VHOST_CONFIG: /tmp/sock0: connected
VHOST_CONFIG: new device, handle is 0
VHOST_CONFIG: read message VHOST_USER_GET_FEATURES
VHOST_CONFIG: read message VHOST_USER_GET_PROTOCOL_FEATURES
VHOST_CONFIG: read message VHOST_USER_SET_PROTOCOL_FEATURES
VHOST_CONFIG: read message VHOST_USER_GET_QUEUE_NUM
VHOST_CONFIG: read message VHOST_USER_SET_SLAVE_REQ_FD
VHOST_CONFIG: read message VHOST_USER_SET_OWNER
VHOST_CONFIG: read message VHOST_USER_GET_FEATURES
VHOST_CONFIG: read message VHOST_USER_SET_VRING_CALL
VHOST_CONFIG: vring call idx:0 file:538
VHOST_CONFIG: read message VHOST_USER_SET_VRING_CALL
VHOST_CONFIG: vring call idx:1 file:539
VHOST_CONFIG: read message VHOST_USER_SET_VRING_ENABLE
VHOST_CONFIG: set queue enable: 1 to qp idx: 0
VHOST_CONFIG: read message VHOST_USER_SET_VRING_ENABLE
VHOST_CONFIG: set queue enable: 1 to qp idx: 1
VHOST_CONFIG: read message VHOST_USER_SET_VRING_ENABLE
VHOST_CONFIG: set queue enable: 1 to qp idx: 0
VHOST_CONFIG: read message VHOST_USER_SET_VRING_ENABLE
VHOST_CONFIG: set queue enable: 1 to qp idx: 1
VHOST_CONFIG: read message VHOST_USER_SET_FEATURES
VHOST_CONFIG: read message VHOST_USER_SET_MEM_TABLE
VHOST_CONFIG: guest memory region 0, size: 0x80000000
guest physical addr: 0x0
guest virtual addr: 0x7f2496200000
host virtual addr: 0x7f8008000000
mmap addr : 0x7f8008000000
mmap size : 0x80000000
mmap align: 0x200000
mmap off : 0x0
VHOST_CONFIG: read message VHOST_USER_SET_VRING_NUM
VHOST_CONFIG: read message VHOST_USER_SET_VRING_BASE
VHOST_CONFIG: read message VHOST_USER_SET_VRING_ADDR
VHOST_CONFIG: read message VHOST_USER_SET_VRING_KICK
VHOST_CONFIG: vring kick idx:0 file:541
VHOST_CONFIG: read message VHOST_USER_SET_VRING_CALL
VHOST_CONFIG: vring call idx:0 file:542
VHOST_CONFIG: read message VHOST_USER_SET_VRING_NUM
VHOST_CONFIG: read message VHOST_USER_SET_VRING_BASE
VHOST_CONFIG: read message VHOST_USER_SET_VRING_ADDR
VHOST_CONFIG: read message VHOST_USER_SET_VRING_KICK
VHOST_CONFIG: vring kick idx:1 file:538
VHOST_CONFIG: virtio is now ready for processing.
VHOST_DATA: (0) device has been added to data core 0
VHOST_CONFIG: read message VHOST_USER_SET_VRING_CALL
VHOST_CONFIG: vring call idx:1 file:543
VHOST_CONFIG: read message VHOST_USER_SET_VRING_ENABLE
VHOST_CONFIG: set queue enable: 1 to qp idx: 0
VHOST_CONFIG: read message VHOST_USER_SET_VRING_ENABLE
VHOST_CONFIG: set queue enable: 1 to qp idx: 1