异数OS TCP协议栈测试(四)--网卡适配篇
异数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协议栈测试(四)--网卡适配篇的更多相关文章
- 异数OS TCP协议栈测试(五)--关于QOS与延迟
. 异数OS TCP协议栈测试(五)–关于QOS与延迟 ##本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 6524 ...
- 异数OS TCP协议栈测试(一)--数据传输篇
异数OS TCP协议栈测试(一)--数据传输篇 本文来自异数OS社区 github: 异数OS-织梦师(消息中间件)群: 476260389 测试目标 数据传输IO性能测试,主要是建立连接后测试收 ...
- 异数OS TCP协议栈测试(三)--长连接篇
异数OS TCP协议栈测试(三)--长连接篇 本文来自异数OS社区 github: 异数OS-织梦师(消息中间件)群: 476260389 异数OS TCP长连接技术简介 说起长连接,则首先要谈对 ...
- 异数OS TCP协议栈测试(二)--短连接篇
异数OS TCP协议栈测试(二)--短连接篇 本文来自异数OS社区 github: 异数OS-织梦师(消息中间件)群: 476260389 测试目标 TCP 短链接IO性能测试,Client Se ...
- 异数OS国产CPU平台移植项目需求分析
异数OS国产CPU平台移植项目需求分析 目录 异数OS国产CPU平台移植项目需求分析 项目立项背景 项目需求分析 异数OS性能指标简介 1.TCP协议栈性能测试 2.异数OS-织梦师-水母 消息队列性 ...
- 异数OS 织梦师-水桶(三)-- RAM共享存储方案
. 异数OS 织梦师-水桶(三)– RAM共享存储方案 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652455 ...
- 国产CPU 申威1621 异数OS基础组件理论性能测试报告
国产CPU 申威1621 异数OS基础组件理论性能测试报告 文章目录 国产CPU 申威1621 异数OS基础组件理论性能测试报告 前言 测试平台 测试项目 SW1621 异数OS 容器虚拟交换机模拟性 ...
- 异数OS 织梦师-纤手(二)-- LPC RPC篇
异数OS 织梦师-纤手(二)– LPC RPC篇 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652455784 ...
- 异数OS 织梦师-Xnign(四)-- 挑战100倍速Nginx,脚踩F5硬件负载均衡
. 异数OS 织梦师-Xnign(四)– 挑战100倍速Nginx,脚踩F5硬件负载均衡 本文来自异数OS社区 github: https://github.com/yds086/HereticOS ...
随机推荐
- 机器学习——EM
整理自: https://blog.csdn.net/woaidapaopao/article/details/77806273?locationnum=9&fps=1 EM算法是用于含有隐变 ...
- linux 一个使用整页的 scull: scullp
为了真实地测试页分配, 我们已随其他例子代码发布了 scullp 模块. 它是一个简化的 scull, 就像前面介绍过的 scullc. scullp 分配的内存量子是整页或者页集合: scullp_ ...
- Python的优缺点、以及解释器种类
优点 Python起始定位“优雅”.“明确”.“简洁”,工具型语言,上手快,实用性强. 开发效率高,支持库强大,很多功能都有与之对应的最优模块支持. 高级语言,编程时无需考虑内存等底层具体实现. 可移 ...
- 【18.69%】【codeforces 672C】Recycling Bottles
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Unable to preventDefault inside passive event listener due to target being treated as passive 怎么办?
本篇为转载,原文链接:https://blog.csdn.net/lijingshan34/article/details/88350456 翻译一下:chrome 监听touch类事件报错:无法被动 ...
- 聚类分析 一、k-means
前言 人们常说"物以类聚,人以群分",在生物学中也对生物从界门纲目科属种中进行了划分.在统计学中,也有聚类分析法,通过把相似的对象通过静态分类的方法分成不同的组别或者更多的子集,从 ...
- leetcode 1301. 最大得分的路径数目
地址 https://leetcode-cn.com/problems/number-of-paths-with-max-score/ 给你一个正方形字符数组 board ,你从数组最右下方的字符 ' ...
- starUml破解
在安装目录的:StarUML\www\license\node 找到LicenseManagerDomain.js 在 try 前面加上: return { name:"0xcb" ...
- Java方法的参数传递是值传递还是引用传递?
当基本数据类型(Boolean,byte,char,String,int,Long,float,double)作为参数传递时,传递的是实参值的副本,即传的是值,无论在函数中怎么操作这个副本,实参的值是 ...
- Java 连接 SQL Server 数据库
//连接数据库 public Connection getConnection(){ //url为绝对路径 String url="jdbc:sqlserver://127.0.0.1:14 ...