linux - 将 pthread 固定到单个核心

标签 linux linux-kernel pthreads kernel

我正在尝试测量某些库调用的性能。我的主要测量工具是 rdtsc 调用。读了一些书后,我意识到我需要禁用抢占和中断才能获得最准确的读数。有人可以帮我弄清楚如何做这些吗?我知道 pthreads 有一个“set affinity”机制。这足以完成工作吗?

我还在某处读到我可以调用此类内核

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 内核。 :)

感谢您的输入。

最佳答案

可以使用 pthread_setaffinity_nppthread 固定到单个 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 Interfacesprocfs, sysfs, ioctl

但我真的很怀疑所有这些将如何帮助您对库函数进行基准测试。您可能想看看 how performance is typically measured using rdtsc

关于linux - 将 pthread 固定到单个核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9932312/

相关文章:

linux - 为什么 vim -t ctags 不够?我无法跳转到我想要的功能

可以在模块初始化完成之前删除 Linux 内核模块吗?

c - linux/list.h - 如何安全地从列表中删除项目?

Linux 线程和进程 - CPU 亲和性

linux - 最后字节验证不适用于 bash 中的 IP

linux 命令 - 如何使用 shell 脚本向管理员发送通知电子邮件

linux - 在 Linux 中转储进程的页表条目

pthread 的条件等待

c - pthread : do other threads stop while the SIGSEGV handler runs?

linux - 为什么此汇编代码没有再次读取相同的字节,而是返回文件结尾?