SlideShare a Scribd company logo
Разработка high-load
систем на C++
Иван Романенко(viva.cpp@gmail.com)
Что значат эти числа ?
• 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
algo
rev 2
Build
Варианты решения
• DLL
• Copy/Pase сорцов
• Архитектурно:
–Наследование
–Шаблоны
Хочу, чтобы :
• Минимальная связность
• Без виртуальных таблиц
• Конвейер как основа
• Лёгкая сборка набора алгоритмов
Developing high load systems using C++
Пример использования
Инструментация
Причины:
• Профайлер недоступен:
– лицензия
– платформа
– баги профайлера
• Проблема inline
Код
Метрики
• Thread UserTime
• GetTickCount
• _rdtsc
• GetSystemTime
Гранулярность
Пересечение с чужими
потоками и процессами
Виртуализация
Анализ окружения
Windows API density
boost.statistics
Анализ своего кода
Недоверие средним
Поиск своих метрик
производительности
CPU core usage
CPU core usage
CPU core usage
Тактов на байт
Приоритеты
• Потребление CPU
• Потребление памяти
• Время отклика
• Время работы от
батареи
Dev User
Developing high load systems using C++
Зло
• Аллокации
• Синхронизация
• Копирование памяти
ExAllocateFromPagedLookasideList()
Фиксированный
размер блока
Динамический
размер блока
Борьба с потерями на аллокациях
ExAllocateFromPaged
LookasideList()
Low Fragmentation
Heap
(c) David B. Probert, Ph.D. Windows Kernel Development Microsoft Corporation
Фиксированный
размер блока
Динамический
размер блока
Борьба с потерями на аллокациях
ExAllocateFromPaged
LookasideList()
Low Fragmentation
Heap
allocator from
TBB, PPL, boost, …
TLS
Per thread list
Борьба с потерями при
синхронизации
• Лучшая синхронизация – её отсутсвие
• TLS
• Больше локов
• Докажи! / Перепроверяй
Developing high load systems using C++
Спасибо за внимание

More Related Content

PDF
Andrey Borodin "Architecture of online backup for various DBMS"
PDF
Перенос данных пользователей Badoo между датацентрами
PDF
Near-realtime аналитика событий в высоконагруженном проекте
PPTX
Cassandra:Курс молодого бойца
PDF
«Система защиты от парсинга API 2ГИС» — Дмитрий Бархатов, 2ГИС
PDF
История одной картинки
PPSX
CodeFest 2014. Круглов И. — События на каждом углу. Путешествие в мир системн...
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Andrey Borodin "Architecture of online backup for various DBMS"
Перенос данных пользователей Badoo между датацентрами
Near-realtime аналитика событий в высоконагруженном проекте
Cassandra:Курс молодого бойца
«Система защиты от парсинга API 2ГИС» — Дмитрий Бархатов, 2ГИС
История одной картинки
CodeFest 2014. Круглов И. — События на каждом углу. Путешествие в мир системн...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...

What's hot (16)

PDF
Tarantool Silverbox, Юрий Востриков
PPTX
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
PPTX
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
PDF
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
PDF
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
PDF
Kirill A Korinskiy Rit2010 No Sql Storage
PDF
maps.sputnik.ru #highload2014
PDF
To Go или не to Go
PDF
"Опыт миграции между дата-центрами" Сергей Бурладян и Михаил Тюрин (Avito)
PDF
Владимир Бородин - PostgreSQL
PDF
AVITO. Решардинг Redis без даунтайма. DevConf 2012
PDF
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
PDF
SphinxSearch Meetup - Tips&tricks
PDF
Avito Stachka 2012
PDF
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
PDF
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Tarantool Silverbox, Юрий Востриков
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
Kirill A Korinskiy Rit2010 No Sql Storage
maps.sputnik.ru #highload2014
To Go или не to Go
"Опыт миграции между дата-центрами" Сергей Бурладян и Михаил Тюрин (Avito)
Владимир Бородин - PostgreSQL
AVITO. Решардинг Redis без даунтайма. DevConf 2012
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
SphinxSearch Meetup - Tips&tricks
Avito Stachka 2012
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Ad

Viewers also liked (18)

PDF
Использование gevent для эмуляции высокой нагрузки
PDF
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
PPT
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
PDF
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
PDF
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
PPTX
Как устроен поиск / Андрей Аксенов (Sphinx)
PDF
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
PDF
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
PPTX
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
PDF
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
PPTX
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
PDF
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
PPTX
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
PDF
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
PDF
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
PDF
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
Использование gevent для эмуляции высокой нагрузки
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Современная операционная система: что надо знать разработчику / Александр Кри...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Как устроен поиск / Андрей Аксенов (Sphinx)
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
Ad

Similar to Developing high load systems using C++ (20)

PPTX
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
PPTX
Жизнь проекта на production
PDF
Юрий Насретдинов, Badoo
PDF
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
PDF
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
PDF
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
PDF
подходы к проектрованию, разработке и развертыванию больших систем
PDF
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
PDF
Database First! О распространённых ошибках использования РСУБД / Николай Само...
PDF
Database First! О распространённых ошибках использования РСУБД
PDF
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PDF
Golang в avito
PDF
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
PDF
Марина Широчкина: Верстка. Вид снизу
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PDF
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
PPTX
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
PDF
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
PPTX
Скорость с доставкой до пользователя
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production
Юрий Насретдинов, Badoo
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
подходы к проектрованию, разработке и развертыванию больших систем
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Database First! О распространённых ошибках использования РСУБД / Николай Само...
Database First! О распространённых ошибках использования РСУБД
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Golang в avito
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
Марина Широчкина: Верстка. Вид снизу
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
Скорость с доставкой до пользователя

More from Ciklum Ukraine (20)

PDF
"How keep normal blood pressure using TDD" By Roman Loparev
PDF
"Through the three circles of the it hell" by Roman Liashenko
PDF
Alex Pazhyn: Google_Material_Design
PPTX
Introduction to amazon web services for developers
PPTX
Your 1st Apple watch Application
PDF
Test Driven Development
PPTX
Back to the future: ux trends 2015
PPTX
Collection view layout
PPTX
Introduction to auto layout
PDF
Groovy on Android
PDF
Unit Testing: Special Cases
PPTX
Material design
PPTX
Kanban development
PPTX
Mobile sketching
PDF
More UX in our life
PDF
Model-View-Controller: Tips&Tricks
PDF
Unit Tesing in iOS
PDF
Future of Outsourcing report published in The Times featuring Ciklum's CEO To...
PDF
Михаил Попчук "Cкрытые резервы команд или 1+1=3"
PDF
"To be, rather than to seem” interview with Ciklum VP of HR Marina Vyshegorod...
"How keep normal blood pressure using TDD" By Roman Loparev
"Through the three circles of the it hell" by Roman Liashenko
Alex Pazhyn: Google_Material_Design
Introduction to amazon web services for developers
Your 1st Apple watch Application
Test Driven Development
Back to the future: ux trends 2015
Collection view layout
Introduction to auto layout
Groovy on Android
Unit Testing: Special Cases
Material design
Kanban development
Mobile sketching
More UX in our life
Model-View-Controller: Tips&Tricks
Unit Tesing in iOS
Future of Outsourcing report published in The Times featuring Ciklum's CEO To...
Михаил Попчук "Cкрытые резервы команд или 1+1=3"
"To be, rather than to seem” interview with Ciklum VP of HR Marina Vyshegorod...

Developing high load systems using C++