首页/新闻资讯/正文详情

NAT网关异步日志优化:DPDK无锁队列性能实测

发布时间:2026/9/24 20:36:37 来源:云帆数科 栏目:资讯中心
NAT网关异步日志优化:DPDK无锁队列性能实测
背景ops的nat网关需要保存每次连接建立的日志记录在ops的部署环境下连接并发量比较大如果由转发core直接进行io操作会明显降低系统的转发性能。因此需要考虑将这个压力转移到非转发core上减少转发core的io操作这样就需要异步日志。aisa需要收集流量日志也需要相同的方法量更大压力更大同样需要交给别的core进行io。dpdk无锁队列是基于大页内存设计的具有比较好的性能dpvs利用无锁队列实现了异步日志。由于io操作变为了内存读写因此会提高转发core的性能。但是这种异步操作存在读写差异的速率差转发core是内存写但处理日志的core则是内存读然后io操作很显然处理日志的core会比转发core要慢。测试方案模拟最极端的情形由master向无锁队列不断的写入数据队列满了就等等然后日志处理的core进行消费保证写入不丢然后看每秒究竟可以处理多少日志每次写入的日志长度都差不多格式相同符合ops新建日志的场景。由于dpdk无锁队列分为四种单生产者单消费者sc|sp多生产者单消费者sc单生产者多消费者sp多消费者多生产者其中单生产者单消费者理论上没有资源竞争是性能最高的模式以它作为基准而单生产者多消费者模式因为转发core是多个所以不会用到这种模式。同时我们也针对gcc的优化选项进行一个测试比较结果如下|编译方式|单生产者单消费者sc|sp|多生产者单消费者sc|多消费者多生产者|| — | — | — | — ||-O3优化日志不输出|825960|803748|789805||-O0优化日志不输出|601277|587582|591950||-O3优化日志输出到文件|836531|803651|813643||-O0优化日志输出到文件|609254|590513|586667||-O0优化日志输出到stdout|-|-|23749|单核下可以看到基本上无锁队列的极限性能大约就是80w左右开启-O3优化会带来36%左右的性能提升单生产者比多生产者性能稍高但是差距并不巨大。上面是仅有master核写入的情况也就是不管队列是什么形式总是只有master在写入其他不写入的情形。为了真实再补充一组真正由多个转发core一起写入的情况也就是dpvs标准的异步日志。测试环境起了8个转发core只有一个core消费日志。|编译方式|多生产者单消费者sc|| — | — ||-O0优化日志输出到文件|1959404||-O3优化日志输出到文件|2601137|这里有一个问题理论上单核读取实际上没有变化但为什么都是尽可能多的写入多核写入和单核写入对于无锁队列来说会产生那么大的性能差异呢提升了一倍多理论上写入端的速率高于读取端那就应该读取端是性能瓶颈也就是读取端没法及时把队列中的消息读走导致队列满了才会导致写入端写不进去跟写入端的数量应该没关系才对。个人理解是这样子因为我们发送日志是循环发送的一旦检查日志队列已经满了就会执行一次continue的跳转因为这次跳转消费端已经把消息消费掉了这时候就可以继续发送了但是发送端要等到下一个循环重新检查才会发现可以继续发送所以中间就产生了一定的间隙。而当多核发送的时候一个核检查发现队列满进行continue的时候另一个核可能检查的时候队列已经被消费过了所以另一个就可以继续写入这个间隙会随着生产者的增多被浪费的越来越少于是有了上面的现象。日志优化dpvs社区版本只使用一个核进行日志输出我想是因为日志文件是单个不想引入文件锁因为本来日志输出核的写入就费时再加个文件锁效率就更低了并且日志是需要有一定顺序的单核能保证这个顺序。但这都是基于通用情形而言具体到ops的场景因为它是针对保存连接建立日志的一个强需求而dpvs为了提高处理效率对连接做了分核处理以此来避免使用锁这样做使得对于一个连接来讲它相关的日志就只会出现在一个核上换句话说同一个连接产生的日志即使是在全局多个日志文件的情景下依然是相对保序的。鉴于此我们可以让每一个转发核对应一个日志输出核这样可以达到理论上的日志输出最优。不考虑多文件句柄在操作系统层面的IO性能这样无锁队列可以采用scsp单一生产者-单一消费者模式从最开始的性能测试来看这是无锁队列效率最高的模式每条线都是相对独立的没有资源竞争理论上可以达到最大吞吐。测试结果|编译方式|8核心|4核心|单核心|| — | — | — | — ||-O3优化日志输出到文件|4638113|4615216|1021821||-O0优化日志输出到文件|3891251|3873803|826875|可以看到似乎4核心就是最好效果了再继续增加也不会有明显提高。结论1.无锁队列在单一生产者单一消费者模式下性能最高多生产者或者多消费者模式下均有性能降低但幅度不算大2.在并发核数不多的情形下性能是接近线性增长的但到了某个时候每个核的性能都会降低怀疑是系统io的性能瓶颈3.程序编译的O3优化选项对性能有大约30%的提升但是-g选项似乎只影响编译以后得到的二进制可执行文件的大小并不影响性能。开启-O3是有必要的-g则无所谓但是为了方便调试建议开启即使是release版本也建议开启。4.社区异步日志当前性能能达到总体200w向上对于ops环境下通常新建连接数在12w的情形来说应该是足够使用了正常不需要打开多文件输出除非必要。360智汇云是企业智数云底座以智-数-云三大核心底座为支柱以贯穿全程的 “观测与管控” 为神经中枢全链路赋能企业数智基建在 “用、运、管、看、维” 五维生命周期中实现价值闭环。提供数据库、中间件、存储、大数据、人工智能、计算等多种产品服务以及一站式解决方案让每一份IT投入都转化为智能生产力。官网https://zyun.360.cn

