GETCPU - Linux手册页
Linux程序员手册 第2部分
更新日期: 2019-03-06
名称
getcpu-确定正在运行调用线程的CPU和NUMA节点
语法
#include <linux/getcpu.h> int getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache);
说明
getcpu()系统调用标识当前正在运行调用线程或进程的处理器和节点,并将它们写入cpu和node参数所指向的整数。处理器是标识CPU的唯一小整数。该节点是标识NUMA节点的唯一小标识符。当cpu或node为NULL时,不会将任何内容写入相应的指针。
如今,此系统调用的第三个参数尚未使用,除非需要可移植到Linux 2.6.23或更早版本,否则应将其指定为NULL(请参见NOTES)。
确保放置在cpu中的信息仅在调用时为最新信息:除非已使用sched_setaffinity(2)修复了CPU关联性,否则内核可能随时更改CPU。 (通常不会发生这种情况,因为调度程序会尝试最大程度地减少CPU之间的移动以保持高速缓存保持高速,但是有可能。)调用者必须考虑到在调用时,cpu和node中返回的信息不再是当前信息的可能性。返回。
返回值
成功时,将返回0。如果出错,则返回-1,并正确设置errno。
错误说明
- EFAULT
- 参数指向调用进程的地址空间之外。
版本
getcpu()已添加到内核2.6.19中,用于x86-64和i386。在glibc 2.29中添加了库支持(较早的glibc版本未提供此系统调用的包装器,因此必须使用syscall(2)。)
遵循规范
getcpu()是特定于Linux的。
备注
Linux尽最大努力使此调用尽可能快。 (在某些体系结构上,这是通过vdso(7)中的实现来完成的。)getcpu()的目的是允许程序针对每个CPU数据进行优化或针对NUMA优化。
从Linux 2.6.24开始,未使用tcache参数。在较早的内核中,如果此参数为非NULL,则它在本地线程存储中指定了指向调用者分配的缓冲区的指针,该指针用于为getcpu()提供缓存机制。使用缓存可以加快getcpu()的调用速度,但代价是返回的信息过时的可能性很小。在CPU之间迁移线程时,缓存机制被认为会引起问题,因此现在忽略该参数。
另外参见
mbind(2),sched_setaffinity(2),set_mempolicy(2),sched_getcpu(3),cpuset(7),vdso(7)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。