Путеводитель по программному обеспечению: полезные утилиты для разгона и не только. Стресс тест процессора в Linux Linux тестирование процессора невязка

Бенчмарк — это измерение максимальной производительности компьютера, которое выражают в условных очках. Благодаря этому можно сравнить производительность разных компьютеров, либо одного и того же компьютера после, например, разгона или андерволтинга.

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

Бенчмарк может выполняться дли системы в целом, либо для отдельных её составляющих: для центрального процессора, видеокарты, системы ввода-вывода.

В Линукс имеется несколько программ для оценки производительности центрального процессора, например: sysbench , stress-ng и phoronix-test-suite . Из них stress-ng в первую очередь выполняет функции стресс-теста, но она выводит получаемые метрики, поэтому вполне пригодна для оценки и сравнения производительности системы.

Бенчмарк в sysbench

sysbench — это утилита командной строки. Она создана для оценки производительности серверов с сильно нагруженными СУБД, но подходит и для проведения бенчмарков обычных систем.

Установка в Ubuntu, Linux Mint, Debian, Kali Linux:

Sudo apt install sysbench

Встроенные в программу тесты:

  • fileio — Тестирование файлового ввода/вывода
  • cpu — Тестирование производительности CPU
  • memory — Тестирование скорости функций памяти
  • threads — Тестирование производительности подсистемы потоков
  • mutex — тест производительности Mutex

Для запуска теста производительности центрального процессора:

Sysbench cpu run

Обратите внимание как запускается программа: в начале идёт название теста, затем опции (в первом примере их нет), а затем команда.

Для программы установлено два придела выполнения:

  • 10000 операций с числами
  • 10 секунд выполнения

В зависимости от того, что наступит первым, программа завершит свою работу или после 10000 событий, либо после 10 секунд.

Современные процессоры очень производительные и если программа завершилась очень быстро, то данные могут быть искажены. Например, при оценки производительности процессора играет роль, к примеру, троттлинг (сброс частот). Троттлинг начинается из-за перегрева или превышения TDP. Эти эффекты наблюдаются только на длительных дистанциях работы процессора. Если, к примеру, тест завершился за секунду и вы получили n обработанных операций, это не означает, что процессор за 60 секунд выполнит 60 * n операций, поскольку он будет сбрасывать частоты из-за перегрева и выхода за пределы установленного в TDP рассеивания тепла.

Для более длительного выполнения теста используются опции –cpu-max-prime и –time . Первая устанавливает максимальное количество выполненных операций, а вторая — максимальное время проведения бенчмарка. При одновременном использовании опций приоритет имеет –time .

Современные центральные процессоры являются многоядерными и многопотоковыми:

По умолчанию sysbench запускает в один поток. Поэтому если вы хотите задействовать все ядра вашего процессора, используйте опцию –threads . У меня 6 физических и 12 логических ядер центрального процессора, поэтому я буду использовать значение 12, чтобы работали все процессоры.

При использовании опции –cpu-max-prime , чем меньше время завершения программы, тем производительныее центральный процессор:

Sysbench cpu --threads=12 --cpu-max-prime=100000 run

Программа завершила работу слишком быстро — за 10 секунд вряд ли процессор успел подвергнуться серьёзному троттлингу. Поэтому с такими значениями тест подходит для оценки пиковой производительности на короткой дистанции.

Получены результаты:

CPU speed: events per second: 538.23 General statistics: total time: 10.0188s total number of events: 5393 Latency (ms): min: 19.85 avg: 22.27 max: 30.56 95th percentile: 23.10 sum: 120125.61 Threads fairness: events (avg/stddev): 449.4167/4.11 execution time (avg/stddev): 10.0105/0.01

CPU speed events per second означает количество выполненный в центральном процессоре операций за секунду — чем выше значение, тем производительнее система.

General statistics total time означает общее время выполнения операций.

General statistics total number of events означает общее количество выполненный событий.

Если система завершает работу слишком быстро, можно увеличить значение, например, до двухсот тысяч событий:

Sysbench cpu --cpu-max-prime=200000 run

Ещё один способ проверки троттлинга и оценки производительности процессора под длительной нагрузкой, это установка времени выполнении, в примере ниже установлено время в 300 секунд.

Sysbench cpu --threads=12 --time=300 run

У меня при использовании опций –time и –cpu-max-prime CPU speed events per second различается в десятки раз — видимо или какой-то баг в программе, либо программа считает по каким-то другим правилам.

Бенчмарк в phoronix-test-suite

Установите программу:

Sudo apt install phoronix-test-suite

