Процессор Affinity в Linux - PullRequest
       18

Процессор Affinity в Linux

3 голосов
/ 27 января 2010

Спасибо за ответы на все вопросы!

У меня двухъядерные процессоры, и я хотел бы, чтобы все процессы работали на core1 но один. Теперь я знаю, что могу использовать набор задач, чтобы установить все запущенные в данный момент быть привязанным к процессору 1, например. Теперь я хотел бы, чтобы мое собственное приложение было запланировано для выполнения на процессоре 2 сразу после запуска приложения. Другими словами, есть ли способ сообщить ОС в моем приложении, что я хотел бы, чтобы эта конкретная программа выполнялась на процессоре № 2?

Большое спасибо, Mareika

Ответы [ 4 ]

2 голосов
/ 30 июля 2010

Посмотрите на эту статью:

http://www.linuxjournal.com/article/6799

Что охватывает предмет в деталях.

Короче говоря, убедитесь, что init запускается со сродством к одному процессу (его дети наследуют), тогда вам нужно использовать:

// (Declaration got via 'man sched_setaffinity')
int sched_setaffinity(pid_t pid, size_t cpusetsize,
                         cpu_set_t *mask);

Чтобы установить соответствие процессов сразу после запуска программы.

2 голосов
/ 27 января 2010

Вы можете использовать:

taskset -c 1 -p 123

чтобы запустить процесс 123 на ядре 2.

2 голосов
/ 27 января 2010
1 голос
/ 27 января 2010

Я бы искал способ ограничить запуск процесса 'init' на процессоре 1. * Поскольку сродство с процессором наследуется, это должно привести к тому, что все остальные процессы в системе также будут запускаться на процессоре 1, пока вы не запустите конкретный процесс. специальный процесс с привязкой процессора к процессору 2.

* В качестве альтернативы, после запуска системы вы можете переназначить привязку всех запущенных в данный момент процессов, но это выглядит менее элегантно.

...