Как стать автором
Обновить

Linux ”perf” ускорили в 60 раз

Блог компании ITSumma Настройка Linux *Open source *Копирайт Софт
Многие инструменты для визуализации производительности под Linux типа FlameGraph интенсивно используют профайлер perf из ядра Linux. В частности, такие «пламеграфы» наглядно показывают, сколько времени программа тратит на выполнение различных подпрограмм.

Для записи логов нужно или обернуть программу в вызов perf record, или инструмент просто подключается к текущему процессу. В любом случае затем мы прогоняем записанные данные через perf script, а несколько перловых скриптов генерируют «пламеграфы» из этих данных.

Проблема только в том, что perf record очень медленно работает под Debian по юридическим причинам. Всем разработчикам Linux это известно, но они ничего не могут сделать. Поэтому независимый программист Тони Гарнок-Джонс (Tony Garnock-Jones) выпустил патч, который ускоряет perf примерно в 60 раз.
Читать дальше →
Всего голосов 38: ↑36 и ↓2 +34
Просмотры 13K
Комментарии 21

Механизмы профилирования Linux

Блог компании НТЦ Метротек Системное программирование *


Последние пару лет я пишу под ядро Linux и часто вижу, как люди страдают от незнания давнишних, общепринятых и (почти) удобных инструментов. Например, как-то раз мы отлаживали сеть на очередной реинкарнации нашего прибора и пытались понять, что за чудеса происходят с обработкой пакетов. Первым нашим позывом было открыть исходники ядра и вставить в нужные места printk, собрать логи, обработать их каким-нибудь питоном и потом долго думать. Но не зря я читал lwn.net. Я вспомнил, что в ядре есть готовые и прекрасно работающие механизмы трассировки и профилирования ядра: те базовые механизмы, с помощью которых вы сможете собирать какие-то показания из ядра, а затем анализировать их.
Читать дальше →
Всего голосов 60: ↑60 и ↓0 +60
Просмотры 36K
Комментарии 11

Создание кастомных Go-профилей с помощью pprof. Запоминаем стеки

Блог компании Badoo Тестирование IT-систем *Программирование *Отладка *Go *
Перевод

Кадр из сериала «Коломбо»

Go-шный пакет pprof часто используется для профилирования процессора или памяти, но не все знают о возможности создавать собственные кастомные профили. Они могут быть полезны для поиска утечек ресурсов или, например, для слежения за злоупотреблением какими-нибудь тяжелыми вызовами.
Читать дальше →
Всего голосов 43: ↑42 и ↓1 +41
Просмотры 4.6K
Комментарии 0

Способы диагностики PostgreSQL — Владимир Бородин и Ильдус Курбангалиев

Блог компании PG Day'17 Russia Серверное администрирование *Администрирование баз данных *Хранилища данных *
Одним из самых популярных докладов конференции PG Day в 2015 году стал рассказ Владимира Бородина и Ильдуса Курбангалиева о ситуациях, когда посгресовым базам становится плохо, надо их диагностировать и искать узкие места. Все примеры в докладе взяты из реальной практики Яндекса, сопровождаются иллюстрациями и подробным рассказом о поиске «боттлнека». Не смотря на то, что проблемы рассматривались в разрезе 9.4 и 9.5 версий базы данных, общая ценность и практическая применимость советов Владимира и Ильдуса остается неизменной. Рады предложить вам транскрипцию этого доклада.

Вступление Ильи Космодемьянского: сейчас у нас будет рассказ о том, как жить, если очень хочется иметь Oracle, а его нет. На самом деле, это полезный доклад, потому что одна из проблем, которую мы сейчас имеем – это проблема средств диагностики. Средства диагностики местами не достают, местами, вместо привычных средств диагностики нужно использовать довольно сложные тулзы, которые вообще предназначены для разработчиков Linux, а не для DBA. У DBA зубы начинают болеть, когда они смотрят на эти скрипты. И вот ребята из Яндекса и PG Pro расскажут о методах диагностики Postgres, которые они применяют, как ими пользоваться и немного расскажут о том, как они собираются улучшить этот мир.


