Опеределение текущего CPU ядра
От: KromKromov  
Дата: 06.07.11 11:11
Оценка:
Привет Всем!

Пишу модуль ядра для линукс, в котором я новичок, у меня есть следующий вопрос: как можно определить на каком ядре сейчас исполняется мой код из функции модуля. Сразу скажу что код функции будет выполняется на одном ядре весь и проблем с тем что уже следующая инструкция будет исполняться на другом ядре нет.

Я нашел такую функцию getcpu(), есть ли аналог для ядра? Второй вопрос, как можно вызвать syscall из ядра?

PS: извините за глупые вопросы, я все время писал по винды.

Спасибо
Re: Опеределение текущего CPU ядра
От: const_volatile  
Дата: 06.07.11 11:38
Оценка:
Здравствуйте, KromKromov, Вы писали:

KK>Пишу модуль ядра для линукс, в котором я новичок, у меня есть следующий вопрос: как можно определить на каком ядре сейчас исполняется мой код из функции модуля. Сразу скажу что код функции будет выполняется на одном ядре весь и проблем с тем что уже следующая инструкция будет исполняться на другом ядре нет.


smp_processor_id() по-моему.
Re[2]: Опеределение текущего CPU ядра
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 08.07.11 07:03
Оценка:
Здравствуйте, const_volatile, Вы писали:

_>Здравствуйте, KromKromov, Вы писали:


KK>>Пишу модуль ядра для линукс, в котором я новичок, у меня есть следующий вопрос: как можно определить на каком ядре сейчас исполняется мой код из функции модуля. Сразу скажу что код функции будет выполняется на одном ядре весь и проблем с тем что уже следующая инструкция будет исполняться на другом ядре нет.


_>smp_processor_id() по-моему.


Угу. Причём это может быть даже не функция, а макрос, который читает память по смещению от %fs.
The God is real, unless declared integer.
Re: Опеределение текущего CPU ядра
От: Cyberax Марс  
Дата: 08.07.11 13:50
Оценка:
Здравствуйте, KromKromov, Вы писали:

KK>Пишу модуль ядра для линукс, в котором я новичок, у меня есть следующий вопрос: как можно определить на каком ядре сейчас исполняется мой код из функции модуля. Сразу скажу что код функции будет выполняется на одном ядре весь и проблем с тем что уже следующая инструкция будет исполняться на другом ядре нет.

Если выполнение не в атомарном контексте, то при forced preemption код может самопроизвольно переехать на другой процессор.

KK>Я нашел такую функцию getcpu(), есть ли аналог для ядра? Второй вопрос, как можно вызвать syscall из ядра?

В общем случае нельзя, в определённых частных случаях можно.
Sapienti sat!
Re[3]: Опеределение текущего CPU ядра
От: Аноним  
Дата: 10.07.11 12:04
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, const_volatile, Вы писали:


_>>Здравствуйте, KromKromov, Вы писали:


KK>>>Пишу модуль ядра для линукс, в котором я новичок, у меня есть следующий вопрос: как можно определить на каком ядре сейчас исполняется мой код из функции модуля. Сразу скажу что код функции будет выполняется на одном ядре весь и проблем с тем что уже следующая инструкция будет исполняться на другом ядре нет.


_>>smp_processor_id() по-моему.


N>Угу. Причём это может быть даже не функция, а макрос, который читает память по смещению от %fs.


Спасибо за совет, встречный вопрос, в гугле нашел такое:
smp_processor_id() returns the current processor number, between 0 and NR_CPUS (the maximum
number of CPUs supported by Linux, currently 32). These values are not necessarily continuous: to get a
number between 0 and smp_num_cpus() (the number of actual processors in this machine), the
cpu_number_map() function is used to map the processor id to a logical number.

попробовал вызвать cpu_number_map(), функция не нашлась. Компилирую под Intel x64 и мне нужно получить именно логическое значение номера ядра, что можно сделать?
Re: Опеределение текущего CPU ядра
От: MikeRip Россия  
Дата: 13.07.11 06:53
Оценка:
smp_processor_id()
вроде бы так...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.