Да, все так. Посетить мероприятие можно бесплатно. Наслаждайтесь интересными докладами, общением и угощениями в перерывах!


System Level MeetupПод капотом C/C++ и Linux kernel

О МИТАПЕ
24 мая мы соберемся в Санкт-Петербурге, чтобы поглубже изучить C/C++ и ядро Linux. Наладим сериализацию и десериализацию JSON в проекте на C++, реализуем поддержку Sdtrig в RISC-V Linux и OpenSBI, разберем подход kernel bypass и user space I/O в ядре Linux, вплетем C++ в строго C-шную кодовую базу — и на этом список интересного не заканчивается.
Офлайн-участников также ждет демозона с «железом» YADRO для ЦОД и телеком-операторов, технические интерактивы и подарки от компании.
программа
Направление:
10:0011:00
11:0011:10
Зал 1:C++
Приветственное слово
Вы узнаете больше о компании-организаторе, программно-аппаратных комплексах YADRO, их важности для цифровизации экономики, а также о роли и задачах разработчиков на С++ в этих процессах.
Зал 2:C/Linux kernel
Приветственное слово
Поделимся планами на дальнейшие митапы Linux kernel. Также расскажем о компании YADRO, организующей их, о программно-аппаратных комплексах YADRO, связанных ролях и задачах разработчиков.
11:1012:00
Зал 1:C++
Девиртуализация в C++, компиляторах и вашей программе
Мы поговорим про виртуальные функции, рассмотрим, какие проблемы они вызывают и как эти проблемы решаются компиляторами. Обсудим спекулятивную девиртуализацию, странные случаи ее несрабатывания, а также дадим рекомендации для практикующих разработчиков.
Зал 2:C/Linux kernel
Реализация поддержки Sdtrig в RISC-V Linux и OpenSBI
Мой доклад — о том, как мы добавляли поддержку Hardware Breakpoint в OpenSBI и ядре Linux. Я расскажу об устройстве подсистемы Hardware Breakpoint (расширения Sdtrig) и сравню реализацию ее интерфейса на Linux с реализациями в x86 и arm64. Опишу механизмы, на которых она основана здесь и в имплементациях на других архитектурах — Perf Event Framework, Generic PMU, ptrace syscall.
Далее обсудим плюсы и минусы реализации на RISC-V в сравнении с другими архитектурами, проблемы из-за излишней гибкости спецификаций RISC-V, а также способы их обойти — как эффективные, так и костыльные.
12:0012:10
Перерыв
12:1013:00
Зал 1:C++
Кодек для json'ов с фиксированной схемой
Мы рассмотрим построение системы сериализации/десериализации json для проекта на C++. Разберем с примерами архитектуру нашего json-кодека: структуры данных, encoder/decoder, аллокатор. Справимся с громоздкими описаниями структур с помощью автогенерации. Сравним кодек с существующими решениями (simdjson, rapidjson, yyjson, nlohmann). Напоследок раскроем текущие ограничения инструмента и то, что еще предстоит в нем реализовать.
Зал 2:C/Linux kernel
Linux kernel, DPDK и kernel bypass
Мы рассмотрим подход kernel bypass и user space I/O в ядре Linux, уделяя внимание как общим принципам работы, так и реализации на примере DPDK. Обсудим основные компоненты DPDK, включая аллокацию памяти, взаимодействие с драйверами и процесс обработки пакетов. Я покажу, как технологии kernel bypass интегрируются с инфраструктурой Linux и работают на практике — в том числе на примере генератора-анализатора трафика LR100Gen компании ИнфоТеКС.
По итогам доклада вы получите целостное представление о функционировании kernel bypass в рамках Linux kernel и его применении в современных сетевых решениях.
13:0014:00
Обед: еда, нетворкинг, а также стенды и квесты от YADRO
14:0015:00
Зал 1:C++
Как писать меньше на C++?
C++ часто кажется незаменимым инструментом. Но что, если на других языках можно добиться большего с меньшим объемом кода?
На дискуссии мы обсудим, когда стоит отказаться от C++ в пользу более гибких решений. Например, использовать Python вместо C++ для написания REST-интерфейса, оставив «плюсы» только для ресурсоемких частей. Ведь современные языки предоставляют понятные интерфейсы для интеграции с C/C++, и это открывает новые возможности для организации кода.
Зачем писать все на C++, если можно использовать более простые и удобные инструменты?
Зал 2:C/Linux kernel
Эволюция ядра Linux
Мы поговорим о том, как поменялось ядро Linux за последние годы, какие технологии появляются в разработке сегодня и с какими вызовами сталкиваются разработчики на системном уровне. Обсудим ключевые фичи этих технологий и то, как подходы к производительности, безопасности и архитектуре трансформируются под новые нагрузки.
15:0015:15
Перерыв
15:1515:50
Зал 1:C++
Реализация динамического полиморфизма для свободных функций
Расскажу про один из вариантов реализации механизма динамического полиморфизма для свободных функций. Под этим подразумевается использование одной сигнатуры функции, но вызов различных ее реализаций в зависимости от значений аргументов. В рамках ООП такая задача может быть реализована с использованием виртуальных функций. Однако я покажу, как можно автоматизировать процедурный подход, используя подобие таблицы виртуальных вызовов. А также расскажу про составные ключи и type-erasure для упаковки функций. Данное решение используется, например, в платформах машинного обучения, позволяя создавать код для тензорных вычислений, который можно без изменения запускать на разных аппаратных вычислителях и в разных сценариях.
Зал 2:C/Linux kernel
DMA из Userspace на Zynq US+
Этот доклад посвящен одному из вариантов сбора AXI-Stream-данных для обработки на CPU. Мы рассмотрим блок AXI DMA, его возможности и требования. Примерим роль аппаратного дизайнера, поуправляем когерентностью кэшей (hw/sw hp/hpc/lpd порты в цинке) и увидим, что на самом деле требуется от драйвера ядра.
15:5016:40
Зал 1:C++
Шаблонное мета-программирование в современном C++ для задач космической баллистики
Рассмотрим, как надежность mission-critical IT-решений в российской аэрокосмической индустрии растет благодаря программированию с развитыми системами типов, а именно на C++ стандартов 11–23.
Для этой цели реализованы библиотеки C++ с открытым исходным кодом. SpaceBallistics включает type-safe-модели динамики ракет-носителей и космических аппаратов, методы дизайна и оптимизации траекторий. DimTypes реализует систему размерных типов на основе compile-time Z_p-арифметики.
Зал 2:C/Linux kernel
Ремонт обхода кадров стека в ядре Linux для RISC-V
Вероятно, каждый разработчик сталкивался с печатью стека вызовов. И чаще всего такая печать ассоциируется с возникновением ошибок, однако обход стека используется и в ряде других случаев.
В докладе поговорим про работу механизма обхода кадров стека в ядре Linux и его применениях. Расскажу об ошибке, с которой я столкнулся, и как с ней боролся. Позапускаем gdb, разберем дизассемблированный код, изучим небольшой кусок спецификации и, конечно, посмотрим на исходный код ядра. Кроме того, затронем тему компилятора, немного заглянув «под капот» gcc.
Будет интересно любителям нетривиальных проблем, фанатам разбора байтов и почитателям архитектурно-специфичного кода.
16:4017:10
Кофе-пауза ☕
17:1018:00
Зал 1:C++
C++ внутри PostgreSQL: удобство против традиций
Работая над СУБД Pangolin, основанной на PostgreSQL, я попробовал аккуратно вплести C++ в строго C-шную кодовую базу. Цель была прагматичная: упростить управление ресурсами и сделать код понятнее. В результате я смог достичь тонкого баланса между философией PostgreSQL и выразительностью C++.
В докладе расскажу, где C++ действительно помог, как мы решали вопросы совместимости и как не наломать дров в кодовой базе с миллионами строк на C. Покажу конкретные участки кода «до» и «после». Под конец обсудим «грабли» и удачные решения, которые также применимы в других проектах.
Зал 2:C/Linux kernel
Использование Rust для написания драйверов устройств
Подробно поговорим о поддержке Rust в ядре Linux и о том, как с помощью фреймворка VFIO можно писать драйверы PCI-устройств в пространстве пользователя. Обсудим, насколько Rust вообще готов для такой задачи.
18:0019:00
Закрытие: еда, нетворкинг, а также стенды и квесты от YADRO
Спикеры
Программный комитет