Читать дальше →
Всего голосов 26: ↑26 и ↓0 +26
Просмотры 24K
Комментарии 10

В поисках перформанса, часть 2: Профилирование Java под Linux

Блог компании JUG Ru Group Высокая производительность *Java *Разработка под Linux *
Бытует мнение, что бесконечно можно смотреть на огонь, воду и то, как другие работают, но есть и ещё кое-что! Мы уверены, что можно бесконечно говорить с Сашей goldshtn Гольдштейном о перформансе. Мы уже брали у Саши интервью перед JPoint 2017, но тогда разговор касался конкретно BPF, которому был посвящен доклад Саши.

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


Читать дальше →
Всего голосов 27: ↑26 и ↓1 +25
Просмотры 17K
Комментарии 0

Профилирование кода на C/С++ в *nix-системах

Блог компании Конференции Олега Бунина (Онтико) Высокая производительность *C++ *Системное программирование *


Александр Алексеев (Postgres Professional)


Отличный обзорный доклад конференции HighLoad++ 2016 о том, как надо проводить профилирование программного кода. О типичных ошибках, происходящих при измерениях. И, конечно, об инструментах:

— gettimeofday
— strace, ltrace, truss
— gprof
— gdb / lldb
— perf
— pmcstat
— SystemTap
— DTrace
— HeapTrack
— BPF / bcc

image

В начале у меня будет не слишком техническая часть, о том, как не надо делать benchmark’и.

Я наблюдаю, что люди часто делают типичные ошибки, когда делают benchmark’и. И вот первая из них…
Всего голосов 23: ↑21 и ↓2 +19
Просмотры 15K
Комментарии 2

J.A.R.V.I.S. для (не)железного человека: как Perf станет ассистентом каждого Delivery менеджера

Блог компании EPAM Atlassian *
Recovery mode

Гениальный изобретатель Тони Старк стал рок-звездой киновселенной и одним из самых узнаваемых героев не только из-за фирменного юмора, ума и денег. У человека с атомным реактором вместо сердца есть одно исключительное преимущество – информация. Причем, личный смарт-помощник J.A.R.V.I.S. не просто выводит для Старка на экран статистику, но и анализирует происходящее, а еще – дает советы. Таким интеллектуальным личным ассистентом для Delivery менеджеров станет Perf, над которым работают в EPAM. О новом слове в Delivery менеджменте, которое скоро будет звучать чаще других, наши коллеги Сергей Сахоненко и Иван Кащенко рассказали на Atlassian Day в Минске.

Читать дальше →
Всего голосов 11: ↑7 и ↓4 +3
Просмотры 3.8K
Комментарии 3

Быстрый и безопасный мониторинг JVM-приложений с помощью магии BPF

Блог компании JUG Ru Group Java *Разработка под Linux *DevOps *

Все мы встречались со сложными ошибками на продакшне, которые сложно поймать обычными средствами мониторинга. BPF — это технология ядра Linux, которая позволяет делать быструю и безопасную динамическую отладку прямо на запущенной работающей системе, без необходимости готовиться к этому заранее. JVM сама по себе имеет множество точек мониторинга для отслеживания сборки мусора, выделения объектов, вызовов JNI, даже вызовов методов — и всё это без необходимости в дополнительном инструментировании. Когда этих точек мониторинга недостаточно, ядро Linux и всевозможные бибилиотеки позволяют отслеживать системные вызовы, сетевые пакеты, события планировщика, время потраченное на доступ к диску, и даже запросы к базам данных.


В этом хабрапосте мы сделали текстовую расшифровку доклада Sasha Goldshtein, посвященного тому, как инструменты BPF можно использовать для мониторинга JVM-приложений на GNU/Linux, и чеклисту проверки производительности с использованием классических инструментов, таких как fileslower, opensnoop, strace — но всё это с использованием неинвазивной, быстрой и безопасной технологии BPF.


