sched_getcpu()在Linux上可靠吗?

我试图debuggingLinux上的pthreads的一些性能问题,我认为sched_getcpu()可能是骗我。 它会为每个线程报告一个固定的CPU,而分析实验似乎表明这些线程实际上正在从一个核心迁移到另一个核心。

我不知道是否sched_cpu()只报告线程开始运行的第一个CPU,并且不知道线程迁移? 有没有其他人注意到这一点,或看到任何证据sched_getcpu()的返回值可能会改变? 如果它不可靠,有没有其他方法来跟踪当前的CPU(使用CPUID也许?)?

http://man7.org/linux/man-pages/man2/getcpu.2.html表明sched_getcpu()只是getcpu()的封装。

http://man7.org/linux/man-pages/man2/getcpu.2.html建议所提供的信息是准确的,因为不再使用旧的缓存选项:

tcache参数从Linux 2.6.24开始是未使用的…它在线程本地存储中指定了一个指向调用者分配缓冲区的指针,该指针用于为getcpu()提供一个缓存机制。 使用缓存可以加速getcpu()调用,代价是返回的信息过期的可能性很小。 在CPU之间迁移线程时,认为缓存机制会导致问题,因此现在忽略该参数。

所以除非你使用2.6.24以前版本的内核,否则你不可能看到旧的/缓存的信息。