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.