Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Реалистичный симулятор игры бильярд. Играйте в Бильярд 3D: Русский бильярд, как в настоящей бильярдной!

Бильярд 3D: Русский бильярд

Симуляторы, Спорт, Настольные

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

IT + Производительность

С этим тегом используют

Программирование IT юмор Программист Юмор Работа Картинка с текстом Разработка Субд Postgresql Компьютер Мониторинг Игры Видеокарта Производство Все
13 постов сначала свежее
3
awfun
2 месяца назад
Лига программистов

Программист про (преждевременную) оптимизацию⁠⁠

Всем привет, работаю java разработчиком больше 10 лет. У написанного кода есть разные характеристики: производительность, читаемость, покрытие тестами, стоимость строки итд. Команды разработки могут управлять этими характеристиками в некоторых пределах. В этом посте хотел бы осветить вопрос оптимизации производительности.

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

List<String> visitorIds;
Set<String> visitorIds;
print(visitorIds.contains("123"));

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

Сложнее обстоит дело с индексами в БД - есть инструменты чтобы выбрать правильные индексы, но этот вопрос нужно решать на месте. Не добавил индекс - будет медленное чтение, добавил индекс - медленная запись и повышенное потребление диска. Потребовалось добавить индекс на большом размере данных - нужно останавливать сервис.

Еще сложнее обстоит вопрос с настройкой ресурсов - какой размер пула потоков установить? Кто съел все коннекты к бд, почему повышенное потребление памяти? На этом этапе приходится подключать средства профилирования. Для получения воспроизводимого результата нужно иметь процедуру нагрузочного тестирования. Как будем мерять производительность - по пропускному потоку или по задержке?

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

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

  • перенести всю логику из java в sql (код админки, нагрузка ~100 запросов в день)

  • ускорить расчет закрытия предыдущего дня (при том что расчет не нуждался в ускорении)

  • использовать параллелизацию (что ломает компоненты, ориентированные на thread per request подход)

Общая рекомендация здесь такая - если вы не знаете, что делаете - лучше не делать ничего. Сделайте по-простому, и потом улучшайте там где вылезают самые острые проблемы. Желаю всем интересных задач и достойной оплаты!

Показать полностью
[моё] Программирование IT Разработка Производительность Текст
20
11
TechSavvyZone
TechSavvyZone
3 месяца назад

Внешняя видеокарта, предназначение сферы использования⁠⁠

Внешняя видеокарта, предназначение сферы использования Компьютерное железо, Компьютер, Инженер, Технологии, IT, Программа, Компьютерная графика, Видеокарта, Компьютерные игры, Производительность, Электроника, Длиннопост

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

Большая внешняя видеокарта

В ограниченное пространство ноутбука непросто вместить мощную видеокарту. Главная проблема, которая всплывает — это охлаждение. Производительные модели могут потреблять далеко за сотню ватт. Охладить такой пыл в маленьком объеме непросто. Именно поэтому топовые игровые ноутбуки получаются габаритными и тяжелыми.

Внешний графический процессор для ноутбука — это обычная десктопная видеокарта, помещенная в специальную док-станцию. Станция обладает собственным блоком питания для подключения к розетке. К ноутбуку такие устройства подключается посредством Thunderbolt 3 — специального интерфейса с высокой пропускной способностью. Понятное дело, внешний графический процессор лишает ноутбук портативности.

Внешняя видеокарта, предназначение сферы использования Компьютерное железо, Компьютер, Инженер, Технологии, IT, Программа, Компьютерная графика, Видеокарта, Компьютерные игры, Производительность, Электроника, Длиннопост

Повышение графической производительности зависит от используемой видеокарты. В случае с флагманами можно добиться кратного роста. Это позволяет играть в требовательные игры и с комфортом работать с «тяжелыми» программами.

Как работают внешние графические процессоры

Внешняя видеокарта работает в системе точно так же, как внутренняя. Достаточно подключить ее и установить драйверы. Обычно драйвер сам переключает вычисления и 3D-нагрузку на внешнюю видеокарту. В некоторых случаях — например, при наличии у ноутбука дискретной видеокарты — придется немного повозиться. Придется вручную указывать предпочитаемый графический процессор в панели управления драйвера.

В продаже есть не только готовые продукты с уже установленными внутри видеокартами. Можно приобрести док-станцию с блоком питания и необходимой «начинкой», к которой видеокарту нужно докупать. В последнем случае нужно обратить внимание на две характеристики. Это мощность блока питания и максимальная длина карты, которую вмещает корпус. Если забыть про характеристики, либо карта не влезет физически, либо станции не хватит мощности.

Внешняя видеокарта, предназначение сферы использования Компьютерное железо, Компьютер, Инженер, Технологии, IT, Программа, Компьютерная графика, Видеокарта, Компьютерные игры, Производительность, Электроника, Длиннопост