Илья Казаков
Разработчик в команде систем хранения данных, YADRO
Ведущий потока С++. Начал писать на С еще в школе. Затем стал схемотехником: работал со звуком, делал источники питания. В 2020 году попал в настоящее IT и начал писать на С++. Работает в команде, которая занимается системами хранения данных Datapath. Спикер и соведущий конференции C++ Russia.
Ведущий потока С++. Начал писать на С еще в школе. Затем стал схемотехником: работал со звуком, делал источники питания. В 2020 году попал в настоящее IT и начал писать на С++. Работает в команде, которая занимается системами хранения данных Datapath. Спикер и соведущий конференции C++ Russia.

Илья Мамай
Инженер-программист, Syntacore
Ранее исследовал out-of-order-микроархитектуры, искал в коде узкие места реализаций микроархитектур. Сейчас работает с обратной стороной «железа» — загрузчиками и ОС, расширяет их функционал и поддержку новых расширений RISC-V. Иногда возвращает к жизни советские процессоры.
Ранее исследовал out-of-order-микроархитектуры, искал в коде узкие места реализаций микроархитектур. Сейчас работает с обратной стороной «железа» — загрузчиками и ОС, расширяет их функционал и поддержку новых расширений RISC-V. Иногда возвращает к жизни советские процессоры.

