我想知道你们中是否有人知道如何使用函数 get_timer() 测量上下文切换的时间
如何找到平均值? 什么时候显示?
谁能帮我解决这个问题。
有高人知道吗?
最佳答案
一种相当直接的方法是让两个线程通过管道进行通信。一个线程会做(伪代码):
for(n = 1000; n--;) {
now = clock_gettime(CLOCK_MONOTONIC_RAW);
write(pipe, now);
sleep(1msec); // to make sure that the other thread blocks again on pipe read
}
另一个线程会做:
context_switch_times[1000];
while(n = 1000; n--;) {
time = read(pipe);
now = clock_gettime(CLOCK_MONOTONIC_RAW);
context_switch_times[n] = now - time;
}
也就是说,它将测量一个线程将数据写入管道与另一个线程醒来并读取该数据之间的时间间隔。 context_switch_times
数组的直方图将显示上下文切换时间的分布。
时间将包括管道读写和获取时间的开销,但是,它很好地说明了上下文切换时间的长短。
过去,我使用 Fedora 13 内核和实时 FIFO 线程进行了类似的测试。我获得的最小上下文切换时间约为 4-5 微秒。
关于linux - 上下文切换测量时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7462699/