Який правильний спосіб переглянути швидкість роботи процесора в Linux?


20

Я знайшов дві команди для виведення інформації про мій процесор: cat /proc/cpuinfoі lscpu. /proc/cpuinfoпоказує, що моя швидкість процесора становить 2,1 ГГц, тоді як lspcuговорить, що вона становить 3167 МГц. Який з них правильний?

Це мій точний вихід cat /proc/cpuinfoприблизно від моєї швидкості процесора:

model name  : Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz

І це від lscpu:

CPU MHz:               3225.234

(Чомусь lscpuщоразу виходить по-різному, коливаючись між 3100 та 3300 МГц)


3
У вас /proc/cpuinfoтакож має бути лінія, яка говорить, cpu MHZ: ...яка поточна швидкість. 2.1 після @є базовою швидкістю (без турбо-прискорення).
don_crissti

Що таке turbo boost? І так це означає, що моя швидкість насправді становить близько 3,2 ГГц?
Рохан

2
Це спосіб Intel "влучити в газ" при необхідності. Я здогадуюсь, ваша реальна швидкість на той час дійсно була приблизно 3,2 ГГц, ви також можете спробувати, наприклад, для cpu0 з cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq(як root).
don_crissti

2
Turbo Boost - це технологія, яка змінює частоту процесора залежно від кількості використовуваних ядер. Якщо ви використовуєте кілька ядер, частота збільшується для підвищення продуктивності та підтримки низької температури. Ви можете перевірити частотні таблиці Turbo Boost, щоб перевірити, як вона збільшується.
Хайме

Відповіді:


35

Щоб побачити поточну швидкість кожного ядра, я роблю це:

watch -n.1 "cat /proc/cpuinfo | grep \"^[c]pu MHz\""

Примітка:

Якщо ваша watchкоманда не працює з інтервалами, меншими за одну секунду, змініть інтервал так:

watch -n1 "cat /proc/cpuinfo | grep \"^[c]pu MHz\""

Це відображає cpu speedкожне ядро ​​в режимі реального часу.

Запустивши наступну команду один чи декілька разів з іншого терміналу, можна побачити зміну швидкості за допомогою вищевказаної watchкоманди, припускаючи, що SpeedStepвключена ( Cool'n'Quietдля AMD).

echo "scale=10000; 4*a(1)" | bc -l &

(Ця команда використовує bcдля обчислення piдо 10000 місць.)


Мені довелося видалити .у вашій першій команді, щоб вона працювала:watch -n1 "cat /proc/cpuinfo | grep \"^[c]pu MHz\""
n1k31t4,

1
це чудовий спосіб зробити це, але я застеріг би не виконувати будь-яку команду кожні 1 секунди, що саме вплине на звіт про швидкість процесора. 1 секунда - це багато.
Лізардкс