Илья Шишков
R&D-разработчик в СУБД Pangolin, СберТех
Ex-Яндекс, создатель курсов «Пояса по С++». Программирует на C++ с 2006 года.

Никита Пешаков
Инженер-программист, YADRO
Познает код через починку багов. Вырос на телекоме. Стажером писал 4G Packet Core. Сейчас в роли техлида разрабатывает 5G Packet Core. К приходу 6G надеется дотянуться до архитектора.
Познает код через починку багов. Вырос на телекоме. Стажером писал 4G Packet Core. Сейчас в роли техлида разрабатывает 5G Packet Core. К приходу 6G надеется дотянуться до архитектора.

Степан Репин
Ведущий программист, ИнфоТеКС
Последние пять лет работает над генератором-анализатором трафика на базе DPDK. Интересуется оптимизацией программ, сетевыми технологиями и операционными системами.
Последние пять лет работает над генератором-анализатором трафика на базе DPDK. Интересуется оптимизацией программ, сетевыми технологиями и операционными системами.

Константин Владимиров
Руководитель отдела компиляторов и инструментов разработки, Syntacore
Регулярный докладчик крупных конференций. Ведущий YouTube- и Telegram-канала с лекциями о С++, автор книги «Оптимизирующие компиляторы».
Регулярный докладчик крупных конференций. Ведущий YouTube- и Telegram-канала с лекциями о С++, автор книги «Оптимизирующие компиляторы».

Илья Андреев
Старший инженер в отделе компиляторов и средств разработки, Syntacore
Специалист с опытом более пяти лет в разработке компиляторов, автор улучшенной девиртуализации в Syntacore Development Toolkit.
Специалист с опытом более пяти лет в разработке компиляторов, автор улучшенной девиртуализации в Syntacore Development Toolkit.

Владимир Исаев
Ведущий инженер-программист, Syntacore
Занимается системным софтом для сетевых устройств и процессоров.

Данил Ефимов
Инженер-программист, YADRO
Последние четыре года работает в телекоме и сейчас активно занимается алгоритмом DPD (digital predistortion). Участвовал в разработке модема для миссии «Рассвет-2».
Последние четыре года работает в телекоме и сейчас активно занимается алгоритмом DPD (digital predistortion). Участвовал в разработке модема для миссии «Рассвет-2».

Станислав Богатырев
Эксперт по разработке ПО, YADRO
Ведущий секции Linux kernel. Координатор и активный участник сообщества SPbLUG с опытом в индустрии более двадцати лет.
Ведущий секции Linux kernel. Координатор и активный участник сообщества SPbLUG с опытом в индустрии более двадцати лет.

Леонид Меркин
Прикладной математик, Computer Scientist и C++ инженер. Doctor of Mathematics (TU Delft, The Netherlands, 1997)
В 2020–2022 гг. был научным руководителем проекта InnoChain по созданию первой в мире формально верифицированной системы распределенного реестра. Сегодня является профессором Департамента информатики НИУ ВШЭ в Санкт-Петербурге. Также преподает в МФТИ (Физтех-школа прикладной математики и информатики) и работает в финансовой индустрии. Основные области компетенций: финансовая математика, стохастический анализ, численные методы, теория типов, формальная верификация ПО, высоконадежные системы реального времени, платформы и стратегии высокочастотной алгоритмической торговли.
В 2020–2022 гг. был научным руководителем проекта InnoChain по созданию первой в мире формально верифицированной системы распределенного реестра. Сегодня является профессором Департамента информатики НИУ ВШЭ в Санкт-Петербурге. Также преподает в МФТИ (Физтех-школа прикладной математики и информатики) и работает в финансовой индустрии. Основные области компетенций: финансовая математика, стохастический анализ, численные методы, теория типов, формальная верификация ПО, высоконадежные системы реального времени, платформы и стратегии высокочастотной алгоритмической торговли.

Алексей Щербаков
Старший разработчик и тимлид, МойОфис
Более семи лет опыта в разработке настольных приложений на C++ с использованием Qt. Руководит командой разработки библиотеки для построения диаграмм на TypeScript с использованием D3.js и ее интеграцией в C++/Qt-приложение.
Более семи лет опыта в разработке настольных приложений на C++ с использованием Qt. Руководит командой разработки библиотеки для построения диаграмм на TypeScript с использованием D3.js и ее интеграцией в C++/Qt-приложение.

