C++ Zero Cost Conf 2025 / Belgrade

C++ Zero Cost Conf 2025 / Belgrade

Приветствие и Введение

Открытие конференции

  • Приветствие участников конференции C++ в Белграде, организованной Yandex. Упоминается о важности мероприятия для разработчиков C++.
  • Антон Каллен представляется как руководитель проектного офиса в YDB и делится опытом работы с командой разработчиков C++.
  • Программа включает шесть докладов на русском и английском языках, охватывающих темы от робототехники до оптимизации памяти.

Перевод и Организация

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

Доклады и Вопросы

Формат выступлений

  • Андре говорит о том, что его доклад будет на русском языке, извиняясь перед не говорящими по-русски участниками.
  • Упоминаются технические аспекты предстоящих докладов, включая производительность индексов HNSW.

Память и Оптимизация

Тема следующего доклада

  • Алексей представляет тему своего доклада о TCM (Thread-Caching Malloc), новой функции менеджера памяти.
  • Он делится своим опытом предыдущих выступлений на конференциях по системному программированию и безопасности памяти.

Менеджеры Памяти

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

Функция "Горячие" и "Холодные" Аллокации

Новые возможности TCM

  • Введена функция подсказок (hinting), позволяющая пользователям указывать частоту использования выделяемой памяти.
  • Пример использования нового оператора new с параметром горячей/холодной аллокации от 0 до 255.

Связь с LLVM

  • Обсуждается связь между функцией TCMO и инструментом профилирования LLVM для улучшения скорости доступа к куче.

Ожидания от Функций TCMO

Ожидаемая производительность

  • Не ожидается ухудшения производительности при использовании стандартных операторов new с TCMO.

Идеи реализации

  • Основная идея заключается в разделении горячих и холодных объектов в разные области памяти для повышения эффективности использования кеша.

Анализ пропусков DTLB при записи

Пропуски DTLB и их влияние на производительность

  • График показывает процент пропусков DTLB при записи, где ось Y представляет собой процент пропусков, а ось X — различные параметры.
  • При низком проценте "горячих" объектов (менее 1%) наблюдается значительное снижение числа пропусков DTLB, достигающее 40% для 1% горячих объектов.
  • При редком доступе к горячим объектам последовательный доступ начинает напоминать случайный доступ из-за больших промежутков между горячими объектами.

Увеличение скорости доступа

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

Сравнение малых и больших страниц

Эффективность использования памяти

  • Стандартные настройки без разделения горячих и холодных объектов работают лучше с большими страницами из-за меньшего количества страниц и, соответственно, меньшего числа пропусков DTLB.
  • График сравнивает скорость работы с малыми и большими страницами; использование больших страниц дает прирост производительности около 20%.

Последовательный доступ с большими страницами

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

Опции для использования TCM

Альтернативы внутреннему TCM Google

  • Если нет возможности использовать внутренний TCM Google, можно создать собственный аллокатор или настроить существующий менеджер памяти.
  • Создание собственного аллокатора может быть сложным и рискованным процессом, который может снизить производительность.

Стратегии управления памятью

  • Одна стратегия — создание пула памяти для холодных объектов; такие объекты создаются редко и не требуют быстрой аллокации.
  • Вторая стратегия — пул памяти для горячих объектов; это позволяет обрабатывать данные более эффективно.

Важность тестирования решений

Бенчмаркинг решений

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

Дополнительные материалы

Ресурсы после презентации

  • Доступны дополнительные материалы: исходный код бенчмарка и статистика на GitHub.

Вопросы о безопасности распределения памяти

Потенциальные уязвимости

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

Технические детали API TCM

Использование битовых меток в указателях

  • Объяснение необходимости трех битов для тегирования значений от нуля до двухсот пятидесяти пяти.

Проблемы и решения при использовании легковесных потоков

Введение в легковесные потоки

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

Проблемы с блокировками

  • Пример: один большой ОС-поток и два легковесных потока. Если первый поток захватывает блокировку и происходит переключение контекста, это может привести к взаимной блокировке (deadlock).
  • Простое решение — добавить инструкции yield для предотвращения взаимной блокировки, но это может негативно сказаться на производительности.

Стратегии ожидания

  • Существуют различные стратегии ожидания: активное вращение (active spin), yield и suspend/resume. Suspend позволяет избежать ненужного выполнения до тех пор, пока поток не будет возобновлен.
  • Не все библиотеки поддерживают функцию suspend/resume, что создает дополнительные сложности.

Обновление мьютексов для легковесных потоков

  • Планы обсуждения включают общие блокировки ожидания с резервными стратегиями для тестирования мьютексов.
  • Для реализации используются разные подходы к ожиданию: активное вращение плюс сон или комбинация yield и suspend/resume.

Проблемы с передачей управления между потоками

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

NUMA и его влияние на производительность

  • При работе с NUMA важно сохранять локальность данных; если потоки перемещаются между узлами NUMA, это может снизить производительность.
  • Использование специализированного планировщика NUMA может помочь сохранить локальность потоков.

Реализация библиотек для легковесных потоков

  • Рассматриваются три целевые библиотеки: Argobots (академический проект), Boost Fibers (популярная библиотека), Userver (используется в России).

Эксперименты по оценке производительности

  • Проведены эксперименты по сравнению различных реализаций мьютексов. Результаты показывают различия в производительности в зависимости от используемой библиотеки.

Заключительные мысли о выборе библиотек

  • Выбор библиотеки для работы с легковесными потоками критически важен; результаты могут значительно варьироваться в зависимости от конкретного случая использования.

Введение в обсуждение

Эмоции и чувства

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

Технические аспекты

Латентность и индексы

  • Упоминается латентность и индексирование данных, что может быть связано с производительностью систем обработки информации.
  • Обсуждаются эксперименты с использованием C++ для оптимизации работы с большими страницами памяти.

Фильтры и системы

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

Торговые системы

Обновления ордеров

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

Инфраструктура технологий

Блум-фильтры

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

Конкуренция в технологиях

Открытые технологии

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

Проблемы масштабируемости

Размеры хранилищ

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

Экспериментальные подходы

Алгоритмы и фреймворки

  • Упоминается использование Tamboo framework для алгоритмических исследований в области вычислений.

Будущее технологий

Улучшение ситуации с OpenC

  • Задается вопрос о том, как внедрение новых технологий (например, CXL от Intel X), повлияет на ситуацию с OpenC.
Video description

Practicing C++ developers from leading companies will share their knowledge, present practical talks, and discuss real-world case studies backed by metrics. 0:00 Начало 17:55 Открытие 23:22 Векторизация 2025 - Андрей Аксёнов 1:16:05 Hot and cold memory optimizations in TCMalloc - Алексей Веселовский 2:55:53 С++20 vs C в роботах. Битва за ресурсы, абстракции и безопасность - Арсентий Гусев 3:41:07 Locks for lightweight threads - Виталий Аксенов 5:03:18 Быстрые и приближённые ответы - Артур Соловьев 5:51:54 Разработка под GPU: боли, страдания, best practice - Александр Боргардт Conference Chat: https://t.me/Cxx_Zero_Cost_Conf Belgrade Chat: https://t.me/+WtYAl67SgkJkMmJi Program: https://events.yandex.com/events/cppzerocostconf2025