Док-станции для внешних ГП могут иметь дополнительные разъемы для подключения внешних устройств. Например, USB, LAN, HDMI, DVI или Display Port. Большинство станций также передают энергию через Thunderbolt. Если ваша модель ноутбука способна питаться через данный разъем, собственное зарядное устройство при работе от сети не потребуется.

Производительность ГП

Ноутбучные видеокарты, несмотря на схожесть названий моделей с десктопными, обладают пониженной производительностью. Например, десктопная RTX3080 по характеристикам на голову опережает мобильную версию. В чем причина? Ноутбучные модели имеют более низкий тепловой пакет, и за счет этого — ощутимое ограничение мощности при нагрузке. Кроме того, некоторые модели имеют меньше исполнительных блоков, чем в десктопных аналогах.

Внешние видеокарты этих минусов лишены. Используются обычные десктопные модели, теплопакет которых искусственно не ограничен дополнительными факторами, количество блоков не урезано. Именно поэтому они показывают более высокую производительность.

Внешняя видеокарта, предназначение сферы использования Компьютерное железо, Компьютер, Инженер, Технологии, IT, Программа, Компьютерная графика, Видеокарта, Компьютерные игры, Производительность, Электроника, Длиннопост

Впрочем, есть ряд факторов, который ограничивают производительность внешних ГП. Главный из них — интерфейс подключения. Thunderbolt 3 предоставляет пропускную способность до 40 Гбит/c. При этом современные массовые графические ускорители используют PCI-E 3.0 x16 с пропускной способностью 128 Гбит/c. Флагманские модели  используют PCI-E 4.0 x16 с 256 Гбит/c. Это ограничивает производительность видеокарт — причем, чем мощнее карта, тем больше влияние на производительность. Вдобавок из-за узкого интерфейса при использовании в играх возможны подвисания и микрофризы. В некоторых игровых сценах данные просто не успевают вовремя поступать к ГП через упомянутое «бутылочное горлышко».

Вторым фактором, влияющим на производительность, становится центральный процессор ноутбука. Ноутбучные модели обладают более низкой частотой, в первую очередь — при длительных нагрузках. Так что игровая производительность в некоторых сценах будет упираться в ЦП.

Пара ложек дегтя

У внешних графических процессоров есть и свои недостатки. Прежде всего, из-за него ноутбук перестает быть портативным: для ГП требуется розетка. Следующий недостаток — большой вес и серьезные габариты. Док-станция должна вместить в себя полноценную видеокарту и блок питания на несколько сотен ватт. Такая «коробка» получается достаточно большой и тяжелой.

Внешняя видеокарта, предназначение сферы использования Компьютерное железо, Компьютер, Инженер, Технологии, IT, Программа, Компьютерная графика, Видеокарта, Компьютерные игры, Производительность, Электроника, Длиннопост

Третий недостаток — разъем.  Порт Thunderbolt есть далеко не на всех ноутбуках. Им оснащаются, как правило, дорогие модели. Так что к любому ноутбуку такую видеокарту не подключить.  А приобретать к недешевой внешней видеокарте еще и дорогой ноутбук — решение неочевидное. Сэкономить, покупая компоненты внешнего ГП по отдельности, тоже не получится. Док-станции сами по себе стоят немалых денег.

И, наконец, последний недостаток — описанные выше ограничения производительности.

Все это вкупе привело к тому, что ассортимент внешних графических процессоров невелик. Пользователей подобных девайсов тоже не очень много.

Кому пригодятся внешние ГП

Внешние видеокарты пригодятся:

●   Для игр. Десктопные модели быстрее ноутбучных. Итоговая производительность такой связки с топовым ГП будет чаще всего выше, чем у обычного игрового ноутбука.

●   Для работы с «тяжелыми программами», использующими ГП. Расчеты, 3D, рендер и работа с видео — при использовании внешнего графического процессора все это намного ускорится.

Главный плюс тандема ГП с ноутбуком — портативность последнего. Легкий и тонкий ноутбук с интерфейсом Thunderbolt можно носить с собой. А когда понадобится повышенная графическая производительность — сделать его стационарным, подключив к док-станции.

Внешняя видеокарта, предназначение сферы использования Компьютерное железо, Компьютер, Инженер, Технологии, IT, Программа, Компьютерная графика, Видеокарта, Компьютерные игры, Производительность, Электроника, Длиннопост

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

Показать полностью 5
Компьютерное железо Компьютер Инженер Технологии IT Программа Компьютерная графика Видеокарта Компьютерные игры Производительность Электроника Длиннопост
1
1
kznalp
kznalp
5 месяцев назад
Программисты шутят
Серия ITшное

