В настоящее время я работаю над проектом о настройке процесса на одно ядро в среде linux. Я использую sched_setaffinity для выполнения этой задачи, и мне интересно, есть ли некоторые функции, предоставляемые linux, для получения того ядра, на котором выполняется этот процесс. Я использую команду top и считаю, что она может получить эту информацию, используя опцию j. Поэтому я уверен, что есть некоторые способы получить эту информацию в пользовательском пространстве.Как я могу узнать, в каком ядре работает процесс?
ответ
Возможно, вы захотите sched_getcpu()
. Если вы используете более старую версию glibc, вы можете прочитать 39-е поле /proc/[pid]/stat
для соответствующего pid - для получения дополнительной информации см. Справочную страницу 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
Спасибо за ваши предложения, однако мой процессор - xeon 5560, а os - RHEL 5.4 64bit. Может ли CPUID по-прежнему работать как регистрирует все измененные имена? – terry
К сожалению, моя Glibc версия под 2.6 так что он не мог работа – terry
Хорошо. Модифицировал мой ответ, чтобы включить решение для pre-2.6 glibcs. – llasram