Как я могу знать, на каком ядре выполняется процесс?
В настоящее время я работаю над проектом о настройке процесса на одно ядро в среде linux. Я использую sched_setaffinity, чтобы сделать эту работу, и мне интересно, есть ли некоторые функции, предоставляемые linux, чтобы узнать, на каком ядре запущен процесс. Я использую команду top и нахожу, что она может получить эту информацию, используя опцию j. Поэтому я уверен, что есть несколько способов получить эту информацию в пространстве пользователя.
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