Эффект наблюдателя в DBA⁠⁠

Эффект наблюдателя в DBA Юмор, Субд, Производительность, Мониторинг, IT

Квантовая физика - она везде .

Любое наблюдение за производительностью СУБД - влияет на производительность СУБД.

Вывод:

Невозможно точно определить степень влияния сбора метрик производительности на производительность СУБД.


  • А метрики производительности снижают производительность СУБД ?

  • Конечно.

  • А давайте их отключим?

  • Создайте изменение и всё сделаем. Только больше не обращайтесь - "Ой у нас почему то все стало медленно".

Показать полностью 1
[моё] Юмор Субд Производительность Мониторинг IT
2
3
Mr.Ducks
Mr.Ducks
8 месяцев назад
Серия PHP и веб-разработка: полезные руководства и совет

PHP: Почему этот язык остается актуальным в 2024 году?⁠⁠

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

1. PHP 8.x: Мощные обновления для современного мира

С выходом PHP 8.x язык стал еще более эффективным и современным. Одним из ключевых обновлений стала поддержка JIT-компиляции (Just-in-Time), что значительно ускоряет выполнение кода, особенно для задач, связанных с вычислениями. Это позволяет PHP конкурировать по скорости с такими языками, как Java и C#.

Что нового в PHP 8.x:

  • JIT-компиляция: Увеличение производительности для сложных вычислений.

  • Named Arguments (Именованные аргументы): Возможность передавать параметры функции по имени, делая код более читабельным.

  • Match expression: Новый синтаксис для замены старых конструкций switch более лаконичным и мощным аналогом.

  • Attributes: Теперь можно добавлять метаданные к функциям и классам, улучшая поддержку фреймворков и библиотек.

  • Union Types: Поддержка объединения типов данных, что делает строгую типизацию в PHP более гибкой и полезной.

PHP: Почему этот язык остается актуальным в 2024 году? PHP, Веб-разработка, Программирование, Laravel, Symfony, Производительность, Кодирование, Разработка, IT, Длиннопост

2. Легкость изучения и использования

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

3. Обширная экосистема и сообщества

PHP имеет одну из самых больших и активных экосистем в мире веб-разработки. Вот некоторые ключевые моменты:

  • Composer: Мощный менеджер зависимостей для PHP. Composer упрощает интеграцию библиотек, фреймворков и пакетов в проекты, обеспечивая их автоматическое обновление.

  • Фреймворки: Laravel, Symfony, CodeIgniter, Yii — это лишь малая часть фреймворков, созданных на PHP. Каждый из них предоставляет мощные инструменты для разработки приложений любого масштаба.

  • CMS на базе PHP: WordPress, Drupal, Joomla — все эти популярные системы управления контентом работают на PHP, что делает его ключевым языком для создания веб-сайтов.

4. Высокая производительность и масштабируемость

Современные веб-приложения требуют высокой производительности и способности к масштабированию. В этом отношении PHP также проделал значительный путь. Использование кэширования (опкешей), таких как OPcache, помогает значительно ускорить выполнение скриптов, снижая нагрузку на сервер.

Кроме того, PHP отлично интегрируется с современными решениями для масштабирования и высоких нагрузок, такими как NGINX, Redis, Memcached и Docker. Это делает его идеальным выбором для крупных проектов с миллионами пользователей.

5. Поддержка и обратная совместимость

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

6. Безопасность

Хотя PHP долгое время подвергался критике за возможные проблемы с безопасностью, в последние годы ситуация значительно улучшилась. Современные версии PHP предоставляют встроенные механизмы для защиты от популярных уязвимостей, таких как SQL-инъекции, XSS-атаки и CSRF. Также благодаря сообществу и наличию большого количества библиотек, реализующих лучшие практики безопасности, разработчики могут легко интегрировать дополнительные уровни защиты в свои проекты.

7. Заключение

PHP продолжает развиваться и адаптироваться к требованиям современного веба. Его производительность, богатая экосистема и простота в использовании делают его идеальным инструментом как для новичков, так и для профессионалов. В 2024 году, с выходом PHP 8.x, этот язык еще раз доказал свою жизнеспособность и готовность к новым вызовам.

Если вы до сих пор не использовали PHP в своих проектах, самое время попробовать! Ведь за этим языком стоит огромная поддержка сообщества и множество успешных примеров использования.

Показать полностью 1
PHP Веб-разработка Программирование Laravel Symfony Производительность Кодирование Разработка IT Длиннопост
1
Mr.Ducks
Mr.Ducks
8 месяцев назад
Серия PHP и веб-разработка: полезные руководства и совет

Laravel vs WordPress: Что Выбрать для Веб-Разработки?⁠⁠

Laravel vs WordPress: Полное Сравнение