После ката будет множество картинок со слайдами. Осторожно, трафик! Картинки ужаты насколько можно, но не более того. Все они действительно нужны.


Читать дальше →
Всего голосов 39: ↑38 и ↓1 +37
Просмотры 12K
Комментарии 1

Еще одна причина, почему тормозят Docker контейнеры

Блог компании Southbridge Системное администрирование *Серверное администрирование *DevOps *
Перевод

В последнем посте я рассказывал о Kubernetes, о том, как ThoughtSpot использует его для собственных нужд по поддержке разработки. Сегодня хотелось бы продолжить разговор о короткой, но от того не менее интересной истории отладки, которая произошла совсем недавно. Статья базируется на том, что containerization != virtualization. К тому же наглядно показывается, как контейнеризированные процессы конкурируют за ресурсы даже при оптимальных ограничениях по cgroup и высокой производительности машины.


image

Читать дальше →
Всего голосов 64: ↑57 и ↓7 +50
Просмотры 31K
Комментарии 13

Производительность PHP: планируем, профилируем, оптимизируем

Высокая производительность *Разработка веб-сайтов *PHP *Программирование *


Привет, Хабр! Два года назад мы писали о том, как перешли на PHP 7.0 и сэкономили миллион долларов. На нашем профиле нагрузки новая версия оказалась в два раза более эффективной по использованию CPU: ту нагрузку, которую раньше у нас обслуживали ~600 серверов, после перехода начали обслуживать ~300. В результате на протяжении двух лет у нас был запас мощностей.

Но Badoo растёт. Количество активных пользователей постоянно увеличивается. Мы совершенствуемся и развиваем нашу функциональность, благодаря чему пользователи проводят в приложении всё больше времени. А это, в свою очередь, отражается на количестве запросов, которое за два года увеличилось в 2—2,5 раза.

Мы оказались в ситуации, когда двукратный выигрыш в производительности нивелировался более чем двукратным ростом запросов, и мы опять стали приближаться к пределам нашего кластера. В ядре PHP снова ожидаются полезные оптимизации (JIT, предзагрузка), но они запланированы только на PHP 7.4, а эта версия выйдет не раньше, чем через год. Поэтому трюк с переходом сейчас повторить не удастся — нужно оптимизировать сам код приложения.

Под катом я расскажу, как мы подходим к таким задачам, какими пользуемся инструментами, и приведу примеры оптимизаций, идей и подходов, которые мы применяем и которые помогли нам в своё время.
Читать дальше →
Всего голосов 105: ↑105 и ↓0 +105
Просмотры 37K
Комментарии 58

Perf и flamegraphs

Блог компании Selectel Высокая производительность *Настройка Linux *


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

Пример 1. Тестовый


Ничего не работает


Тестирование в нашем отделе ― это синтетика на продуктовом железе, а позже ― тесты прикладного ПО. К нам на тестирование поступил диск Intel Optane. Ранее о тестировании дисков Optane мы уже писали в нашем блоге.

Диск был установлен в сервер стандартной комплектации, собранный относительно давно под один из облачных проектов.
Читать дальше →
Всего голосов 25: ↑25 и ↓0 +25
Просмотры 19K
Комментарии 3

Анализ производительности запросов в ClickHouse. Доклад Яндекса

Блог компании Яндекс Высокая производительность *Open source *Серверное администрирование *Big Data *
Что делать, если ваш запрос к базе выполняется недостаточно быстро? Как узнать, оптимально ли запрос использует вычислительные ресурсы или его можно ускорить? На последней конференции HighLoad++ в Москве я рассказал об интроспекции производительности запросов — и о том, что даёт СУБД ClickHouse, и о возможностях ОС, которые должны быть известны каждому.



Каждый раз, когда я делаю запрос, меня волнует не только результат, но и то, что этот запрос делает. Например, он работает одну секунду. Много это или мало? Я всегда думаю: а почему не полсекунды? Потом что-нибудь оптимизирую, ускоряю, и он работает 10 мс. Обычно я доволен. Но все-таки я стараюсь в этом случае сделать недовольное выражение лица и спросить: «Почему не 5 мс?» Как можно выяснить, на что тратится время при обработке запроса? Можно ли его в принципе ускорить?

