***DPDK datapath的OVS的安装与实验环境配置
首先肯定是DPDK的安装
0:安装必要的工具
make
gcc
libssl
libcap-ng0
libtool
autoconf
python 2.7
python module six(可用PIP安装)
1:设置hugepages,host最好有4G以上的内存可用,
共搞1024个hugepage,每个page 2M,所以光hugepages就占用2G内存
$ grep Huge /proc/meminfo
$ echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
$ mkdir /mnt/huge
$ mount -t hugetlbfs nodev /mnt/huge
2:编译DPDK,在DPDK源代码目录中
设置环境变量
DPDK_DIR = "DPDK源代码目录"
$ export DPDK_TARGET=x86_64-native-linuxapp-gcc
$ export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET
编译
$ make install T=$DPDK_TARGET DESTDIR=install
3:安装OVS,在OVS源代码目录中
3.1:配置configure
$ ./boot.sh
$ ./configure --with-dpdk=$DPDK_BUILD
3.2:编译OVS
$ make
3.3:安装OVS
$ make install
3.4:创建OVSDB schema
$ mkdir -p /usr/local/etc/openvswitch
$ ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
3.5:启动OVSDB
$ mkdir -p /usr/local/var/run/openvswitch
$ ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--private-key=db:Open_vSwitch,SSL,private_key \
--certificate=db:Open_vSwitch,SSL,certificate \
--bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
--pidfile --detach --log-file=/root/log/ovsdb-server.log
4:挂载兼容的UIO驱动模块
$ modprobe uio_pci_generic
或
$ modprobe vfio-pci
$ chmod a+x /dev/vfio
$ chmod 0666 /dev/vfio/*
5:把网卡绑定到兼容的UIO驱动上
6:启动vswitchd
$ export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
$ ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
$ ovs-vswitchd unix:$DB_SOCK --pidfile --detach --log-file=/root/log/ovs-vswitchd.log
7:创建datapath为netdev类型的bridge
$ ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
8:测试:添加dpdk类型的port,
$ ovs-vsctl add-port br0 dpdk0 \
-- set Interface dpdk0 type=dpdk options:dpdk-devargs=00:09.0
接下来就是实验环境了
------------------------------[host 1]---------------------------------------
| |
| (br-int datapath_type=netdev) |
| [vm0]---------[port:vm0 type=dpdkvhostuser] |
| [port:vxlan0 type=vxlan remote_ip=10.0.0.2] |
| |
| |
| (br-phy datapath_type=netdev other_config:hwaddr=aa:aa:aa:aa:aa:aa) |
| [port:dpdk0 type=dpdk options:dpdk-devargs= NIC] |
| |
| |
------------------------- [ NIC binding to DPDK]-----------------------------
|
|
|
|
[physical switch]
|
|
|
|
------------------------- [ NIC binding to DPDK]------------------------------
| |
| |
| [port:dpdk1 type=dpdk options:dpdk-devargs= NIC] |
| (br-phy datapath_type=netdev other_config:hwaddr=bb:bb:bb:bb:bb:bb) |
| |
| |
| [port:vxlan1 type=vxlan remote_ip=10.0.0.1] |
| [port:vm1 type=dpdkvhostuser]------------- [vm1] |
| (br-int datapath_type=netdev) |
| |
------------------------------[host 2]----------------------------------------
在host1与host2上安装好OVS+DPDK,然后执行如下的动作,两个host上执行的动作相同,以host1为例
1:创建br-int
$ ovs-vsctl --may-exist add-br br-int \
-- set Bridge br-int datapath_type=netdev \
-- br-set-external-id br-int bridge-id br-int \
-- set bridge br-int fail-mode=standalone
2:向br-int中添加dpdkvhostuser型port vm0/vm1
对于host1,如下:
$ ovs-vsctl add-port br-int vm0 \
-- set Interface vm0 type=dpdkvhostuser
对于host2,如下:
$ ovs-vsctl add-port br-int vm1 \
-- set Interface vm1 type=dpdkvhostuser
3:创建虚拟机,以virsh配合XML配置文件的形式创建虚拟机,XML文件如下:
4:在虚拟机内,配置IP
对于host1上的vm0
$ ip addr add 192.168.1.1/24
对于host2上的vm1
$ ip addr add 192.168.1.2/24
5:向br-int中添加vxlan tunnel
对于host1,如下:
$ ovs-vsctl add-port br-int vxlan0 \
-- set interface vxlan0 type=vxlan options:remote_ip=10.0.0.2
对于host2,如下:
$ ovs-vsctl add-port br-int vxlan0 \
-- set interface vxlan0 type=vxlan options:remote_ip=10.0.0.1
6:创建br-phy
对于host1,如下:
$ ovs-vsctl --may-exist add-br br-phy \
-- set Bridge br-phy datapath_type=netdev \
-- br-set-external-id br-phy bridge-id br-phy \
-- set bridge br-phy fail-mode=standalone \
other_config:hwaddr=aa:aa:aa:aa:aa:aa
对于host2,如下:
$ ovs-vsctl --may-exist add-br br-phy \
-- set Bridge br-phy datapath_type=netdev \
-- br-set-external-id br-phy bridge-id br-phy \
-- set bridge br-phy fail-mode=standalone \
other_config:hwaddr=bb:bb:bb:bb:bb:bb
7:将物理网卡绑到DPDK兼容的UIO驱动上
略
8:将物理网卡捅到br-phy上
对于host1,如下:
$ ovs-vsctl add-port br-phy dpdk0 \
-- set Interface dpdk0 type=dpdk options:dpdk-devargs=???????
对于host2,如下:
$ ovs-vsctl add-port br-phy dpdk1 \
-- set Interface dpdk0 type=dpdk options:dpdk-devargs=???????
9:配置br-phy
对于host1,如下:
$ ip addr add 10.0.0.1/24 dev br-phy
$ ip link set br-phy up
$ iptables -F
对于host2,如下:
$ ip addr add 10.0.0.2/24 dev br-phy
$ ip link set br-phy up
$ iptables -F
参考文档:
- 史上最全Windows版本搭建安装React Native环境配置
史上最全Windows版本搭建安装React Native环境配置 配置过React Native 环境的都知道,在Windows React Native环境配置有很多坑要跳,为了帮助新手快速无误的 ...
- 史上最详细Windows版本搭建安装React Native环境配置 转载,比官网的靠谱亲测可用
史上最详细Windows版本搭建安装React Native环境配置 2016/01/29 | React Native技术文章 | Sky丶清| 95条评论 | 33530 views ...
- Oracle 12cR1 RAC 在VMware Workstation上安装(上)—OS环境配置
Oracle 12cR1 RAC 在VMware Workstation上安装(上)-OS环境配置 1.1 整体规划部分 1.1.1 所需软件介绍 Oracle RAC不支持异构平台.在同一个集群 ...
- laravel5.8笔记一:安装与服务器环境配置
laravel版本:5.8 环境要求: PHP >= 7.1.3 OpenSSL PHP 扩展 PDO PHP 扩展 Mbstring PHP 扩展 Tokenizer PHP 扩展 XML P ...
- Ubuntu16.04安装后开发环境配置和常用软件安装
Ubuntu16.04安装后1.安装常用软件搜狗输入法+编辑器Atom+浏览器Chome+视频播放器vlc+图像编辑器GIMP Image Editor安装+视频录制软件RcordMyDesktop安 ...
- 第一站:CLion安装教程与环境配置
原文来自:http://www.sunmey.cn/thread-129-1-1.html 本人:找了很久才找到的CLion安装教程与环境配置,这里分享给大家~ 这里要说明的一点是CLion是要钱的, ...
- python中在ubuntu中安装虚拟环境及环境配置
python中在ubuntu中安装虚拟环境及环境配置 1.升级python包管理工具pip pip install --upgrade pip 备注:当你想升级一个包的时候 `pip install ...
- 视频+图文教程 | Java之安装JDK与环境配置
演示所用软件JDK 8与Eclipse(Java开发工具)软件下载链接: 链接:https://pan.baidu.com/s/1Vg9ulrQH8WlGRAE89Y02UA提取码:swwl 视频介绍 ...
- Fedora和Ubuntu下安装OpenGL开发环境配置
Fedora下OpenGl开发环境配置 开发OpenGL工程需要3个库文件和对应的头文件: libglut.so,libGLU.so,libGL.so, gl.h ,glu.h, glut.h 这些库 ...
随机推荐
- 第六章 Hibernate关联映射
第六章 hibernate关联映射一.本章知识点分为2部分:1.关联关系:单向多对一关联关系,双向一对多关联关系(含一对多关联关系),多对多关联关系2.延迟加载:类级别加载策略,一对多加载策略,多对一 ...
- 读书笔记 effective c++ Item 50 了解何时替换new和delete 是有意义的
1. 自定义new和delete的三个常见原因 我们先回顾一下基本原理.为什么人们一开始就想去替换编译器提供的operator new和operator delete版本?有三个最常见的原因: 为了检 ...
- STM32F4XX与STM32F0XX编程差别
//普通管脚初始化 /*****************************************************************************STM32F0***** ...
- 单Js 的重力游戏开发
最近在用看cocos的时候萌生的想法,单纯js实现重力原理.然后就做了一个这样的小游戏.姑且命名为<超级玛丽>! 因为之前有人要我做超级玛丽.哈哈哈哈哈哈!这也算完成任务了吧. 先说一下原 ...
- PHP获取随机数
<?php $FileID=date("Ymd-His") . '-' . rand(100,999); //$FileID为 20100903-132121-908 ...
- iOS APP打包分发给远程的手机测试
APP要打包给远程的朋友或客户测试,但又不是企业账号的情况下,我们只能根据手机的udid进行描述证书的配置,再打包分发给提供了udid的手机进行安装 一.如何得到udid? 手机连接到mac电脑,打开 ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 G - 免费馅饼
https://vjudge.net/contest/68966#problem/G 正解一: http://www.clanfei.com/2012/04/646.html #include< ...
- 蓝桥杯-马虎的算式-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- 微信小程序(兼容性问题)
兼容 小程序的功能不断的增加,但是旧版本的微信客户端并不支持新功能,所以在使用这些新能力的时候需要做兼容. 文档会在组件,API等页面描述中带上各个功能所支持的版本号. 可以通过 wx.getSyst ...
- 在Core环境下用WebRequest连接上远程的web Api 实现数据的简单CRUD(续)
这篇博客是上篇博客的续写,上篇博客用的是HttpClient取远程数据,用WebRequest提交,更新,删除数据.上篇本来想全文都用httpClient,可是当时无论如何也实现不了数据的提交,于是换 ...