developing high load systems using c++
TRANSCRIPT
![Page 2: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/2.jpg)
Что значат эти числа ?
• 0,1 милисекунда (1 ∗ 10−4)
• 4KB * 10 000 = 40 MB/sec = 320 Mb/sec
• 40 MB/sec * 5 tick/byte = 0,2 GHz (tick/sec)
• 0,2 GHz = 10% CPU Time
10 000 req/sec это:
![Page 3: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/3.jpg)
Что значат эти числа ?
• 2GHz / 5 tick/byte = 400 MB/s = 3,2 Gb/s
• 400MB/s / 10 000 req/s = 40 KB/req
10 000 req/sec предел:
![Page 4: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/4.jpg)
Обычный процесс
1. Поиск хот-спотов на текущем билде
2. Исправление в коде
3. Проверка улучшения на новом билде
rev 1Данные Замер 1
Данные Замер 2rev 2
![Page 5: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/5.jpg)
Что делать, когданевозможно имитировать окружение
• Состояние ОС:
– большой объём временных данных
– много вызовов OS API
• Состяние продукта:
– большая система
– много 3rd party либ
![Page 6: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/6.jpg)
Нельзя войти в одну и ту же реку дважды
![Page 7: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/7.jpg)
Всё связанно
![Page 8: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/8.jpg)
Запуск с одинаковыми данными
Данные
Замер 1
Замер 2
algo rev 1
algorev 2
Build
![Page 9: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/9.jpg)
Варианты решения
• DLL
• Copy/Pase сорцов
• Архитектурно:
–Наследование
–Шаблоны
![Page 10: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/10.jpg)
Хочу, чтобы :
• Минимальная связность
• Без виртуальных таблиц
• Конвейер как основа
• Лёгкая сборка набора алгоритмов
![Page 11: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/11.jpg)
![Page 12: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/12.jpg)
Пример использования
![Page 13: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/13.jpg)
Инструментация
![Page 14: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/14.jpg)
Причины:
• Профайлер недоступен:
– лицензия
– платформа
– баги профайлера
• Проблема inline
![Page 15: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/15.jpg)
Код
![Page 16: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/16.jpg)
Метрики
• Thread UserTime
• GetTickCount
• _rdtsc
• GetSystemTime
Гранулярность
Пересечение с чужимипотоками и процессами
Виртуализация
![Page 17: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/17.jpg)
Анализ окружения
![Page 18: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/18.jpg)
Windows API density
![Page 19: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/19.jpg)
boost.statistics
![Page 20: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/20.jpg)
Анализ своего кода
![Page 21: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/21.jpg)
Недоверие средним
![Page 22: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/22.jpg)
Поиск своих метрикпроизводительности
![Page 23: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/23.jpg)
CPU core usage
![Page 24: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/24.jpg)
CPU core usage
![Page 25: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/25.jpg)
CPU core usage
![Page 26: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/26.jpg)
Тактов на байт
![Page 27: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/27.jpg)
Приоритеты
• Потребление CPU
• Потребление памяти
• Время отклика
• Время работы от батареи
Dev User
![Page 28: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/28.jpg)
![Page 29: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/29.jpg)
Зло
• Аллокации
• Синхронизация
• Копирование памяти
![Page 30: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/30.jpg)
ExAllocateFromPagedLookasideList()
![Page 31: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/31.jpg)
Фиксированный размер блока
Динамический размер блока
Борьба с потерями на аллокациях
ExAllocateFromPagedLookasideList()
Low Fragmentation Heap
![Page 32: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/32.jpg)
LFH
(c) David B. Probert, Ph.D. Windows Kernel Development Microsoft Corporation
![Page 33: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/33.jpg)
Фиксированный размер блока
Динамический размер блока
Борьба с потерями на аллокациях
ExAllocateFromPagedLookasideList()
Low Fragmentation Heap
allocator from TBB, PPL, boost, …
TLSPer thread list
![Page 34: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/34.jpg)
Борьба с потерями при синхронизации
• Лучшая синхронизация – её отсутсвие
• TLS
• Больше локов
• Докажи! / Перепроверяй
![Page 35: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/35.jpg)
![Page 36: Developing high load systems using C++](https://reader033.vdocuments.us/reader033/viewer/2022051400/55a683aa1a28ab37498b475a/html5/thumbnails/36.jpg)
Спасибо за внимание