欢迎光临
我们一直在努力

8.1延迟测量工具latency详解

8.1 延迟测量工具 latency 详解

为了帮助用户评估和检测系统的定时器延迟,Xenomai 提供了一个名为 latency 的测试工具。本文将详细介绍 latency 工具的功能、选项,以及如何使用它来测试系统的定时器延迟性能。

latency 工具是一个定时器延迟基准测试程序。它可以帮助用户测量实时任务在不同条件下的执行延迟,这对于评估系统的实时性能至关重要。通过运行 latency 工具,我们可以获取关于最小、平均和最大延迟的统计信息,并且生成可视化的延迟直方图。

8.1.1 latency 工具默认设置及其输出

在了解复杂的选项之前,我们先来看一下 latency 工具的默认设置及其输出。

$ latency
== Sampling period: 1000 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up…
RTT| 00:00:01 (periodic user-mode task, 1000 us period, priority 99)
RTH|—-lat min|—-lat avg|—-lat max|-overrun|—msw|—lat best|–lat worst
RTD| -1.241| -0.637| 4.942| 0| 0| -1.241| 4.942
RTD| -1.529| -0.897| 9.046| 0| 0| -1.529| 9.046
RTD| -1.527| -1.007| 8.687| 0| 0| -1.529| 9.046
RTD| -1.533| -1.043| 2.121| 0| 0| -1.533| 9.046
RTD| -1.523| -0.662| 7.937| 0| 0| -1.533| 9.046
RTD| -1.535| -0.980| 3.016| 0| 0| -1.535| 9.046
RTD| -1.533| -0.946| 5.479| 0| 0| -1.535| 9.046
RTD| -1.536| -0.992| 6.439| 0| 0| -1.536| 9.046
RTD| -1.534| -0.986| 5.055| 0| 0| -1.536| 9.046
—|———–|———–|———–|——–|——|————————-
RTS| -1.536| -0.905| 9.046| 0| 0| 00:00:10/00:00:10

默认情况下,latency 工具会创建一个采样线程,和一个打印线程。

采样线程是一个周期为 1000 微秒(us), 优先级为 99 的周期性用户任务。在完成 warming up 之后,latency 工具会开始正式测试,每间隔 1 秒计算一次 1 秒内所有的延迟信息。因为用户任务的周期为 1000 us,那么 1 秒内会有 1000 个采样点。采样线程还会汇总线程运行期间的所有延迟信息,得到历史最佳和最差延迟。

打印线程会根据采样线程的节奏,每隔 1 秒打印一次不断逐行打印测试结果。所有的延迟数据的单位都是微秒。根据每一行的第一列,我们可以把输出分成 4 中类型:RTT(RT time)、RTH(RT header)、RTD(RT data)还是 RTS(RT summary)。

  • RTT 行包含测试的基本信息,包括测试模式、测试周期、任务优先级等。
  • RTH 行包含延迟的统计信息:
    • 1 秒内最小延迟:latency min。
    • 1 秒内平均延迟:latency avg
    • 1 秒内最大延迟:latency max
    • 历史超时次数: overrun
    • 历史切换到次模式的次数:msw(参考实时任务状态与统计信息章节)
    • 历史最佳延迟:latency best
    • 历史最差延迟:latency worst
  • RTD 行包含与 RTH 对应的每个数据值。
  • RTS 行包含测试的总结信息
    • 历史最佳延迟:latency best
    • 历史平均延迟:latency avg
    • 历史最差延迟:latency worst
    • 历史超时次数: overrun
    • 历史切换到次模式的次数:msw
    • 实际测试运行时间:时:分:秒
    • 指定测试运行时间:时:分:秒(如果未指定,则等于实际测试运行实际时间)

如果出现负数,则表示延迟补偿 Gravity 值过大。如何调整可参考延迟补偿 Gravity 章节。

如果 latency 中的采样线程在运行过程中出现了切换到次模式的情况,即 msw 值大于 0,在结束运行时会出现如下警告信息:

Warning! some latency peaks may have been due to involuntary mode switches.
Please contact xenomai@xenomai.org

8.1.2 latency 工具选项

