Прогнал я тест 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:
xed ./my_test
И в созданный файл копируем следующее содержимое:
Ну, и собственно запуск Linpack с созданным файлом:
./xlinpack_xeon64 -i ./my_test
Или:
./xlinpack_xeon64 ./my_test
Можно ещё заюзать stress-ng или stress, но поставленной мной задачи это всё-равно не решает. Вывода температуры, частот и времени от начала старта эти утилиты мне не показывают.
Температуру может показать sensors - подробнее про установку этой утилиты здесь. И эта утилита понадобится в дальнейшем рассмотрении моего вопроса. Линукс - велик и могуч: одна и та же задача может решаться по-разному. За Си мне лень было браться и я написал недостающую мне часть на BASH, ибо строк получилось не так уж и много. Без установленной sensors мой скрипт работать не будет. Фиксацию троттлинга естесственно не стал писать - его и так будет видно по сбросу частоты и температуре. Вот сам скрипт:
Сильно не ругайте за скидывание управляющих символов в stderr (1>&2), но это дело привычки, если вдруг потом вывод скрипта в файл отправлять, а там все эти ESC-апе последовательности точно не нужны, вот так и будет терминал цветным, а файл чистым. Что-то я отвлёкся.
Я создал файл chk в директории с linpack-ом и записал скрипт в него, Вы можете сделать тоже самое, за исключением xed, если у Вас его нет:
xed ./chk
И собственно то, ради чего всё затевалось - тест Linpack cо скриптом:
./chk ./xlinpack_xeon64 -i ./my_test
Да, я вижу, одно ядро нагрелось до критического TDP в 105°C за 86 секунд, но это мне ни о чём не говорит, а вот то, что с 50°C до 80°C процессор нагревается за 2 секунды - это уже показатель: термопасту точно пора менять - два года не менял, а вот с системой охлаждения останется вопрос, который проявят тесты после замены термопасты и термопроводящих прокладок на моём ноутбуке.
Почему именно 80°C я взял за отправную точку? Да просто потому, что именно эта температура заложена в BIOS, как температуры начала скидывания частот, да ещё и начало включения кулера выставлена в 55°C в угоду энергосбережению, но BIOS - InsydeH20, да ещё и с проверкой своей хэш-суммы и белым списком девайсов - та ещё головная боль...будет программатор - займусь им вплотную.
Скрипт писал на скорую руку и с ориентиром на Linpack, но он так же свободно работает и с другими консольными утилитами. Вот запуск с вышеизложенным sysbench:
./chk sysbench --num-threads=4 --test=cpu --cpu-max-prime=100000 run
Как видно из скриншота sysbench не даёт полную нагрузку на процессор, в отличии от Linpack-а...
Вот запуск с утилитой stress (подробнее про stress - здесь):
./chk stress --cpu 16
Естественно выход/окончание теста с утилитой stress осуществляется вручную по CTRL+C, отсюда и Error: 1 выведенная моей переменной PS1 из-за подобной реализации выхода из скрипта через exit 1.
Скрипт можно запустить и без опций, но тогда он только температуру и частоты в почти реальном времени показывает:
./chk
В любом случае выход из скрипта осуществляется автоматически, по окончании теста или можно выйти, нажав CTRL + C:
В общем: поставленную для себя задачу я решил и даже лучше - появилась целая надстройка над тестовыми утилитами. Осталось ноутбук разобрать и поменять таки термопасту с прокладками: как вспомню - аж страшно становится...
Как то на работе делали профилактику серверов(сторонняя фирма), сервера были разные с разными системами(многие древние), в том числе и виндовые вроде, а для проверки нужен был некий стандарт ПО чтоб можно было данные записать и показать изменения нагрева на процах, в итоге использовали 7z benchmark, где-то portable где-то ставили, и процы он грел капитально, некоторые серваки реально вырубались, после техобслуживания стало норм.
7z benchmark не пробовал...как-нибудь в следующий раз, а в этот раз и LinPack-а хватило 🙂
Кстати, в нём тоже можно производительность с Windows сравнивать; в wind-овом LinX, по умолчанию, как-то так:
1 # number of tests
10000 # problem sizes
10000 # leading dimensions
20 # times to run a test
4 # alignment values (in KBytes)
Естесственно под Windows ГФлопсов будет поменьше, не знаю, как на серверной, но на 7-ке точно меньше: ядро, куча левых фоновых процессов (родных, от Win), тугодумная NTFS, может ещё что упустил. В моём случае разница между Mint LMDE 3 Cinnamon и Win 7, незначительна: ~0.8-1 ГФлопс, примерно, как и между Mint LMDE 3 Cinnamon и FreeBSD Mate, естесственно в пользу последней.
В общем-то, да, моя задача была загрузить процессор по максимуму и под Линукс, ибо он удобнее и быстрее 🙂 грузиться в Win 7, ради тестов - как-то лень...неюзабельно (имхо).
Не мудрствуя лукаво скачал /распаковал/запустил
/home/bib/Загрузки/l_mklb_p_2019.4.003/benchmarks_2019/linux/mkl/benchmarks/linpack/runme_xeon64
Maximum memory requested that can be used=9800701024, at the size=35000
=================== Timing linear equation system solver ===================
Size LDA Align. Time(s) GFlops Residual Residual(norm) Check
1000 1000 4 0.056 11.8367 1.050028e-12 3.580866e-02 pass
1000 1000 4 0.065 10.3360 1.050028e-12 3.580866e-02 pass
1000 1000 4 0.063 10.6355 1.050028e-12 3.580866e-02 pass
1000 1000 4 0.076 8.7922 1.050028e-12 3.580866e-02 pass
2000 2000 4 0.419 12.7359 3.957779e-12 3.442782e-02 pass
2000 2000 4 0.463 11.5255 3.957779e-12 3.442782e-02 pass
5000 5008 4 8.863 9.4081 2.293210e-11 3.197697e-02 pass
5000 5008 4 8.956 9.3105 2.293210e-11 3.197697e-02 pass
10000 10000 4 69.437 9.6040 9.609760e-11 3.388499e-02 pass
10000 10000 4 69.371 9.6130 9.609760e-11 3.388499e-02 pass
интересно
CPU~Dual core Pentium E6600 (-MCP-) speed/max~2109/3066 MHz Kernel~4.15.0-54-generic x86_64 Up~33 min Mem~1193.6/3000.3MB HDD~700.2GB(19.9% used) Procs~184 Client~Shell inxi~2.2.35
Оттичная статья! Автору респект!
Запустил у себя тест с предложенной конфигурацией - через пару минут пришлось выключить, ибо запахло шмаленым 🙂
Ооо... мою статью уже копирнули 😀
Найди отличия: https://devsday.ru/blog/details/7516 😀 хоть бы имя сохранили и разместили ссыль на первоисточник, т.е. сюда...