概述
系统:ubuntu14.04.1
系统:centos7
内核:4.4.0
qemu : >=2.7
Install DPDK
1. Download DPDK
cd /usr/src/
wget http://fast.dpdk.org/rel/dpdk-16.07.2.tar.xz
tar xf dpdk-16.07.2.tar.xz
export DPDK_DIR=/usr/src/dpdk-stable-16.07.2
cd $DPDK_DIR
2. Configure and Install DPDK
注意:以下有些操作DPDK提供了工具供使用者快捷配置,在dpdk/tools/dpdk-setup.sh
export DPDK_TARGET=x86_64-native-linuxapp-gcc
export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET
make -j8 install T=$DPDK_TARGET DESTDIR=install
Install OVS
1. Download OVS
cd /usr/src
wget http://openvswitch.org/releases/openvswitch-2.6.6.tar.gz
tar -zxvf openvswitch-2.6.6.tar.gz
export OVS_DIR=/usr/src/openvswitch-2.6.6
2. Install OVS dependencies
ubuntu
sudo apt-get update
sudo apt-get install build-essential libssl-dev linux-headers-$(uname -r) graphviz autoconf automake bzip2 debhelper dh-autoreconf libssl-dev libtool openssl procps python-all python-qt4 python-twisted-conch python-zopeinterface python-six dkms module-assistant ipsec-tools racoon libc6-dev module-init-tools netbase python-argparse uuid-runtime automake openssl libcap-ng-dev python-pip gcc
sudo pip install six
参考链接:https://www.jianshu.com/p/107bf045451b
centos
yum -y install make gcc openssl-devel autoconf automake rpm-build redhat-rpm-config python-devel openssl-devel kernel-devel kernel-debug-devel libtool wget
3. Configure and Install OVS
cd $OVS_DIR && ./boot.sh && ./configure --with-dpdk=$DPDK_BUILD
make -j8 install
注意:建议将所有环境变量保存到/etc/profile中,这样重启之后依旧可以使用,如
vi /etc/profile
export DPDK_DIR=/usr/src/dpdk-stable-16.07.2
export DPDK_TARGET=x86_64-native-linuxapp-gcc
export DPDK_BUILD=/usr/src/dpdk-stable-16.07.2/x86_64-native-linuxapp-gcc
export OVS_DIR=/usr/src/openvswitch-2.6.6
export RTE_SDK=$DPDK_DIR
export RTE_TARGET=$DPDK_TARGET
export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
source /etc/profile
Setup OVS with DPDK datapath
1. Setup Hugepages
echo 'vm.nr_hugepages=2048' > /etc/sysctl.d/hugepages.conf
执行sysctl -p命令以启用hugepages参数。
sysctl -p
验证配置
cat /proc/meminfo | grep Huge
Mount hugepages
mkdir -p /dev/hugepages
mount -t hugetlbfs none /dev/hugepages
大页内存有时不会自动释放,需要手动释放,杀死使用大页的进程后(这里是ovs和qemu的相关进程),卸载大页再挂载
umount /dev/hugepages
mount -t hugetlbfs none /dev/hugepages
注意:有可能出现大页内存不够的情况,根据系统设置合适的大页内存大小,需要留够足够的内存给系统其他软件使用。
参考链接:https://www.cnblogs.com/brucekun/p/9469209.html
2. Setup DPDK devices using VFIO
要求内核版本>=3.6.0
uname -r
主板支持VT-x、VT-d
dmesg | grep -e DMAR -e IOMMU
内核支持VT-x、VT-d
cat /proc/cmdline | grep iommu=pt
cat /proc/cmdline | grep intel_iommu=on
如果没有显示,需要进行如下配置:
vi /etc/default/grub
ubuntu
添加配置信息:添加iommu=pt intel_iommu=on到文件中的GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"行
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"//原文件的配置信息
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=pt intel_iommu=on"//添加配置信息
更新配置信息并重启
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo reboot
centos
添加配置信息:添加iommu=pt intel_iommu=on到文件中的GRUB_CMDLINE_LINUX="quiet splash"行
GRUB_CMDLINE_LINUX="quiet splash"//原文件的配置信息
GRUB_CMDLINE_LINUX="quiet splash iommu=pt intel_iommu=on"//添加配置信息
更新配置信息并重启
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
加载vfio模块
modprobe vfio-pci
sudo /usr/bin/chmod a+x /dev/vfio
sudo /usr/bin/chmod 0666 /dev/vfio/*
$DPDK_DIR/tools/dpdk-devbind.py --bind=vfio-pci eth1
$DPDK_DIR/tools/dpdk-devbind.py --status
如果eth1是up的,绑定eth1会失败,需要
ifconfig eth1 down
此时如果你的主机只有一个网卡则就会断网了,使用ssh需要注意。
注意:vfio模块每次重启就消失了,所以一旦重启记得重新执行加载vfio操作
参考链接:https://www.cnblogs.com/vancasola/p/9378970.html
3. Setup OVS
创建DB
mkdir -p /usr/local/etc/openvswitch
mkdir -p /usr/local/var/run/openvswitch
rm /usr/local/etc/openvswitch/conf.db
ovsdb-tool create /usr/local/etc/openvswitch/conf.db
/usr/local/share/openvswitch/vswitch.ovsschema
启动ovsdb-server
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock
--remote=db:Open_vSwitch,Open_vSwitch,manager_options
--pidfile --detach --log-file
初始化DB
ovs-vsctl --no-wait init
启动vswitchd
export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem=2048
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
ovs-vswitchd unix:$DB_SOCK --pidfile --detach --log-file
注意:日志文件的目录就在/usr/local/var/log/openvswitch里
创建bridge和dpdk设备
ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk
配置br0地址
当eth0从内核驱动卸载之后,被dpdk0接管,eth0的ip也就消失了,此时我们可以将eth0的ip地址绑定到br0上
ifconfig br0 10.10.27.165/24 up
再配置一下网关,即可连接外网
ip route add default via 10.10.26.1 dev br0
dpdk0就是在网卡上轮询的设备,我们再创建一个vhost-user设备,供vm使用
ovs-vsctl add-port br0 vhost-client-1 -- set Interface vhost-client-1 type=dpdkvhostuserclient options:vhost-server-path=/home/bob/openvswitch-2.6.6/vhost-client-1
ovs-vsctl add-port br0 vhost-client-2 -- set Interface vhost-client-2 type=dpdkvhostuserclient options:vhost-server-path=/home/bob/openvswitch-2.6.6/vhost-client-2
此时我们查看下
不配置流表,使用OVS默认即可。
Setup the Guest
OVS提供了两种vhost user端口:
- vhost-user (dpdkvhostuser ports)
- vhost-user-client (dpdkvhostuserclient ports)
第一种是将ovs看成服务端,vm看成客户端,但是这种情况如果ovs崩溃了,则vm也无法正常运行,故已经废弃。我们采用第二种方法,将ovs看成客户端,vm看成服务端。要求:QEMU version >= 2.7
先提前将虚拟机安装好
qemu-img create -f qcow2 /home/bob/images/ubuntu1.qcow2 20G
qemu-img create -f qcow2 /home/bob/images/ubuntu2.qcow2 20G
安装虚拟机系统
qemu-system-x86_64 -m 512M -enable-kvm -cpu host /home/bob/images/ubuntu1.qcow2 -cdrom /home/bob/isoes/ubuntu-12.04-server-amd64.iso
qemu-system-x86_64 -m 512M -enable-kvm -cpu host /home/bob/images/ubuntu2.qcow2 -cdrom /home/bob/isoes/ubuntu-12.04-server-amd64.iso
然后再将虚拟机挂载到vhost-user-client进行通信
qemu-system-x86_64 -name u1 -cpu host -enable-kvm -m 512M -object memory-backend-file,id=mem,size=512M,mem-path=/dev/hugepages,share=on -numa node,memdev=mem -mem-prealloc -smp sockets=1,cores=2 -drive file=/home/bob/images/ubuntu1.qcow2 -chardev socket,id=char1,path=/home/bob/openvswitch-2.6.6/vhost-client-1,server -netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce -device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1,mrg_rxbuf=off -vnc :0
qemu-system-x86_64 -name u2 -cpu host -enable-kvm -m 512M -object memory-backend-file,id=mem,size=512M,mem-path=/dev/hugepages,share=on -numa node,memdev=mem -mem-prealloc -smp sockets=1,cores=2 -drive file=/home/bob/images/ubuntu2.qcow2 -chardev socket,id=char2,path=/home/bob/openvswitch-2.6.6/vhost-client-2,server -netdev type=vhost-user,id=mynet2,chardev=char2,vhostforce -device virtio-net-pci,mac=00:00:00:00:00:02,netdev=mynet2,mrg_rxbuf=off -vnc :1
通过ubuntu上remmina remote desktop client软件打开即可正常运行虚拟机
Uninstall the DPDK
只需要将$DPDK_DIR下的x86_64-native-linuxapp-gcc删除,再重新安装即可
rm -rf /usr/src/dpdk-stable-16.07.2/x86_64-native-linuxapp-gcc
删除之后重新安装DPDK和OVS即可使用
Uninstall the OVS
cd $OVS_DIR && make uninstall && make distclean
最后
以上就是风中大叔为你收集整理的OVS DPDK vhost-user搭建全过程(四十四)Install DPDKInstall OVSSetup OVS with DPDK datapathSetup the GuestUninstall the DPDKUninstall the OVS的全部内容,希望文章能够帮你解决OVS DPDK vhost-user搭建全过程(四十四)Install DPDKInstall OVSSetup OVS with DPDK datapathSetup the GuestUninstall the DPDKUninstall the OVS所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复