gpt4 book ai didi

c - 跨上下文切换使用 rdtsc + rdtscp

转载 作者:太空宇宙 更新时间:2023-11-04 03:23:10 26 4
gpt4 key购买 nike

我正在尝试编写一个程序来测量上下文切换。我经历过这个 Intel's manual关于 rdtsc + rdtscp 指令。

现在,我想在上下文切换中使用这些时间戳指令。我的总体框架如下:

// init two pipes P1, P2
fork();

set_affinity(); // same core

// parent's code:
cpuid + rdtsc // start timer
write(timer to P1);

read(timer from P2); // blocks parent if timer value not written
rdtscp + cpuid // stop timer, get difference

// child's code:
read(timer from P1); // blocks child if timer value not written
rdtscp + cpuid // stop timer, get difference

cpuid + rdtsc // start timer
write(timer to P2);

我发现这段代码存在一些问题。假设定时器操作正确,

如果操作系统选择上下文切换到一些完全不同的进程(不是子进程或父进程),它将无法工作。

此代码还将包括 read() 和 write() 系统调用所花费的时间。

忽略这些问题,是否有效使用 rdtsc + rdtscp 指令?

I know writing a kernel module and disabling preemption/interrupts is a better way

最佳答案

我以前做过,它似乎是测量上下文切换时间的有效方法。每当对这种细粒度的事情进行计时时,调度的不可预测性总是会发挥作用;通常,您通过测量数千次并寻找诸如最小时间间隔、媒体时间间隔或平均时间间隔之类的数字来处理这个问题。通过以实时 SCHED_FIFO 优先级运行两个进程,您可以减少调度问题。如果您想知道实际的切换时间(在单个 cpu 内核上),您需要将两个进程绑定(bind)到具有关联设置的单个 cpu。如果您只想知道一个进程能够响应另一个进程的输出的延迟,让它们在不同的 CPU 上运行就可以了。

另一个要记住的问题是,自愿和非自愿的上下文切换,以及从用户空间和内核空间开始的切换具有不同的成本。你的很可能是自愿的。非自愿测量更难,需要从繁忙的循环或类似的情况中查看共享内存。

关于c - 跨上下文切换使用 rdtsc + rdtscp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43506444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com