Настройки соответствия процессоров для модулей ядра Linux? - PullRequest
1 голос
/ 13 июня 2010

В Windows я могу установить привязку процессора к коду драйвера, используя KeSetSystemAffinityThread, и проверить, на каком процессоре работает мой код, используя KeGetCurrentProcessorNumber.

Я пытаюсь сделать нечто подобное в модуле ядра Linuxно единственные вызовы схожести, которые я вижу, относятся к процессам пользовательского пространства.Есть ли способ сделать это, чтобы я мог запустить ассемблерный код на конкретном процессоре?(т.е. sgdt)

Редактировать:

Я думаю, что я выяснил, как получить текущий процессор.smp_processor_id () похоже, что он должен работать.

Ответы [ 2 ]

4 голосов
/ 13 июня 2010

Я думаю, вам, вероятно, придется модифицировать ядро, но изменение не слишком грубое. Просто экспортируйте sched_setaffinity in sched.c в модули:

  long sched_setaffinity(pid_t pid, const struct cpumask *in_mask)
  {
    ...
  }
+ EXPORT_SYMBOL_GPL(sched_setaffinity); // Exported, now callable from your code.
1 голос
/ 15 июня 2010

smp_processor_id() должен сообщить вам, на каком логическом процессоре вы работаете.

Некоторые архитектуры также поддерживают функцию ядра smp_call_function_single, которая будет использовать межпроцессорное прерывание для запуска функции на другом процессоре.

...