0

我可以调用什么库函数来获取进程到内核的映射,或者给定进程 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

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

4

3 回答 3

3

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

于 2013-04-13T07:02:52.493 回答
2

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

你问来干什么?为什么这很重要?

您可能想深入了解/proc,请参阅proc(5)手册页。

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

注意。内核会比你更好地在各种处理器内核上调度进程,所以即使有仓库,你也不应该关心内核运行一些 pid。

于 2013-04-13T06:57:47.350 回答
1

是的,虚拟文件/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.

在我的双核上:

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

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

于 2013-04-18T13:16:02.950 回答