При выборе платформы для разработки веб-приложений или сайтов, разработчики часто сталкиваются с дилеммой между фреймворком Laravel и CMS WordPress. Оба инструмента популярны, но они предназначены для разных целей и имеют свои плюсы и минусы. В этой статье мы подробно разберем отличия между Laravel и WordPress, их сильные и слабые стороны, чтобы помочь вам сделать осознанный выбор.

Laravel vs WordPress: Что Выбрать для Веб-Разработки? Laravel, Wordpress, Cms, Framework, Веб-разработка, PHP, Mvc, Блог, Плагин, Тема, Настройка, Безопасность, Производительность, IT, Длиннопост

Что такое WordPress?

WordPress — это система управления контентом (CMS), которая была создана для упрощения создания и управления сайтами. В первую очередь она предназначена для блогов, новостных порталов и контентных веб-ресурсов. Благодаря своей простоте и расширяемости WordPress стал одной из самых популярных платформ для создания сайтов в мире.

Что такое Laravel?

Laravel — это PHP-фреймворк, предназначенный для создания веб-приложений. Это мощный инструмент для разработчиков, которые хотят построить сложные, высокоэффективные веб-приложения с минимальными затратами на рутину разработки. Laravel предоставляет набор инструментов и библиотек для разработки гибких и масштабируемых решений.

Основные Отличия Laravel и WordPress

  1. Назначение

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

    • Laravel — это фреймворк для разработки веб-приложений с нуля. Laravel больше подходит для создания кастомных веб-приложений, корпоративных сайтов, сложных систем с уникальной логикой и API.

  2. Архитектура

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

    • Laravel построен на архитектуре MVC (Model-View-Controller), что делает его более гибким и структурированным для разработки масштабируемых приложений. Это позволяет разделить логику приложения, пользовательский интерфейс и работу с данными.

  3. Настраиваемость

    • WordPress предлагает множество готовых тем и плагинов, которые позволяют быстро настроить сайт. Однако сложные модификации могут быть ограничены рамками CMS.

    • Laravel предоставляет разработчикам полную свободу в создании функционала. Вы сами решаете, как строить логику и интерфейсы приложения, что делает его идеальным для создания нестандартных решений.

  4. Управление контентом

    • WordPress создан для контентных сайтов и отлично справляется с управлением статьями, страницами, медиафайлами. Встроенные инструменты для SEO и публикации контента позволяют легко управлять сайтом без глубоких знаний программирования.

    • Laravel не имеет встроенной системы управления контентом. Для этого нужно либо разрабатывать собственные решения, либо интегрировать сторонние пакеты.

  5. Безопасность

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

    • Laravel предлагает встроенные инструменты для защиты: CSRF-защита, SQL-инъекции, защита от XSS-атак. Фреймворк автоматически внедряет лучшие практики безопасности, но это требует от разработчика более глубоких знаний.

Плюсы и Минусы WordPress

Плюсы:

  • Простота использования: Не требует глубоких знаний программирования. Даже новички могут создать сайт с помощью тем и плагинов.

  • Большое сообщество: Огромное количество плагинов и тем для расширения функционала.

  • SEO-дружелюбность: Встроенные инструменты для оптимизации сайта под поисковые системы.

  • Быстрое развертывание: Можно быстро запустить сайт без необходимости программирования.

Минусы:

  • Ограниченная гибкость: Подходит не для всех типов проектов. При сложных запросах может потребоваться разработка кастомных плагинов.

  • Проблемы с безопасностью: Из-за популярности CMS часто становится целью атак.

  • Производительность: Без оптимизаций и использования кэширования сайты могут быть медленными, особенно с большим количеством плагинов.

Плюсы и Минусы Laravel

Плюсы:

  • Гибкость: Можно создать любые веб-приложения, от простых до высоконагруженных.

  • Архитектура MVC: Легкость масштабирования и поддержки приложений.

  • Безопасность: Встроенные механизмы защиты от наиболее распространенных веб-угроз.

  • Активное сообщество: Laravel имеет большое и активное сообщество разработчиков, которые поддерживают и улучшают фреймворк.

Минусы:

  • Требует знаний программирования: Для работы с Laravel необходимо иметь опыт разработки.

  • Нет готовой CMS: Для управления контентом нужно либо разрабатывать решения самостоятельно, либо использовать сторонние пакеты.

  • Долгое развертывание: В отличие от WordPress, развертывание приложения на Laravel требует больше времени и усилий.

Какой инструмент выбрать?

Если ваша цель — быстро создать контентный сайт, блог, портфолио или небольшой интернет-магазин, то WordPress будет отличным выбором. Его простота и огромное количество готовых решений позволят вам начать работу в кратчайшие сроки.