相关推荐

Win32 API隐藏任务栏:原理、源码与踩坑实录,兼容Win7-Win11
Win32 API隐藏任务栏:原理、源码与踩坑实录,兼容Win7-Win11

做Windows桌面工具开发的人,十有八九都会遇到这样一个需求:把任务栏藏起来。别觉得这需求小众,实际场景多得是——做信息展示大屏、Kiosk自助终端、游戏全屏启动器、录屏软件、远程协助工具,甚至只是想让桌面看起来更干净&#xf… · 2026/9/24 20:36:30

C++策略模式进阶:从虚函数到模板与concepts的现代实践
C++策略模式进阶:从虚函数到模板与concepts的现代实践

1. 为什么说C里的策略模式比GoF书上的更"分裂"1.1 GoF策略模式在C中的教科书写法当年我第一次接触策略模式,是从《设计模式》那本GoF书开始的。书里的结构非常简单:一个抽象策略基类,一堆具体策略子类,再加一个持有策略… · 2026/9/24 20:36:30

VC++ Win32下隐藏Windows任务栏:原理、源码与踩坑记录
VC++ Win32下隐藏Windows任务栏:原理、源码与踩坑记录

先说一个很多人都搞混的概念:隐藏任务栏和“把窗口全屏”是两码事。全屏只是让你的窗口盖住任务栏,任务栏其实还在;而你今天来找的这个“隐藏任务栏”,是指把系统最底部那条UI整体藏起来,像从未存在过一样。这篇博文讲… · 2026/9/24 20:36:30

基于粒子群算法的光伏MPPT控制Simulink仿真实现
基于粒子群算法的光伏MPPT控制Simulink仿真实现

手头有做光伏发电控制的朋友,应该都懂MPPT这三个字的含金量。传统的扰动观察法、电导增量法在光照均匀时都很能打,但一旦组件被云朵、建筑物、落叶遮住半边,P-V曲线出现多峰,这批“单峰猎人”就全抓瞎了,系统可能直接锁… · 2026/9/24 21:12:26

音频压缩6个方法详解:从MP3到Opus,有损无损一次讲透
音频压缩6个方法详解:从MP3到Opus,有损无损一次讲透

打开你的手机看看,是不是光一个微信就吃掉了十几个G,其中语音文件、视频聊天记录、下载的音乐占了一大半。再把目光转向电脑,录一段播客、剪一条片子,随手导出的音频动不动就是几百MB,发个邮件都提示附件过大。这些都是… · 2026/9/24 21:12:26

基于SpringBoot+Vue的师生健康信息管理系统设计与实现全解析
基于SpringBoot+Vue的师生健康信息管理系统设计与实现全解析

每年到毕设季,找我要选题建议的同学里,十有八九会问“有没有那种功能完整、技术栈主流、还不太容易翻车的题目”,而“师生健康信息管理系统”就是我从头到尾都很推荐的一类。原因也很简单:这个题目管理的数据对象明确、角色分工清… · 2026/9/24 21:12:26

工厂焊装车间照明节能改造:KNX照明系统方案分区灯控人体感应
工厂焊装车间照明节能改造:KNX照明系统方案分区灯控人体感应

焊装车间是汽车工厂中照明设计最复杂的场景之一。焊接作业时弧光强烈,而检验工位又要求极高照度——两者对灯光的需求完全不同,用同一套照明方案无法兼顾。据《乘用车工厂焊装车间照明节能设计的探讨》一文披露,一汽大众华北生产基地焊装车间… · 2026/9/24 21:12:19

Mac 上如何替代 Notepad++:兼容层、原生编辑器与命令行实践
Mac 上如何替代 Notepad++:兼容层、原生编辑器与命令行实践

简介:这份文档面向希望在 Mac 电脑上使用 Notepad 的用户,尤其是习惯 Windows 编辑环境、又不愿更换工具的开发者与运维人员。由于 Notepad 官方并未推出 Mac 版本,资源围绕借助 WineBottler 在 macOS 上运行 Windows 程序的思路展开&#xf… · 2026/9/24 21:12:19

Java SpringBoot Vue3全栈商城系统设计与实现解析
Java SpringBoot Vue3全栈商城系统设计与实现解析

这一套「Java SpringBoot Vue3 MyBatis MySQL」的在线商城系统源码,算是这几年Java后端很主流、也最适合练手的一类全栈项目了。前后端分离、RESTful接口、JWT鉴权、商品订单流转、后台管理,覆盖了一个中型Web系统的大部分核心知识点。不管是拿来做毕… · 2026/9/24 21:12:19

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码