Запустите - в первый раз нужно будет принять лицензионное соглашение, так программа спросит разрешение на отправку анонимной статистики:

Phoronix-test-suite list-available-suites

Предыдущая команда выведит список доступных бенчмарков.

Доступные наборы в версии Phoronix Test Suite v8.0.1

Pts/audio-encoding - Audio Encoding System pts/chess - Chess Test Suite Processor pts/compilation - Timed Code Compilation Processor pts/compiler - Compiler Processor pts/compression - Timed File Compression Processor pts/computational - Computational Test Suite System pts/computational-biology - Computational Biology Test Suite Processor pts/cpu - CPU / Processor Suite Processor pts/cryptography - Cryptography Processor pts/daily-kernel-tracker - Daily Kernel Tracker System pts/daily-system-tracker - Daily System Tracker System pts/database - Database Test Suite System pts/desktop-graphics - Desktop Graphics System pts/disk - Disk Test Suite Disk pts/encoding - Encoding System pts/favorites - Favorites System * pts/gaming - Gaming System pts/gaming-closed - Closed-Source Gaming System * pts/gaming-free - Free Software Gaming System pts/gui-toolkits - GUI Toolkits Graphics pts/ioquake3-games - Games Using The ioquake3 Engine System pts/iqc - Image Quality Comparison Suite Graphics pts/java - Java System pts/java-opengl - Java OpenGL System pts/kernel - Kernel System pts/linux-system - Linux System System pts/machine-learning - Machine Learning System pts/memory - Memory Test Suite Memory pts/mesa - Mesa Test Suite Graphics pts/motherboard - Motherboard System pts/multicore - Multi-Core Processor pts/netbook - Netbook Test Suite System pts/network - Networking Test Suite Network pts/nevada - OpenSolaris Nevada Test Suite System pts/opencl - OpenCL System pts/opengl-demos - OpenGL Demos Test Suite System pts/opengl-workstation - OpenGL Workstation Test Suite System pts/pts-desktop-live - PTS Desktop Live System pts/ray-tracing - Ray-Tracing Test Suite System pts/server - Server Motherboard System pts/ue4 - Unreal Engine 4 Tech Demos On Linux Graphics pts/unigine - Unigine Test Suite Graphics * pts/universe - Universe Test Suite System pts/universe-cli - Universe CLI Test Suite System * pts/universe-x - Universe X Test Suite System pts/video-encoding - Video Encoding System pts/workstation - Workstation System pts/workstation-graphics - Workstation Graphics Graphics pts/xrender - X Render Extension Testing Graphics system/collection - Collection System

Звёздочкой отмечены частично поддерживаемые наборы.

Для запуска оценки производительности центрального процессора выполните:

Phoronix-test-suite run pts/cpu

Обратите внимание, что pts/cpu и другие бенчмарки занимают несколько гигабайт дискового пространства. К примеру, pts/cpu загрузит около 3 Гб данных и будет использовать примерно 7 Гб дискового пространства (в домашней директории пользователя).

О том, как контролировать текущую частоту и температуру процессора в Linux смотрите .

Вам не нравятся номинальные ограничения скорости процессора, Вы предпочитаете разогнать процессор до предела его возможностей? Если процессор сможет работать быстрее, значит и для памяти можно вслед за ним попробовать увеличить тактовую частоту шины и/или множитель. Разогнать процессор просто, - нужно увеличить его рабочую частоту. Разгон частоты процессора (оверклокинг) может привести к нестабильной работе компьютера, а иногда, что впрочем довольно редко происходит, это может привести и вовсе к выходу компьютера из строя. Ну раз уж Вы решились.. Для определения корректности работы процессора в случае разгона полезно будет провести тест стабильности системы при максимальной, пиковой занятости процессора и нагрузке на оперативную память. Иными словами, выяснить, будут ли появляться ошибки процессора и оперативной памяти в режиме повышенной производительности компьютера. Программа LinX это стресс-тест и для ЦП и для RAM.

Тест стабильности системы LinX

Перед тестированием процессора и ОЗУ используя перегрузку ресурсов рекомендуется закрыть все программы, чтобы использовать как можно больше свободной памяти. Тест стабильности системы LinX реализован с использованием технологии Intel Linpack. Стресс-тест-утилита LinX работает с любыми процессорами Intel и AMD, для Intel процессоров приложение поддерживает технологию Intel HyperThreading. LinX может провести тест на стабильность системы в 32-х и 64-х битном режиме тестирования.