Однако, если вы разрабатываете сложное веб-приложение, интернет-платформу с уникальной логикой или API, то Laravel — это идеальный инструмент. Он предоставляет все необходимые инструменты для гибкой и безопасной разработки с нуля.

Заключение

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

Показать полностью 1
Laravel Wordpress Cms Framework Веб-разработка PHP Mvc Блог Плагин Тема Настройка Безопасность Производительность IT Длиннопост
3
268
imctobitch
imctobitch
9 месяцев назад
IT-юмор
Серия I'm CTO, bitch

Предыстория, откуда у Пупы и Лупы вообще появились зарплаты⁠⁠

Предыстория, откуда у Пупы и Лупы вообще появились зарплаты I`m CTO bitch, IT юмор, Скриншот, IT, Разработка, Эффективный менеджер, Руководство, Найм, Производительность, Задача, Учебник, Лупа и пупа, Программист, Программирование
Показать полностью 1
[моё] I`m CTO bitch IT юмор Скриншот IT Разработка Эффективный менеджер Руководство Найм Производительность Задача Учебник Лупа и пупа Программист Программирование
58
22
anetto1502
anetto1502
9 месяцев назад
Лига программистов

Методика измерения времени работы программы. Как загрузка CPU/memory/IO влияет на производительность кода⁠⁠

В комментариях к видео Идеальный скрипт на баш 2 мне сказали, что в bash в конструкции if надо использовать "<" вместо "-lt", который применял я. Давайте разберёмся, как вообще измерять время работы программы и что на это влияет. Вас ждёт фарш из кучи команд: htop, iotop, lscpu, time, xargs, yes, seq, sync, timeout и хтонический ужас однострочников на bash. Материал в видео, кому удобнее — ниже его текстовая версия.

Кроме ютуба, для удобства есть дзен / VK / rutube.

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

Сравним скорость -lt и < внутри if мы в следующем видео. Начать придётся издалека, через тернии к звёздам.

Что вообще важно для любого эксперимента? Описать методику эксперимента. Для измерения скорости обратите внимание на следующие нюансы:

0. На каком оборудовании мы работаем

1. Измерять секунды и десятки секунд, а не наносекунды

2. Фиксировать условия по загрузка ядер и видеокарты, оперативной памяти, вводу/выводу

3. И сколько измерений проводить и как усреднять, средняя или медиана, что делать с выбросами и подобное

Не будем вдаваться детали инструментов конкретных языков программирования, где можно измерять время выполнения конкретной функции. Не будем также говорить об очень малых замерах, где нужно учитывать непосредственно тики процессора. Будем измерять процессы, длящиеся секунды штатными средствами операционной системы Linux.

В начале про оборудование. Посмотрим на доступные ядра нашей системы с помощью команды lscpu. Видим 4 интелловых ядра i7-3770 с гипертредингом в 2 потока каждое, то есть 8 виртуальных ядер. Запомним - это наше оборудование

lscpu

...
CPU(s): 8

Потоков на ядро: 2

Ядер на сокет: 4

Имя модели: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz

...

Для длительных временных промежутков достаточно встроенной в bash команды time:

type time

time — это ключевое слово командного процессора

Справка нас обманывает, потому что показывает информацию о бинарнике /usr/bin/time

man time

А это не то, что нужно. Это справка по такой команде:

which time

/usr/bin/time

Вот пример её вывода:

/usr/bin/time sleep 1

0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2260maxresident)k

72inputs+0outputs (1major+95minor)pagefaults 0swaps

Мне такой вывод непривычен, поэтому вернёмся к встроенному time:

time sleep 1

real 0m1,002s — общее время работы программы

user 0m0,002s — время в пользовательском режиме

sys 0m0,000s — время в режиме ядра или системных вызовов

До эры искуственного интеллекта в виде ChatGPT был популярен stackoverflow, детали смотрите там. Важно обратить внимание, что real — это про общее время работы, а user и sys — время процессорное. Для них 10 будет означать, что программа работала 10 ядросекунд — при этом неважно, 10 секунд на 1 ядро или 1 секунда на 10 ядрах

Для примера попробуем посчитать уникальные строки в большом файлике на 130 мегабайт и 14 млн уникальных строк.

time sort -u rockyou.txt | wc -l

14341564

real 0m34,771s

user 1m7,906s

sys 0m0,931s

Вот тут наглядно видно, что real — это совсем не сумма user и sys. Кстати, вам интересно, как можно изящно ускорить подсчёт уникальных строк за счёт магии баша? Их есть у меня! Лайкните этот пост, и я сниму отдельный ролик про всякие хаки и оптимизации на этом поприще.

Про встроенную команду time мы можем найти в справке по самому bash

man bash