Всего голосов 53: ↑53 и ↓0 +53
Просмотры 22K
Комментарии 5

Трассировка Python GIL

Блог компании VK Высокая производительность *Python *Программирование *Отладка *
Перевод


Есть много статей, объясняющих, для чего нужен Python GIL (The Global Interpreter Lock) (я подразумеваю CPython). Если вкратце, то GIL не даёт многопоточному чистому коду на Python использовать несколько ядер процессора.

Однако мы в Vaex исполняем большинство задач с интенсивными вычислениями на С++ с отключением GIL. Это нормальная практика для высокопроизводительных Python—библиотек, в которых Python всего лишь выступает в роли высокоуровневого связующего звена.

GIL нужно отключать явно, и это ответственность программиста, о которой он может забыть, что приведёт к неэффективному использованию мощностей. Недавно я сам побывал в роли забывшего, и нашёл подобную проблему в Apache Arrow (это зависимость Vaex, так что когда GIL не отключается в Arrow, мы (и все остальные) сталкиваемся с падением производительности).

Кроме того, при исполнении на 64 ядрах производительность Vaex иногда далека от идеала. Возможно, он использует 4000 % процессора вместо 6400 %, что меня не устраивает. Вместо того, чтобы наугад вставлять выключатели для изучения этого эффекта, я хочу разобраться в происходящем, и если проблема в GIL, то хочу понять, почему и как он тормозит Vaex.
Читать дальше →
Всего голосов 25: ↑24 и ↓1 +23
Просмотры 6.5K
Комментарии 2

Исследование роста утилизации процессора: как мы мигрировали с CentOS 7 на Oracle Linux 7

Блог компании DINS Настройка Linux **nix *Разработка под Linux *DevOps *
✏️ Технотекст 2021

Привет! Меня зовут Александр Петровский, я инженер в DINS. Я работаю в команде, которая участвует в разработке сервисов облачной телефонии и видеоконференций. Каждый из них состоит из большого количества микросервисов.

Когда мы мигрировали один из наших микросервисов с CentOS 7 с ядром 4.19 на Oracle Linux 7 с ядром 5.4, мы заметили рост утилизации процессора на наших stress/performance-тестах. В статье я расскажу, как мы исследовали причины роста утилизации процессора сначала в user-space, а потом и в kernel-space и о том, к какому результату это нас привело.

Читать далее
Всего голосов 129: ↑128 и ↓1 +127
Просмотры 18K
Комментарии 17

Отслеживание пути пакета с помощью точек трассировки Linux, perf и eBPF

Блог компании Nixys Системное администрирование *IT-инфраструктура *DevOps *
Перевод


