Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 4 – что там изнутри виртуализации
Для лиги лени: ничего нового, просто запускал DiskSPD. Но пришлось все переделывать.
Про тестирование и дисков и систем хранения написаны сотни статей, и ничего нового вы тут не увидите, проходите мимо.
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 4 – что там изнутри виртуализации
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 5 – другие варианты виртуализации
Четвертая часть должна была быть про ребилд –
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 4 - ребилд и прочие ситуации «ой пропали диски».
Но вышло иначе.
В предыдущих сериях:
При создание дискового пула у командлета New-StoragePool есть параметры:
LogicalSectorSizeDefault - 512 и 4096
MediaTypeDefault - HDD, SSD, SCM
WriteCacheSizeDefault
И, кроме того, Windows сам разбирается, что делать с дисковым кешем у SSD. Просто процитирую еще раз: some enterprise drives that should work, is not recognized as devices with power-loss protection, and that means Storage Spaces will only send synchronous writes to the devices, and not use the internal buffer in the device, and that will degrade performance a lot on most drives.
Поверх дискового тома находится NTFS или ReFS, со своими представлениями о размере кластера.
При этом, если не посчитать размер колонок так, чтобы попадать на запись полным страйпом, то диски в режиме parity жутко тормозят на запись, такое впечатление что не заявленные x4, а x4x4 = x16.
Тестирование с SQLIOSim и, особенно,с HammerDB, будет в следующей части.
Виртуализация:
Командлет New-VHD предлагает параметры:
LogicalSectorSizeBytes
PhysicalSectorSizeBytes
С вариантами 512 и 4096 байт для обоих параметров.
Придется лезть в FILE_FS_SECTOR_SIZE_INFORMATION structure (ntddk.h) для попытки понимания.
Что там происходит:
LogicalBytesPerSector: Logical bytes per sector reported by physical storage. This is the same value as the block size for used for Logical Block Addressing (LBA).
PhysicalBytesPerSectorForAtomicity: Actual bytes per sector reported by physical storage used for an atomic write.
PhysicalBytesPerSectorForPerformance: Bytes per sector reported by physical storage for best performance.
atomic write, значит. То есть придется лезть в:
3.68 WRITE ATOMIC (16) command
3.69 WRITE ATOMIC (32) command
из SCSI Commands Reference Manual
Я под такое не очень подписывался.
Поможет мне с этим таблица - Microsoft support policy for 4K sector hard drives in Windows, и статья Advanced Format, цитата:
SSDs do not expose their actual NAND flash memory page size, which typically ranges from 4 KiB to 16 KiB, instead their reported physical sector size is the same as their logical sector size. For NVMe SSDs, if it is available, the Atomic Write Unit Power Fail (AWUPF) parameter value is used.
То есть, когда-то давно, во времена Windows Vista with update KB 2553708 и рядом с ними (Windows 7 SP1 and Windows Server 2008 R2 SP1), по ряду причин, описанных в статье Advanced format (4K) disk compatibility update, индустрия перешла на 512\4096, то есть 4K disks with emulation (512e). С тех пор для тех, кто не ходит в CLI, начались неведомые проблемы, вида «тормозит, и мы не знаем почему, наверное главный русофоб по совместительству главный разработчик, гадит в ядро Linux».
Или же будут крики «вы все врете, не может проприетарное ядро Windows настолько хорошо работать. НЕ ВЕРИМ, но как проверить, не знаем».
На фоне того, что недавно Виталий намерял какие-то магические цифры при отключении кеша дисков, может быть что угодно.
Однако, к цифрам.
С цифрами я весьма ошибся. Потому что я ленивый. Оказалось (это было очевидно), что 1 поток DiskSPD == 1 vCPU. То есть, если у вас 24 vCPU, чтобы как бы попытаться сидеть в пределах одного сокета, то 45-60 потоков запроса запускать бессмысленно. Работать будет, разброс данных по потокам будет в 10 раз – от 3000 до 33000 IOPS на поток. Поэтому IOPS «итого» приводить нет смысла.
Извините, но надо весь тест переделывать, и сводить, в том числе, среднее IOPS per threads и отклонения по IOPS per threads.
Однако, даже в таком сорвавшемся тесте было видно, что:
Первое
При создании vhdx диска из GUI по умолчанию он создается как LogicalSectorSizeBytes = 512, PhysicalSectorSizeBytes = 4096. Это нормально «для совместимости», но дает просадку по производительности в полтора раза (это при усредненном учете вышеуказанных ошибок).
Второе
Не оптимизированное размещение колонок на parity томе дает все те же кошмарнейшие просадки по производительности.
В остальном тестовая операция полностью провалилась.
Переделывать пришлось все вообще – начиная от создания дисковой группы \ пула.
Но это уже другая история.
Литература
Притчи о компьютерных жителях
Однажды Диггер ехал по дорожке. Жизнь казалась ему удивительно прекрасной. Он так ясно представлял себе, как вместе с Командиром Нортоном он вновь пойдет на дело и фортуна, как и прежде, подарит им много-много денег. Так ехал он, погруженный в свои сладкие грезы, поэтому совершенно не заметил, как сверху на него свалился огромный кирпич.
- Какой же все-таки примитивный этот Тетрис, - думал Диггер, прикручивая отлетевшее колесико, - и чего такого интересного все в нем нашли?
Настроение было испорчено.
- Давненько я Вас у себя не видел, товарищ Комманд Ком, - воскликнул профессор Аидс, заметив, как тот попытался перейти на другую сторону улицы
- Совсем себя не бережете. Стыдно.
- Повисни! - матернулся товарищ Ком и, чихнув, зло добавил, - Тестор - самоделка.
Зашел как-то отец Вындоуз к командиру Нортону пивка попить на спор. И так напился, что вывалился из окна.
Висит отец Вындоуз на карнизе и причитает.
- Снимать будем? - поинтересовался подъехавший Диггер.
- Еще чего! - хмыкнул товарищ Комманд Ком, - пущай висит, оболочка дешевая. Самое ему там место.
- Да ну его к драйверам! Весь пейзаж портит, - пробурчал командир Нортон, икнул и пошел искать кнопку Reset.
- Что это Вы, товарищ Комманд Ком, - ехидно поинтересовался отец Вындоуз, - вчера опять девочкам в покер часы проиграли?
- Товарищ Комманд Ком, к нам новенькую прислали. - отрапортовал командир Нортон.
- Что будем делать с ней?
- Кто такая ?
- Винтура Паблишер.
- Паблишер? Ясно. Дешевка очередная. Отправь-ка ее на панель.
Тускло поблескивая колесиками, расстроенный Диггер возвращался домой.
"Никому я не нужен. Никто со мной не играет. А ведь я так здорово могу лазить везде, новые ходы копать, и денег у меня всегда завались."
Так ехал он и ехал. Колесики его тихо поскрипывали. А навстречу ему старая бабушка Дос.
- Чего пригорюнился-то, милок?
- Дык, не играет никто со мной, - вздохнул Диггер.
- А что так?
- Да говорят, чавкаю я громко и засыпаться из-за этого легко со мной.
Профессор Аидс считал себя борцом за чистоту нравственности. В фанатичной преданности своему делу ему не было равных. Но товарищ Комманд Ком его не любил. Ему каждый раз становилось стыдно и неловко, когда профессор, пробравшись к нему в постель, вытаскивал оттуда какую-нибудь симпатичную заразу.
"Как все таки хорошо иметь настоящего друга, который поймет тебя и поддержит в трудную минуту", - думал Диггер, рассматривая новые блестящие колесики, подаренные ему командиром Нортоном.
- А ты будешь со мной завтра играть?, - спросил он вдруг у командира, сидящего рядом.
- Ну конечно же.
И они продолжали мечтательно смотреть на звездное небо.
- Поправился товарищ Комманд Ком, - произнес Диггер, рассматривая проходящего мимо товарища Кома.
- На 2.7 кило, - определил командир Нортон.
- Так какую песню мы сегодня будем петь, Нортон?, - спросил Диггер.
- Дык, - отвечал командир Нортон, - Янки Дудль.
Сидят как-то Диггер, командир Нортон и товарищ Комманд Ком, а мимо идет отец Вындоуз. "Сидите, - говорит. - Ну, ну. Скоро все подо мной сидеть будете". Никто ему так ничего и не ответил. Один товарищ Комманд Ком сплюнул и грязно выругался.
"Проходи, проходи, - сказал, - оболочка дешевая".
Весь день товарищ Комманд Ком ходил просветленный. Встретив грустного отца Вындоуза, даже поинтересовался участливо:
- Или случилось что, батюшка?
- Все иконы украли, - сказал отец Вындоуз и заплакал.
- Ах, они, нехристи, - утешал товарищ Комманд Ком, - ах, они оболочки дешевые!
И усы его весело шевелились.
Спросил как-то Диггер товарища Комманда Кома: "За что же Вы, товарищ Комманд Ком, отца Вындоуза так не любите?".
"Мышами от него воняет", - быстро ответил тот.
"Господа, - сообщил командир Нортон Диггеру и т. Комманду Кому, - вчера произошла Великая Русификация. Велено всем присвоить русские имена".
Стали они думать. Ну, командира Нортона сразу назвали поручиком Северным, Диггера так Диггером и оставили. А вот товарищу Комманду Кому ни одно русское имя не нравилось.
Хотели было его Иваном Комовым назвать, да разозлился он.
"Оболочки, - кричит, - дешевые! Развели тут... мышей!".
Только собрались Диггер, товарищ Комманд Ком и командир Нортон пивца попить, как в окно к ним постучали. "There isn't enough room!", - закричал командир Нортон, увидев в окне ненавистный куколь отца Вындоуза.
- Правда, что Вентура отдалась отцу Вындоузу?, - спрашивал командир Нортон у товарища Комманда Кома.
- Дык, - ответил тот, - Паблишер, она Паблишер и есть.
Товарищ Команд Ком всегда держал своих пользователей на расстоянии и не одобрял проявлений излишней дружественности к ним командира Нортона. Поэтому в минуты душевной слабости он подзывал Нортона и презрительно мычал: "Человек! Меню!"
Встретил как-то Диггер командира Нортона. Встретил, а сердце чует: не тот это Нортон. Уже и пива выпил, да не так поморщился, уже и отца Вындоуза протянул нехорошими словами, да не теми... И вдруг Диггер понял: тени-то у командира Нортона нету!..
- Удивляюсь я все-таки тому, как много жесткого диска жрет отец Вындоуз!, - говорил за завтраком командир Нортон.
- Чему удивляться, когда у него солитер, - в тон ему отвечал товарищ Комманд Ком.
На день рождения товарищу Комманду Кому подарили новый винчестер. Собрались все. На столе винчестер лежит, большой, слоеный, смазка еще не высохла, и каждый своего куска винчестера ждет. Над ним командир Нортон, в левой руке prefor держит, в правой, как учили в кадетском корпусе, fdisk.
"На сколько, - говорит, - частей его, товарищ Комманд Ком, резать?"
А тот и отвечает: "На одну."
Однажды, проснувшись, товарищ Комманд Ком не нашел autoexec.bat. Это его так потрясло, что он не мог успокоиться до тех пор, пока не выяснил число, месяц, год, час и минуту. И хотя впоследствии ситуация с autoexec.bat нередко повторялась, товарищ Комманд Ком продолжал спрашивать дату и время с таким упорством, что все наконец забыли, с чего это началось.
Товарищ Комманд Ком жил на системной дискете и вел беспорядочную жизнь, отчего и страдал. Заразившись, он шел к профессору Аидсу. Посадит профессор Аидс товарища Кома в высокое кресло, возьмет за нижнюю челюсть: "А теперь, - говорит, - скажи: "Формат а-а-а-а:".
PowerToys - искал медь, а нашёл золото
У майкрософт есть набор утилит для винды, которые позволяют ускорить множество рутинных процессов с применением горячих клавиш: распознать текст с картинки и записать его в буфер обмена (ради этой функции я и нашел эту утилиту), массовое переименование файлов, дополнительные параметры вставки из буфера обмена, закрепить окно поверх остальных и множество других функций. Я всегда себя считал продвинутым юзером винды ещё со времен ХР, но про такую утилиту узнал только сегодня случайно. Рекомендую!
Power Toys - скачивается в штатном магазине винды бесплатно на windows 11. На других версиях не проверял.
Тут можно более детально почитать про функционал.
Ссылка на загрузку из Microsoft store.
Подскажите по компьютеру
Офисный комп. Политика безопасности, уходит в окно ввода пароля через 10 минут. Найден способ обхода в виде запуска в браузере яндекс заставки фон видео. Всё было хорошо. Но сегодня все как всегда, только уходит через 10 минут в блокировку. Что могло включиться поверх яндекса, куда копать, кто знает?
Языки программирования на все случаи жизни. Часть 1
В программировании существует десятки разных направлений, языков ещё больше, около 9000. Эта статья будет интересна для тех, кто только-только начинает свой путь разработчика или же для тех, кому просто интересно. К языку будут прилагаться библиотеки и фреймворки, которые нужны для обсуждаемых направлений (например, django для python в бэкэнде). В статье будут не только языки программирования, но суть от этого не меняется.
Направления и языки
Web-разработка
В web-разработке есть 2 основных поднаправления: Backend и frontend. Frontend это клиентская часть сайта, её видит пользователь и она отправляется клиенту с сервера в браузер. Backend это логическая часть сайта, она работает на сервере и делает всё, что пользователь не видит, например, обрабатывает платежи и т.д.
Frontend
Frontend это клиентская часть веба. Она отвечает за визуал сайта. Всё то, что видит и слышит пользователь на сайте - дело рук фронтендера. Браузер делает http(s) запрос на сервер, он получает HTML-страницу (и CSS с Javascript) и отрисовывает страницу. Ответ сервера может содержать: HTML-документ; данные, встроенные в HTML; ссылки на статические файлы (CSS, JS, изображения); JSON/XML/другие данные (если это API запрос).
И так, языки для frontend разработки:
HTML и CSS: Это не опционально. HTML обязателен, а без CSS сайт может работать, но вряд ли он будет красивым. Их нельзя назвать языком программирования, но пусть будут. Фреймворки и библиотеки для CSS:
Tailwind CSS: Utility-first CSS фреймворк, то есть разработчик использует набор предопределённых классов, каждый из которых имеет некоторое количество стилей. Очень гибкий и мощный.
Bootstrap: Самый популярный. Предоставляет адаптивную сетку, компоненты (кнопки, навигация, карточки и т.д.), JS-плагины.
Sass / SCSS: Препроцессор CSS, который расширяет возможности стандартного CSS, добавляя функциональность, такую как переменные, вложенность, миксины и многое другое.
JavaScript (JS): Двигатель для визуала сайта. Он добавляет интерактивность и динамическое поведение на веб-страницы. Фреймворки и библиотеки для JS:
React: Библиотека от Meta. Позволяет создавать компоненты. Упрощает разработку.
Vue.js / Vue 3: Модульная структура. Относительно простой фреймворк.
Angular: Полноценный MVC-фреймворк от Google. Работает на TypeScript. Хорошо подходит для крупных корпоративных приложений. Включает в себя маршрутизацию, формы, HTTP-клиент и т.д.
Svelte: Очень быстрый и лёгкий. Отлично подходит для микросервисов.
TypeScript: Надмножество Javascript. Статическая типизация.
Backend
Backend это серверная часть веба. Обработка платежей, регистрация пользователей и всё то, что не видит клиент, делается тут.
Node.js: Это среда выполнения JavaScripts, которая позволяет использовать JavaScript для разработки серверной части. Фреймворки и библиотеки для Node.js:
Expess.js: Самый популярный и гибкий фреймворк, часто используемый в качестве основы для многих Node.js проектов. Он обеспечивает минимальный базовый набор функций для создания веб-приложений и API.
NestJS: Фреймворк, ориентированный на создание масштабируемых серверных приложений. Он использует модульную архитектуру, поддерживает TypeScript и предоставляет встроенные решения для валидации, маршрутизации, аутентификации и авторизации.
Fastify: Фреймворк, ориентированный на максимальную производительность и низкое потребление ресурсов, что делает его подходящим для высоконагруженных приложений.
Python: Этот язык многофункционален и его можно использовать в бэкэнде. Фреймворки и библиотеки для Python:
Django: Полноценный фреймворк, предназначенный для создания сложных веб-приложений, включает в себя ORM, систему шаблонов, админ-панель и многое другое.
Flask: Микрофреймворк, гибкий и легкий, подходит для небольших и средних проектов, а также для создания API.
FastAPI: Современный, быстрый фреймворк, ориентированный на создание API.
Java: Java доминирует в банках, финансовых платформах и крупных онлайн-сервисах (например, LinkedIn, Netflix, Amazon частично используют Java). В большинстве случаев используется Spring. Фреймворки и библиотеки для Java:
Spring: Один из самых популярных фреймворков, предоставляющий множество инструментов для разработки веб-приложений, включая управление зависимостями, аспектно-ориентированное программирование и доступ к данным.
C#: C# популярен в компаниях, работающих на Windows-инфраструктуре, особенно в Европе и США: от страховых компаний до госпорталов. Фреймворки и библиотеки для C#:
ASP.NET: Основной фреймворк C#. ASP.NET Core предоставляет широкий набор инструментов для создания веб-сайтов, API и других веб-сервисов.
Entity Framework Core: ORM (Object-Relational Mapping) фреймворк, который упрощает работу с базами данных. Позволяет работать с базами данных, используя объекты C# вместо SQL запросов.
Blazor: Фреймворк для создания интерактивных веб-интерфейсов, работающий как на стороне клиента (в браузере), так и на стороне сервера.
Go: Высокая производительность и простота. Фреймворки и библиотеки для Go:
Gin: Известен своей высокой производительностью и легкостью использования. Идеален для создания API и веб-приложений, требующих быстрой обработки запросов.
Echo: Легкий и быстрый фреймворк, ориентированный на производительность и простоту использования. Отлично подходит для создания API и веб-сервисов.
PHP: Классика веба. Фреймворки и библиотеки для PHP:
Laravel: Известен своей элегантностью, мощной системой шаблонов Blade, и богатым набором инструментов для разработки. Laravel часто выбирают для создания масштабных и сложных веб-приложений.
Ruby: Лаконичный и удобный. Фреймворки и библиотеки для Ruby:
Ruby on Rails (RoR): Самый популярный фреймворк, известный своей структурой MVC, удобством разработки и возможностями для создания масштабируемых веб-приложений. Он предоставляет готовые решения для работы с базами данных, маршрутизацией, представлением и многим другим, что значительно ускоряет процесс разработки.
Базы данных: Будучи backend разработчиком вам придётся работать с базами данных.
PostgreSQL: Гибкая система управления реляционными базами данных (СУБД). Удобно хранить геопространственные данные.
MySQL: Одна из самых популярных. Открытый исходный код. MySQL имеет меньше поддержки стандартов SQL, чем PostgreSQL.
SQLite: Лёгкая, встраиваемая система управления базами данных. SQLite не требует отдельного сервера, база данных хранится в одном файле на диске. Не предназначен для многопользовательского доступа с высокой конкуренцией. Для локального хранения.
MongoDB: Нереляционная (NoSQL) документо-ориентированная система управления базами данных, которая предназначена для хранения, обработки и масштабирования больших объёмов неструктурированных или полуструктурированных данных. MongoDB хранит данные в формате BSON (Binary JSON).
Redis (REmote DIctionary Server): Redis хранит данные в оперативной памяти, что обеспечивает очень быструю обработку запросов. Данные хранятся в парах "ключ-значение", что упрощает доступ к информации.
Docker / CI/CD / Nginx/Apache: Полезные вещи для бэкенда.
Системное программирование
Системное программирование - Разработка программного обеспечения, которое взаимодействует напрямую с железом. Это низкоуровневое программирование, где важна производительность и эффективность управления ресурсами. Системные программисты разрабатывают ОС, драйверы, компиляторы, виртуальные машины и антивирусы.
C: Фундамент всех ОС и системного ПО. Работает напрямую с памятью. Ядро Unix/Linux написано на C. Даёт полный контроль над памятью, но требует ручного управления памятью. Почти нет абстракции.
C++: Мощнее C, добавляет ООП, используется в движках и ядрах.
Rust: Безопасная альтернатива C / C++ без утечек памяти.
Assembly: Пишется для конкретного процессора (x86, ARM, RISC-V). Почти напрямую управляет CPU, регистрами, стеком.
Мобильная разработка
Создание приложений для смартфонов, планшетов и носимых устройств. Тут есть 3 поднаправления: нативные мобильные приложения; гибридные (на web-технологиях); кроссплатформенные.
Нативная разработка
Это создание мобильных приложений под конкретную операционную систему.
Kotlin: Разработка под android. Ститачески типизированный язык программирования, разработанный компанией JetBrains. Безопасен от NullPointerException. Выразительный синтаксис. Возможность интеграции с кодом на java.
Android studio: IDE специально для создания приложений под android.
Jetpack Compose: Упрощает и ускоряет процесс разработки интерфейсов за счёт меньшего объёма кода, мощных инструментов и интуитивно понятного кода. Использует kotlin для создания UI.
XML (eXtensible Markup Language): Язык разметки для хранения и передачи данных.
Swift: Разработка под IOS. Современный и безопасный.
Xcode: IDE для разработки под IOS.
UIKit: Предоставляет разработчикам набор элементов управления, такие как кнопки, метки, текстовые поля, а также возможности для обработки касаний и жестов, обеспечивая интуитивно понятное взаимодействие с пользователем.
SwiftUI: Декларативный UI-фреймворк от Apple.
Кроссплатформенная разработка
Один код работает и на android, и на IOS.
Flutter: Кроссплатформенный SDK от Google для создания красивых, нативных приложений для мобильных устройств. Быстрый рендеринг. Кастомный UI.
Dart: Основной язык для flutter. Простой синтаксис. Высокая производительность. Богатый набор библиотек.
React Native: Использует один и тот же код JavaScript для iOS и android. Основное преимущество React Native это возможность создавать приложения для iOS и Android, используя общий код на JavaScript.
Kotlin Multiplatform Mobile (KMM): Код пишется на kotlin и компилируется на обе ОС. UI пишется отдельно, но бизнес логика общая.
Гибридные и web-приложения
Такие приложения сочетают в себе элементы нативных и веб-приложений. Работают как web-приложения внутри обёртки. По своей сути, это веб-приложения (обычно написанные с использованием HTML, CSS и JavaScript), "упакованные" в специальную нативную оболочку (часто называемую WebView).
Ionic: Фреймворк для разработки гибридных кроссплатформенных мобильных приложений.
WebView Multiplatform Mobile: Кроссплатформенная библиотека для встраивания веб-контента в приложения для Android и iOS.
Xamarin WebView: Фреймворк для разработки кросс-платформенных мобильных приложений, предоставляет доступ к WebView для отображения веб-содержимого.
Tauri: Фреймворк для создания десктопных приложений с использованием веб-технологий. Во второй версии можно делать мобильные приложения. Написан на сложном rust.
Data Science / Аналитика данных
Data science - Наука о данных. Использует математику и статистику для обработки данных, извлечения полезной информации, выявления закономерностей и предсказания будущих событий. Они используют для этого статистические методы и машинное обучение.
Python: Де-факто стандарт в data science. Прост в изучении. Огромное сообщество. Богатейшая экосистема библиотек. Библиотеки для python, которые нужно знать аналитику данных:
NumPy: Для работы с многомерными массивами и матрицами. Линейная алгебра.
Pandas: Предоставляет мощные структуры данных.
Polars: Современная, очень быстрая альтернатива pandas. Оптимизированная для работы с большими наборами данных.
Matplotlib / Seaborn: Визуализация данных.
Scikit-learnt + keras: Машинное обучение. Прогноз данных.
Jupyter: Интерактивный блокнот для работы с кодом.
R: Язык специально для статистики. Имеет невероятно богатый набор пакетов для статистического анализа, визуализации.
SQL: Необходим любому специалисту по данным. Для хранения данных.
Scala: JVM-язык, сочетающий объектно-ориентированную и функциональную парадигмы. Основной язык для Apache Spark.
Julia: Создан специально для высокопроизводительных научных вычислений. Синтаксис похож на Python / MATLAB.
Машинное обучение и ML-инженеринг
ML-инженеринг (MLOps) - Инженерная дисциплина, которая фокусируется на машинном обучении. В отличие от Data Science, где основное внимание уделяется исследованию данных и построению моделей, ML-инженеринг охватывает весь жизненный цикл AI-продукта. Построение моделей, нейросетей, прогнозирование. Это инженерная часть Data Science, фокусирующаяся на промышленной эксплуатации. ML-инженеру нужно также знать математику на высоком уровне.
Python: Часто этот язык является лишь высокоуровневым интерфейсом, а фреймворки написаны на C++. Если бы модели обучались только на python, это было бы слишком медленно. Фреймворки и библиотеки python:
TensorFlow: Открытая библиотека машинного обучения. Предназначена для построения и обучения моделей машинного и глубокого обучения.
MLflow: Платформа с открытым исходным кодом для управления жизненным циклом машинного обучения.
Kubeflow: Набор инструментов для развертывания ML-воркфлоу на Kubernetes (использует Python для определения пайплайнов).
Научные и инженерные расчёты
Математика, физика, симуляции.
Python: Отлично подходит для научных вычислений. Простота изучения, огромное сообщество, богатейшая экосистема научных библиотек, отличная интеграция с другими языками и инструментами, поддержка всех этапов работы (прототипирование, анализ, визуализация, развертывание). Фреймворки и библиотеки python:
NumPy
SciPy: Построен на NumPy. Реализация алгоритмов: оптимизация, интегрирование, интерполяция, специальные функции, обработка сигналов/изображений, статистика, дифференциальные уравнения.
SumPy: Компьютерная алгебра.
Matplotlib: Гибкая и мощная библиотека для создания статических, анимированных и интерактивных 2D/3D графиков.
Mayavi, PyVista: Визуализация 3D данных и научных расчетов.
MATLAB: Специально для численных вычислений. Широко используется в инженерии (особенно в вузах и промышленности). Платный. Интуитивный ситнаксис.
Fortran: Непревзойденная производительность для задач с плотными численными расчетами (физика, механика жидкостей, метеорология, квантовая химия, вычислительная астрофизика). Отличная поддержка многомерных массивов и операций над ними (включая срезы).
Julia: Быстро набирает популярность в научных вычислениях.
C / C++: Абсолютный контроль над аппаратурой и памятью.
GameDev
Создание игр от мобильных до AAA. 2D и 3D. VR/AR.
C++ / Blueprints
Unreal Engine: Движок для больших и AAA игр. Красивая графика. Подходит для крупных игр с проработанными механиками и игр с упором на графику. Для мощного железа. На нём даже фильмы снимают. Чтобы делать игры на нём, нужно быть профессионалом.
C#
Unity: Подходит для большинства игр. Часто используется дли инди проектов. Большое сообщество и много ассетов. Много полезных функций. Для VR/AR хорошо подходит.
Godot: Поддерживает некоторые языки программирования, такие как C# и C++, есть собственный язык GDScripts. Активно развивается. Открытый, лёгкий, отлично подходит для 2D игр. Хороший выбор для новичков.
Phaser (JS): HTML5-движок для 2D игр в браузере. Прост и быстр в освоении. Идеален для веб-игр.
Lua: Скрипты в играх (Roblox, WoW и тд). Очень простой язык. Тоже вариант.
DevOps
DevOps (Development + Operation) - Подход к разработке ПО, объеденяющий разработчиков и IT-специалистов по эксплуатации с целью: ускорить релизы; повысить стабильность и безопасность; автоматизировать всё, что можно. В основных задачах у девопсера это CI/CD (непрерывная интеграция и доставка), контейнеризация, оркестрация контейнеров, автоматизации инфраструктуры, мониторинг и логирование.
Linux: Каждому девопсеру нужно знать linux. Linux это основная платформа для управления серверами, развёртывания приложений и автоматизации процессов в DevOps.
Bash: Для автоматизации. Скрипты. CI/CD. Bash-скрипты позволяют автоматизировать повторяющиеся задачи, экономя время и ресурсы.
Python: Python подходит для разных задач, включая написание сценариев, определение инфраструктуры в виде кода, создание конвейеров CI и CD, упрощение мониторинга и разработку пользовательских решений. Python работает с API многих облачных сервисов, таких как AWS, Google Cloud и Azure, что делает его незаменимым для облачной инфраструктуры.
Go: Создание собственных CLI-инструментов. Go позволяет разрабатывать и поддерживать собственные инструменты для автоматизации CI/CD, мониторинга, оркестрации. Многие популярные DevOps-инструменты написаны на Go, например Kubernetes, Docker, Terraform, Prometheus. Умение читать и писать на Go помогает лучше понимать и изменять их код.
YAML: Конфигурации Kubernetes, Ansible, Github Actions.
Groovy: Скрипты для Jenkins.
Docker: Контейнеризация.
Kubernetes: Оркестрация контейнеров. Автоматическое масштабирование. Балансировка нагрузки и управление состоянием контейнеров.
Jenkins: Инструмент для автоматизации процессов непрерывной интеграции (CI) и непрерывной доставки (CD) в DevOps. Он помогает разработчикам быстрее и эффективнее интегрировать изменения в код, находить и исправлять ошибки на ранних этапах, а также автоматизировать рутинные задачи.
Prometheus и Grafana: Мониторинг облачных приложений и сервисов.
Cloude
Cloud Developer - Специалист, чья работа сосредоточена на облачных платформах и сервисах. В отличие от традиционных разработчиков, он оперирует ресурсами (вычислительными мощностями, хранилищами, сетями), предоставляемыми по запросу через интернет, а не управляет локальными серверами напрямую. Разработчик облачных решений отвечает за проектирование, разработку, развертывание, масштабирование и поддержку приложений, сервисов и инфраструктуры, непосредственно работающих в облачной среде.
Amazon Web Services (AWS): Самая популярная облачная платформа, предоставляющая широкий набор сервисов для вычислений, хранения данных, аналитики, машинного обучения и многого другого.
Microsoft Azure: Облачная платформа от Microsoft. Популярная в корпоративном сегменте.
Google Cloude Platform (GCP): Облачная платформа от Google.
IBM Cloude: Платформа с акцентом на корпоративные решения, блокчейн и AI.
Oracle Cloude: Облачные решения от Oracle. Для крупного бизнеса и с фокусом на базы данных.
Для взаимодействия с облачными API, автоматизации задач инфраструктуры (IaC), написания скриптов развертывания и непосредственно разработки облачных приложений и сервисов разработчики облака активно используют языки программирования, такие как:
Python: Универсальность, богатые SDK для облаков.
Go (Golang): Высокая производительность, популярен для инструментов Cloud Native.
JavaScript / TypeScript: Фронтенд и бэкенд, серверные среды типа Node.js.
Java: Традиционно силен в корпоративной среде, особенно с Azure/IBM.
C#: Ключевой язык для экосистемы Microsoft Azure.
Ruby: Менее распространен, но используется, например, в DevOps инструментах.
Кибербезопасность
Кибербезопасность (Cybersecurity) - Комплексная практика защиты информационных систем, сетей, устройств, программ и данных от цифровых атак, несанкционированного доступа, повреждения или кражи. В современном мире, где бизнес, государственное управление и личная жизнь неразрывно связаны с цифровой средой, кибербезопасность становится критической необходимостью, а не просто опцией.
Основные направления кибербезопасности:
Сетевая безопасность: Защита инфраструктуры от атак (DDoS, MITM, эксплойты).
Информационная безопасность: Шифрование данных, контроль доступа, защита от утечек.
AppSec (безопасность приложений): Анализ кода, защита веб- и мобильных приложений.
Криптография: Разработка и взлом алгоритмов шифрования.
SOC & Мониторинг: Обнаружение и реагирование на инциденты в реальном времени.
Пентестинг и Red Teaming: Имитация атак для поиска уязвимостей.
Операционные системы для тестирования:
Kali Linux: Основной дистрибутив для пентеста.
Parrot OS: Альтернатива Kali с акцентом на анонимность.
BlackArch: Расширенный набор инструментов для хакеров.
Инструменты анализа и атаки:
Сканирование сетей: Nmap, Wireshark, Masscan
Взлом паролей: Hashcat, John the Ripper, Hydra
Эксплуатация уязвимостей: Metasploit, Burp Suite, SQLmap
Социальная инженерия: SET (Social-Engineer Toolkit), Maltego
Языки программирования:
Python: Автоматизация, скрипты для анализа угроз.
Bash/PowerShell: Администрирование, анализ логов.
C/C++: Разработка эксплойтов, анализ вредоносного ПО.
Go: Сетевые инструменты, быстрое создание утилит.
IoT и встаиваемые системы
Встраиваемые системы - Специализированные компьютеры, встроенные прямо в устройство, которым они управляют. Их задача это выполнять конкретные функции (управление двигателем, сбор данных с датчика и т.д.).
IoT (Internet of Things) - Когда такие встраиваемые системы получают возможность связываться друг с другом и с интернетом.
С чем должен уметь работать инженер IoT:
Микроконтроллеры (MCU)
Микропроцессоры (MPU)
Датчики: Температура, влажность, движение (акселерометр/гироскоп), свет, давление, газ, GPS и т.д.
Интерфейсы связи
Языки программирования:
C: Прямой доступ к железу, минимальные накладки.
C++: Набирает силу для сложных задач с ООП, где ресурсы позволяют.
Python: Для прототипирования, инструментов, мощных MPU (Raspberry Pi) и обработки данных на сервере / шлюзе.
Rust: Новый, но перспективный. Безопасность памяти + производительность как у C/C++. Начинают использовать в ядре Linux.
Assembler: Для самых критичных кусков кода или когда ресурсов очень мало.
ОС:
Без ОС (Bare Metal): Код работает напрямую на процессоре. Максимум контроля, минимум накладок.
RTOS (Real-Time OS): FreeRTOS (самый популярный), Zephyr (набирает ход, современный), ThreadX, VxWorks (для высоконадежных систем). Гарантируют времена реакции.
Linux: Для мощных MPU (Raspberry Pi, BeagleBone). Yocto Project/Buildroot — для сборки кастомных образов.
Блокчейн и Web3
Блокчейн - По сути, это распределенная база данных (цифровой реестр), где записи ("блоки") связаны в цепочку криптографически. Данные хранятся не на одном сервере у корпорации, а у тысяч участников сети
Web3 - Идея следующего поколения интернета поверх блокчейна. Суть такова, пользователь владеет своими данными, цифровыми активами (NFT, токены) и участвует в управлении сервисами. Вместо обычных платформ децентрализованные приложения (dApps).
ЯП:
Solidity: АБСОЛЮТНЫЙ мастхев для Ethereum и EVM-сетей (Polygon, BSC и т.д.). Похож на JavaScript, но со спецификой.
Rust: Доминирует в Solana, Near, Polkadot (Substrate), всё чаще пишут смарт-контракты и на нем. Сложнее, но мощнее.
Vyper (для Ethereum): Альтернатива Solidity, фокус на безопасность и читаемость (синтаксис ближе к Python).
Go: Для разработки нод (клиентов блокчейна), утилит.
Desktop
Десктоп-разработка - Создание приложений, которые работают напрямую на ОС пользователя. В отличие от веба или мобилок, тут есть прямой доступ к железу, файловой системе и нативным API. Мощь, контроль, но и ответственность за стабильность.
Стек:
Нативные технологии:
Windows (C# / .NET):
Языки: C#, C++/CLI
Фреймворки: WPF (XAML + C#), Wndows Forms
macOS:
Языки: Swift, Objective-C
Фреймворки: SwiftUI (новинка), AppKit (старая школа)
Linux:
Языки: C++, C, Python, Rust
Фреймворки: GTK (GNOME), Qt (KDE, кроссплатформенно), wxWidgets
. Кроссплатформенные фреймворки:
Electron: JavaScript + Chromium + Node.js. Плюсы: Пишешь как веб-приложение (HTML/CSS/JS). Минусы: Жрет память как не в себя.
Qt (C++): Мощь, скорость, зрелость. Используют в AutoCAD, Tesla. Поддержка 3D, сетей, БД.
Avalonia (.NET): Кроссплатформенный аналог WPF. Пишешь на C# — работает на Windows/macOS/Linux.
Flutter (Dart): Добрался до десктопа. Пока сыроват, но трендовый.
Tauri (Rust): Альтернатива Electron. Бекенд на Rust, фронт - любая веб-технология. Размер приложения ~10 МБ вместо 150 МБ у Electron.
Разработка корпоративных решений (Enterprise)
Erprise-разработка - Создание софта для крупного бизнеса: банки, страховые, логистика, ритейл, госсектор. Системы обрабатывают миллионы транзакций, хранят терабайты данных и должны работать 24/7.
ЯП:
Java (Spring Boot, Jakarta EE, Quarkus): Король корпов.
C# (.NET Core ASP.NET): Популярен в банках и госсекторе.
Python (Django, FastAPI): Для аналитики, скриптов.
ESB: Apache Camel, MuleSoft, IBM Integration Bus.
API Gateway: Kong, Apigee, AWS API Gateway.
Очереди: Apache Kafka (лидер), RabbitMQ, IBM MQ, Azure Service Bus.
Стандарты: REST/JSON (модерн), SOAP/XML (легаси), gRPC (микросервисы).
SQL: Oracle DB, Microsoft SQL Server, PostgreSQL, IBM Db2. Транзакции, ACID, отчетность.
NoSQL: MongoDB (документы), Cassandra (высокая нагрузка), Redis (кэш/очереди).
Аналитика: Snowflake, Amazon Redshift, Apache Druid.
Финтех
FinTech (Financial Technology) - Область, в которой пишут технологии для финансов. Например, финтехи пишут платёжные системы, необанки, аналитику и бюджетирование, кридитные платформы, алготрейдинг, B2B-решения. Финтех разработчик занимается разработкой: бизопасных API и клиентских приложений; обработкой денежных транзакций, комиссий, волют; реализацией сложных бизнес-правил.
Стек:
Java: Часто используется.
Kotlin: Современная альтернатива Java.
Go: Высокая производительность, минимализм.
Python: Быстрая разработка, аналитика. Скоринг.
C#: Банковский и страховой сектор.
Rust: Безопасность и производительность.
Если понравилась статья - рекомендую подписаться на телеграм‑канал NetIntel. Там вы сможете найти множество полезных материалов по IT и разработке!
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Опубликовано: 07.07.2025
Рубрика: Uncategorized
Автор: AlexA
Статья размещается на сайте с разрешения автора — S.Buzun. Кроме того, Сергей предоставил архив с данными, по которым писалась статья. Возможно кто-то захочет посмотреть исходные данные.
Оригинал статьи находится по ссылке: https://promtechautomat.ru/articles/boinc.php
На момент написания статьи идет криптозима (весна 2025 года). Количество предложений видеокарт от майнеров на популярных площадках увеличивается, и сейчас неплохое время для апгрейда оборудования. Материал этой статьи будет полезен для сравнения характеристик видеокарт для майнинга в проектах распределенных вычислений на платформе BOINC.
Кроме того, Сергей предоставил данные, по которым писалась статья, архив с ними можно скачать по ссылке.
Подробно о добровольных вычислениях и проектах можно почитать здесь:
Характеристики графических процессоров, которые будут протестированы, приведены в таблице 1. Данные для таблицы взяты с сайта techpowerup.com, как показали эксперименты в реальности тактовая частота работы графических процессоров отличается от приведенной в открытых источниках. Также по графическому процессору CMP 90HX в таблице завышен показатель TDP, как показали замеры, энергопотребление ограничено мощностью 250 Вт. Возможно попался экземпляр с модифицированным биосом.
Таблица 1 – Характеристики графических процессоров
Рис. 1
Характеристики тестового стенда приведены в таблице 2.
Таблица 2 – Состав тестового стенда
Рис. 2
Установка драйверов
В Windows видеокарты CMP 170HX и P102-100 одновременно работать с BOINC отказались, видимо, это связано с тем, что для этих видеокарт драйвера находятся в разных установочных пакетах (для CMP 170HX требуется Datacenter driver for Windows).
Если вы все сделали правильно, в диспетчере устройств появится видеоадаптер NVIDIA A100. Настройка системы охлаждения графического процессора. Ниже приводится описание, как установить драйверы для видеокарты CMP 170HX в Windows 10 Pro.
Уменьшение влияния на производительность графического процессора центрального процессора
Видеокарта CMP 170HX является урезанной версией ускорителя NVIDIA A100, однако производитель не включил отдельный драйвер в установочный пакет, и поиск драйвера на сайте nvidia ни к чему не приведет. Чтобы установить драйвер для CMP 170HX, необходимо скачать Data Center Driver for Windows с поддержкой устройств A-series. На момент написания этого обзора, самая новая версия этого драйвера 572.61-data-center-tesla-desktop-win10-win11-64bit-dch-international. Далее нужно распаковать файлы драйвера в папку (например, программой 7zip) и через диспетчер устройств указать Поиск и установка драйвера вручную
Если вы все сделали правильно, в диспетчере устройств появится видеоадаптер NVIDIA A100.
Настройка системы охлаждения графического процессора
Современные графические процессоры имеют встроенную температурную защиту от перегрева. При приближении температуры кристалла к критической, происходит динамическое изменение частоты работы процессора (частота снижается), за счет этого температура не поднимается выше. Также существует лимит по энергопотреблению, который также имеет связь с температурой кристалла. Чтобы исключить влияние температуры на производительность, удобнее всего вручную задать скорость вращения вентиляторов системы охлаждения, проверив под нагрузкой, что максимальная температура кристалла графического процессора меньше критической и тактовая частота постоянная (равна максимальной). Например, для работы CMP 170HX с максимальной производительностью, температура кристалла должна быть меньше 73 градусов. Уже про 74 градусах максимальная тактовая частота будет ниже 1410 МГц.
Уменьшение влияния на производительность графического процессора центрального процессора
Различные задачи BOINC нагружают центральный процессор по-разному. При оценке производительности графического процессора (GPU), нужно убедиться, что центральный процессор (CPU) не является узким местом вычислительной системы. При работе приложений BOINC, использующих видеокарту, загрузка центрального процессора не должна быть 100%. Особенно это актуально если в системе несколько видеокарт и проект активно использует ресурсы центрального процессора. Например, при использовании тестового стенда и 5 видеокарт Zotac P102-100 для расчетов заданий проекта Einstein@Home, время выполнения задания выше на 50%, из-за перегрузки центрального процессора. При использовании 3-х видеокарт Zotac P102-100, в проекте Einstein@Home перегрузки процессора Intel Core i5-6600K уже не происходит, как результат — производительность вычислительной системы с тремя видеокартами выше, чем с пятью. Если центральный процессор не является узким местом вычислительной системы, время выполнения задания и время ЦП в статистике задания должны быть примерно равны (для All-Sky Gravitational Wave search on O3), и загрузка процессора меньше 100%.
* У P102-100 отсутствует измерение потребляемой мощности с помощью Afterburner, соответственно эти данные заполнялись с помощью пересчета % мощности GPU и значения TDP в потребляемую мощность. Так как величина TDP не является максимальным теоретическим тепловыделением процессора, то полученные при пересчете значения не будут точными. Для 1080ti есть данные и по потребляемой мощности в Ваттах и по мощности GPU в %. Мощность, измеренная в Ваттах примерно на 11-12% больше чем рассчитанная мощность (Мощность GPU в % умножить на TDP и разделить на 100%). Для точного измерения потребляемой мощности требуются внешние приборы, эта задача выходит за рамки настоящего исследования.
Затраты энергии на выполнение задания на CMP 170HX в 3,9 раза меньше чем у графических процессоров GeForce 10 серии. Скорость вычислений CMP 170HX в различных приложениях BOINC выше в 3,1 раза по сравнению с 1080ti и P102-100.
Затраты энергии на выполнение задания CMP 90HX в 1,9 раза меньшее чем у графических процессоров GeForce 10 серии Скорость вычислений CMP 90HX в различных приложениях BOINC выше в 2 раза по сравнению с 1080ti и P102-100.
На сайте проекта PrimeGrid имеется информация о относительной скорости графических процессоров (вычисляется автоматически на основе присланных результатов) https://www.primegrid.com/gpu_list.php#GFN20. К сожалению, там нет информации по графическим процессорам для майнинга. Приняв допущение, что производительность P102-100 примерно равна производительности 1080ti, получаем следующий рейтинг по относительной скорости (для задач Genefer 20 4.04 (OCLcudaGFN20).
В рейтинге CMP 90HX заметно ниже NVIDIA GeForce RTX 3080, разница в 23% объясняется уменьшением лимита потребляемой мощности до 250 Вт, скорее всего при одинаковом лимите энергопотребления, время вычисления заданий тоже будет одинаковым.
Графический процессор CMP 170HX также занял достойное место в рейтинге. При вычислениях задач Genefer 20 4.04 потребляемая мощность практически равна значению TDP. У топа из рейтинга — GeForce RTX 4090 TDP равно 450 Вт, у CMP 170HX измеренное потребление – 225 Вт. Соответственно, если сравнить скорость при одинаковом энергопотреблении, производительность двух ускорителей CMP 170HX будет ниже на 12% производительности одной карты GeForce RTX 4090. Тут нужно отметить, что 170HX выпускается по техпроцессу 7 нм, а RTX 4090 по техпроцессу 5нм.
Записки теперь хочется оставлять чаще
Прикольный блокнот с отрывными листочка в виде окошек программы Paint для рисования. На них можно оставлять записки, а также рисовать. Ссылка на них