IntervalZero RTX64 4.x 帮助文档

⌘K
  1. 主页
  2. 文档
  3. IntervalZero RTX64 4.x 帮助...
  4. RTX64 工具和实用程序...
  5. 系统响应时间测量

系统响应时间测量

系统定时器响应延迟,是指从子系统定时器中断发送信号到中断服务线程 (IST:Interrupt Service Thread) ,IST 中运行的软件识别该信号的总时间。如下图所示,延迟由硬件延迟(信号被中断服务例程 (ISR) 识别所需的时间)和软件延迟(从 ISR 到在 IST 中运行的例程所需的时间)组成。

此图片的alt属性为空;文件名为bcd2401301139.png

测量定时器延迟

RTX64 Runtime 提供了一个名为系统响应时间测量 (SRTM:System Response Time Measurement) 的实用程序,这是一个实时 API 定时器延迟测量工具,用于测量应用程序监测到的定时器延迟。SRTM 提供两个版本:Windows 和 RTSS,分别用于各自环境中的测量。SRTM 直方图通常以双峰轮廓的特征显示:第一个峰表示接近最佳情况;第二个峰表示脏缓存(dirty-cache)情况。该图偶尔会显示来自处理器级中断屏蔽的其他较小尖峰。随着 RTX64 4.1 版本引入了 RTSS 定时器滴答补偿(tick compensation)机制,该图可能会在 Windows 内核和 RTSS 内核之间存在总线争用的系统上,显示更长的尾部和更大的最大延迟。

默认情况下,该工具会生成 15 秒的提示音并打印定时器响应延迟的直方图。可以在 RTSS 环境中运行 SRTM 来测量 RTSS 延迟。

要测量定时器延迟,在命令提示符中键入以下内容:

RTSSrun  "C:\program files\IntervalZero\RTX64\bin\srtm.rtss" [-h][-s][-1][f] seconds_to_sample

测量 HAL 级定时器延迟

RTX64 Runtime 提供了一个名为内核系统响应时间测量(KSRTM:Kernel System Response Time Measurement) 的实用程序。KSRTM 既是驱动程序,又是 Windows 实用程序,用于测量 HAL 级定时器延迟。短代码路径使其对缓存抖动的敏感度低于 SRTM。它可以确定哪个 Windows 操作系统组件或设备驱动程序导致了实时应用程序出现最大延迟事件。

KSRTM 测量定时器的响应延迟,并以直方图报告获取到的结果。

该工具执行实时 HAL 扩展,并根据同步时钟测量和报告定时器响应延迟。它可以呈现延迟的直方图,并报告最长延迟事件发生时哪个内核组件正在运行,同时还可以提供驱动程序列表。KSRTM 还可以测量与内核(DPC 级)和多媒体(用户级)定时器(单核)相关的延迟。

KSRTM 允许定时器驱动声音扬声器(500 微秒定时器将生成 1000 Hz 方波)。任何定时抖动都会产生可听频率摆动。这仅在 RTX 配置为使用一个实时核心时才实用。


KSRTM 与 SRTM

KSRTM 和 SRTM 都可以测量定时器延迟。KSRTM 提供了有关最坏情况延迟来源的详细信息,但它仅测量中断服务例程 (ISR) 启动的时间。而 SRTM 测量 RTSS 程序的定时器处理程序 (IST)(即其完整线程上下文)的总时间,它是RTSS 应用程序延迟更实际的测量。

在大多数基于奔腾处理器的系统上,RTX64 环境的最坏情况 SRTM (srtm.rtss) 报告的延迟范围为 2 到 20 微秒。Windows 环境下最坏情况的 SRTM (srtm.exe) 报告的延迟范围为 30 到 100 微秒。


使用 SRTM

SRTM 是 RTAPI 定时器延迟测量工具,用于测量应用程序侦测到的定时器延迟。SRTM 有两个版本:用于 Windows 环境的 srtm.exe,以及用于 RTSS 环境的 srtm.rtss。

使用 SRTM

srtm [/?][/h][/s][/1][/f][/n num] seconds_to_sample

参数

参数
/h显示直方图(除了摘要)

注意:Windows 版本 (srtm.exe) 的直方图可能与最大延迟值不匹配。这是因为 Windows 是不确定系统。
/s打开声音(定时器驱动的方波)
/1使用 10 MS 定时器周期(默认为 1 MS)
/f使用最快的可用定时器(1MS 或更好)
/n num多个 SRTM 实例,其中 num 是实例总数
seconds_to_sample采样定时器响应延迟的持续时间(以秒为单位)
/?显示使用帮助

