转载请注明出处,谢谢
a、安装方式
目前安装ovs-dpdk的方式有两种:
- meson安装dpdk,再使用make安装ovs-dpdk
2、使用meson ninja 安装dpdk请参考另一篇 meson ninja调试dpdk
b、安装ovs:
下载完对应dpdk版本的ovs进行解压;
进入ovs目录
./boot.sh 检查依赖是否完整,不完整先下载依赖
http://www.openvswitch.org/support/ovscon2020/#C1
intel已经支持ovs-dpdk 依赖meson编译的dpdk库:
make
make install 请检查确保安装到/usr/local ,否则请先执行 export DESTDIR=modprobe openvswitch 加载内核所需模块
c、配置ovs
进入主目录/home/dou 执行
export PATH=$PATH:/usr/local/share/openvswitch/scripts
export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
ovs-ctl --no-ovsdb-server --db-sock="$DB_SOCK" start
ovs-vsctl --no-wait set Open_vSwitch . \
other_config:dpdk-socket-mem="1024" 配置大页
d、验证
$ ovs-vsctl get Open_vSwitch . dpdk_initialized
true
$ ovs-vswitchd --version
ovs-vswitchd (Open vSwitch) 2.14.0
DPDK 19.11.2
e、创建用户态虚拟网桥
$ ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
f:添加port:
$ ovs-vsctl add-port br0 myportnameone -- set Interface myportnameone \
type=dpdk options:dpdk-devargs=0000:01:00.0
$ ovs-vsctl add-port br0 myportnametwo -- set Interface myportnametwo \
type=dpdk options:dpdk-devargs=0000:01:00.1
后续使用方法,请参考:https://docs.openvswitch.org/en/latest/howto/dpdk/
使用vhost user ports 请参考:
https://docs.openvswitch.org/en/latest/topics/dpdk/vhost-user/
出现问题
一、ovs-vsctl: unix:/usr/local/var/run/openvswitch/db.sock: database connection failed (No such file or directory)
ovs-vsctl exited with code 1
*** Error connecting to ovs-db with ovs-vsctl
Make sure that Open vSwitch is installed, that ovsdb-server is running, and that
"ovs-vsctl show" works correctly.
You may wish to try "service openvswitch-switch start"
最好添加开机运行脚本:
1、modprobe openvswitch
2、sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach
3、ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
4、ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem="512"
5、ovs-vsctl get Open_vSwitch . dpdk_initialized
二、ovsdb-server: I/O error: open: /usr/local/etc/openvswitch/conf.db failed (No such file or directory)
则先进入openvswitch目录,以sudo运行:
1、sudo mkdir -p /usr/local/etc/openvswitch
2、sudo ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
再运行之前的脚本
三、创建vhost
ovs-vsctl add-port br0 vhost-user-1 -- set Interface vhost-user-1 type=dpdkvhostuser
ovs-vsctl add-port br0 vhost-user-2 -- set Interface vhost-user-2 type=dpdkvhostuser
四、如果你希望vhost-user的套接口创建在/usr/local/var/run/openvswitch的子目录下,需要在ovsdb中执行此目录:
$ ovs-vsctl --no-wait set Open_vSwitch . other_config:vhost-sock-dir=subdir
默认在/usr/local/var/run/openvswitch/vhost-user-1
配置了子目录/usr/local/var/run/openvswitch/subdir/vhost-user-1
五、对于qemu创建
-chardev socket,id=char2,path=/usr/local/var/run/openvswitch/vhost-user-2
-netdev type=vhost-user,id=mynet2,chardev=char2,vhostforce
-device virtio-net-pci,mac=00:00:00:00:00:02,netdev=mynet2
此外,QEMU必须在hugetlbfs上分配VM的内存。vhost-user端口访问virtio-net设备的虚拟环和数据包缓冲区,其为在Hugetlbfs上映射的虚拟机的物理内存。开启vhost-user端口以映射虚拟机的内存到进程地址空间中,需将以下参数传递给qemu:
-object memory-backend-file,id=mem,size=3G,mem-path=/dev/hugepages,share=on
-numa node,memdev=mem -mem-prealloc
六、无法添加vhost-user-x bug ,建议删除目录下的/usr/local/var/run /openvswitch(/subdir)/vhost-user-x,然后重新添加即可添加成功。
建议每次关机前清理掉所有vhost-user-x 开机重新添加。
查看ovs统计:
ovs-ofctl dump-ports br0
查看dpdk 统计:
ovs-vsctl list interface vhost-user-1
设置ovs-dpdk cpumask:
ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=6