异数OS TCP协议栈测试(四)–网卡适配篇

本文来自异数OS社区

github: https://github.com/yds086/HereticOS

异数OS社区QQ群: 652455784

异数OS-织梦师(消息中间件)群: 476260389

为了实际走向应用,异数OS目前适配了netmap平台,DPDK平台,暂时每端口单核单队列的模式,后面各项问题解决后,开始适配RSS FDIR方案,下面是目前适配各个网卡驱动平台的测试结果。

测试说明

测试硬件平台

CPU : E5 2670 V1 2.3G

内存:64G

网卡: intel 82599 双口,5GT PCI E限制(损失30%满载收发包性能)

测试用例

1.双口双核,将网卡两个口用光纤回环链接,CPU3 创建TCP server,CPU 5创建 指定连接数量的TCP Client线程(每链接4线程),测试方案使用 异数OS TCP协议栈测试(三)–长连接篇的的测试方法,成绩是ECHO的iops成绩。

1.单口单核,将网卡1个口的TX RX光纤回环链接,CPU3 创建TCP server,同时创建 指定连接数量的TCP Client线程,测试方案使用 异数OS TCP协议栈测试(三)–长连接篇的的测试方法,成绩是ECHO的iops成绩。

3.UDP NIC回环,分别在双口双核 单口单核模式下,创建两个线程,两个线程绑定对应的网卡适配器,对发UDP包记录下收发包的速度,成绩是收包发包循环的次数,一次收一个发把一个包。

测试结果

网卡接口平台 测试用例 NIC UDP 回环 1链接 8TCP链接 32TCP链接 64TCP链接 128TCP链接 256TCP链接 600WTCP链接
dpdk 双口双核 10M 136K 1.037M 3.47M 4.06M 4.2M 4.4M 3.1M 会丢包丢链接
dpdk 单口单核 9M 136K 1.018M 2.35M 2.5M 1.95M 1.9M 950k
netmap 双口双核 8M 131K 940k 3.6M 4.2M 4.5M 4.7M 2.3M
netmap 单口单核 6M 131K 940k 2.2M 2.8M 2.7M 2.4M 1.5M
异数OS软件交换机 双口双核 13M 1.8M 4.6M 4.6M 4.6M 4.7M 4.8M 3.3M
异数OS软件交换机 单口单核 14M 5.3M 5.0M 5.0M 4.95M 4.95M 5.03M 4.3M

适配总结

netmap,dpdk,异数OS软件交换机测试对比

通过适配netmap和DPDK平台,总结一些问题,netmap适配下来,性能比DPDK要强大概10%到100%,尤其是在链接多,app业务占用内存多的环境,dpdk在3W链接以上会出现Server端RX丢包(Dropped),导致链接大量的丢失,600W丢失500w,并造成不稳定,而这一现象目前在netmap环境下没有出现,netmap以及异数OS软件交换机可以做到600W 0丢包,另外netmap由于采用ring与上层协议栈交换数据,不需要分配释放包缓存,因此降低了适配复杂度,并提高了包交换性能,这使得netmap的性能可以达到异数OS软件交换机性能的90%,而DPDK只能交换包数组,需要大量的工作做包缓存管理,效率较低,这可能是DPDK实际上比netmap以及异数OS软件交换机慢的原因。

TCP协议栈适配网卡的问题

由于TCP需要类似ECHO的传输流程控制机制,因此单个链接并不能批量收发包,这导致使用批量收发包技术的网卡出现性能损失,性能被网卡约束所影响,出现了一个性能墙,由测试数据来看,必须在32或者64路以上并发TCP链接,才有希望利用10G网卡的IO能力,由于异数OS软件交换机使用内存交换技术(多核采用CPU cache跨核交换),因此延迟比较低,一般在70ns左右,因此不存在单链接性能墙的问题。

DPDK丢包问题分析

DPDK经过反复分析调参,任然无法解决丢包的问题,在3W链接以下以及UDP收发包测试中,DPDK可以0丢包,推断可能是需要设置网卡流控,但实际上设置后并没有任何效果,排除流控的问题,无奈用异数OS做了软件流控,将TCP客户端发包能力控制在5000以内,发现丢包问题任然无法解决,而异数OS此时对rte_eth_rx_burst的polling速度是30M,所以排除是协议栈延迟高的问题,经过慢速持续增长的链接线程观察(每秒创建1000个TCPClient,netmap平台可每秒创建200W链接无问题),在Client链接线程数创建超过3W时,丢包现象开始发生,此时软件层占用巨页内存20M,正好达到E52670 L3 Cache的尺寸,所以暂时推断DPDK的ddio的ring polling技术可能存在问题,当l3 cache不足,需要在内存交换包时可能出现丢包。