Ищем там с помощью ввода /time (слеш, потом time), дальше сильно промотав вниз с помощью кнопки n (сокращение от next, следующий поиск). Тут и описание вывода, и переменная окружения TIMEFORMAT, с помощью которой можно настроить вывод time.

Больше о переменных окружения в нашем бесплатном курсе на степике под названием Командная строка для разработчиков – cli-for-dev.

Проще, конечно, загуглить нужное, кому нужна эта справка. Для вывода только real нам понадобится такая конструкция

TIMEFORMAT="%R"; time sleep 1

Запомнили, это пригодится позднее. Дальше о фиксированных условиях.

С этим пунктом мы надолго. Теперь посмотрим на загрузку системы и как она влияет на время работы команды. Мне нравится команда htop за наглядность. Тут показывается загрузка каждого ядра в режиме реального времени и многое другое. Строку load average мы с вами разбирали в видео про атаку forkbomb в docker-контейнере. Посмотрите, если пропустили.

Методика измерения времени работы программы. Как загрузка CPU/memory/IO влияет на производительность кода Telegram (ссылка), Программирование, Командная оболочка bash, Обучение, Производительность, Методика, IT, YouTube, Разработка, Программа, Видео, Длиннопост

Пример работы htop

Загрузим вычислитель. Нам нужно взять "тяжёлую" для процессора команду и запустить её, загрузив все логические ядра системы. Согласно философии Unix, программа должна решать одну задачу и решать её хорошо. Команда xargs умеет параллелить. Она берёт входную строку и преобразует её в одну или несколько команд. Для наглядности покажу, как xargs работает в связке с echo:

echo 123 | xargs echo my arg is

Если аргументов несколько, по умолчанию они все пойдут указанной команде:

echo 1 2 3 | xargs echo my arg is

С помощью флага -n можно настроить, сколько аргументов пойдёт в одну команду. Если указать один, то наши три числа превратятся в три разные команды:

echo 1 2 3 | xargs -n1 echo my arg is

Если указать два, то первые два аргумента пойдут в первую команду, оставшийся третий аргумент пойдёт во вторую:

echo 1 2 3 | xargs -n2 echo my arg is

Вернёмся к одному аргументу на команду. И теперь магия - укажем, что надо запускаться параллельно на всех ядрах с помощью P0

echo 1 2 3 | xargs -P0 -n1 echo my arg is

Блеск. Дело за малым - нам надо загрузить всю систему. В моем случае, как мы выяснили в lscpu, надо 8 потоков. Воспользуемся командой seq, сокращение от sequence

seq 8

seq 8 | xargs -P0 -n1 echo hello process

Чудо. Мы умеем параллельно запускать 8 команд. Теперь надо сделать так, чтобы эти команды сурово грузили процессор. Можно использовать сторонние тулзы нагрузочного тестирования типа stress, но зачем?

Методика измерения времени работы программы. Как загрузка CPU/memory/IO влияет на производительность кода Telegram (ссылка), Программирование, Командная оболочка bash, Обучение, Производительность, Методика, IT, YouTube, Разработка, Программа, Видео, Длиннопост

Пойдём рабоче-крестьянским путём

Есть команда yes, которая умеет адски спамить. По умолчанию она спамит буквой y, то есть всегда говорит да, прямо как Джим Керри в комедии 2008 года:

yes

Может спамить любой строкой:

yes hello world

Прикол в том, что этот спам сильно грузить процессор, что нам и нужно. Направляем вывод команды yes в чёрную дыру dev null:

yes > /dev/null

После чего смотрим в htop на загрузку. И получаем отличную жужалку, которая нагружает ядро. Но только одно. Постойте, мы же умеем параллелить!

seq 8 | xargs -P0 -n1 yes > /dev/null

Всё хорошо, но эта команда работает, пока мы её не прервём. А нам бы добавить немного удобства. Пусть система загрузится на 10 секунд. Линукс и так умеет. Команда timeout прервёт запущенную команду, если она сама не завершиться за указанное время, в моём примере 1 секунду:

timeout 1 yes

И мы ещё time можем сюда навесить. Измерим время команды yes, которую прервёт по таймауту:

time timeout 1 yes

Я вас ещё не совсем замучил? Теперь объединим всё это безобразие. На 10 секунд загрузим 8 ядер системы собранной нами на коленке жужжалкой:

seq 8 | xargs -P0 -n1 timeout 10 yes > /dev/null

В рамках нашего примера есть два сходных варианта:

seq 8 | xargs -P0 -n1 timeout 10 yes > /dev/null # Грузим sys

seq 8 | xargs -P0 -n1 timeout 10 md5sum /dev/zero # Грузим user

Теперь у нас готова жужжалка для загрузки ядра процессора. С загрузкой других компонент системы разобраться проще. Для загрузки оперативной памяти достаточно создать огромную переменную:

