Введение

Тюнинг производительности – это повышение эффективности работы системы. Как правило, в компьютерных системах причиной такой деятельности является проблема производительности, которая может быть как реальной, так и прогнозируемой. Большинство систем при увеличении нагрузки демонстрируют некоторое снижение производительности. Способность системы выдерживать повышенную нагрузку называется масштабируемостью, а изменение системы для обработки большей нагрузки является синонимом тюнинга производительности. Систематический тюнинг включает следующие этапы:
Оцените проблему и определите числовые значения, характеризующие допустимое поведение. Измерьте производительность системы до внесения изменений. Выявите компонент системы, критически важный для повышения производительности – так называемое узкое место. Модифицируйте этот компонент для устранения узкого места. Измерьте производительность системы после внесения изменений. Если изменение улучшило производительность, примите его. Если изменение ухудшило производительность, верните систему в исходное состояние. Это пример цикла "измерение – оценка – улучшение – обучение" из обеспечения качества. О проблеме с производительностью можно судить по медленной или неотзывчивой работе системы. Обычно это происходит из-за высокой нагрузки, приводящей к достижению предела пропускной способности одним из компонентов системы. Этот предел в системе и называется узким местом. Существует ряд методов повышения производительности, включая оптимизацию кода, балансировку нагрузки, стратегию кэширования, распределенные вычисления и самонастройку.

Оптимизация кода

См. основную статью «Оптимизация (информатика)». Некоторые оптимизации включают в себя улучшение кода, чтобы вычисления выполнялись один раз перед циклом, а не внутри него, или замену вызова простого алгоритма сортировки выбором вызовом более сложного алгоритма быстрой сортировки.

Оптимизация конфигурации

Современные программные системы, например, системы больших данных, состоят из нескольких фреймворков (например, Apache Storm, Spark, Hadoop). Каждый из этих фреймворков предоставляет сотни параметров конфигурации, которые существенно влияют на производительность таких приложений. Некоторые оптимизации (настройка) включают в себя повышение производительности приложения путем поиска оптимальной конфигурации.

Стратегия кэширования

Кэширование — фундаментальный метод устранения узких мест в производительности, возникающих из-за медленного доступа к данным. Кэширование повышает производительность за счет хранения часто используемой информации в высокоскоростной памяти, что уменьшает время доступа и позволяет избежать повторных вычислений. Кэширование эффективно в ситуациях, когда действует принцип локальности ссылок. Методы, используемые для определения, какие данные хранить в хранилищах с возрастающей скоростью, в совокупности называются стратегиями кэширования. Примеры включают кэш ASP.NET, кэш процессора и т.д.

Балансировка нагрузки

Система может состоять из независимых компонентов, каждый из которых способен обрабатывать запросы. Если все запросы обрабатываются одной из этих систем (или небольшим числом систем), в то время как остальные простаивают, то теряется время в ожидании освобождения занятой системы. Обеспечение равномерной загрузки всех систем называется балансировкой нагрузки и может повысить общую производительность. Балансировка нагрузки часто используется для получения дополнительных преимуществ от распределенной системы, благодаря интеллектуальному выбору машины для выполнения операции, исходя из текущей загрузки всех возможных кандидатов и соответствия каждой машины типу выполняемой операции.

Распределенные вычисления

Распределенные вычисления, используемые для повышения возможностей параллельного выполнения на современных архитектурах процессоров, продолжают развиваться, и использование распределенных систем необходимо для получения преимуществ от доступного параллелизма. Высокопроизводительные кластерные вычисления – это широко известное применение распределенных систем для улучшения производительности. Распределенные вычисления и кластеризация могут негативно сказываться на задержках и одновременно увеличивать нагрузку на общие ресурсы, такие как системы управления базами данных. Для минимизации задержек и предотвращения узких мест распределенные вычисления могут значительно выиграть от использования распределенных кэшей.

Самонастройка

Система самонастройки способна оптимизировать собственные внутренние параметры функционирования для достижения максимального или минимального значения целевой функции; как правило, это максимизация эффективности или минимизация ошибок. Системы самонастройки обычно демонстрируют нелинейное адаптивное управление. Системы самонастройки на протяжении десятилетий являлись визитной карточкой аэрокосмической отрасли, поскольку подобная обратная связь необходима для создания оптимального многопеременного управления нелинейными процессами.

Недостатки

Узкое место – это часть системы, работающая на пределе своих возможностей. Остальные части системы простаивают, ожидая завершения её работы. В процессе выявления и устранения узких мест важно подтвердить их существование, как правило, с помощью измерений, прежде чем приступать к их устранению. Велик соблазн строить предположения. Предположения часто оказываются неверными.