我正在尝试衡量一些库调用的性能。我的主要测量工具是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内核。 :)
感谢您的意见。
答案 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,例如procfs
,sysfs
,ioctl
等
但我对所有这些如何帮助您对库函数进行基准测试非常怀疑。您可能需要查看how performance is typically measured using rdtsc