В Linux, как определить количество активных ядер машины?


13

В Linux, как определить количество активных ядер машины? Я предполагаю, что тест для этого будет работать для Android тоже. Мне нужно знать, активно ли более одного ядра. Хотелось проверить это, создав процесс, создающий много потоков. Возможно ли для потока запросить, на каком процессоре он работает? таким образом, можно определить, будут ли когда-либо использоваться несколько ядер под большой нагрузкой. Не уверен, что я на правильном пути.


Под «активным» я предполагаю, что вы имеете в виду, сколько ядер используется в настоящее время? Или вы имеете в виду, сколько ядер у системы?
Микель

да, я хотел бы сказать, сколько в настоящее время используется

Ответы:


19

Вы можете использовать, topчтобы перечислить использование каждого ядра. Нажмите 1, если необходимо, чтобы разделить строку ЦП на отдельный ряд для каждого ядра.

Вы также можете добавить столбец, который показывает последнее использованное ядро ​​для каждого процесса. Нажмите f, чтобы вызвать список полей, затем j, чтобы активировать столбец «P». Затем нажмите пробел, чтобы вернуться к просмотру в реальном времени.


Поэтому, возможно, мне следует написать и запустить программу, которая порождает много потоков, а затем запустить команду «top» в консоли?
likejudo

Я думаю, что это должно работать. Просто нажмите H, когда вы будете в topсписке тем отдельно. Или вы можете написать программу с бесконечным циклом и запускать ее несколько раз.
Брайан

Скажем, я пишу программу для создания 100 потоков, каждый из которых выполняет длительные интенсивные вычисления. Если я напишу это на Java (Android), есть ли гарантия, что JVM / KVM будет запускать потоки на разных ядрах и запускать их на всех ядрах?
likejudo

1
Я не знаю - разве это не ваш эксперимент?
Брайан

Мне нужно протестировать программу, которая говорит, что она ограничит количество используемых процессорных ядер. Я буду искать еще немного. Благодарность!
likejudo

6

psимеет поле, psrчтобы сообщить вам, на каком процессоре выполняется задание.

Таким образом, вы можете использовать что-то вроде:

ps -e -o psr= | sort | uniq | wc -l

Обратите внимание, что простое выполнение, psкак это, конечно, сделает активным хотя бы одно ядро.

Вероятно, лучше запустить это:

tmp=/tmp/ps.$$
ps -e -o psr= > /tmp/ps.$$
sort -u "$tmp" | wc -l
rm "$tmp"

Таким образом, sortи wcне увеличивать количество.


Что если система имеет 16 ядер, и никто не использует некоторые из них?

Затем он печатает 0, потому что ни один из них не используется. Я думаю, что это то, о чем вопрос.
Микель

Не видел новых комментариев к вопросу.

1
Конечно, запустив, psмы активируем как минимум 1 ядро. ;-)
Микель

Спасибо за Ваш ответ. Недостатком является то, что мне нужно знать, активно ли более одного ядра. Хотелось проверить это, создав процесс, создающий много потоков. Возможно ли для потока запросить, на каком процессоре он работает? таким образом, можно определить, будут ли когда-либо использоваться несколько ядер под большой нагрузкой. Не уверен, что я на правильном пути.

3
htop

Эта команда хорошо работает как в Ubuntu, так и в Centos и графически показывает, сколько процессоров и как они используются.

для Centos:

yum install htop

для убунту:

apt-get install htop

2

Попробуйте следующее:

cat /proc/cpuinfo

Вот ссылка на пример Android Java.


1
Под «активным» я полагаю, что Anil означает, сколько ядер используется в настоящее время и сколько не используется, то есть приблизительное значение загруженности системы. /proc/cpuinfoпросто говорит вам, сколько ядер у системы, и даже вам придется сделать больше, чем cat /proc/cpuinfoдля учета HyperThreading.
Микель

Хорошо - это было не ясно, но вы правы.
Амир Афгани

0

Вы можете использовать cat / sys / devices / system / cpu / возможный или cat / sys / devices / system / cpu / online. В основном это возможно, если у вас есть отдельный процессор для запуска какой-то конкретной программы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.