Как получить информацию о процессоре в Linux? - PullRequest
3 голосов
/ 04 августа 2010

На моем сервере существует несколько процессоров (0-7). Мне нужно запустить параллельный код, и каждый процесс связан с одним процессором, так как мне узнать информацию о процессоре для каждого процесса?

Например, если существуют два процесса (# 0 и # 1), а процесс # 0 использует CPU 5, а процесс # 1 использует CPU 7.

откуда я знаю это, программируя на C или Fortran?

Ответы [ 5 ]

2 голосов
/ 04 августа 2010

Я не знаю ни одного системного вызова в Linux, который даст вам общую информацию о том, на каком процессоре работает поток. @nos правильно, что sched_getcpu () скажет вам, на каком процессоре работает поток, но только для вызывающего контекста.

Вы можете сделать это, запросив файловую систему /proc. Однако, если вы обнаружите, что строите свое приложение на основе этой функциональности, вполне вероятно, что вам нужно пересмотреть свой дизайн.

Файл /proc/<pid>/stats содержит поле, в котором указан последний процессор, на котором запущен процесс. Вам просто нужно проанализировать вывод. (используйте man proc, чтобы увидеть список полей).

2 голосов
/ 04 августа 2010

Используйте вызов sched_getcpu () .

Имейте в виду, что процесс / поток можно свободно планировать для запуска на любом доступном процессоре / ядре, чтобы один из ваших процессов мог работатьна ядре 1 - одна секунда, а на ядре 2 - следующая миллисекунда. sched_setaffinity ()

позволяет ограничить число процессоров, на которых разрешено запускать процесс
1 голос
/ 04 августа 2010

В общем, задача операционной системы состоит в том, чтобы абстрагировать такие вещи от приложений. Обычно я вижу, как мои приложения (такие же простые, как выполнение grep для огромного файла) время от времени меняют ядро ​​ЦП.

Теперь, если вы хотите принудительно запустить приложение на определенном ядре, вы можете вручную установить привязку к процессору.

В прошлом я писал довольно странное программное обеспечение, и у меня никогда не было желания знать и / или контролировать это.

С чего бы вам хотеть знать?

0 голосов
/ 04 августа 2010

В целом, почему вы хотите знать?Ядро Linux очень хорошо умеет планировать процессы / потоки, чтобы наилучшим образом использовать имеющиеся ядра.

0 голосов
/ 04 августа 2010

Как правило, вам необходимо изменить привязку ЦП, поскольку процесс может мигрировать между процессорами: Связанность ЦП (Linux Journal, 2003).

...