-
前言
最近研究了下rt-linux,在ubuntu上跑了3.4.72-rt89的实时内核,并且运行了cyclictest检验实时内核与普通内核的区别,详见:
http://blog.csdn.net/sakaue/article/details/17629917
http://blog.csdn.net/sakaue/article/details/17715287
-
正文
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);