a=$(seq 10)

echo $a

a=$(seq 100 000 000)

Но совершенно неудобно оценивать размер. Поэтому воспользуемся питоном. Незатейливо создадим большую строку, благо звёздочка удобно переопределена для строк. Один английский символ занимает один байт плюс накладные расходы на переменную, берём их "кило", то есть 1024 и получим килобайт.

python3.10

var = "a"*10

В IDLE можно не писать print, результат работы команды выводится на экран:

var

Кстати, в питоне накладные расходы на переменную довольно велики. В случае строки это 49 байт:

import sys

var = ""

sys.getsizeof(var) # 49

var = "a"

sys.getsizeof(var) # 50

var = "a" * 100

sys.getsizeof(var) # 149

Возведём 1024 в степень. Вторая степень даст мегабайт, третья - гигабайт. То есть такая переменная займёт в памяти около гигабайта, плюс 49 байт на служебную информацию.

var = "a"*1024**3

У нас свободно около 5 гигабайт, займём их все. Пока не удалим эту переменную или не завершим интерпретатор питона, память будет загружена.

var = "a"*5*1024**3

Для просмотра загруженности подсистемы ввода-вывода есть команда iotop, которой требуются права суперпользователя. Нам нужны только первые две строки

sudo iotop

Для загрузки ввода-вывода возьмём псевдогенератор случайных чисел и будем записывать его в файл:

cat /dev/urandom > /tmp/1

Зачастую проблема не в самом вводе-выводе, а в его буферизации. Так называется отложенная запись на диск. Операционная система для более эффективной работы с оборудованием пишет не сразу. Например, после записи файла на флешку на самом деле он там окажется не сразу, а через некоторое время. Для этого существует (или существовало? кто видел флешку в 2024 году?) безопасное извлечение флешки – как раз, чтобы операционка корректно дописала отложенный буфер.

В линуксе есть команда sync, которая завершиться, когда весь буфер запишется на диск.

sync

Пробовать измерять время будем на примере цикла в баше:

i=0; while [[ $i -lt 10 ]]; do i=$(( $i+1 )); echo $i ; done; echo $i

Увеличим число нулей:

i=0; while [[ $i -lt 1000000 ]]; do i=$(( $i+1 )); done; echo $i

Добавим time. Если просто добавить time, то мы измерим время только присваивания:

time i=0; while [[ $i -lt 1000000 ]]; do i=$(( $i+1 )) ; done; echo $i

Чтобы измерить время всей конструкции, оформим цикл в виде отдельного процесса с помощью доллара и скобок:

time $( i=0; while [[ $i -lt 1000000 ]]; do i=$(( $i+1 )) ; done; echo $i )

Ещё ошибка: результат подпроцесса - число, а команда time пытается это число выполнить как команду. Добавим echo:

time echo $( i=0; while [[ $i -lt 1000000 ]]; do i=$(( $i+1 )) ; done; echo $i )

Теперь посмотрим, как на этот цикл влияет загрузку системы. Запустим монитор ресурсов htop и загрузим ядро:

seq 8 | xargs -P0 -n1 timeout 10 yes > /dev/null

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

python3.10

var = "a"*5*1024**3

И снова цикл. Осталось загрузить ввод-вывод:

sudo iotop

cat /dev/urandom > /tmp/1

И снова запустим цикл.

Одного измерения недостаточно. Собственно, примеры загрузки системы выше были призваны проиллюстрировать влияние внешних факторов на запуск вашего кода. Для минимизации этого влияния следует измерить несколько раз. Можно ручками внести результаты в таблицу. Но, во-первых, мы люди ленивые. А во-вторых, ручная обработка всегда чревата ошибками. Соберём всё в табличку.

А с этим есть проблема. Для вывода time в файл придётся немного извратиться. Дело в том, что перенаправление будет работать для команды выполняемой команды, то есть для всего справа от time. На помощь придёт логическое объединение в виде group command с помощью фигурных скобочек:

man bash