注意:如果 SRTM 没有给出参数,则默认使用 /h /s /f 15。

其他说明

SRTM 也作为示例代码提供。

mSRTM 是另一个示例,演示了如何测量预期的定时器间隔,和实际定时器间隔之间的差异。

应用程序侦测到的 RTSS 定时器延迟由硬件和软件延迟组成:

  • 硬件延迟是指 HAL 中断服务例程 (ISR) 识别信号所需的时间;
  • 软件延迟是指从 ISR 到 IST 中运行的例程所花费的时间;

Windows 核心和 RTSS 核心之间的系统管理中断 (SMI:System Management Interrupt) 和总线争用是硬件延迟的主要来源。为了降低硬件延迟对 RTSS 定时器延迟和 RTSS 时间的影响,RTX64 使用定时器滴答补偿算法。该算法使用先前 ISR 和当前 ISR 之间的两个时间戳计数 (TSC:Time Stamp Count) 来计算滴答数。然后,ISR 使用计算出的滴答数(而不是 1 个滴答)来检查用户定时器到期情况并增加 RTSS 时间。如果在用户定时器周期的早期阶段发生 SMI 或总线争用,则其处理例程将按时调用。如果争用发生在后期,则当前调用会延迟,且由于到期的滴答数减少,后续调用将按时发生。

SRTM 通过调用 RtGetClockTime 得到的时间减去预期时间来计算定时器延迟。预期时间始终按用户定时器周期递增,而不是添加到用户定时器周期之前的时间。如果没有定时器滴答补偿,RtGetClockTime 获取的时间可能会比通用时间慢。但是,由于 RTSS 时间是以 1 个滴答递增,因此这种时间漂移不会反映在预期时间与 RtGetClockTime 获取的时间的差异中。如果没有定时器滴答补偿,SRTM 结果可能无法完全反映 SMI 或总线争用的副作用。通过定时器滴答补偿,RtGetClockTime 获得的时间更加接近通用时间。因此,SRTM 会充分反映 SMI 或总线争用的副作用。

从 RTX64 4.1 开始,定时器滴答补偿是默认配置。定时器滴答补偿将减少用户定时器延迟抖动的发生,但不会减少抖动的绝对值(当用户定时器周期的最后一个滴答发生 SMI 或总线争用时)。因此,在 Windows 核心和 RTSS 核心之间存在总线争用的系统上,SRTM 可能会在其图表中显示较长的尾部和较大的最大延迟。

如果已经有了针对定时器延迟抖动的解决方法,请参阅技术说明实时子系统计时器滴答补偿(Real-Time Subsystem Timer Tick Compensation),了解如何禁用计时器滴答补偿。


使用 KSRTM

KSRTM 是一种 Windows 驱动程序和实用程序,用于测量 RTSS 核心上的 HAL 级定时器延迟,并提供结果的报告和直方图。

要测量 HAL 级定时器延迟,以管理员身份运行命令提示符,并输入:

"C:\program files\IntervalZero\RTX64\bin\ksrtm.rtss" [/r|/k|/m][-h][/n][/s][/d][/l][/u minutes] seconds_to_sample

重要提示!KSRTM 运行时,请勿尝试停止 RTX64 子系统。子系统可能会不稳定并崩溃。

参数

参数
/r实时 HAL 扩展定时器(默认)。使用 RTX64 硬件抽象层定时器进行 KSRTM 测试。在 RTX64 配置的实时核心上运行
/k内核(DPC 级)定时器。使用 Windows 内核定时器执行 KSRTM 测试。只能在一个 CPU 上运行
/m多媒体(用户级)定时器。使用多媒体定时器执行 KSRTM 测试。只能在一个 CPU 上运行
/h显示直方图(除了摘要)
/n不要使用实时进程和线程优先级。避免设置最高实时优先级(仅与多媒体用户级定时器相关)
/s声音输出(定时器驱动的方波)。仅当 RTX64 配置为使用一个实时核心时才有意义。当两个或多个核心驱动扬声器时,会发生碰撞,导致“脏”声音
/d显示加载的驱动程序信息。如名称,起始地址和结束地址
/l最长延迟事件信息。仅支持 RTX64 HAL 计时器测试 [/r]
/u minutes显示更新之间的分钟数。对于设置为持续时间超过一分钟 (seconds_to_sample>60) 的测试,此参数将强制程序在指定的分钟数后显示数据;
seconds_to_sample采样定时器响应延迟的持续时间(以秒为单位)