Владислав Шпилевой - Аптечка производительности для C/C++ серверов

  Рет қаралды 1,761

Конференция по разработке на C++

Конференция по разработке на C++

Күн бұрын

Ближайшая конференция - C++ Russia 2025, 20-21 марта, Москва + online. Подробности и билеты: jrg.su/9Sszhd
- -
Скачать презентацию с сайта C++ Russia - jrg.su/oORIKE
Повышение производительности сервера обычно включает достижение следующих целей: снижение задержки (latency), увеличение количества запросов в секунду (RPS) и снижение нагрузки на CPU и память. Этих целей можно достичь путем архитектурных изменений, таких как уменьшение количества походов по сети, горизонтальное и вертикальное масштабирование и т. д. Однако этот доклад о другом - о коде.
Владислав классифицировал основные источники деградации производительности кода на три группы:
1. Конкуренция потоков. Например, перегретые мьютексы, чрезмерно строгий порядок (memory order) в lock-free операциях, false sharing.
2. Чрезмерная нагрузка на кучу (heap). Потери возникают из-за частого выделения и освобождения больших объектов и отсутствия встроенных (intrusive) контейнеров.
3. Сетевой ввод-вывод. Чтение и запись в сокеты дороги, так как это системные вызовы (system calls). Кроме того, они могут блокировать поток на длительное время, что приводит к приемам вроде добавления десятков или сотен дополнительных потоков. Такие меры усиливают конкуренцию (concurrency), а также нагрузку на CPU и память, при этом игнорируя основную проблему.
Спикер представил серию кратких и простых низкоуровневых рецептов того, как достичь производительности за счет оптимизации кода. Несмотря на то, что для этого обычно требуются совсем точечные изменения, они могут ускорить код в N раз.
Предложения направлены на устранение проблем мест из списка выше. Предлагаемые оптимизации могут сделать архитектурные изменения ненужными или даже позволить упростить всю систему, если существующие серверы начнут легко справляться с нагрузкой. Кроме того, изменения могут сделать код более чистым и выявить больше узких мест для дальнейшего исследования.

Пікірлер
Антон Яковлев - Практика применения C++ в играх и игровых движках
1:00:27
Конференция по разработке на C++
Рет қаралды 3,8 М.
Филипп Белозёров и Владислав Гордиенко - Neat Gamedev Tricks and Beyond
1:03:47
Конференция по разработке на C++
Рет қаралды 1 М.
Каха и дочка
00:28
К-Media
Рет қаралды 3,4 МЛН
“Don’t stop the chances.”
00:44
ISSEI / いっせい
Рет қаралды 62 МЛН
Артур Лаздин - Компиляторы не только для программирования
1:00:49
Конференция по разработке на C++
Рет қаралды 1 М.
Архитектура систем ИИ (AISA), лекция №1
2:12:58
КАК УСТРОЕН TCP/IP?
31:32
Alek OS
Рет қаралды 245 М.
Вадим Винник - Адовая синхронизация. Как ходить на рандеву
59:44
Конференция по разработке на C++
Рет қаралды 1,1 М.
Здесь упор в процессор
18:02
Рома, Просто Рома
Рет қаралды 847 М.
Петр Шумилов - Time to reflect: to save or not to save type information
44:39
Конференция по разработке на C++
Рет қаралды 453
Тимур Думлер - Контракты для С++
1:02:31
Конференция по разработке на C++
Рет қаралды 2,1 М.
Каха и дочка
00:28
К-Media
Рет қаралды 3,4 МЛН