将pthread固定到单个核心

时间:2012-03-29 19:40:32

标签: linux linux-kernel pthreads kernel

我正在尝试衡量一些库调用的性能。我的主要测量工具是rdtsc调用。在做了一些阅读后,我意识到我需要禁用抢占和中断才能获得最准确的读数。有人可以帮我弄明白怎么做吗?我知道pthreads具有一定的亲和力'机制。这足以完成工作吗?

我还读过某些地方,我可以调用排序的内核

preempt_disable()
raw_local_irq_save(...)

使用一种方法比另一种方法有什么好处吗?我尝试了后一种方法并得到了这个错误。

error: 'preempt_disable' was not declared in this scope

可以通过包含linux / preempt.h来修复,但编译器仍然抱怨。

linux/preempt.h: No such file or directory

显然我没有做任何内核黑客攻击,我无法在任何地方找到这个文件。我真的希望我不必安装新的Linux内核。 :)

感谢您的意见。

1 个答案:

答案 0 :(得分:3)

使用pthread

可以将pthread_setaffinity_np固定到单个CPU

但是你想在最后实现的目标并非如此简单。我会解释你原因。

preempt.h是Linux内核源代码的一部分。它位于here。您需要拥有内核源代码。无论如何,你需要编写一个内核模块来访问它,你不能在用户空间中使用它。了解how to write a kernel module here。函数preempt_disable和其他interrupt disabling kernel functions

的情况也是如此

现在重点是,pthreads在用户空间中,并且抢占禁用功能在内核空间中。如何互动?

要么你需要write a new system call你自己的抢占和中断禁用,并从用户空间调用它。或者您需要诉诸其他Kernel-User Space Interfaces,例如procfssysfsioctl

但我对所有这些如何帮助您对库函数进行基准测试非常怀疑。您可能需要查看how performance is typically measured using rdtsc