Cyclictest负载压测


Benchmark Units Version Source
Cyclictest microseconds 2.7 https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git/snapshot/rt-tests-2.7.tar.gz
cd rt-tests-2.7
make
sudo make install

基本命令行格式

cyclictest [选项]

常用选项

  1. -t [num]:指定线程数。

    cyclictest -t 4
    

    这将启动 4 个线程来进行延迟测试。

  2. -p [priority]:设置线程的实时优先级(1 到 99,数字越高优先级越高)。

    cyclictest -p 80
    

    这将为测试线程设置优先级为 80。

  3. -n:不对线程进行时间片调度(即使用 SCHED_FIFO 调度策略)。

    cyclictest -n
    

    此选项确保线程以 FIFO(先入先出)方式调度,不允许时间片调度。

  4. -i [interval]:设定线程的唤醒间隔(以微秒为单位)。

    cyclictest -i 1000
    

    这将线程唤醒的时间间隔设置为 1000 微秒(1 毫秒)。

  5. -l [loops]:设置循环次数。测试将运行指定次数后停止。

    cyclictest -l 10000
    

    该命令将运行 10000 次循环测量延迟。

  6. -D [duration]:设置测试运行时间(支持时间格式如 s 秒, m 分钟, h 小时)。

    cyclictest -D 60s
    

    这将让测试运行 60 秒后自动停止。

  7. -h:显示帮助信息。

    cyclictest -h
    
  8. -q:静默模式,禁用输出,仅显示测试结果。

  9. -m:锁定内存,防止内存页交换到磁盘,以保持测试的实时性。

    cyclictest -m
    
  10. -a [cpu-list]:将线程绑定到特定的 CPU 核心上。

    cyclictest -a 0-3
    

    这将把线程绑定到 CPU 0 到 3 核心上运行。

  11. --histogram [bucket-size]:生成延迟直方图,bucket-size 是桶的大小(以微秒为单位)。

    cyclictest --histogram=10
    

    生成延迟数据的直方图,每个桶大小为 10 微秒。

综合示例

假设你想运行 4 个线程,实时优先级为 80,唤醒间隔为 1000 微秒,绑定到 CPU 0 和 1,测试持续 60 秒,同时生成直方图:

cyclictest -t 4 -p 80 -i 1000 -a 0-1 -D 60s --histogram=10
关键术语

示例解释

假设你有以下 Cyclictest 结果:

线程 优先级 间隔 计数 最小延迟 实际延迟 平均延迟 最大延迟
0 99 1000 µs 10000 5 µs 8 µs 6 µs 15 µs

在实时系统中,通常 最大延迟 是最关键的值,因为它表明系统响应的最长延迟,可能会影响时间敏感的应用程序。

Cyclictest 是一个用于测量 Linux 系统实时性能的工具,尤其是测量线程唤醒延迟。你可以通过不同的命令行参数来配置测试。下面是一些常用的 Cyclictest 命令行选项及其解释: