Стресс тест cpu в linux. Работаем с Phoronix Test Suite, или как тестировать производительность виртуальных машин в Linux? Атрибуты прав доступа к файлу включают

Мониторинг осуществляется с помощью комплекта программ lm-sensors .


aptitude install lm-sensors

Снимать показания датчиков можно командой:


sensors

В реальном времени мониторинг температуры осуществляется следующей командой:


watch sensors

В выводе команды содержится информация о напряжении, скорости вращения вентилятора, температуре процессора (каждого ядра в отдельности), температуре жёстких дисков. Важным показателем является максимально зафиксированное значение температуры (поле high в показаниях температуры ядра). Мониторить только температуру процессора можно командой:


while {true} do date; sensors | grep Core; echo "======"; sleep 1s; done

Также существуют различные графические утилиты для отображения показаний lm-sensors . Для GNOME удобно использовать апплет GNOME Sensors Applet .

Стресс-тестирование процессора

Пакет cpuburn

Проверка работоспособности драйверов видеокарты

Проверим наличие 3D-ускорения:


glxinfo | grep OpenGL

Вывод должен быть таким:


OpenGL vendor string: Tungsten Graphics, Inc OpenGL renderer string: Mesa DRI Intel(R) G33 GEM 20100330 DEVELOPMENT OpenGL version string: 1.4 Mesa 7.10-devel OpenGL extensions:

Проверим поддержку 3D-ускорения средствами видеокарты:


glxinfo | grep direct

Если поддержка 3D реализована, вывод будет таким:


direct rendering: Yes

Проверим скорость работы 3D:


glxgears

Появится окно с простой 3D-анимацией. В консоль при этом будет каждые 5 секунд выводиться информация о скорости рендеринга. Нормальные значения FPS для настроенного драйвера должны быть в среднем выше 1000 (если включена вертикальная синхронизация, то значение FPS будет ограничено частотой синхронизации).

Ещё один тест OpenGL:


/usr/lib/xscreensaver/glblur -fps

Появится окно скринсейвера, в котором будет отображаться значение FPS.

В случае каких-либо проблем, можно переустановить видеодрайвер (для встроенных видеокарт Intel нужно переустановить пакет xserver-xorg-video-intel ). Настройки драйвера осуществляются программой driconf . Также для контроля работы видеокарты Intel можно установить пакет intel-gpu-tools (в пакет входит утилита intel_gpu_top, позволяющая в реальном времени мониторить загрузку видеопроцессора).

Тестирование производительности системы

Пакет phoronix-test-suite

Тестирование производительности осуществляется программой phoronix-test-suite . Она представляет собой программную оболочку, позволяющую в автоматическом режиме скачивать и запускать различные программы тестирования, собирать и хранить данные о результатах тестов.

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


aptitude install phoronix-test-suite

Просмотреть список всех доступных тестов с их кратким описанием можно следующей командой:


phoronix-test-suite list-tests

Тесты запускаются командой:


phoronix-test-suite benchmark ИМЯ_ТЕСТА

  • Процессор :

    • c-ray - многопоточный математический тест. Высокая нагрузка на процессор. Результат на C2D 2.0: 387.55 секунд.

    • build-linux-kernel - сборка ядра Linux. Долгий тест. Равномерно нагружает процессор и память (использует gcc).

    • scimark2 - мощный однопоточный тест (интенсивные научные вычисления). Показывает производительность одного ядра в гигафлопсах.

    • ffmpeg - кодирование видео (тестовые файлы занимают 130MB). На C2D 2.0: 25.99 секунд.


  • Память :

    • ramspeed - тест памяти. Средняя нагрузка на процессор. Результаты DDR2-800 2Gb (copy,int) : 2280.10 MB/s.

    • stream - показывает скорость памяти в различных операциях.


  • Жёсткий диск :

    • iozone - тест жёсткого диска. Показывает скорость чтения и записи для блоков различной длины. Результат WD 80Gb (W,4K,512M): 52.42 MB/s.


  • Графика :

    • gtkperf - тестирование различных элементов графического интерфейса GNOME.

    • unigine-tropics - красивый 3D-бенчмарк, необходимы настроенные драйвера с поддержкой 3D-ускорения.


Для длительного разнопланового тестирования рекомендуется build-linux-kernel . Для короткого стресс-тестирования c-ray (наряду с программой

Вопросом диагностики компьютера владельцы ПК или ноутбуков обычно озадачиваются при регулярных ошибках в их работе. Но немалая доля энтузиастов увлекается разгоном процессоров, видеокарт, завышением рабочих частот памяти и т.п. Естественно, что бесперебойная работа в таких нештатных ситуациях не гарантируется, и оверклокерам в процессе разгона приходится проверять стабильность работы разгоняемого устройства. Проверка процессора – обязательный этап при разгоне CPU. Предлагаемая статья как раз и посвящена вопросу проверки работы процессора под максимальной нагрузкой после разгона . Утилита LinX 0.6 с очень простым интерфейсом поможет нам в этом.

Недавно на сайте была статья о , в которой лишь упоминалось о необходимости диагностики CPU, но разъяснений не было. Сегодня я решил восполнить этот пробел и описать процедуру проверки процессора. Для диагностики компьютера понадобится всего одна утилита, предназначенная для максимальной нагрузки CPU вычислительными задачами. Имя этой компактной программе – LinX. На данный момент актуальной является «LinX 0.6.5 ». Кроме тестирования стабильности утилиту можно применять и в качестве неплохого бенчмарка.

С точки зрения пользователя LinX 0.6 очень простая и удобная вещь с простым и интуитивно понятным интерфейсом (русский и английский варианты). Ею поддерживается как процессоры Intel, так и CPU от AMD. В настройках можно выбрать 32/64-битный режим работы, количество потоков, задействовать или выключить технологию HyperThreading от Intel, установить количество прогонов, наблюдать за ходом тестирования «в прямом эфире»… Автоматическое сохранение заданных параметров проверки процессора позволит проводить тестирование с одинаковыми настройками при последующих запусках, например, при постепенном разгоне CPU.


Интерфейс основного окна программы содержит всего несколько элементов управления. В первую очередь нас интересуют параметры «Объём памяти»/«Memory» и количество прогонов «Число раз»/«Run». Для диагностики компьютера рекомендуется в первом параметре выбрать всю доступную память (кнопка «All» возле «Memory»), а «Число раз»/«Run» установить опытным путём: запустить один прогон, и вычислить необходимое количество запусков для работы программы в течение не менее часа. В меню «Настройки»/«Settings» выберите режим 32/64 бит в зависимости от установленного процессора и версии операционной системы. Для запуска/остановки теста используйте кнопки «Тест»/«Стоп» («Start»/«Stop»). В ходе проверки индикатор хода тестирования будет отображать прошедшее с момента запуска время, а при завершении последнего прохода отобразит надпись «Завершено без ошибок за ММ м СС с» (или «Finished without errors in MM m SS s» в английском варианте интерфейса).

При длительном тестировании нестабильной системы могут возникнуть ошибки. Пункт «Stop on Error» в настройках Linx 0.6 прекратит дальнейшую проверку процессора. Это может оказаться вполне полезным при возникновении ошибок из-за перегрева процессора . Вовремя остановленный тест может в некоторых случаях спасти жизнь проверяемому CPU. Если после запуска утилиты Вы зафиксировали температуру близкую к критической или превышающую таковую, то это явный сигнал к тому, что необходимо заменить кулер или снизить разгон.

При использовании LinX 0.6.5 в качестве бенчмарка результаты быстродействия процессора будут отображаться в графе «ГФлопс»/«GFlops» итоговой таблицы основного окна программы. Так, для Intel Core i7-3770k , который был разогнан до 4.5 ГГц, результатом будет цифра в районе 110…115 ГФлопс в зависимости от настроек. после нескольких прогонов указанного CPU размещён выше: скорость указана в таблице для каждого прохода и в строке статуса имеется информация о пиковой (максимальной) производительности в ГФлопс’ах.

Кстати, если Вы задались вопросом разгона процессора , то озадачьтесь и целесообразностью включения технологии HyperThreading для Intel CPU. Отнюдь не во всех задачах от HT есть прирост скорости, а вот занижает разгонные возможности «камня» включенный HT очень часто. Судя по многочисленным обзорам, от HyperThreading нет ни малейшего увеличения FPS в большинстве игр – тут уже «играбельность» больше зависит от видеокарты.

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

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

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

В Линукс имеется несколько программ для оценки производительности центрального процессора, например: 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 смотрите .

Прогнал я тест 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}

mob_info