[ovs][dpdk] ovs-dpdk, dpdk port 大量丢包
gdb了ovs的代码,发现是 dpdk的imiss计数在不断的丢包。
看了ovs-openvswitchd的日志,重启时发现如下行:
--21T11::.427Z||timeval|WARN|Unreasonably long 22418ms poll interval (474ms user, 21612ms system)
--21T11::.427Z||timeval|WARN|faults: minor, major
--21T11::.427Z||timeval|WARN|disk: reads, writes
--21T11::.427Z||timeval|WARN|context switches: voluntary, involuntary
开启debug
[root@vrouter1 ~]# ovs-appctl vlog/set file:dbg
重装新版dpdk
[root@vrouter1 ovs-dpdk]# ls
dpdk-17.11..tar.xz dpdk-stable-17.11. openvswitch-2.9. openvswitch-2.9..tar.gz
1. 编译dpdk
[root@vrouter1 dpdk-stable-17.11.]# make config T=$RTE_TARGET O=$RTE_TARGET
Configuration done using x86_64-native-linuxapp-gcc
[root@vrouter1 dpdk-stable-17.11.]# cd x86_64-native-linuxapp-gcc/
[root@vrouter1 x86_64-native-linuxapp-gcc]# make
2. 编译ovs
[root@vrouter1 openvswitch-2.9.]# ./boot.sh
[root@vrouter1 openvswitch-2.9.]# ./configure --with-dpdk=$RTE_SDK/$RTE_TARGET
[root@vrouter1 openvswitch-2.9.]# make
[root@vrouter1 openvswitch-2.9.]# make install
3. 运行
[root@vrouter1 ovs-dpdk]# cat ovs.sh
export PATH=$PATH:/usr/local/share/openvswitch/scripts
export DB_SOCK=/usr/local/var/run/openvswitch/db.sock ovs-ctl --no-ovs-vswitchd start
#ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
#ovs-ctl --no-ovsdb-server --db-sock="$DB_SOCK" start
ovs-ctl --no-ovsdb-server start
[root@vrouter1 ovs-dpdk]#
4. 配置
[root@vrouter1 Datapath]# dpdk-devbind -b vfio-pci ::00.0
[root@vrouter1 ovs-dpdk]# ovs-vsctl add-br br-phy -- set bridge br-phy datapath_type=netdev
[root@vrouter1 ovs-dpdk]# ovs-vsctl add-port br-phy dpdk-p0 -- set Interface dpdk-p0 type=dpdk options:dpdk-devargs=::00.0
[root@vrouter1 ovs-dpdk]# ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
[root@vrouter1 ovs-dpdk]# ovs-vsctl add-port br0 vxlan0 -- set Interface vxlan0 type=vxlan options:remote_ip=10.0.0.163 options:local_ip=10.0.0.161 options:in_key=flow options:out_key=flow
#>ovs-appctl ovs/route/add 10.0.0.163/ br-phy
[root@vrouter1 ~]# ip a add 10.0.0.161/ dev br-phy
5. 绑定dpdk core
[root@vrouter1 ~]# ovs-vsctl set Interface dpdk-p0 options:n_rxq=
[root@vrouter1 ~]# ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x154
6. 不丢包了。
7. vhost user client
7.1 启动vhost iommu
[root@vrouter1 ~]# ovs-vsctl set Open_vSwitch . other_config:vhost-iommu-support=true
8 添加vhostuserclient网卡
[root@vrouter1 ~]# ovs-vsctl add-port br0 vhost0 -- set Interface vhost0 type=dpdkvhostuserclient options:vhost-server-path=/tmp/nlb_vm0.sock
[root@vrouter1 ~]# ovs-vsctl add-port br0 vhost1 -- set Interface vhost1 type=dpdkvhostuserclient options:vhost-server-path=/tmp/nlb_vm1.sock
9 加流表
[root@vrouter1 ~]# ovs-appctl dpif/show
netdev@ovs-netdev: hit: missed:
br-phy:
br-phy /: (tap)
dpdk-p0 /: (dpdk: configured_rx_queues=, configured_rxq_descriptors=, configured_tx_queues=, configured_txq_descriptors=, lsc_interrupt_mode=false, mtu=, requested_rx_queues=, requested_rxq_descriptors=, requested_tx_queues=, requested_txq_descriptors=, rx_csum_offload=true)
br0:
br0 /: (tap)
vhost0 /: (dpdkvhostuserclient: configured_rx_queues=, configured_tx_queues=, mtu=, requested_rx_queues=, requested_tx_queues=)
vhost1 /: (dpdkvhostuserclient: configured_rx_queues=, configured_tx_queues=, mtu=, requested_rx_queues=, requested_tx_queues=)
vxlan0 /: (vxlan: key=flow, local_ip=10.0.0.161, remote_ip=10.0.0.163)
[root@vrouter1 ~]# ovs-ofctl add-flow br0 "cookie=0x1111,table=0, priority=100, tun_id=200,dl_dst=00:00:00:11:22:41,nw_dst=192.168.77.161,actions=move:NXM_NX_TUN_ID[0..23]->NXM_NX_REG0[0..23],resubmit(,1)"
[root@vrouter1 ~]# ovs-ofctl add-flow br0 "cookie=0x1111,table=0, priority=100, tun_id=200,dl_dst=00:00:00:11:22:41,nw_dst=192.168.77.161,actions=move:NXM_NX_TUN_ID[0..23]->NXM_NX_REG0[0..23],resubmit(,1)"
10, 查看队列与core的mapping关系
[root@vrouter1 ~]# ovs-appctl dpif-netdev/pmd-rxq-show
pmd thread numa_id core_id :
isolated : false
port: dpdk-p0 queue-id: pmd usage: %
port: vhost1 queue-id: pmd usage: %
port: vhost1 queue-id: pmd usage: %
pmd thread numa_id core_id :
isolated : false
port: dpdk-p0 queue-id: pmd usage: %
port: vhost1 queue-id: pmd usage: %
pmd thread numa_id core_id :
isolated : false
port: dpdk-p0 queue-id: pmd usage: %
port: vhost0 queue-id: pmd usage: %
pmd thread numa_id core_id :
isolated : false
port: vhost0 queue-id: pmd usage: %
port: vhost0 queue-id: pmd usage: %
pmd thread numa_id core_id :
isolated : false
port: dpdk-p0 queue-id: pmd usage: %
port: vhost1 queue-id: pmd usage: %
port: vhost1 queue-id: pmd usage: %
pmd thread numa_id core_id :
isolated : false
port: vhost0 queue-id: pmd usage: %
port: vhost0 queue-id: pmd usage: %
总结:
丢包只要是丢在了内核,因为top的时候看绑定core的cpu占用,可以看见大约80%的占用是sys,20%是user
正常的情况是包都在dpdk用户态走,所有应该100%是user。
理解了路由,流表,vxlan的原理之后,可以逐个梳理,保证包不会被流转进内核,便可以消除丢包。
总之,原因就是由于流表路由的设置问题使数据包被转发入了内核。
[ovs][dpdk] ovs-dpdk, dpdk port 大量丢包的更多相关文章
- Setting DPDK+OVS+QEMU on CentOS
Environment Build Step: these packages are needed for building dpdk+ovs: yum install -y make gcc gli ...
- Netty_UDP丢包解决
程序背景 程序是Java编写,基于Netty框架写的客户端及服务端. 现象 客户端大数据量持续发UDP数据,作为UDP服务器出现了部分数据频繁丢失触发程序自身重传逻辑. 通过GC日志对比发现丢包的时间 ...
- 浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)
UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp的最大包长度是2^16-1的个 ...
- Linux UDP严重丢包问题的解决
测试系统在Linux上的性能发现丢包率极为严重,发210000条数据,丢包达110000之巨,丢包率超过50%.同等情形下Windows上测试,仅丢几条数据.形势严峻,必须解决.考虑可能是因为协议栈B ...
- 用ethtool 命令解决Linux 网卡丢包【转】
转自:https://blog.csdn.net/chengxuyuanyonghu/article/details/73739516 生产中有一台Linux设备并发比较大,droped包比较多,尤其 ...
- ping 丢包或不通时链路测试说明【转】
转自:https://help.aliyun.com/knowledge_detail/40573.html?spm=5176.2020520165.121.d157.4fe170291Qdp4l#W ...
- 一个RTSP/RTP over TCP 的丢包引起的问题
背景知识:可以查看https://www.cnblogs.com/lidabo/p/4483497.html RTSP/RTP over TCP TCP承载RTSP/RTP When you us ...
- FortiGate防火墙500D下PC至外网丢包
1.现状: 如图,防火墙堆叠,500D共4个出口方向,联通.电信.FQ.运维专线 2.现象: 到网关和防火墙上.下联口不丢包,到网联通和运维专线方向丢包4%左右,电信和FQ方向不丢包 3.分析 采用从 ...
- 针对UDP丢包问题,进行系统层面和程序层面调优
转自:https://blog.csdn.net/xingzheouc/article/details/49946191 1. UDP概念 用户数据报协议(英语:User Datagram Proto ...
随机推荐
- 跨控制器跳转view——RedirectToRoute和RedirectToAction
已知控制器AccountController.cs和HomeController.cs,如果从页面Account/Login直接跳转到Home/Index,可以利用RedirectToRoute和Re ...
- linux 常用命令1【转】
1.1. 关机 shutdown -h now 关闭系统(1) init 0 关闭系统(2) telinit 0 关闭系统(3) shutdown -h hours:minutes & 按预定 ...
- Java知多少(89)列表和组合框
有两种类型的菜单:下拉式菜单和弹出式菜单.本章只讨论下拉式菜单编程方法.菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的.菜单与JComboBox的相同之处是每次只可选择一个 ...
- numpy的介绍——总览
为什么有numpy这个库呢? 1. 准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针.这样为了保存一个简单的[ ...
- 错误:OSError: [Errno 1] Operation not permitted: 'lib/python/six-1.4.1-py2.7.egg-info'
解决办法: $ $ pip install mock --ignore-installed six --user 问题:安装mock时报错: (venv)➜ test git:(master) pip ...
- Scala学习笔记(六):本地函数、头等函数、占位符和部分应用函数
本地函数 可以在方法内定义方法,这种方法叫本地函数,本地函数可以直接访问父函数的参数 def parent(x: Int, y: Int): Unit ={ def child(y:Int) = y ...
- osx 10.11 一键制作U盘傻瓜工具最新版 无需任何命令
osx 10.11 最新版U盘制作工具 无需任何命令 纯傻瓜式 !!!只要把app下载下来放在应用程序 鼠标点点就可以做了... 下载地址:http://diskmakerx.com/do ...
- 【GIS】无人机影像数据关系换算(转)
----------------------------------------------------------------------------------------------- H=f× ...
- 关于rem适配的3种常用封装
在之前写了一篇关于rem适配的文章,但是没有给出具体的封装,那么今天这里给出常用的三种方法,分享出来供大家参考学习,下面话不多说了,来随着小编一起学习学习吧 一.rem1.js 第一种方法考虑了m端屏 ...
- [原]jenkins(六)---jenkins远程部署脚本
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/533 ...