我正在尝试对我添加到内核中的一些中断功能进行基准测试。目前,我只想测量一个中断从一个内核发送到另一个内核接收需要多长时间。我大致在做以下事情:
volatile bool wait = true;
...
//Sending core:
void run_benchmark() {
//clear pipeline and record time A with rdtsc
for (int i = 0; i < 10000; i++) {
send_interrupt();
while (wait);
wait = true;
}
//record time B with rdtsc
//benchmark = (B - A) / 10000
}
...
//Receiving core:
void handle_interrupt(...) {
wait = false;
...
}
我还从基准测试中减去其他开销,例如记录时间的成本等。我发送中断 10,000 次以获得稳定的值。
我对这种方法的主要担心是接收核心和发送核心都会出现缓存未命中,因为它们各自将 wait
设置为不同的值。考虑到中断传送已经有多快,这些缓存未命中可能对我记录的基准测试产生重大影响。
有更好的方法吗?
最佳答案
在较新的 Intel 平台上,所有内核的 TSC 应该在 Linux 下同步。所以我认为你不需要这种同步 (see corresponding thread in the Intel developer zone).
为什么不简单地在接收 CPU 上获取 TSC 值?然后您可以在发送 CPU 上等待,直到时间 B 的变量包含一个合理的值。
关于c - 更好的基准同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48494539/