Производительность приложения и расположение в памяти
Интересный доклад про производительность и как ее правильно измерять. Доклад из введения и двух частей.
Суть первой части:
- производительность приложения довольно сильно зависит от расположения кода и данных в памяти, разница может доходить до 40%;
- почти любое изменение кода это расположение меняет;
- оно еще зависит от порядка линковки, размера переменных окружения, версий библиотек, текущей директории и т.п.
- чувак разработал инструмент, который рандомизирует расположение и позволяет понять лучше влияние изменений на производительность;
- эксперименты показали, что
-O2
и-O3
статистически неразличимы.
Суть второй части:
- большинство профилировщиков подталкивают на оптимизацию узких мест;
- этот подход плохо работает для многопоточных приложений;
- вместо этого надо анализировать DAG вычислений/зависимостей, и искать места, оптимизация которых реально поможет — как будто они лежат на критическом пути в диаграмме Ганта;
- а еще многие профилировщики измеряют время в контексте всей жизни приложения, а не функции (например, выполнения HTTP-запроса), и чувак сделал профилировщик, который позволяет измерять пропускную способность от точки до точки;
- под конец результаты оптимизаций на основе анализа результата профилировщиков.
Комментарии