Я давно искал какой-нибудь инструмент для низкоуровневой отладки сети Linux. Linux позволяет создавать сложные сети, запускаемые прямо на хосте, используя комбинацию из виртуальных интерфейсов и сетевого пространства имен. Когда что-то идет не так решение возникших проблем утомительно. Если это проблема маршрутизации L3, mtr (Matt's traceroute) имеет неплохие шансы принести пользу. Однако, если проблема на более низком уровне, обычно все заканчивается тем, что я вручную проверяю каждый интерфейс / мост / пространство имен сети / iptables и пару раз запускаю tcpdump в попытках понять что происходит. Если вы не знакомы с настройками сети, то при решении проблем в ней, вас ждет запутанный лабиринт.

Читать дальше →
Всего голосов 16: ↑16 и ↓0 +16
Просмотры 6.5K
Комментарии 0

Битвы на территории ZFS

Блог компании Postgres Professional PostgreSQL *
Один из крупных клиентов нашей компании попал в грустную ситуацию: базы данных подросли, потребности тоже, купили мощные NUMA-сервера, установили любимую файловую систему ZFS (ZFS — для краткости: формально это OpenZFS), а производительность PostgreSQL стала хуже, чем до покупки.

Базы нешуточные: две базы, в каждой по 180ТБ. В них сливаются данные из многих других, непостгресовых баз. А этими, огромными, напрямую пользуются аналитики компании, и эта деятельность критически важная. ZFS сжала эти базы в два раза — теперь каждая занимает на диске по 90 ТБ, железу бы вздохнуть с облегчением. А стало только хуже. Пригласили наших сотрудников из поддержи, они провели аудит. Случай нам показался интересным, и мы решили о нём рассказать. Заодно напомнив о средствах диагностики.
Читать дальше →
Всего голосов 89: ↑87 и ↓2 +85
Просмотры 17K
Комментарии 95

profile-guided поиск по коду

Высокая производительность *Open source *Программирование *Go *Управление разработкой *

Если объединить структурный поиск по коду через gogrep и фильтрацию результатов через perf-heatmap, то мы получим profile-guided поиск по коду.


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


Через perf-heatmap также можно аннотировать файл с учётом того, насколько строка исходного кода "горячая".


Читать дальше →
Всего голосов 20: ↑18 и ↓2 +16
Просмотры 1.9K
Комментарии 0

Как генерировать Flame Graph из выходных данных perf и pt-pmp

Блог компании Конференции Олега Бунина (Онтико) Тестирование IT-систем *MySQL *Визуализация данных *Тестирование веб-сервисов *
Перевод

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

Давайте воспользуемся их опытом и разберемся, откуда брать и как подготавливать образцы для визуализации данных. А после этого — как из них генерировать Flame Graph и как с этим работать.

Читать далее
Всего голосов 13: ↑13 и ↓0 +13
Просмотры 1.6K
Комментарии 0

Entity Framework Core и высокая производительность

Высокая производительность *.NET *ASP *

Entity Framework Core является рекомендованным и самым популярным средством взаимодействия с реляционными базами данных на платформе ASP NET Core. Это мощный инструмент который подходит для большинства сценариев, но, как и любой другой инструмент имеет свои ограничения. Долгое время бытовало мнение (и не безосновательно) что Entity Framework не подходит для высоконагруженных систем и в таких сценариях лучше использовать Dapper. Но время идет и Entity Framework развивается, в том числе в плане оптимизации. Помимо улучшения производительности самой платформы .NET, Entity Framework Core для NET 6 имеет ряд настроек и возможностей, призванных значительно улучшить производительность. В этой статье мы рассмотрим Entity Framework Core с точки зрения производительности и сравним его с Dapper используя актуальные версии на момент июля 2022 года. Посмотрим насколько рекомендация "перепишите все на Dapper" актуальна :)

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

Читать далее
Всего голосов 21: ↑21 и ↓0 +21
Просмотры 10K
Комментарии 16

Профайлер Бедного Человека: первое знакомство и (приятные) последствия

Блог компании Яндекс Высокая производительность *Программирование *Серверная оптимизация *Разработка под Linux *


Если вам приходилось оптимизировать работу программ, то вы могли слышать о Профайлере Бедного Человека. Этой идее даже посвящён целый сайт. ПБЧ собирает статистику времени выполнения отдельных функций программы, «подглядывая» в процесс её исполнения с помощью дебаггера. Концепт ПБЧ хорошо прижился у нас в движке баннерной крутилки — не буду в 100 500-й раз напоминать, что у Яндекса всё высоконагруженное, ресурсоёмкое и нуждающееся в профилировании. Статья будет полезна тем, кто пилит инфраструктуру, адаптирует какой-нибудь общеизвестный профайлер под себя или просто хочет больше знать про свои программы. Как мы пришли к необходимости в ПБЧ и что именно сделали? Сейчас постараюсь рассказать, местами буду закапывать глубоко в технологии (если переусердствую, пишите в комментариях). А начну со стандартного инструмента статистического профилирования в Linux — perf.
Читать дальше →
Всего голосов 30: ↑29 и ↓1 +28
Просмотры 9.3K
Комментарии 20
1