Настройки и возможности LinX

  • использование для нагрузки ресурсов пакета Intel Linpack;
  • поддержка технологии Intel HyperThreading (Pentium IV, Atom, Core i7);
  • поддержка процессоров Intel и AMD;
  • нагрузка процессора в несколько потоков;
  • выбор приоритета;
  • автоматическое сохранение настроек после теста;
  • выбор выделяемого объема оперативной памяти для теста;
  • предварительный расчет времени для выполнения стресс-теста;
  • установка максимального объёма задачи Lin32;
  • контроль ошибок с возможностью автоматической остановки стресс-теста при ошибке;
  • автоматическое сохранение отчета тестирования;
  • сигнализация уведомлений звуком;
  • импорт значений температуры процессора, скорости вентилятора ЦП и величин напряжений тока из программ Everest и Speedfan;
  • построение графиков;
  • поддержка командной строки;
  • создание и сохранение скриншотов.

Скриншоты программы LinX



Прогнал я тест Linpack и задумался: а не пора ли мне поменять термопасту на своём ноутбуке?

Да, по результатам нескольких тестов подряд (не буду захломлять статью картинками) видно, что процессор уходит в троттлинг (пропуск тактов и сброс частоты при нагреве), но вот, как быстро он начинает это делать?

Стресстест процессора в терминале Linux

Задавшись этим вопросом и поискав в интернете утилиты, я понял, что основная проблема в решении поставленной мной задачи - одновременный запуск, как минимум пары утилит и разбегающиеся глаза в двух окнах... И я пришёл к выводу, что мне больше подходит консольный вариант, нежели разноцветные окна открытых программ.

Начал я с sysbench:

sudo apt install sysbench

sysbench --num-threads=4 --test=cpu --cpu-max-prime=100000 run

  • --num-threads=4 - это количество потоков, у меня двухъядерный четырёхпотоковый Intel® Core™ i7-640M, поэтому 4;
  • --cpu-max-prime=100000 - это максимальное количество выполненных операций, я выставил в 100000, т.к. по умолчанию - 10000, слишком быстро завершают тест.

Потом я перешёл на Linpack. Так как процессор у меня от Intel и я имею некоторую долю лени (лень - двигатель прогресса), то я взял, скачал и распаковал готовый Intel-овский Linpack , предварительно создав в домашнем каталоге директорию linpack:

mkdir ./linpack
cd ./linpack
wget http://registrationcenter-download.intel.com/akdlm/irc_nas/9752/l_mklb_p_2018.3.011.tgz
tar -xvzf ./l_mklb_p_2018.3.011.tgz

Для AMD процессоров такой вариант я бы не стал пробовать, так как компилятор от Intel вставляет закладки, проверяющие процессор и если он не Intel...ну, подумаешь сотню-другую лишних инструкций процессор выполнит и заведомо проиграет в производительности. Для AMD лучше собрать Linpack из исходников, например, из этих . В данной статье сборку из исходников рассматривать не буду - читайте README в source code.

Вернёмся к Intel-овскому Linpack-у. Там много чего лишнего и мне не нужного, а то, что нужно рассмотрю относительно версии 2018.3.011. Сразу же перейду в нужную директорию, чтоб потом не набирать длинные команды:

cd ./l_mklb_p_2018.3.011/benchmarks_2018/linux/mkl/benchmarks/linpack

Так как по умолчанию Intel-овский Linpack заточен под тестирование серверных Xeon-ов, создадим свой файл, который будет использоваться в качестве входных опций - просто уменьшим количество тестов, иначе устанем "пару-тройку дней" ждать завершения теста. У меня Linux Mint LMDE 3, поэтому я использую текстовый редактор xed, да и нравится он мне бОльшим функционалом, особенно, когда из-под root-а его запускать - он цвет на красный меняет. И так, создаём в этой же директории, в которую перешли, файл, например, my_test:

И в созданный файл копируем следующее содержимое:

Shared-memory version of Intel(R) Distribution for LINPACK* Benchmark. *Other names and brands may be claimed as the property of others.
Sample data file lininput_xeon64.
5 # number of tests
1000 2000 5000 10000 20000 # problem sizes
1000 2000 5008 10000 20000 # leading dimensions
4 2 2 2 1 # times to run a test
4 4 4 4 4 # alignment values (in KBytes)

Ну, и собственно запуск Linpack с созданным файлом:

./xlinpack_xeon64 -i ./my_test

./xlinpack_xeon64 ./my_test

Можно ещё заюзать stress-ng или stress, но поставленной мной задачи это всё-равно не решает. Вывода температуры, частот и времени от начала старта эти утилиты мне не показывают.