异数OS TCP协议栈测试(四)--网卡适配篇的更多相关文章

  1. 异数OS TCP协议栈测试(五)--关于QOS与延迟

    . 异数OS TCP协议栈测试(五)–关于QOS与延迟 ##本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 6524 ...

  2. 异数OS TCP协议栈测试(一)--数据传输篇

    异数OS TCP协议栈测试(一)--数据传输篇 本文来自异数OS社区 github:   异数OS-织梦师(消息中间件)群: 476260389 测试目标 数据传输IO性能测试,主要是建立连接后测试收 ...

  3. 异数OS TCP协议栈测试(三)--长连接篇

    异数OS TCP协议栈测试(三)--长连接篇 本文来自异数OS社区 github:   异数OS-织梦师(消息中间件)群: 476260389 异数OS TCP长连接技术简介 说起长连接,则首先要谈对 ...

  4. 异数OS TCP协议栈测试(二)--短连接篇

    异数OS TCP协议栈测试(二)--短连接篇 本文来自异数OS社区 github:   异数OS-织梦师(消息中间件)群: 476260389 测试目标 TCP 短链接IO性能测试,Client Se ...

  5. 异数OS国产CPU平台移植项目需求分析

    异数OS国产CPU平台移植项目需求分析 目录 异数OS国产CPU平台移植项目需求分析 项目立项背景 项目需求分析 异数OS性能指标简介 1.TCP协议栈性能测试 2.异数OS-织梦师-水母 消息队列性 ...

  6. 异数OS 织梦师-水桶(三)-- RAM共享存储方案

    . 异数OS 织梦师-水桶(三)– RAM共享存储方案 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652455 ...

  7. 国产CPU 申威1621 异数OS基础组件理论性能测试报告

    国产CPU 申威1621 异数OS基础组件理论性能测试报告 文章目录 国产CPU 申威1621 异数OS基础组件理论性能测试报告 前言 测试平台 测试项目 SW1621 异数OS 容器虚拟交换机模拟性 ...

  8. 异数OS 织梦师-纤手(二)-- LPC RPC篇

    异数OS 织梦师-纤手(二)– LPC RPC篇 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652455784 ...

  9. 异数OS 织梦师-Xnign(四)-- 挑战100倍速Nginx,脚踩F5硬件负载均衡

    . 异数OS 织梦师-Xnign(四)– 挑战100倍速Nginx,脚踩F5硬件负载均衡 本文来自异数OS社区 github: https://github.com/yds086/HereticOS ...

随机推荐

  1. 【Linux】ssh-copy-id三步实现ssh免密登陆

    一.本地机器上使用ssh-keygen产生公钥私钥对 ssh-keygen -t rsa -C "XXXX@163.com" --->执行完会在~/.ssh/下生成公钥私钥对 ...

  2. C++Review7_STL、容器、迭代器

    我之前的博文中有专门的5篇整理并介绍了STL的概念: STL1——整体介绍:https://www.cnblogs.com/grooovvve/p/10467794.html STL2——泛型编程(模 ...

  3. Object 与 Function那神奇而混乱的搞基关系

    // Object 与 Function神奇而混乱的搞基关系... Object.__proto__ === Function.prototype; // true Object.__proto__ ...

  4. Python中的[...]是什么?

    ...就是好几个冒号 array[...] 就是array[:,:,:]

  5. 0007 表单标签(form、select)

    目标: 能写出最常用的注册类表单 能说出input表单常见属性 现实中的表单,类似我们去银行办理信用卡填写的单子. 如下图 作用: 表单目的是为了收集用户信息. 在我们网页中, 我们也需要跟用户进行交 ...

  6. DEVOPS技术实践_20:串联多个job执行

    在jenkins可能会有战役中场景,就是在一个job执行完之后,把这个执行结果作为另一个job的执行条件 比如A执行完,如果A执行成功,则执行B,如果失败则执行C 1 前期准备 A任务 import ...

  7. python+selenium+Chrome options参数

    python+selenium+Chrome options参数 Chrome Options常用的行为一般有以下几种: 禁止图片和视频的加载:提升网页加载速度. 添加代理:用于翻墙访问某些页面,或者 ...

  8. MapReduce-自动化运行配置

    1.打包时指定main  Class信息 注意:默认直接通过maven插件打成jar包中没有指定main class信息,因此在运行mapreduce的jar包时必须在指令后明确main class信 ...

  9. 学了java,我才发现台球还可以这样玩!

    桌球小游戏的尝试 桌球是人们日常生活中都能接触到的一种娱乐活动,随着互联网技术的发展,手机上也有了很多桌球小游戏,让人们随时随地都能打两把.   今天分享一个用java编写的桌球小游戏 代码如下:  ...

  10. 还在使用OpenGL ES做渲染,你Out了,赶紧来拥抱Vulkan吧~

    背景介绍 Vulkan是Khronos组织制定的"下一代"开放的图形显示API.是与DirectX12能够匹敌的GPU API标准. Vulkan是基于AMD的Mantle API ...