cyclictest源码分析

本文详细分析了cyclictest在rt-linux上的运行,通过Ubuntu 3.4.72-rt89实时内核进行实验。文章介绍了cyclictest参数如-t、-n和-l的含义,并探讨了其在单线程模式下的工作原理。后续作者将继续研究多线程模式下的行为。
摘要由CSDN通过智能技术生成
  • 前言

最近研究了下rt-linux,在ubuntu上跑了3.4.72-rt89的实时内核,并且运行了cyclictest检验实时内核与普通内核的区别,详见:

http://blog.csdn.net/sakaue/article/details/17629917

http://blog.csdn.net/sakaue/article/details/17715287

  • 正文

那么,cyclictest到底运行了些什么去检验实时性的效果呢?我们首先分析下cyclictest.c文件(~/rt-tests/src/cyclictest/cyclictest.c)。假设,我们运行

sudo cyclictest -t1 -n -l 10000

这里的参数含义:-t 指定要在cyclictest 这个进程中要运行的线程个数,-n 代表我们使用clock_nanosleep函数进行休眠(稍后会详细介绍),-l代表每个线程中需要迭代的次数。这里指定cyclictest跑一个迭代10000次的线程。

在process_options() Line:1175中:

case 't':
num_threads = atoi(optarg); break; //指定线程数
...
case 'n':
use_nanosleep = MODE_CLOCK_NANOSLEEP;break //指定使用clock_nanosleep休眠
...
case 'l':
max_cycles = atoi(optarg);break; //指定线程迭代次数

main中有个for循环num_threads次(Line:1888 , 代表创建num_threads个线程),每个循环中创建一个struct thread_param结构体par(Line:1925),其结构如下

struct thread_param {
	int prio;
    int policy;
    int mode;
    int timermode;
    int signal;
    int clock;
	unsigned long max_cycles;
	struct thread_stat *stats;
    int bufmsk;
	unsigned long interval;
    int cpu;
    int node;
    int tnum;
};
然后对其各项字段进行赋值(Line:1928 – 1993),其中赋予par->interval=DEFAULT_INTERVAL(代表线程中每次迭代的休眠时间,默认1000,可以通过-i参数修改),随后pthread_create创建一个新线程(Line:1994),并将par作为参数传递进去。这个线程执行timerthread函数(Line:728):

void *timerthread(void *param);
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值