Температуру может показать sensors - подробнее про установку этой утилиты . И эта утилита понадобится в дальнейшем рассмотрении моего вопроса. Линукс - велик и могуч: одна и та же задача может решаться по-разному. За Си мне лень было браться и я написал недостающую мне часть на BASH, ибо строк получилось не так уж и много. Без установленной sensors мой скрипт работать не будет. Фиксацию троттлинга естесственно не стал писать - его и так будет видно по сбросу частоты и температуре. Вот сам скрипт:

#!/bin/bash
out=0 # переменная контроля за тестовым процессом
pid_test="tty" # PID тестового процесса (сделан существующей директорией, чтоб запускать без аргументов)
cpus_num=$(cat /proc/cpuinfo | grep -ci "processor") # количество процессоров/ядер/потоков
echo -en "\033[?25l" 1>&2 # скрыть курсор
echo -en "\033[^:]*: //g" | sort -u # вывод модели процессора
echo -en "\033=$(sensors | sed "/Core ""$i""/!d;s/.*crit = +\(.*\)[.]°C).*/\1/")
if [ -n "${cpu_crit_temp[i]}" ]
then
let cpu_red_temp[i]=cpu_crit_temp[i]-10
let cpu_yel_temp[i]=cpu_crit_temp[i]-30
cpu_min_temp[$i]=1000
cpu_max_temp[$i]=0
fi
done
start_time=$(cat /proc/uptime | sed "s/[.] .*$//") # время запуска
if [ -n "$1" ]
then
script_pid="$$"
(if ! $@ > "$0_out" 2>&1 # запуск тестового файла
then
kill -s SIGABRT $script_pid # послать сигнал основному скрипту об отказе запуска
fi 2>/dev/null)&
pid_test="$!" # PID тестового процесса
fi
while (true) # контроль температуры
do
for ((i=0; i<$cpus_num; i++))
do
cpu_freq[$i]=$(cat /sys/devices/system/cpu/cpu${i}/cpufreq/scaling_cur_freq | sed "s/...$//")
cpu_temp[$i]=$(sensors | sed "/Core ""$i""/!d;s/.*+\(.*\)[.]°C[ \t]*(.*/\1/")
if [ -n "${cpu_temp[i]}" ]
then
((${cpu_temp[i]} < ${cpu_min_temp[i]})) && cpu_min_temp[$i]=${cpu_temp[i]}
if ((${cpu_temp[i]} > ${cpu_max_temp[i]}))
then
cpu_max_temp[$i]=${cpu_temp[i]}
time_max[$i]=$(cat /proc/uptime | sed "s/[.] .*$//")
let time_max[i]=time_max[i]-start_time
fi
if ((${cpu_temp[i]} > ${cpu_red_temp[i]}))
then
echo -en "cpu${i}:\t"
echo -en "\033} "
echo -en "\033}"
echo -en "\033}"
echo -en "\033} > ${cpu_yel_temp[i]}))
then
echo -en "cpu${i}:\t"
echo -en "\033} "
echo -en "\033}"
echo -en "\033}°C; max: "
echo -en "\033}"
echo -en "\033}sec) "
else
echo -en "cpu${i}:\t"
echo -en "\033} "
echo -en "\033}"
echo -en "\033}°C; max: "
echo -en "\033}"
echo -en "\033}sec) "
fi
else
echo -en "cpu${i}:\t"
echo -en "\033} "
echo -en "\033 .*$//")
let time=time-start_time
echo -en "Time:\t$time sec. "
[ ! -d "/proc/${pid_test}" ] && break # выход по окончании теста (лучший способ контроля по comm и cmdline, но...лень)
[ "$out" != "0" ] && break # выход при ошибке теста
echo -en "\033[${i}A\r" 1>&2 # перенос курсора вверх на $i строк и на начало строки
sleep 0.1 # пауза, чтоб вывод частот сильно не скакал
done
echo ""
echo -en "\033[?25h" 1>&2 # включение курсора
if [[ "$out" == "0" && -n "$1" ]]
then

rm -fR "$0_out"
exit 0
elif [[ "$out" == "1" && -n "$1" ]]
then
kill -9 "$pid_test" 1>/dev/null 2>/dev/null
cat "$0_out" | sed "/^$/d;/Sample data/d;/CPU frequency/d;/Parameters are set/,/Data alignment value/d"
rm -fR "$0_out"
exit 1
elif [ "$out" == "1" ]
then exit 1
elif [ "$out" == "2" ]
then
echo -en "\033}