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

2

あなたの質問には正確な答えがありません。スケジューラーは、プロセスをあるプロセッサー・コアから別のプロセッサー・コアにいつでも移行できます (実際にそれを行っています)。したがって、答えが得られたときには、すでに間違っている可能性があります。また、プロセスは通常、特定のコアに関連付けられていません (そのCPU アフィニティが、たとえばsched_setaffinity(2)で設定されている場合を除きます。これは珍しいことです。詳細については、cpuset(7)も参照してください)。

なぜ質問するのですか?なぜそれが重要なのですか?

おそらく/procの内部を掘り下げたいと思うでしょう。 proc(5)の man ページを参照してください。

言い換えれば、カーネルがその情報を提供する場合、それはスルー/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 に答える