[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,来测试网络性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘色的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值