- CPU стресс-тест в Linux, как нагрузить все ядра микропроцессора
- Утилизация мощности двух ядер CPU (40%+70%)
- Наблюдаем за нагрузкой отдельных ядер CPU
- Утилизация 100% мощности одного или нескольких ядер CPU
- Другие связки из простых команд для загрузки ЦПУ
- Грузим процессор на 100% используя pbzip2
- Stress — пакет комплексных нагрузочных тестов ПК
- В заключение
- Чем длительно нагрузить CPU на полную?
CPU стресс-тест в Linux, как нагрузить все ядра микропроцессора
Иногда возникает необходимость выполнить частичную или полную загрузку микропроцессора на персональном компьютере или сервере. Это может понадобиться для стресс-тест системы, для проверки стабильности работы, оценки эффективности системы охлаждения и измерения потребляемой компьютером или сервером мощности под нагрузкой.
В статье приведены конструкции из простых и всегда доступных консольных команд в GNU Linux, которыми можно нагрузить одно или все ядра процессора. Также рассмотрим компактный но очень мощный пакет для стресс-тестов под Линукс, который можно установить одной командой. Все подробно и с примерами!
Утилизация мощности двух ядер CPU (40%+70%)
Опытный пользователь операционной системы (ОС) GNU Linux не раз сталкивался со случаями когда простая команда с небольшой ошибкой могла загрузить микропроцессор под самую завязку. Этим мы и воспользуемся, только у нас будет все продумано и с конкретной целью.
Сперва рассмотри достаточно интересную связку из двух отдельных команд, соединенных через конвейер (символ «|», перенаправление ввода-вывода).
dd if=/dev/urandom | bzip2 -9 > /dev/null
Ее суть: читаем случайные данные из файла «/dev/urandom» используя утилитку ‘dd’, через конвейер «|» перебрасываем эти считанные данные программе-архиватору «bzip2», указываем максимальный уровень сжатия (9) и выводим данный в «черную дыру», то есть в никуда — для этого есть специальный файл «/dev/null».
Таким образом, пока команда запущена (прервать ее можно нажав CTRL+C), архиватор будет сжимать непрерывный поток случайных данных и пересылать результат в вечно пустой файл. На физические диски и файловые системы ничего не пишется, а процессору есть немало работы.
Данная связка из команд загрузит два ядра CPU (Central Processor Unit) таким образом:
- «dd if/dev/urandom» — загрузит одно ядро примерно на 40%;
- «bzip2 -9» — загрузит второе ядро примерно на 70%.
Для чтобы загрузить дополнительные ядра микропроцессора нужно открыть дополнительные окна терминала и запустить несколько клонов данной команды.
Наблюдаем за нагрузкой отдельных ядер CPU
Для удобного наблюдения за нагрузкой на каждое из ядер микропроцессора можно использовать программу «System Monitor», которая входит в состав рабочего окружения KDE. Программа с похожим функционалом и таким же названием есть и в среде GNOME.
Рис. 1. Мониторим загрузку двух ядер CPU в GNU Linux используя System Monitor из KDE.
На рисунке результат загрузки двух ядер связкой из двух команд которая были рассмотрена выше. Одно ядро — оранжевй график (70%), другое ядро — желтый график (40%).
С такой же задачей, только в консоли, отлично справляется утилита «htop», которая должна быть знакома почти каждому системному администратору. Если у вас она не установлена то исправить ситуацию можно командой:
Для запуска этого консольного монитора ресурсов используем одноименную команду:
Ниже приведен пример работы этого консольного монитора ресурсов, загружены два ядра все той же связкой из команд dd и bzip2.
Рис. 2. Мониторинг нагрузки двух ядер CPU в GNU Linux используя HTOP.
Что же означают в HTOP красные и зеленые отметки в прогресс-барах для ядер CPU? — все проще простого:
- зеленый цвет — количество ресурсов процессора, выделенные под процессы с нормальным приоритетом;
- красный цвет — ресурсы CPU, выделяемые процессам с приоритетом ядра.
О том как узнать частоту установленного микропроцессора(ров), режимы работы ядер и другую полезную информацию я писал в одной их предыдущих статей о CPU в GNU Linux.
Утилизация 100% мощности одного или нескольких ядер CPU
Для этой цели можно использовать команды, которые обрабатывают непрерывный поток данных на очень высокой скорости, без периодических колебаний нагрузки как в случае с bzip.
Скажем микропроцессору «yes». только очень много раз!
С виду простая и безобидная команда, а нагрузит она одно ядро CPU примерно на 100% и без скачков. Суть этой конструкции проста: выводим слово «yes» бесконечное количество раз и перенаправляем вывод в «черную дыру» — /dev/null.
Рис. 3. Нагружаем одно ядро CPU на 100% командой yes в GNU Linux.
Другие связки из простых команд для загрузки ЦПУ
Пример с командой «yes» — это наиболее простой и доступный способ нагрузить одно или несколько ядер центрального процессора.
Кроме того, можно поэкспериментировать и с другими командами и программами, которые по умолчанию доступны почти в каждом дистрибутиве GNU Linux.
Суть построения подобных связок из команд следующая:
- Что-то откуда-то беспрерывно считываем и перенаправляем в /dev/null;
- Выполняем бесконечный анализ данных какой-то программой или утилитой.
Следующая связка позволяет загрузить одно ядро под самый потолок:
Рис. 4. Нагружаем одно ядро CPU по максимуму на 100% командой cat в GNU Linux.
Суть команды: при помощи команды «cat» выполняем вывод бесконечного потока дынных из псевдо-устройства «/dev/zero» (генерирует нули, 000) в пустоту «/dev/null»;
Как видим процесс у нас выполняется с высоким приоритетом (приоритет ядра ОС) и требует для выполнения всю вычислительную мощность одного процессорного ядра.
Для считывания данных из файла псевдо-устройства можно использовать программу «dd».
dd if=/dev/urandom of=/dev/null
Суть команды: с помощью программы «dd» (if — input file, of — output file) читаем поток случайных данных из /dev/urandom и отправляем их в «никуда» — /dev/null.
Результат мониторинга загрузки ядер в HTOP получим такой же как и на рисунке 4.
А теперь загрузим процессор подсчетом контрольной суммы бесконечного файла с нулями:
В htop мы сможем видеть то же то и на рисунке 3, правда плотность загрузки будет более стабильной.
Грузим CPU просчитывая MD5-сумму бесконечного потока случайных данных:
График загрузки будет идентичен тому что на рисунке 4, микропроцессор загружен процессом, который работает на уровне ядра ОС, очень высокий приоритет.
Грузим процессор на 100% используя pbzip2
В начале статьи был представлен пример с bzip2, которая поотдельности может нагрузит одно ядро микропроцессора. Существует также мультипоточная реализация данного архиватора — pbzip2.
Установить pbzip2 можно командой:
Для нагрузки всех доступных ресурсов процессора достаточно запустить следующую команду:
cat /dev/zero | pbzip2 -c > /dev/null
Вместо источника потока «/dev/zero» можно использовать «/dev/urandom» или же собрать еще более простую конструкцию:
Stress — пакет комплексных нагрузочных тестов ПК
О применении утилиты «stress» в GNU Linux я уже писал в статье о самостоятельном ремонте ПК. Там она использовалась в связке с другими программами для получения такого себе нагрузочного стресс-набора на подобии AIDA64 под Windows.
Этой программой можно нагрузить сразу все доступные ядра CPU или же указать конкретно сколько ядер должны трудиться в поте лица. Для установки пакета ‘stress’ достаточно выполнить команду:
sudo apt-get install stress
Итак, запускаем программу с указанием загрузить 4 ядра микропроцессора:
Результаты производительности приведены ниже.
Рис. 5. Нагружаем все ядра CPU по максимуму на 100% командой stress в GNU Linux.
Рис. 6. Смотрим результат работы программы stress в htop.
В заключение
Как видим, нагрузить отдельное ядро процессора или же несколько ядер даже без установки специального программного обеспечения в GNU Linux — задача вполне реальная. Каждый может выбрать себе связку команд, которую легко запомнить и использовать. К тому же, строить подобные связки зная принцип их работы можно самостоятельно буквально на лету.
Но все же, установив небольшой программный пакет «stress» можно решить задачу комплексно и с дополнительными возможностями. Еще для нагрузки и тестов Linux системы можно использовать мощный комбайн «phoronix-test-suite», который придется ставить отдельно (в репозитории Debian его нет), но это уже другая история.
Чем длительно нагрузить CPU на полную?
Собственно, вопрос в заголовке. Есть ноутбук, в нем i7-4702HQ. Хочу дать ему непрерывную максимальную нагрузку чтобы посмотреть на температуру и узнать, способна ли установленная система охлаждения справится с таким режимом работы.
На ум приходит встроенный бенчмаркинг 7z или geekbench в цикле. Может запустить какую-то компиляцию?
libreoffice, llvm, qtwebengine
вот где бы светоч пригодился
install gentoo + emerge firefox libreoffice qtwebengine
Я лично в таких случаях делаю
столько раз, сколько в системе ядер. Работает предсказуемо, надёжно, везде. Один urandom загружает одно ядро.
Запустить многопоточный архиватор с максимальным сжатием из /dev/urandom
ism ★★★ ( 12.03.18 03:01:10 MSK )
Последнее исправление: ism 12.03.18 03:03:23 MSK (всего исправлений: 6)
Установи кучу говно-приложений на Electron. Запусти их все. Но может не выйти, скорее всего, раньше отвалится твоя оперативка. Уйдёт в своп и всё зависнет 🙂
Если компиляция, то chromium — вот это жесть.
А так, да urandom неплохой вариант. iotop, емнип, тоже грузит одно ядро на полную
There are several options for the torture test (menu option 15).
Small FFTs (option 1) to stress the CPU
greenman ★★★★★ ( 12.03.18 03:35:41 MSK )
Последнее исправление: greenman 12.03.18 03:37:56 MSK (всего исправлений: 1)
вообще-то для таких случаев есть stress — ка раз для стресс-тестирования системы. Не только для проца, умеет в рам, хдд и своп, вроде.
Странно, что никто не посоветовал.
Вдобавок к вышеупомянутым программам советую попробовать cpuburn.
These programs are designed to load x86 CPUs as heavily as possible for the purposes of system testing. They have been optimized for different processors. FPU and ALU instructions are coded an assembler endless loop. They do not test every instruction. The goal has been to maximize heat production from the CPU, putting stress on the CPU itself, cooling system, motherboard (especially voltage regulators) and power supply (likely cause of burnBX/MMX errors). burnP5 is optimized for Intel Pentium w&w/o MMX processors P6 is for Intel PentiumPro, PentiumII&III and Celeron CPUs K6 is for AMD K6 processors K7 is for AMD Athlon/Duron processors MMX is to test cache/memory interfaces on all CPUs with MMX BX is an alternate cache/memory test for Intel CPUs
Тесты в cpuburn однопоточные, для многоядерных процессоров нужно запускать соответствующее количество экземпляров одного и того же теста. Здесь описаны примеры: https://www.hecticgeek.com/2012/03/cpuburn-cpu-stress-test-ubuntu-linux/
Несмотря на то, что кодовая база проекта для платформы x86 не обновлялась с 2004 года (кроме баг-фиксов), всё же он может быть более полезным для стресс-теста конкретно охлаждения, чем вышеупомянутые аналоги. Он может сильнее нагрузить процессор, чем аналогичный тест, который делает лишь простую целочисленную арифметику. То есть, при одинаковой загруженности процессора в 100% его температура может отличаться в зависимости от задач, которые он решает.
Универсальные бенчмарки вроде Geekbench исполняют кучу различных тестов, обычно по очереди. Это и однопоточные операции, и многопоточные, и целочисленная арифметика, и задействование FPU и различных расширений. Но эти тесты не ставят перед собой задачу максимально нагреть процессор. Теоретически, процессор может даже немного остывать в менее затратных по электроэнергии тестах.
Да, вот конкретно на примере Geekbench 4 указаны куча тестов для CPU https://www.geekbench.com/doc/geekbench4-cpu-workloads.pdf. Но при этом там есть такая заметка:
Geekbench inserts a pause (or gap) between each workload to minimize the effect thermal issues have on workload performance.
То есть, Geekbench 4 умышленно делает паузу, чтобы дать процессору немного остыть между тестами. Именно это совсем не подходит для твоей задачи. Насколько я понял, там можно регулировать эту паузу, но я не знаю, насколько.
С другой стороны, если в Geekbench можно запустить выполнение конкретного теста в режиме нон-стоп без всяких пауз, то почему бы и нет? Там есть ряд тестов, которые используют новые расширение, новые инструкции. Возможно, один из этих тестов может оказаться наиболее «горячим» для конкретно твоего процессора.
Вернемся к cpuburn. Конечно, за 14 лет многое изменилось, в тестах cpuburn нет новых инструкций, не проводились оптимизации для новых поколений процессоров. И тем не менее, было бы интересно посмотреть, до каких предельных температур нагревают современные процессоры разные тесты.