TGViewer
Python/ django Python/ django @pythonl · 58.5K subscribers
Post #5744 1.23K
🖥 Datadog научила профилировщик Python понимать asyncio: флеймграфы со «стеками из стеков» и оверхед меньше на 60%

Главная боль профилирования asyncio в том, что каждая задача выглядит как независимый стек. Время в запросе к Cassandra повисает в воздухе, и непонятно, какой именно путь в приложении его породил.

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

Цена такого подхода высокая: к стоимости на поток добавляется O(n_tasks), а серверы держат много задач, поэтому адаптивный сэмплинг местами падал до минимальной одной выборки в секунду.

Резервуарное сэмплирование задач команда отвергла, потому что для дерева нужны метаданные всех задач.

Оверхед срезали тремя шагами. Убрали C++ исключения из пути сэмплирования, это около 15%. Интернировали строки имён функций и файлов, ещё около 25%. Заменили process_vm_readv, по системному вызову на каждый маленький объект, на memcpy с обработчиком сигнала для восстановления после ошибок памяти, это около 50% для синхронного кода.

В сумме на сервисах с выкаченными изменениями оверхед упал более чем на 60%.

В проде профилировщик нашёл бесконечный цикл в библиотеке pylzstring, которую затем починили в апстриме, и внутреннюю библиотеку, строившую большие debug-строки при логгере уровня INFO. Отдельно ИИ-агент через MCP и Dynamic Instrumentation оптимизировал функ
ции на NumPy и снизил CPU в них на 15-30%. Улучшения доступны в свежих версиях ddtrace. Автор отмечает, что похожий подход принят в Tachyon, профилировщике CPython 3.15, но сравнения не делает, как и абсолютных цифр оверхеда.

Источник: https://www.datadoghq.com/blog/engineering/async-python-profiler/
  • 👍 6
  • ❤ 5
  • 🔥 3
  • 🤩 1
More from @pythonl
  1. Oct 14, 2026📱 35 млрд параметров на смартфоне с потреблением около 3 ГБ оперативной памяти. OpenBMB п…
  2. Oct 12, 2026⚡️ Overmind - open-source слой для автоматической оптимизации AI-агентов. Вместо ручного т…
  3. Oct 12, 2026🖥 Python-дайджест недели: агенты с онтологией, рантайм-проверка типов и SQLite в проде Со…
  4. Oct 10, 2026🐍 Ротация прокси в Python может обходиться без списка IP и `random.choice()` Если провайд…
  5. Oct 9, 2026Вышел Python 3.15: ленивые импорты, frozendict, UTF-8 по умолчанию и JIT, который наконец…
  6. Oct 8, 2026🦙 Ollaya: запуск моделей принятия решений в стиле Ollama. Скачиваете модель, поднимаете л…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →