Что может быть лучше, чем в начале января размять руки и вспомнить с чего начинал, написать на питоне свое приложение с GUI для тестирования процессора на стабильность?
Многие не понимают, зачем вообще проходить стресс тесты и думают, что производитель ''из коробки" уже продает стабильное железо, но это совершенно не так(привет тем у кого H100 в класстере во время обучения моделей отваливаются), особенно, что касается потребительского сегмента. Что можно увидеть и в новостях, например Intel 13 и 14 поколение, которое не только в режиме ''из коробки" могло работать не стабильно, но и привести к дегродации процессора, люди же кто свое железо настраивал сам и использовал не автоматические настройки материнской платы, а фиксировал необходимые настройки в BIOS(UEFI) самостоятельно сидят на стабильном железе и о дегродации не слышали. Все эти сообщения на форумах, отзывы в стим и прочее, о вылетающих играх, бсодах, зависаниях, на 90% ни как не связаны с самим софтом, а связаны именно с нестабильным железом пользователей. Реальные баги софта или игр обычно спустя время попадают в changelog и устраняются.
Многие до сих пор думают, что использование XMP оперативной памяти, это стабильные настройки, гарантированные производителем оперативной памяти, особенно если данный комплект есть в QVL листе материнской платы! А вот у оверклокеров, которые разгоняют память самостоятельно, все не стабильно, компьютер зависает, бсодит, перезагружается и перегревается и вообще это какие-то фрики! Но в реальной жизни все диаметрально противоположно, у оверклокеров за счет хороших систем охлаждения, зачастую кастомных систем жидкостного охлаждения температуры намного ниже чем у обывателей, а стабильность железобетонная, так как разгон они проверяют стресс тестами, а обыватель полагается на производителя железа. На самом деле XMP оперативной памяти это тот же самый разгон и в большинстве случаев он ''из коробки'' не стабилен. Ну не научились пока для предельных частот в автоматическом режиме подбирать напряжения для контроллера памяти процессоров, да и тайминги в ХМП режиме зачастую стоят только первичные, вторичные и третичные либо не полностью прописаны либо полагаются на тренеровку материнской платы. Как пример, стоковые 13900к и 14900к у обывателей греются под 100 градусов и троттлят, даже в играх, так как напряжени стоит в auto режиме, llc так же стоит в auto, материнская плата зачастую завышает значения. А у оверклокеров те же 13900к и 14900к в играх зачастую греются всего до 35-45 градусов, ну и кто тут фрик?
Пишем свой стресс тест
То, что компьютер нужно тестировать на стабильность это понятно, а делать то что? Каким программным обеспечением? Можно конечно гонять prime95 в режиме small fft с avx, но он задействует в основном ядра, можно отдельно тестировать оперативную память memtest или karhu, но все они тестируют только саму память, а как же контроллер памяти? Поэтому в качестве универсального решения, которое задействует и ядра процессора и контроллер памяти я использую Intel LINPACK, в комплексе с y-cruncher и тестами памяти.
Intel LINPACK - международный стандарт тестирования серверов и компьютеров, на его базе появился рейтинг топ500 суперкомпьютеров.
Вот цитата с википедии.
https://ru.wikipedia.org/wiki/Linpack
LINPACK была разработана в Аргоннской национальной лаборатории Джеком Донгаррой, Джимом Банчем (Jim Bunch), Кливом Молером, и Гильбертом Стюартом (Gilbert Stewart) для работы на суперкомпьютерах, которые использовались в 1970-х — начале 1980-х годов. Активно использует интерфейс BLAS для обработки матриц и векторов.
Также под названием LINPACK часто понимают тесты производительности LINPACK (решение плотной СЛАУ методом LU-декомпозиции). Изначально тест был опубликован в приложении "B" к документации библиотеки и предназначался для грубой экстраполяции времени работы библиотеки[2]. Существуют варианты теста: linpack100 (матрица 100 на 100; 1977 год), linpack1000 (матрица увеличена до 1000 элементов в каждом измерении, 1986 год), linpack parallel (1000 элементов, параллельная обработка) и HPL (High-performance Linpack, произвольные размеры, первые версии выпущены в 1991—1993 годах)[3] — популярный тест производительности, предназначенный для оценки производительности параллельных вычислительных систем и созданный на базе некоторых функций из библиотеки LINPACK.
Список 500 самых быстрых компьютеров в мире TOP500 составляется по результатам теста HPL. По правилам TOP500 используется HPL на больших размерах, в качестве формата элементов возможно использование только 64-разрядного представления дробных чисел IEEE, не допускается применение метода Штрассена или более коротких форматов плавающих чисел[4].
Поэтому сообщения обывателей, мол, я LINPACK не гоняю, я в игры играю, не имеют под собой ни каких оснований.
Сам по себе LINPACK на сайте интел предоставляется без GUI и каких либо настроек, хочешь? Скомпилируй сам или запускай из консоли.
Именно поэтому я написал свою графическую оболочку на питоне, добавил вариативные возможности настроек, для тестирования.
Окно программы выглядит так. Программа отображает количество физических ядер, количество логических ядер( потоков) и обьем оперативной памяти. Есть несколько режимов, первый, стандартный программа начинает с минимального problem size и заканчивает максимально возможным для вашей системы( расчитывается на основе свободной оперативной памяти). В большинстве случаев, даже одного цикла достаточно, что бы понять, что компьютер - не стабилен.Так же можно указать количество таких циклов, что бы поставить тест например на час. В режиме бенчмарк problem size фиксирован и нужно получить максимальное количество gflops, что бы можно было сравнить с другими пользователями. В режиме Custom task можно самостоятельно выбрать problem size и количество проходов.
GUI писал с использованием библиотеки customtkinter, что бы было не сильно угловато, стандартный tkinter выглядит не очень красиво.
Сам процесс Linpack вызывается при помощи subprocess,вывод stdout записывается в очередь, gui запускается в отдельном процессе, который использует многопоточность, 1 поток парсит вывод stdout из очереди, раз в определенное количество миллисекунд, что бы не давать нагрузку на процессор, и не долбить постоянными запросами, второй отвечает за отрисовку.
Linpack запускается с параметрами.
OMP_NUM_THREADS = str
задачет количество задействованных потоков, по умолчанию, сколько доступно в системе, в GUI можно произвольное количество задействовать.
KMP_BLOCKTIME = 0
Устанавливает время (в миллисекундах), в течение которого свободный поток «держит» занятый ресурс, прежде чем освободить его.
«0» означает, что поток моментально освобождает ресурсы после выполнения, что может снизить задержки для других потоков.
KMP_AFFINITY = nowarnings,compact,1,0,granularity=fine
Отвечает за распределение нагрузки по ядрам,
MKL_DYNAMIC = false
Запрещает библиотеке MKL автоматически менять число потоков в процессе выполнения.
Гарантирует, что задаваемое вами количество потоков (через OMP_NUM_THREADS) будет использоваться библиотекой MKL без изменений.Без этой настройки система не будет использовать все потоки если включен гипертрейдинг.
Делаем бинарник при помощи Nuitka
Всего каких-то лет 10 назад за вопросы, как скомпилировать питон код все жутко глумились, посылали изучать матчасть и до сих пор на собеседованиях сохранился этот аттавизм, вопрос, питон интерпретируемый или компилируемый язык? А единственный способ получить заветный бинарник и освободиться от необходимости установки питона в систему и зависимостей были программы вроде pyinstaller которые могли упаковать интерпретатор и питон код с зависимостями, но имели кучу минусов, таких как отсутствие защиты кода, так же антивирусы такое очень не любили.
Nuitka же является трансплаером, который транслирует питон код в код с/с++.Полученный C/C++-код компилируется системным компилятором (gcc, clang, MSVC — в зависимости от ОС и конфигурации). Это принципиально отличается от всего, что предлагали до этого, поэтому Nuitka попала в рейтинг критически важных открытых проектов Google в 2020 году.
Все это позволяет получить на выходе заветный бинарник под виндовс, линукс или макос. Избавиться от необходимости установки интерпретатора в систему и зависимостей, а так же защитить код, от копирования и реверс инженеринга.
Nuitka является тайной скрижалью и одним из колец власти питон фрилансеров зарабатывающих 500-1кк и выше, пока многие из вас пытаются войти в ай ти, откликаясь на сотни и тысячи вакансий, готовясь к собеседованиям, что бы попасть в заветную крупную компанию, крепкие питон программисты при помощи нуитки играючи зарабатывают деньги на малом и среднем бизнесе, где зачастую нет бюджетов на свою команду разработки, а что бы обращались именно к вам,в соответствии с договором вы можете не предоставлять исходный код на питоне,а компилировать свой питон код припомощи Nuitka, тем самым защитить его от вмешательства сына маминой подруги, когда заказчик захочет внести новый функционал и сэкономить, не обратившись к вам, а потом уронив прод, обратиться к вас с претезний, что ничего не работает. Таким образом получив пул заказчиков вы можете сидеть на поддержке, практически гарантируемо такие клиенты от вас не уйдут.
Так же Nuitka очень хорошо подходит для прототипирования и не больших коммерческих проектов, например различные боты для игр и тому подобное, которые на чистом питоне мгновенно скопируют и платить вам не будет никто.
В дополнение к этом Nuitka очень серьезно увеличивает скорость программы на 50-70% а иногда и еще больше, актуально когда нужно что-то написать на питоне, но ресурсы по железу ограничены, а переписывать на низком уровне нет времени/сил/желания.
Компиляция происходила с параметрами --onefile --deployment --enable-plugin=tk-inter --windows-console-mode=disable а так же включением необходимых файлов в саму программу, итоговый вес чуть более 16 мегабайт, хороший результат ,если учесть что сам Linpack с библиотеками занимает более 8 плюс, картинки, иконки.
Как тестировать стабильность? На что обращать внимание?
При работе программы рекомендуется закрыть ВСЕ фоновые приложения, в том числе браузеры, программы мониторинга итд. Т.к если в режиме по умолчанию нагружать все потоки доступные системе, то значения residual для одной задачи могут отличаться, а именно по ним происходит финальная и тонка настройка системы и напряжений контроллера памяти.
На полностью стаьбильной системе в рамках одного problem size ( выделено в таблице одним цветом) значения residual одинаковые для каждого прохода, если открыты фоновые приложения то может выдавать единичные разные значения и это абсолютно нормально, так как для FLOAT(число с плавающей запятой) а Linpack это решение плотной СЛАУ методом LU-декомпозиции.Так как
Вычисления с плавающей точкой (floating-point) не являются строго ассоциативными: результат зависит от порядка выполнения сложений и умножений. Когда в операционной системе одновременно работают фоновые процессы, они могут влиять на то, как и когда «распределяются» потоки LINPACK по ядрам.Один запуск может прерваться в середине цикла, другой — в другом месте; порядок суммирования меняется.
Даже небольшая смена порядка арифметических операций даёт слегка разные результаты (округления могут накапливаться).
Так же гипертрейдинг может негативно влиять на это, когда на одно физическое ядро приходит 2 логических.
Т.е (a+b)+c может отличаться от a+(b+c)a+(b+c). Для чисел с плавающей запятой 0,1 + 0,2 не равняется 0,3.
Этот же метод, можно использовать для поиска малейших нестабильностей системы, если у вас переразгон или не стабильно работает компьютер, то значения Residual для одной задачу будут почти всегда разные, не единичные случаи. Поэтому если просто использовать как стресс тест для базовой стабильности, то можно просто запустить программу в авто режиме, мониторить температуры, если нет FAIL либо остановки выполнения, бсодов, перезагрузок, зависаний и есть энтузиазм тонко подобрать все напряжения, то можно выключить все фоновые приложения и добиться чистого исполнения.
Программу можно скачать на GITHUB по ссылке.
https://github.com/LORD-A-B/LORD-ALZOV-STABILITRON/releases/tag/v1.0.0
Телеграмм для обсуждения и вопросов:
Автор: Lord_Alzov