@Lizardx Зазвичай я згоден, але в цьому випадку швидкість процесора може збільшуватися і знижуватися швидше, ніж інтервал в 1 секунду, що призводить до відсутності видимих ​​змін швидкості. Оскільки сучасні процесори настільки швидкі, я спочатку вважав, що мій SpeedStepне працює, коли в якості інтервалу використовується 1 секунда. Як мінімум, його .5слід використовувати, якщо хтось не хоче їхати так швидко, як .1 second(хоча я все ще пропустив, побачивши багато змін швидкості з такою швидкістю.
Тімоті Мартін

1
Спробуйте запустити вершину з таймерами, встановленими на менше 1 секунди, ви зможете помітно бачити використання процесора. Я здогадуюсь, що те, що ви насправді можете бачити, - це система, яка генерує вашу інформацію про швидкість процесора, тобто генерація виходу швидкості процесора викликає рух процесора. Я вважаю, що все, що менше секунди, починає безпосередньо викликати швидкості процесора, яку ви переглядаєте. Наприклад, топ -d5 становить 1% процесора. При -d2 це близько 5%. Ви можете виявити, що насправді обманюєте себе, думаючи, що процесор робить щось, що ви змушуєте це робити, так. Вихід в оболонку теж дорогий.
Лізардкс

Можна спробувати watch -n0.1, може, спрацює. Якщо цього не зробити, while true; do cat /proc/cpuinfo | grep MHz; sleep 0.1; clear; doneце мерехтить більше, ніж дивитися.
Стівен Лу

7

Для процесорів на базі intel i3, i5 та i7 існує спеціальний інструмент, який називається, i7zякий показує поточну швидкість для всіх процесорних ядер.

З чоловічої сторінки (опис):

i7z запускає програму i7z, заснована на ncurses, без будь-яких варіантів. i7z роздрукує C-стану та температуру для процесорів Core на базі i3, i5 та i7 (включаючи Nehalems, Sandy Bridge та Ivy Bridge).

Для дистрибутивів на основі ubuntu ви можете встановити його, видавши цю команду:

sudo apt-get install i7z

тоді просто запустіть його (інструмент потрібно запустити з sudo):

sudo i7z

4
Це найкраще рішення, якщо у вас є процесор Intel. Cat'ing cpuinfo дає вам неправильну тактову швидкість. Просто зауваження, ви забули поставити тире в "підході".
fgblomqvist

Ну ... він працює з моїм процесором Xeon, лише вихід є гарним, можливо тому, що у мене є два процесори (у мене є подвійна материнська плата Xeon).
Алексіс Вілке

4

Процесор Intel Core i7-4600U підтримує технологію Turbo Boost . Він має базову частоту 2,10 ГГц і Макс Турбо частоту 3,30 ГГц. Це означає, що

  • Якщо ви відключите Turbo Boost (у меню налаштування BIOS), процесор буде працювати на частоті 2,10 ГГц.
  • Коли Turbo Boost увімкнено і працює лише одне з ядер, процесор буде працювати на максимумі 3,30 ГГц.
  • Якщо Turbo Boost увімкнено, а всі ядра працюють, процесор буде працювати на частоті 2,10 ГГц.

Отримання частоти струму

Щоб визначити, чи активовано Turbo Boost і яка поточна частота, ви можете використовувати cpupower frequency-info. Наприклад, для старого Intel Core i5-660 з включеним Turbo Boost ви отримаєте наступне.

$ cpupower frequency-info
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 10.0 us.
  hardware limits: 1.20 GHz - 3.47 GHz
  available frequency steps: 3.47 GHz, 3.33 GHz, 2.53 GHz, 1.87 GHz, 1.20 GHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, performance
  current policy: frequency should be within 1.20 GHz and 3.47 GHz.
              The governor "ondemand" may decide which speed to use
              within this range.
  current CPU frequency is 1.87 GHz.
  cpufreq stats: 3.47 GHz:82,67%, 3.33 GHz:0,00%, 2.53 GHz:0,00%, 1.87 GHz:0,06%, 1.20 GHz:17,28%  (3)
  boost state support:
    Supported: yes
    Active: yes
    25500 MHz max turbo 4 active cores
    25500 MHz max turbo 3 active cores
    25500 MHz max turbo 2 active cores
    25500 MHz max turbo 1 active cores

Зауважте, що в інформації вказані апаратні межі ( 1.20 GHz - 3.47 GHz), можливі частоти ( 3.47 GHz, 3.33 GHz, 2.53 GHz, 1.87 GHz, 1.20 GHz) та поточна частота ( 1.87 GHz). Ви можете знайти технічну інформацію про ці частоти на веб-сайті Intel .

Частота, коли TurboBoost відключений

Зауважте різницю, коли ви запускаєте ту саму команду з вимкненим Turbo Boost: У boost state supportрозділі значення для Supportedта Activeє no. Тут процесор буде весь час знаходитись на номінальному / мінімальному значенні (1,20 ГГц).

$ cpupower frequency-info
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 10.0 us.
  hardware limits: 1.20 GHz - 3.47 GHz
  available frequency steps: 3.47 GHz, 3.33 GHz, 2.53 GHz, 1.87 GHz, 1.20 GHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, performance
  current policy: frequency should be within 1.20 GHz and 3.47 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 1.20 GHz.
  cpufreq stats: 3.47 GHz:40,86%, 3.33 GHz:0,01%, 2.53 GHz:0,06%, 1.87 GHz:0,22%, 1.20 GHz:58,85%  (493)
  boost state support:
    Supported: no
    Active: no
    25500 MHz max turbo 4 active cores
    25500 MHz max turbo 3 active cores
    25500 MHz max turbo 2 active cores
    25500 MHz max turbo 1 active cores

Ви можете відключити Turbo Boost за допомогою BIOS або деяких параметрів / команд Linux . Підтримку ядра можна вмикати / вимикати за допомогою /sys/devices/system/cpu/cpufreq/boostфайлу.


Haypo має запис у блозі з додатковою інформацією про драйвер п-стану Intel, C-стани, Turbo Boost та команди для отримання інформації про частоту.
Хайме

це посилання зараз розірвано ...
Михайло Т.

1
Посилання на запис у блозі haypo порушено. Ви можете знайти копію в примітках Віктора Стіннера: частина 1 та частина 2 .
Хайме

4

Частоти процесора зберігаються в ядрі, але їх можна трохи «вимкнути». Ви можете бачити їх, використовуючи:

$ cd /sys/devices/system/cpu
$ paste <(cat cpu*/cpufreq/affected_cpus) <(cat cpu*/cpufreq/scaling_cur_freq) | column -s $'\t' -t
0  833914
1  800021
2  800086
3  800029
4  800036
5  800460
6  800118
7  800141

Якщо вам не потрібно знати, що коротший метод CPU # просто використовується:

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
1396354
800058
800050
800024
800005
800017
800001
1392006

Цей метод , здається, працює на Raspberry Pi працює Raspbian
Jon

3

Для отримання інформації про ваш процесор введіть таку команду:

dmidecode -t 4

2
Cuspy. Зараз я бачу тут 4 різних номера ;-)
vonbrand

Крім того, "швидкість струму", здається, вводить в оману, оскільки поточна швидкість в даний час завжди повідомляється як велика кількість (3,7 ГГц), коли машина не працює.
ragerdl

@vonbrand Людина з одним годинником знає, який час. Людина з двома годинниками ніколи не може бути абсолютно впевненою.
Kusalananda

0

Залежить від того, для чого ви використовуєте інформацію; рядок виводу з cat / proc / cpuinfo` - це "рекламована" швидкість, швидкість в брошурі тощо. Якщо ви порівнюєте сервер А з сервером B, це може бути достатньо. Якщо ви відстежуєте навантаження на роботу в системі, коментарі до вашого питання та відповідь від @ gad3r будуть тим, на що слід звернути увагу.

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