[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

相关文章

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