pthread on-wakeup执行

时间:2012-11-19 15:35:45

标签: c linux pthreads scheduling

每次内核重新安排时,如何让我的pthread执行函数?

我需要确定我的线程安排在哪个物理CPU /套接字(不是逻辑核心),并且不能一直执行此操作。

只有当线程实际被重新安排时,是否可以以某种方式挂钩唤醒例程以对TLS进行必要的更新?

至于为什么我需要这个:我有每个线程每70ns执行AMO appx的代码,如果地址没有缓存在另一个套接字上就没问题,在两个套接字上部署相同的代码会因频繁而产生15倍的性能影响缓存失效。我打算为此分配内存,这只在运行相同L3缓存的线程之间共享。所以我需要确定我正在运行哪个套接字并解决正确的内存块。我显然可以调用sched_getcpu并将其与/proc/cpuinfo中的物理CPU ID进行比较,但这是一个相当大的开销。我不能为每个线程分配线程专用内存,但是太贵了。

1 个答案:

答案 0 :(得分:1)

根据我在 Linux Kernel Development, Third Edition 中所读到的内容,内核提供的服务和接口都不是您想要的。使用 pthread_setaffinity (如上面 @osgx 所建议的,或者,在最新的Linux内核实现中, pthread_setaffinity_np )或缓存TLS开头的每个cpu套接字的密钥(如上面 @caf 所建议的那样)可能是在这个方向上使用的最佳方法。