Ярослав Бесараб
Руководитель отдела в TATLIN.FLEX, YADRO
Долгое время работал с операционными системами в режиме SMM. Успел написать несколько UEFI-модулей. Также писал приложения для работы с TEE. В настоящее время руководит командой разработки модулей ядра Linux. Полностью погружен в работу над улучшением Data Plane в СХД.
Долгое время работал с операционными системами в режиме SMM. Успел написать несколько UEFI-модулей. Также писал приложения для работы с TEE. В настоящее время руководит командой разработки модулей ядра Linux. Полностью погружен в работу над улучшением Data Plane в СХД.

Владислав Шиповский
Тимлид команды системного ПО, Сбер
Закончил МГТУ им. Баумана по специальности «Плазменные энергетические установки». В системном программировании 10 лет, занимался в основном разработкой драйверов для различных устройств. Энтузиаст использования Rust для системного программирования. Области интересов: высокопроизводительный I/O, техники kernel-bypass.
Закончил МГТУ им. Баумана по специальности «Плазменные энергетические установки». В системном программировании 10 лет, занимался в основном разработкой драйверов для различных устройств. Энтузиаст использования Rust для системного программирования. Области интересов: высокопроизводительный I/O, техники kernel-bypass.

Кирилл Колодяжный
Инженер-программист, YADRO
Для разработки в основном использует С++. ML-энтузиаст, автор книги «Hands-On Machine Learning with C++». Работал над проектами в различных областях: геймдев, алгоритмы 3D-реконструкции, веб-браузеры, машинное обучение. Теперь участвует в разработке систем хранения данных.
Для разработки в основном использует С++. ML-энтузиаст, автор книги «Hands-On Machine Learning with C++». Работал над проектами в различных областях: геймдев, алгоритмы 3D-реконструкции, веб-браузеры, машинное обучение. Теперь участвует в разработке систем хранения данных.

Матвей Быстрин
Инженер по системному программированию СнК, YADRO
Свой путь начинал с разработки прошивок для микроконтроллеров и userland системного ПО под Linux. Сейчас работаю в BSP-команде в YADRO. Пишу и ремонтирую драйверы, разбираюсь с загрузчиком и читаю мейлинг-листы.
Свой путь начинал с разработки прошивок для микроконтроллеров и userland системного ПО под Linux. Сейчас работаю в BSP-команде в YADRO. Пишу и ремонтирую драйверы, разбираюсь с загрузчиком и читаю мейлинг-листы.

Василий Рамаданов
Инженер-программист, YADRO
Разрабатывает высокоскоростное и высоконагруженное ПО на С++ с 2017 года. Большую часть времени разрабатывал системы радиолокации и радиосвязи, реализуя Digital Signal Processing в real time на embedded-системах. Также был замечен в autonomous driving. Василию нравится искать способы уменьшения времени работы своего кода, анализировать узкие места, находить более быстрые алгоритмы и ускорять имеющиеся, выжимая из железа всё возможное.
Разрабатывает высокоскоростное и высоконагруженное ПО на С++ с 2017 года. Большую часть времени разрабатывал системы радиолокации и радиосвязи, реализуя Digital Signal Processing в real time на embedded-системах. Также был замечен в autonomous driving.
Василию нравится искать способы уменьшения времени работы своего кода, анализировать узкие места, находить более быстрые алгоритмы и ускорять имеющиеся, выжимая из железа всё возможное.

Артем Кузин
Руководитель лаборатории разработки ядер ОС
Окончил МГТУ им. Н. Э. Баумана в 2006 году по специальности «Конструирование и технология РЭА». Более 10 лет опыта в разработке операционных систем. Работал в компаниях Luxoft и Samsung. Экспертиза во встроенном ПО, операционных системах различной архитектуры (монолитные и гибридные ядра), а также в ОС для ARM TrustZone. Области интересов: управление памятью в ОС, схемы управления памятью RCU/EBR, lock-free и RCU-safe структуры данных, NUMA-системы, OS4AI.
Окончил МГТУ им. Н. Э. Баумана в 2006 году по специальности «Конструирование и технология РЭА». Более 10 лет опыта в разработке операционных систем. Работал в компаниях Luxoft и Samsung. Экспертиза во встроенном ПО, операционных системах различной архитектуры (монолитные и гибридные ядра), а также в ОС для ARM TrustZone.
Области интересов: управление памятью в ОС, схемы управления памятью RCU/EBR, lock-free и RCU-safe структуры данных, NUMA-системы, OS4AI.
