2
A
回答
5
一个相当直接的方法是让两个线程通过管道进行通信。一个线程会做(伪代码):
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个usec。
3
我不认为我们可以从用户空间实际测量这个时间,因为在内核中你永远不知道什么时候你的进程在时间片到期之后被提取出来。所以无论你在用户空间中得到什么,都包括调度延迟。但是,从用户空间中可以得到更接近的测量值,但始终不准确。即使是很短暂的延迟也很重要。
1
我相信LTTng可以用来捕获上下文切换时序的详细跟踪等等。
相关问题
- 1. 测量上下文切换的时间
- 2. 变量上下文切换时间
- 3. 时间()和上下文切换
- 4. 什么是上下文切换时间?
- 5. Linux获取上下文切换时间
- 6. 我如何测量进程上下文切换所用时间的aproximation?
- 7. 上下文切换使用了大量的时间吗?
- 8. 线程量程时间中是否包含上下文切换时间?
- 9. 程序检测上下文切换
- 10. 线程之间的上下文切换
- 11. 如何测量和修复上下文切换瓶颈?
- 12. 线程上下文切换vs进程上下文切换
- 13. 切换测量
- 14. 防止上下文切换(或测量然后减去时间在线程实际上不花费)
- 15. 上下文切换在Linux中需要多长时间?
- 16. 是否可以减少上下文切换时间
- 17. 我们如何减少上下文切换时间
- 18. 上下文切换死锁
- 19. 切换画布上下文
- 20. Python:GIL上下文切换
- 21. 上下文切换太贵
- 22. PHP上下文切换
- 23. lpc 1769上下文切换
- 24. GPU上下文切换
- 25. 切换OpenGL上下文或切换上下文渲染目标,而最好?
- 26. 从进程上下文切换切换线程上下文有多好?
- 27. 上下文切换问题:管理上下文切换涉及哪部分OS?
- 28. WaitForSingleObject在超时时间为零时会导致上下文切换吗?
- 29. 上下文切换和交换同时发生?
- 30. 上下文切换意味着模式切换
如果你添加了一个标签,说明*你正在谈论/感兴趣的内核(例如,Linux,OSX/Darwin,Windows等),那么这可能会有所帮助 –
[写一个C程序来测量在Linux操作系统上下文切换花费的时间](http://stackoverflow.com/questions/2368384/write-ac-program-to-measure-time-spent-in-context-switch-in-linux-os) –
@ Jerry Coffin 这是一个Linux内核 – soker