linux - 上下文切换测量时间

标签 linux kernel

我想知道你们中是否有人知道如何使用函数 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/

相关文章:

linux - struct task_struct中的字段 'on_cpu'和struct thread_info中的字段 'cpu'是什么意思?

linux - 如何在Linux框中使用IP地址获取Windows用户名详细信息

c - 从用户模式增加线程量

c - VS2015 指针不断变化,对齐?

linux - 判断所有用户的shell是登录还是非登录shell

Linux守护进程与前台应用程序

linux - nf_ct_get(skb,&ctinfo) 函数获取 IPv6 udp 数据包的 netfiter conntrack 'struct conn'

c - 使用自定义系统调用时出现 undefined reference 错误

linux - 如何模拟或触发机器检查异常?

c - ext3 linux内核实现