我怎么能得到一个过程到核心映射在C

How can I get a process to core mapping in C?

本文关键字:核心 过程 映射 一个 怎么能      更新时间:2023-10-16

我可以调用什么库函数来获得进程到内核的映射,或者给定进程id告诉我它在哪个内核上运行,它上次运行或计划运行。像这样:

core 1:  14232,42323
core 2:  42213,63434,434
core 3:  34232,34314
core 4:  42325,6353,1434,4342
core 5:  43432,64535,14345,34233
core 6:  23242,53422,4231,34242
core 7:  78789
core 8:  23423,23124,5663

I sched_getcpu返回主叫进程的核心号。如果有一个函数给出一个进程id,会返回的核心号码,这将是很好的,但我还没有找到一个。sched_getaffinity也没有用;它只是告诉你给定一个进程它可以运行在哪个核上这不是我感兴趣的。

我不知道您可以获得关于任何特定进程运行的CPU的信息,但是如果您查看/proc,您会发现每个运行的进程都有一个条目。在/proc/<pid>/cpuset下面,您将找到关于可用于运行该进程的cpu集的信息。

你的问题没有确切的答案。调度器可以随时将进程从一个处理器核心迁移到另一个处理器核心(实际上它正在这样做)。所以当你得到答案的时候,它可能已经错了。一个进程通常不会绑定到任何特定的核心(除非它的CPU亲和度已经设置,例如使用sched_setaffinity(2),这是不寻常的;参见cpuset(7)。

你为什么问这个?为什么这很重要?

你可能想深入/proc,参见proc(5) man page。

换句话说,如果内核确实给出了该信息,它是通过/proc/,但我猜该信息不可用,因为它没有任何意义。

NB。内核会在不同的处理器内核上调度进程,比您能做的要好得多,所以即使使用仓库,您也不应该关心内核是否运行一些pid。

是的,虚拟文件/proc/[pid]/stat似乎有这个信息:man 5 proc:

/proc/[pid]/stat
      Status  information  about  the  process.   This is used by ps(1).  It is
      defined in /usr/src/linux/fs/proc/array.c.
      (...fields description...)
      processor %d (since Linux 2.2.8)
                      CPU number last executed on.

on my dual core:

cat /proc/*/stat | awk '{printf "%-32s %dn", $2 ":", $(NF-5)}'
(su):                            0
(bash):                          0
(tail):                          1
(hd-audio0):                     1
(chromium-browse):               0
(bash):                          1
(upstart-socket-):               1
(rpcbind):                       1

. .虽然我不能说它是否相关和/或准确…