千兆以太网卡吞吐量和丢包率优化总结
Posted 布列瑟农的秋天
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了千兆以太网卡吞吐量和丢包率优化总结相关的知识,希望对你有一定的参考价值。
现在有很多硬件平台理论上支持千兆以太网接口,但实际传输速率远远低于千兆,并且丢包率很高。最近我做了一些以太网吞吐量和丢包率方面的优化工作,有一些心得和大家分享一下。
一、测试模型
二、影响吞吐量和丢包率的因素
1. 网卡DMA缓冲区大小
这个缓冲区决定tx ring buffer和rx ring buffer的大小,如果ring buffer太小,那么网卡缓存数据包的能力有限,当接收数据能力超过cpu处理能力时就会产生丢包现象。ring buffer越大,吞吐能力就越强,丢包的概率就越小。
2. CPU处理能力
CPU处理速度越快,网卡接收到的数据包在网卡DMA缓冲区中的存留时间就越短,因此就可以腾出更多的空间来暂存新接收到的数据包。因此,CPU的处理能力直接决定了系统的吞吐量,运算速度越快,吞吐量越高。
3. 内存总容量
当网卡DMA缓冲区太小时,ring buffer不够用,会造成网络数据丢包。此时,需要将数据包及时从ring buffer里面取出来,暂存到接收队列里面(发送数据时同理)。然后在合适的时机再把数据包上传给协议栈。这种处理方式会瞬时大量消耗系统内存,当吞吐量很大时,会引起内存剩余容量抖动,甚至导致内存不足的异常出现。
三、调试注意事项
1. 当前ring buffer是否设置为网卡最大ring buffer;
2. 高负载时注意CPU占用率,重点关注软中断和网络数据包处理线程的占用率总和;
3. 关注low memory剩余容量,长时间测试时,剩余容量是否有下降趋势;
4. 长时间测试后,查看log,系统是否有出现异常报警;
四、推荐优化方法
1. 提高CPU处理能力,例如提升CPU频率或者运行模式;
2. 提高内存总容量,增加系统内存或者更换更大的内存;
3. 优化软中断收发包的处理方法,将软中断处理数据包的过程分为两步处理。例如把收包放到软中断里面处理,把数据包上报协议栈放到内核线程处理,类似于上半部和下半部。这样做可以减少中断屏蔽时间,尽可能多的接收外部数据到网卡缓冲区,从而增加吞吐量。同时,用内核线程去上报数据包到协议栈可以避免丢包。
上面介绍了千兆网卡提升吞吐量和减小丢包率的方法,我实际测试有很大的改善,分享出来供大家参考。
当然,实际优化过程中可能会遇到更种问题,本文仅仅提供优化思路。
以上是关于千兆以太网卡吞吐量和丢包率优化总结的主要内容,如果未能解决你的问题,请参考以下文章