latency 工具提供了多个选项供用户选择,可以根据具体的测试需求调整参数。下面是一些常用的选项说明:

  • 采样模式与参数

    • -p <period_us>:设置采样周期(单位:微秒)。
    • -T <test_duration_seconds>:设置测试持续时间(单位:秒),默认值为0,表示需要手动终止测试(通过按 Ctrl+C)。
    • -t <test_mode>:设置测试模式,0 表示用户任务模式(默认),1 表示内核任务模式,2 表示定时器中断模式。
    • -P <priority>:设置任务的优先级(仅在测试模式0和1中有效)。
    • -c <cpu>:将采样任务绑定到指定的CPU上。
  • 打印输出

    • -s:打印最小、平均、最大延迟的统计信息。
    • -l <data-lines per header>:每隔多少 RTD 数据行打一次标题行(RTS + RTH)。默认值为21,即每间隔 21 个数据行打印一次标题。设置为0可以禁止打印标题。
    • -q:即安静模式。当使用 -T 选项时,可以禁止打印 RTD 和 RTH 行。
  • 直方图输出与导出

    • -h:打印最小、平均、最大延迟的直方图。
    • -H <histogram-size>:设置直方图的大小,默认值为200。如果最后一个桶被填满,可以增加这个值。
    • -B <bucket-size>:设置直方图中每个桶的大小(单位:纳秒),默认值为1000纳秒。减小这个值可以得到更精细的延迟测量结果。
    • -g <file>:将直方图数据导出到指定文件中,方便使用 gnuplot 进行可视化。Xenomai 源码中的 scripts/histo.gp 是使用 gnuplot 的示例脚本。
  • 调试选项

    • -f:当检测到新的最大延迟时,冻结当前的跟踪信息。
    • -b:当采样线程发生切换到次模式的情况时,立即中断测试。此时查看/proc/xenomai/debug/relax可定位到切换的原因。

8.1.3 latency 工具的 3 种测试模式

latency 工具提供了 3 种测试模式,分别为:

  • 用户任务模式:测试周期性用户任务的延迟。
  • 内核任务模式:测试周期性内核任务的延迟。
  • 定时器中断模式:测试定时器中断的延迟。

用户任务模式在上文已经详细介绍了原理,这里不再赘述。

内核任务和定时器中断都需要运行在内核态,因此并不需要在用户态建立采样线程,反而依赖于 RTDM 驱动 xeno_timerbench,此模块默认会编译进内核。

[*] Xenomai/cobalt —>
Drivers —>
Testing drivers —>
<*> Timer benchmark driver

如果选择了后两种模式:

  • latency 工具启动后,会打开 /dev/rtdm/timerbench 设备文件。如果打开失败,会报错并提示加载 RTDM 驱动 xeno_timerbench。

    benchdev = open("/dev/rtdm/timerbench", O_RDWR);

  • 使用 ioctl 系统调用来配置并启动实时测试。根据测试模式的不同,设置模式为 RTTST_TMBENCH_TASK 或 RTTST_TMBENCH_HANDLER。

    err = ioctl(benchdev, RTTST_RTIOC_TMBENCH_START, &config);

  • 周期性使用 ioctl 系统调用来获取测试结果,有打印线程输出。

    err = ioctl(benchdev, RTTST_RTIOC_INTERM_BENCH_RES,
    &result);

  • 停止测试时,使用 ioctl 系统调用来停止测试。

    ioctl(benchdev, RTTST_RTIOC_TMBENCH_STOP, &overall);

8.1.4 延迟直方图

latency 工具提供了直方图功能,使用 -h 选项可以打印延迟直方图,直观地展示延迟的分布情况。

下面是一个示例输出,latency -T 10 -h 运行 10 秒,并打印延迟直方图:

在这里插入图片描述

  • param:
    • min: 最小延迟直方图
    • avg: 平均延迟直方图
    • max: 最大延迟直方图
  • range: 延迟范围
    • 延迟范围也称为桶,其大小由 -B 选项设置。
  • samples:
    • 采样延迟值落入本行对应的延迟范围内的次数
    • 对于平均延迟直方图来说,本列所有的采样次数累加起来等于总的采样次数。因为用户任务的周期为 1000 us,那么 1 秒内会有 1000 个采样点。在 10 秒内,采样次数累计共 10000 个。

为了更好的理解延迟直方图,我们可以用 gnuplot 绘制延迟直方图。Xenomai 源码中的 scripts/histo.gp 是使用 gnuplot 的示例脚本。

首先,添加 -g 选项,将延迟直方图数据导出到文件 latency10s.txt。

latency -T 10 -h -g latency10s.txt

然后,使用 gnuplot 绘制延迟直方图。

gnuplot -e 'input_file="./latency10s.txt";output_file="./latency10s.png";graph_title="latency 10s ARM64"' ./xenomai-v3.2.4/scripts/histo.gp

最终得到了延迟直方图如下:

在这里插入图片描述

赞(0)
未经允许不得转载:171主机测评 » 8.1延迟测量工具latency详解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址