Ищем такую конструкцию /\{

Слеш для поиска, потом экранирование обратным слешом фигурной скобки. Как видно из справки, нужно добавить фигурные скобки и точку с запятой в конце, и только потом перенаправить. При этом time пишет в стандартный поток ошибок, то есть нужно перенаправлять второй дескриптор. Получается вот так:

TIMEFORMAT="%R"; { time $( i=0; while [[ $i -lt 1000000 ]]; do i=$(( $i+1 )) ; done; ) ; } 2>> res.csv;

tail -f res.csv # для проверки, что пишет

libreoffice res.csv # для обработки итоговой таблицы после завершения

Если запустить libreoffice с английским языком, то запятая будет считаться разделителем разрядов и удалится, мы получим неверное время (4567 вместо 4,567).

Закроем файл и откроем снова. Переключим язык на русский, чтобы запятая стала десятичным разделителем. Впишем формулы СРЗНАЧ и СТОТКЛ.

Если запускать скрипт 10 раз лень, можно накинуть ещё цикл (больше циклов богу циклов):

for i in $( seq 2 ); do TIMEFORMAT="%R"; { time $( i=0; while [[ $i -lt 1000000 ]]; do i=$(( $i+1 )) ; done; ) ; } 2>> res.csv; done

Резюмируем. Наша методика экспериментального исследования времени работы программы выглядит так:

берём 8-ядерный i7-3770

проводим 10 измерений командой time

запускаем много циклов "-lt" vs "<"

рассчитываем среднее арифметическое и среднеквадратичное отклонение

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

Теперь вы знаете, как можно загрузить процессор, оперативную память или подсистему ввода-вывода, как посмотреть на эту загрузку и как она может влиять на программу. Такие дела.

В телеграм-канале DevFM пишу о полезном для разработчика: инструментах, например, postgres_dba для анализа узких мест базы данных или fcron, интересных хаках вроде запуска LLM прямо в шрифте, или о Google design docs. А ещё у нас есть бесплатный курс cli-for-dev по Linux на степике, немного подкастов и видео.

Показать полностью 2
[моё] Telegram (ссылка) Программирование Командная оболочка bash Обучение Производительность Методика IT YouTube Разработка Программа Видео Длиннопост
10
5
romanpotapoff
romanpotapoff
1 год назад

Что такое нагрузочное тестирование?⁠⁠

Всем привет! Поговорим про нагрузочное тестирование.

Давай представим некую абстрактную систему в виде трубопровода, куда подается вода под давлением. Там есть турбины, развязки, какие то технические блоки и т.п. Цель проверить герметичность и то что вода подается под давлением с одного конца и спокойно выходит с другого, все турбины вращаются и блоки работают как надо. Для этого мы берем насосы высокого давления и начинаем нагнетать поток воды. Дальше смотрим есть ли у нас течь в каких то швах или компонентах нашей системы.

С информационными системами происходит примерно тоже самое, только мы подаем не воду, а поток входящих данных. Например, представим что некий интернет магазин решил провести акцию небывалой щедрости - продавать технику со скидкой в 90% и еще запустил огромную рекламную кампанию так чтобы все люди точно узнали про это. В ожидаемом результате мы планируем то что на сайт магазина ринется толпа яростных покупателей которые хотят скупить весь ассортимент.

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

С этим на первый взгляд все просто, с помощью какого нибудь инструмента, например jmeter, мы пишем скрипты эмулирующие все действия пользователей в системе, дальше задаем нужное количество потоков и интенсивность. Но дьявол кроется в мелочах, ведь нужно правильно рассчитать интенсивность и распределить потоки по выполняемым действиям, а это сложная аналитическая работа. Ведь подаваемая нагрузка должна максимально соответствовать тому что предстоит испытать системе в день распродажи. Может оказаться так что операция поиска товара более трудозатратная чем добавление его в корзину. Теперь давай прикинем сколько запросов поиска ты совершаешь при выборе телефона, ноута или телевизора, а добавляешь в корзину только один раз. Таким образом нужно правильно рассчитать профиль нагрузочного тестирования со всеми нюансами, что не так просто.

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

Представим что мы рассчитали профиль тестирования, никак не ограничены в ресурсах серверов и готовы подавать нагрузку. Запускаем шарманку, наши виртуальные пользователи начали совершать все действия по покупке товаров в магазине. Что дальше? А дальше самое сложное, нужно провести анализ всей системы.

Вначале рассказывал про трубопровод, так вот теперь с эндоскопом лазим по всем щелям и проверяем на наличие протеканий. На реальных системах есть куча метриков которые нужно нужно уметь читать и анализировать. Загибаем пальцы: утилизация CPU, оперативной памяти, дисков, сети серверов, тоже самое для отдельных элементов системы которые развернуты на этих серверах, времена выполнения операций наших пользователей, интенсивность, количество активных потоков, количество ошибок, еще до кучи тонна логов, статистика с базы данных и это далеко не все метрики которые придется перерыть… В конце концов все это дело анализируем, делаем заключение и даем рекомендации по оптимизации системы. Чем глубже ты можешь капнуть тем круче ты как специалист. Естественно, я сейчас упрощаю для понимания, но далеко не каждый может установить причинно-следственную связь между утечкой памяти в одном сервисе и тем что в другом сервисе долбит fatal error.

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

Профессия интересная и востребованная.

Показать полностью
IT Развитие Программирование Тестирование Производительность QA Аналитика Информационные системы Обучение Текст
7
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии