专栏首页科技分享Linux 实时性能测试工具——Cyclictest

Linux 实时性能测试工具——Cyclictest

Cyclictest 是 rt-tests 下的一个测试工具,也是rt-tests 下使用最广泛的测试工具,一般主要用来测试使用内核的延迟,从而判断内核的实时性。

1.2 cyclictest 安装

1.2.1 基于包管理软件安装

Debian / Ubuntu 系统下可以直接使用apt-get install rt-tests 来安装cyclictest。

1.2.2 git 仓库源码安装

使用Linux最大的好处就是我们可以下载软件的源码,学习、编译以及使用,所以如果使用上述方法直接安装使用,如果你觉得有的问题不懂或者出现问题你也没办法解决,所以从开发者的角度而言,下载安装软件还是下载源码包编译后使用比较好。

(1) 首先拷贝cyclictest的Git 仓库

# git clone git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git

(2) 进入git仓库

# cd rt-tests

(3)创建一个分支,比如我们起名叫testing

# git branch testing

(4)转到testing分支,之后我们做的步骤都不会对主分支有影响,这是我们在电脑上使用 git 仓库的常用方法

# git checkout testing

(5)查看我们当前在哪个分支

# git branch

master * testing

(6)在次我们使用make编译

# make

编译时我们会遇到缺失numa.h 的错误提示,在此我建议童鞋们安装使用apt-file 来解决此类错误(有了apt-file,遇到这类错误我们就知道如何解决而不是一味的上网找别人的解决方法),主要步骤如下: # sudo apt-get install apt-file // 安装apt-file # apt-file update // 类似于apt-get ,apt-file也需要根据系统配的源来更新一个库 # apt-file search numa.h // 使用apt-file search 搜索我们缺失的文件

libhwloc-dev: /usr/include/hwloc/linux-libnuma.h libnuma-dev: /usr/include/numa.h // 在搜索到的结果中,我们发现这个包叫做 libnuma-dev 应该就是我们需要安装的包 linux-headers-3.2.0-4-amd64: /usr/src/linux-headers-3.2.0-4-amd64/include/config/acpi/numa.h linux-headers-3.2.0-4-amd64: /usr/src/linux-headers-3.2.0-4-amd64/include/config/amd/numa.h

.... # apt-get install libnuma-dev // 使用apt-get 安装libnuma-dev 包

2. cyclictest 的使用及参数简介

对于Cyclictest的使用我们得先了解它的各个参数的含义,所以在你开始使用之前,请你看一下 cyclictest --help 中提到的各个参数!这将对你使用有很大的帮助。

2.1 cyclictest的简单使用及结果分析

如果你只是想玩玩这个工具,那么对于维基主页上提到的tglx 使用的测试命令来测测你的电脑性能:

# sudo ./cyclictest -t1 -p 80 -n -i 10000 -l 10000

注:在rt-tests的路径下,我们可以使用 ./cyclictest 来运行cyclictest, 而在别的目录下,我们就需要指定 cyclictest的路径来使用,比如说 /home/long/rt-tests/cyclictest ,或者你也可以直接将 rt-tests的路径下的 cyclictest 拷贝到 /bin/ 下,以后就可以直接使用 cyclictest 而不需要指定路径了!!

比如在我的电脑上,我使用这个命令测试的结果如下:

# /dev/cpu_dma_latency set to 0us policy: fifo: loadavg: 0.38 0.29 0.26 1/381 5595 T: 0 ( 5592) P:80 I:10000 C: 10000 Min: 2 Act: 15 Avg: 15 Max: 195

输出结果含义: T: 0 序号为0的线程 P: 0 线程优先级为0 C: 9397 计数器。线程的时间间隔每达到一次,计数器加1 I: 1000 时间间隔为1000微秒(us) Min: 最小延时(us) Act: 最近一次的延时(us) Avg:平均延时(us) Max: 最大延时(us)

所以我们当前的机器上最小延时为2,平均为15,最大的为 195。

$uname -a // 我们可以使用 “ uname -a ” 看到我们系统目前使用的内核版本 Linux wheezy 3.2.51-trace #8 SMP Thu Nov 21 12:34:04 CST 2013 x86_64 GNU/Linux

$ cat /boot/config-3.2.51-trace |grep CONFIG_PREEMPT_RT // 我们再打开 /boot 下面的当前内核的config信息查看目前这个内核是否打上实时补丁,结果显示并没有。所以在一个普通的内核下测的 Min: 2 Act: 15 Avg: 15 Max: 195 这样的数据算是不错的了!

$ cat /boot/config-3.10.17-trace-rt12 |grep CONFIG_PREEMPT_RT // 而在我 /boot 目录下的另外一个打好实时补丁的内核中 CONFIG_PREEMPT_RT_BASE=y # CONFIG_PREEMPT_RTB is not set CONFIG_PREEMPT_RT_FULL=y // 判断一个内核是否是实时内核,请看config 下有没有此项

我得到的cyclictest 运行结果是这样的:

T: 0 ( 5592) P:80 I:10000 C: 10000 Min: 1 Act: 1 Avg: 2 Max: 9

:-),运行的结果有目共睹,在以后的博客中我会介绍关于Linux 内核的实时补丁。

.2 cyclictest 的参数介绍

关于cyclictest 的各个参数具体含义建议大家还是用时间具体看看 cyclictest --help 的信息(参考资料【2】为我的师兄对--help下的每个参数的解释,大家也可以看看!)我这只介绍几个常用的。

-p PRIO --prio=PRIO 最高优先级线程的优先级 使用时方法为: -p 90 / --prio=90 -m --mlockall 锁定当前和将来的内存分配 -c CLOCK --clock=CLOCK 选择时钟 cyclictest -c 1 0 = CLOCK_MONOTONIC (默认) 1 = CLOCK_REALTIME -i INTV --interval=INTV 基本线程间隔,默认为1000(单位为us),下面介绍原理的时候会提到 -l LOOPS --loops=LOOPS 循环的个数,默认为0(无穷个),与 -i 间隔数结合可大致算出整个测试的时间,比如 -i 1000 -l 1000000 ,总的循环时间为1000*1000000=1000000000 us =1000s ,所以大致为16分钟多。 -n --nanosleep 使用 clock_nanosleep -h HISTNUM --histogram=US 在执行完后在标准输出设备上画出延迟的直方图(很多线程有相同的权限)US为最大的跟踪时间限制,这个在下面介绍实例时可以用到,结合gnuplot 可以画出我们测试的结果图。 -q --quiet 使用-q 参数运行时不打印信息,只在退出时打印概要内容,结合-h HISTNUM参数会在退出时打印HISTNUM 行统计信息以及一个总的概要信息。 -f --ftrace ftrace函数跟踪(通常与-b 配套使用,其实通常使用 -b 即可,不使用 -f ) -b USEC --breaktrace=USEC 当延时大于USEC指定的值时,发送停止跟踪。USEC,单位为谬秒(us)。

2.3 推荐参数以及结果实例

dslab@wheezy:~$ sudo cyclictest -p 90 - m -c 0 -i 200 -n -h 100 -q -l 1000000

我们使用 -p 90给cyclictest 赋优先级90,使用-m参数锁定内存分配,使用 -c 0指定使用默认的MONOTONIC 时钟, -i 200 指定一个循环为200us,结合 -l 1000000为总共1000000个循环,此外-n 为使用nanosleep 而不是简单的sleep,-q为在运行时不打印即时信息,-h 100 为总共统计100个信息在最后的结果中。

cyclictest用于测试定时器的精度,假定定时器时间间隔为 interval,定时器启动前记录下当前时间t1,定时器到时后记录下当前时间t2,则测出的时延为 t2 - (t1 + interval)。

一、测试命令./cyclictest –p 80 –t5 –n

1. 默认创建5个SCHED_FIFO策略的realtime线程,优先级80,运行周期是1000,1500,2000,2500,3000微秒,无干扰测试结果图:

由此可见在AdvLinux3.0.2实时系统,最小值在2~3微秒,平均值为9-11微秒,而最大值则分布在24-29微秒之间。

2.运行同样的测试,但是在运行这个测试的过程中引入更多的干扰,如将该设备与其它设备进行串口通信,则结果变为有干扰测试结果图:

引入串口通信过程,最大值为34us。没有出现AdvLinux3.0.2非实时系统下,最大值为1219微秒。

二、测试命令./cyclictest--smp -p95 -m

这一结果显示了Cyclictest工具运行在一个四核系统,在所有内存都锁定的情况下,每个内核运行一个测量线程,它们每一个SCHED_FIFO优先级是95,锁定内存分配。在测试的结果中,CPU0的最大延迟是33us,平均延迟是9us; CPU1的最大延迟是33us,平均延迟是9us; CPU2的最大延迟是32us,平均延迟是12us; CPU3的最大延迟是29us,平均延迟是13us.

cat /proc/cpuinfo查看系统是几核系统

三、测试命令./cyclictest -t1 -p 80 -n -i number -l10000

线程优先级为80,不同的时间间隔下的结果,其中,C:9397计数器。线程的时间间隔每达到一次,计数器加1

Min:最小时延(us);Act:最近一次的时延(us);Avg:平均时延(us);Max: 最大时延(us)

I为500us时,最小延时为2,平均为11,最大的为 26。I为10000us时,最小延时为4,平均为17,最大的为 33。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 编译linux内核源码,安装、删除内核【转】

    转自:https://blog.csdn.net/qq_28437139/article/details/83692907?utm_source=distrib...

    用户3033338
  • 终端的乐趣--Linux下有趣的终端命令或者工具【转】

    转自:https://blog.csdn.net/gatieme/article/details/52144603

    用户3033338
  • linux工作队列 - workqueue总览

    转自:https://blog.csdn.net/cc289123557/article/details/52551176

    用户3033338
  • ntfs-3g 中文乱码

    sudo apt-get install language-support-zh language-pack-zh

    py3study
  • 使用 Vultr 搭建个人的 Hexo 博客

    可以在各大域名商上去申请域名,我是在 godaddy 上申请,这里需要注意的事,域名后期续费是越来越贵的,

    黄泽杰
  • 孟德尔随机化研究中评估因果效应大小的方法

    孟德尔随机化研究借助遗传变异这一工具变量,来评估暴露因素与结局变量之间的因果效用。为了准确评估因果效应的大小,有多种方法相继被发明。本文重点看下其中常用的两种方...

    生信修炼手册
  • Spring JdbcTemplate 使用及持久层继承JdbcDaoSupport XML配置

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    多凡
  • 如何多端同步 Hexo 框架博客

    这个必要性其实不用多说,用着用着你就自己能体会到,比如头天晚上在家里发布了一篇技术文章,第二天在公司 Coding 的过程中突然想到之前发的文某个地方有 Bug...

    SkyRiN
  • 2019云计算发展大调查:多云计算的兴起

    调查显示很多企业表示,他们经常将多个云平台合并进行部署,这种技术称为多云计算。多云战略在过去几年中获得了巨大的推动力,主要是由于对供应商锁定的关注,也就是说,企...

    CloudBest
  • UIActivityViewController系统原生分享-仿简书分享

    且行且珍惜_iOS

扫码关注云+社区

领取腾讯云代金券