[QNX] BSP 网络性能优化:调优io-pkt和ClockPeriod提升网速

2024-05-08 15:44

本文主要是介绍[QNX] BSP 网络性能优化:调优io-pkt和ClockPeriod提升网速,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0 概要

本文介绍如何在QNX系统上优化网络性能,主要通过调整io-pktClockPeriod参数来实现。通过优化,网络吞吐量可以得到显著提升。

1 优化方法

1.1 调整io-pkt的mclbytes参数:

io-pkt是QNX系统中常用的网络协议栈,其mclbytes参数指定了网络协议栈中单个数据包的最大大小。默认情况下,mclbytes的值为2k(约2048字节),这对于一些网络应用来说可能不够用。

mclbytes的值增大到64k(约65536字节),可以使每个数据包携带更多的数据,从而提高网络传输效率。实测表明,将mclbytes的值从2k增大到64k,可以使TCP吞吐量提高约10%,UDP吞吐量提高约20%。
经过如下修改后速度有所提高

io-pkt-v6-hc -p tcpip mclbytes=65536

tcp压测由800+M/S提高到873M/S,UDP由600+M/S提高到842M/S

1.2 合理设置ClockPeriod:

https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.lib_ref/topic/c/clockperiod.html
ClockPeriod用于设置QNX系统时钟的间隔,对系统的定时器精度和性能有影响。在一些情况下,为了提高系统的定时器精度,可能需要设置较小的ClockPeriod值。但是,这可能会对网络性能产生负面影响。
原因: 设置较小的 ClockPeriod 值会导致系统定时器频繁地触发中断,可能会影响系统的整体性能,包括网络性能。这是因为系统中断会引入额外的处理开销,包括上下文切换和中断处理程序的执行,这些都会占用 CPU 资源和内存带宽,并可能导致网络数据包处理的延迟增加。

实测表明,将ClockPeriod的值从0.1ms改回1ms,可以使网络吞吐量提高约20%。

具体测试方法如下,参考qnx ClockPeriod使用方法
在这里插入图片描述
写一个小demo,编译后放到板卡里面运行
设置tick改回0.1ms

#include <stdio.h>
#include <sys/neutrino.h>
int main() {/* set the clock period to 10us */struct_clockperiod new period;struct _clockperiod period;new period.fract = 0;new period.nsec = 10000;if (ClockPeriod(CLOCK REALTIME, &new period, &period, 0) < 0) {printf("QNX: failed to call ClockPeriod: %s\n");}
}

使用iperf压测网络带宽显示前几组数据都是600+M/S,接着在板卡中执行demo程序,发现iperf压测后的速度降到了500+M/S
在这里插入图片描述

再次尝试 设置tick改回1ms

#include <stdio.h>
#include <sys/neutrino.h>
int main() {/* set the clock period to 10us */struct_clockperiod new period;struct _clockperiod period;new period.fract = 0;new period.nsec = 100000;if (ClockPeriod(CLOCK REALTIME, &new period, &period, 0) < 0) {printf("QNX: failed to call ClockPeriod: %s\n");}
}

测试后发现,前几组数据是500+M/S,执行完demo后的数据恢复到了600M/S。
在这里插入图片描述

建议:

  • 在实际应用中,可以根据具体情况调整io-pktClockPeriod的参数值。
  • 可以使用一些网络性能分析工具,例如iperf,来测试网络性能。

这篇关于[QNX] BSP 网络性能优化:调优io-pkt和ClockPeriod提升网速的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/970737

相关文章

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”