rt-tests一二三
rt-tests是一个测试套件,用来测试实时操作系统的特性。
rt-tests的内容主要是一二三。
- 一个测试目标:操作系统的实时性。
- 二个影响因素:系统负载(hackbench)、优先级反转(pi_test)。
- 三种时延:硬件的时延(hwlat)、内核的时延(sendme, cyclic, rt-migrate)、进程间通信的时延(pmq, ptsema, svsema, signal, sigwait)。
如何对这些特性进行测试呢?
backfire、sendme:测量信号在用户程序和内核之间传送的时延。用内核模块记录内核收到信号的时间,用应用程序记录发信号的时间和收到信号的时间,这样就得到了信号从用户进程到内核,内核到用户进程的时间。
cyclictest:测量系统的延迟。主线程创建一堆子线程,子线程会睡眠一小会儿并记录时间,这样就可以算出实际睡眠时间和理论睡眠时间的差值,这是硬件系统和内核产生的延迟,主线程会把这些延迟打印出来。
hackbench:给系统增加负载。主线程创建若干对儿子线程,一对儿子线程里一个不停发数据一个不停收数据,这样就占满CPU。
pi_tests:包含两个程序pi_stress和pip_stress,当子进程之间优先级不同的时候,存在优先级反转的问题,可以用优先级继承的方式解决这个问题。
pip_stress是测量进程之间的优先级继承,低优先级的主进程创建高优先级的子进程pid1,pid1创建中优先级的子进程pid2,这三个进程之间进行优先级继承的测试。
pi_stress是测量线程之间的优先级继承,主线程创建若干组子线程,每个组包含三个优先级不同的子线程,这三个子线程之间进行优先级继承的测试。
pmqtest:测量消息队列的时延。主线程创建若干对儿子线程,一对儿子线程里一个不停通过消息队列发消息一个不停通过消息队列收消息,只要记录到发之前的时间和收到后的时间,就可计算出消息队列的时延。
ptsematest:测量互斥锁的时延。主线程创建若干对儿子线程,一对儿子线程里一个不停给互斥量解锁一个不停给互斥量上锁,只要记录到解锁前和上锁后的时间差,就可以计算出互斥锁的时延。
rt-migrate-test:测量高优先级线程的可迁移性。主线程会创建三种优先级的线程,三种优先级的线程做相同的工作,高优先级的线程不管迁移到哪个核,都应该是最快的。
signaltest:测量信号在多个线程间传递的时延。主线程创建一堆子线程,子线程排成一圈传信号,只要记录下其中一个线程信号传出去的时间和信号传回来的时间,就可以计算出信号在子线程之间传一圈用了多久。
sigwaittest:测量信号在两个线程间传递的时延。主线程创建若干对儿子线程,一对儿子线程里一个不停发信号一个不停收信号,只要记录到发之前的时间和收到后的时间,就可计算出收发信号的时延。
svsematest:测量信号量PV操作的时延。主线程创建若干对儿子线程,一对儿子线程里一个不停执行V操作一个不停执行P操作,只要记录到V操作之前的时间和P操作之后的时间,就可计算出PV操作的时延。
线程还是进程?
一些测试程序即可创建线程,又可以创建进程,这两者有什么区别呢?我想线程占用的资源更少,应优先使用线程。但如果有的内核不支持线程,也可创建进程对其测试。