developing high load systems using c++
Post on 15-Jul-2015
115 Views
Preview:
TRANSCRIPT
Что значат эти числа ?
• 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 это:
Что значат эти числа ?
• 2GHz / 5 tick/byte = 400 MB/s = 3,2 Gb/s
• 400MB/s / 10 000 req/s = 40 KB/req
10 000 req/sec предел:
Обычный процесс
1. Поиск хот-спотов на текущем билде
2. Исправление в коде
3. Проверка улучшения на новом билде
rev 1Данные Замер 1
Данные Замер 2rev 2
Что делать, когданевозможно имитировать окружение
• Состояние ОС:
– большой объём временных данных
– много вызовов OS API
• Состяние продукта:
– большая система
– много 3rd party либ
Нельзя войти в одну и ту же реку дважды
Всё связанно
Запуск с одинаковыми данными
Данные
Замер 1
Замер 2
algo rev 1
algorev 2
Build
Варианты решения
• DLL
• Copy/Pase сорцов
• Архитектурно:
–Наследование
–Шаблоны
Хочу, чтобы :
• Минимальная связность
• Без виртуальных таблиц
• Конвейер как основа
• Лёгкая сборка набора алгоритмов
Пример использования
Инструментация
Причины:
• Профайлер недоступен:
– лицензия
– платформа
– баги профайлера
• Проблема inline
Код
Метрики
• Thread UserTime
• GetTickCount
• _rdtsc
• GetSystemTime
Гранулярность
Пересечение с чужимипотоками и процессами
Виртуализация
Анализ окружения
Windows API density
boost.statistics
Анализ своего кода
Недоверие средним
Поиск своих метрикпроизводительности
CPU core usage
CPU core usage
CPU core usage
Тактов на байт
Приоритеты
• Потребление CPU
• Потребление памяти
• Время отклика
• Время работы от батареи
Dev User
Зло
• Аллокации
• Синхронизация
• Копирование памяти
ExAllocateFromPagedLookasideList()
Фиксированный размер блока
Динамический размер блока
Борьба с потерями на аллокациях
ExAllocateFromPagedLookasideList()
Low Fragmentation Heap
LFH
(c) David B. Probert, Ph.D. Windows Kernel Development Microsoft Corporation
Фиксированный размер блока
Динамический размер блока
Борьба с потерями на аллокациях
ExAllocateFromPagedLookasideList()
Low Fragmentation Heap
allocator from TBB, PPL, boost, …
TLSPer thread list
Борьба с потерями при синхронизации
• Лучшая синхронизация – её отсутсвие
• TLS
• Больше локов
• Докажи! / Перепроверяй
Спасибо за внимание
top related