Як в Linux, як сказати, скільки ядер машини активні?


14

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


1
Під "активним" я припускаю, що ви маєте на увазі, скільки ядер зараз використовується? Або ти маєш на увазі, скільки ядер має система?
Мікель

так, я хотів би сказати, скільки зараз використовується

Відповіді:


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, так і в центсі і графічно показує, скільки процесорів і як вони використовуються.

для центів:

yum install htop

для ubuntu:

apt-get install htop

2

Спробуйте наступне:

cat /proc/cpuinfo

Ось посилання на приклад Java для Android.


1
Під "активним" я припускаю, що Аніл означає, скільки ядер зараз використовується, а скільки непрацюючих, тобто наближення до того, наскільки зайнята система. /proc/cpuinfoпросто говорить вам, скільки ядер має система, і навіть вам доведеться зробити більше, ніж cat /proc/cpuinfoобліковувати HyperThreading.
Мікель

Гаразд - це було не ясно, але ти маєш рацію.
Амір Афгані

0

Ви можете використовувати cat / sys / пристрої / system / cpu / можливо або cat / sys / пристрої / system / cpu / онлайн. Можливо, головним чином, якщо ви виділили процесор для запуску певної програми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.