[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 ...
随机推荐
- 【spark 深入学习 03】Spark RDD的蛮荒世界
RDD真的是一个很晦涩的词汇,他就是伯克利大学的博士们在论文中提出的一个概念,很抽象,很难懂:但是这是spark的核心概念,因此有必要spark rdd的知识点,用最简单.浅显易懂的词汇描述.不想用学 ...
- 【Java】浅谈Java IO
注意 本文的代码,为了学习方便,简化代码复杂度,未考虑拆包.粘包等情况的处理.所以仅供学习使用,不能用于实际环境. 阻塞IO,BIO Java1.1发布的IO是BIO.阻塞地连接之后,通过流进行同步阻 ...
- 传统D3D11程序面向VS2015编译环境的配置修正细节
A. 配置细节 使用#include <unordered_map>替代<hash_map> 这个是c++标准建议的,没啥好说的 使用#include <directx ...
- Python(十)之GUI编程
在windwos上实现:使用wxPython模块 #!/usr/bin/env python # encoding: utf-8 import wx #创建open按钮触发的事件对应的函数 def l ...
- [转]css实现左侧宽度自适应,右侧固定宽度
原文地址:https://segmentfault.com/a/1190000008411418 页面布局中经常用会遇到左侧宽度自适应,右侧固定宽度,或者左侧宽度固定,右侧自适应.总之就是一边固定宽度 ...
- 【emWin】例程二十一:窗口对象——Edit
简介: 编辑框通常用作输入文本的主要用户界面,也可使用编辑字段以二进制.十进制或十六进制模式输入值. 触摸校准(上电可选择是否进入校准界面) 实验指导书及代码包下载: 链接:http://pan.ba ...
- Angularjs中config中置入以下拦截器
$httpProvider.interceptors.push(['$rootScope', '$q', '$localStorage', function ($rootScope, $q, $loc ...
- Fedora Server 21 安装 搜狗拼音输入法
最新文章:Virson’s Blog 借鉴文章:博客园-怒杀神殿 ChinaUnix-firo 百度贴吧-fedora吧 方法一:解压deb安装包方式安装: 如果本机已安装ibus,需要先卸载, ...
- 深度解析Java 8:JDK1.8 AbstractQueuedSynchronizer的实现分析
深度解析Java 8:JDK1.8 AbstractQueuedSynchronizer的实现分析(上) 深度解析Java 8:AbstractQueuedSynchronizer的实现分析(下) A ...
- 05原型模式Prototype
一.什么是原型模式 Prototype模式是一种对象创建型模式,它采 取复制原型对象的方法来创建对象的实例.使用 Prototype模式创建的实例,具有与原型一样的 数据. 二.原型模式的特点 1. ...