Как я могу знать, на каком ядре выполняется процесс?


В настоящее время я работаю над проектом о настройке процесса на одно ядро в среде linux. Я использую sched_setaffinity, чтобы сделать эту работу, и мне интересно, есть ли некоторые функции, предоставляемые linux, чтобы узнать, на каком ядре запущен процесс. Я использую команду top и нахожу, что она может получить эту информацию, используя опцию j. Поэтому я уверен, что есть несколько способов получить эту информацию в пространстве пользователя.

2 4

2 ответа:

Вы, вероятно, хотите sched_getcpu(). Если вы используете старую версию glibc, вы можете прочитать 39-е поле /proc/[pid]/stat для соответствующего pid-смотрите man-страницу proc(5) для получения более подробной информации.

Для этого можно использовать встроенную сборку (на арке x86):

mov eax, 1   ; cpuid functionality depends on the value of eax
cpuid        ; get cpu info
shr ebx, 24  ; ebx[31:24] is the cpu ID.
mov eax, ebx ; eax contains the cpu ID

Вы можете прочитать больше об инструкции CPUID здесь http://download.intel.com/design/processor/applnots/24161832.pdf