系统: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 updatesudo 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 gccsudo 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-1ovs-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端口:

  1. vhost-user (dpdkvhostuser ports)
  2. 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.isoqemu-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 :0qemu-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搭建全过程(四十四)相关推荐

  1. Python编程基础:第四十四节 方法重写Method Overriding

    第四十四节 方法重写Method Overriding 前言 实践 前言 我们前面说了,子类继承于父类,可以调用父类的所有属性和方法.那么如果我们想在继承的过程中重新书写父类的某些方法,此时就用到了方 ...

  2. 四十四种Javascript技巧大全

    四十四种Javascript技巧大全 1.第一个给变量分配值时不要忘了var关键字. 分配值给未定义的变量将是该变量自动成为全局变量,应该避免全局变量. 2.使用 === 而不是 == 使用 == ( ...

  3. 四十四、深入Java 的序列化和反序列化

    @Author:Runsen @Date:2020/6/8 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  4. [系统安全] 四十四.APT系列(9)Metasploit技术之基础用法万字详解及防御机理

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  5. JavaScript学习(四十四)—in关键字的使用和for in循环遍历对象的属性

    JavaScript学习(四十四)-in关键字的使用和for in循环遍历对象的属性 一.in关键字的使用 作用:判断某个属性是否属于对象 格式:属性名称 in 对象名称 ; 返回值:如果返回的结果为 ...

  6. NeHe OpenGL教程 第四十四课:3D光晕

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  7. NeHe OpenGL第四十四课:3D光晕

    NeHe OpenGL第四十四课:3D光晕 3D 光晕 当镜头对准太阳的时候就会出现这种效果,模拟它非常的简单,一点数学和纹理贴图就够了.好好看看吧.   大家好,欢迎来到新的一课,在这一课中我们将扩 ...

  8. 【正点原子Linux连载】第四十四章 设备树下的LED驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  9. 【Visual C++】游戏开发笔记四十四 浅墨DirectX教程十二 网格模型和X文件使用面面观

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8586540 作者:毛星云(浅墨 ...

  10. 1977-2021 高考四十四年,哪一张照片是属于你的记忆(珍贵!)

    1977-2019 四十四年高考 一个国家命运的拐点 千百万个人生的转折 1977 四十四年     四十四图 1977年12月10日的高考, 是中国历史上唯一的一次冬季高考. 这一天,570多万从农 ...

最新文章

  1. 果断收藏!一张版图带你摸清全球10大自动驾驶联盟布局
  2. 【网络爬虫】BeautfulSoup爬百度百科(真の能看懂~!)
  3. Druid:数据库连接池实现技术
  4. 如何配置php的ip地址吗,如何手动配置IP地址及防火墙设置
  5. java过程调用语句_Java之流程控制语句
  6. 三十三、五大数据处理的R包
  7. 【数据结构与算法】循环队列和链队列的比较
  8. disabled运用;div,li元素禁用点击事件;防止a标签打开url;禁用click事件,删除onclick
  9. Maven学习总结(25)——Eclipse Maven Update 时JDK版本变更问题
  10. zedboard如何从PL端控制DDR读写(一)
  11. ionic + angular + cordova, 打造专属自己的App!
  12. Atitit onvif 协议截图 getSnapshotUri 使用java
  13. 大数据之路之数据上云解决方案(全量)
  14. oracle hcm cloud价格,Oracle HCM
  15. Linux基础-虚拟数据优化器VDO
  16. PS技巧三------五彩斑斓的黑色(滤镜---镜头光晕和波浪|||||混合选项---柔光)
  17. pcr台服服务器连接中断,公主连结台服入坑 pcr台服入坑初始指南
  18. SSH框架面试题(自己+别人的试题)
  19. 巴比特 | 元宇宙每日必读:未成年人打赏后要求退款,虚拟主播称自己是大冤种,怎么看待这个监管漏洞?...
  20. 2022年IT服务行业研究报告

热门文章

  1. 20行python代码的入门级小游戏-200行Python代码实现的2048小游戏
  2. php和python对比-PHP和Python性能比较:放弃PHP改用Python
  3. python怎么安装requests库-python怎么安装requests库
  4. python零基础电子书免费下载-零基础学Python
  5. 自学python能干些什么副业好-python可以作为副业赚钱嘛?
  6. python强大体现在哪些方面-python应用于哪些方面
  7. python类装饰器详解-Python装饰器详解
  8. python编程和c语言编程的区别-C语言 python Java 等主要流行编程语言优劣对比
  9. python测试开发自学教程-测试开发学习路线图
  10. 函数式编程语言python-用Python进行基础的函数式编程的教程