2010-09-11 1 views
4

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

ответ

5

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

+0

К сожалению, моя Glibc версия под 2.6 так что он не мог работа – terry

+0

Хорошо. Модифицировал мой ответ, чтобы включить решение для pre-2.6 glibcs. – llasram

1

Вы можете использовать встроенный ассемблер (на 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

+0

Спасибо за ваши предложения, однако мой процессор - xeon 5560, а os - RHEL 5.4 64bit. Может ли CPUID по-прежнему работать как регистрирует все измененные имена? – terry