Я с неохотой говорю о «хорошем коэффициенте использования процессора», потому что этот коэффициент - лишь косвенный показатель метрики, которая на самом деле должна нас интересовать - времени отклика. Однако, избежав некоторых заведомо плохих значений коэффициента использования, можно предотвратить проблемы с производительностью.
В прикладных системах, ориентированных только на пакетную обработку, коэффициент использования процессора меньше 100%, - это плохо, если в очереди заданий что-то есть. Цель пользователя системы пакетной обработки состоит в достижении максимальной пропускной способности. Если какое-то задание ожидает своей очереди, то каждая секунда простоя процессора - это потерянное время, которое уже никогда не вернуть. Но будьте осторожны: длительная стопроцентная загрузка процессора часто приводит к «пробуксовке» планировщика операционной системы, что может снизить производительность.
В исключительно интерактивных прикладных системах плохи те значения коэффициента загруженности процессора, которые долгое время остаются справа от точки излома. Цель пользователя такой системы - минимизация времени отклика. Когда коэффициент загруженности процессора превышает значение излома кривой времени отклика, колебания времени отклика становятся недопустимыми. Оставив в системе резервную мощность, системный инженер фактически приобретает стабильность времени отклика.
В системах, где присутствует и пакетная, и интерактивная нагрузка, задача будет более сложной, т. к. цели пользователей противоречат друг другу. Поэтому в таких системах важно правильно определить приоритеты. Если интерактивное время отклика важнее, то следует убедиться в том, что коэффициент загруженности процессора не заходит слишком далеко вправо за точку излома. Если же важнее производительность пакетной обработки, то нет смысла терять значительную мощность процессора, чтобы обеспечить стабильность времени отклика для менее важных пользователей.
Способ определения оптимального соотношения пакетной и интерактивной нагрузки описан в [Millsap (2000b)].
q
Несмотря на то, что число q- изменяемый параметр системы массового обслуживания M/M/m, масштабирование прикладной системы Oracle для работы на нескольких серверах базы данных (даже вслучае применения Oracle9i Real Application Clusters - RAC), технологически это сложное мероприятие, которое практически наверняка обойдется дороже, чем конфигурация, в которой база данных работает на одном хосте.
m
Количество параллельных каналов обслуживания в системе это обсуждаемый параметр, зависящий от физических ограничений и ограничений масштабируемости, накладываемых главным образом операционной системой. Например, имеющаяся система может требовать, чтобы процессоры устанавливались в количествах, кратных двум, вплоть до 32, но мощность системы с 32 процессорами может оказаться такой же, что и у воображаемой системы с 24 идеально масштабируемыми процессорами. Такие данные можно получить в ходе проведения контрольных испытаний и бесед со специалистами поставщиков оборудования.
Скорость обслуживания ц - это параметр, возможность изменения которого является мощнейшим оружием аналитика по производительности. Первым побуждением множества аналитиков бывает улучшение (увеличение) ц за счет более быстрого аппаратного обеспечения. Например, установка процессоров, на 20% более быстрых, чем старые, должна привести к повышению скорости обслуживания процессором приблизительно на ту же величину, что может быть чрезвычайно полезно для приложений, ограниченных мощностью процессора.
Но есть еще одна очень важная вещь, о которой многие забывают - увеличения скорости обслуживания можно достичь за счет уменьшения объема кода, необходимого для выполнения конкретной бизнес-функции. В прикладных системах Oracle аналитики зачастую могут добиться впечатляющего сокращения кода за счет оптимизации SQL. Оптимизация SQL требует работы с сочетаниями определений схем, статистиками базы данных или экземпляра, параметрами конфигурации, поведением оптимизатора запросов или с исходным текстом приложения с тем, чтобы получить аналогичные выходные данные посредством выполнения меньшего количества инструкций на сервере базы данных.
Сокращение кода имеет ряд преимуществ по сравнению с модернизацией оборудования, а именно:
Стоимость
Усовершенствование оборудования часто означает не только увеличение стоимости самого оборудования, но и увеличение стоимости поддержки и лицензионных выплат на программное обеспечение. Например, некоторые программные лицензии для систем с (n + 1) процессорами стоят дороже, чем для систем с n процессорами. Уменьшение количества кода для неэффективных команд SQL обычно требует не более нескольких часов работы для каждой команды.
Эффект
Сокращение кода часто оказывается более мощным средством повышения производительности, чем усовершенствование оборудования. Например, удвоение скорости процессора возможно не чаще чем раз в два года. Что же касается сокращения кода, то часто удается уменьшить его длину в 100 или более раз всего за несколько часов работы.
Риск
Сокращение кода практически не приводит к неожиданным негативным побочным эффектам, которые могут сопутствовать модернизации оборудования. Возможным побочным эффектом повышения пропускной способности является ухудшение производительности программ, которым не хватало ресурсов не того устройства, для которого была проведена модернизация [Millsap (1999)].
Даже если недолго поработать с моделью массового обслуживания, становится понятно, почему избавление от ненужной нагрузки приводит к впечатляющему воздействию на производительность всей системы. Существуют два способа устранения нагрузки: исключение бизнес-функций, которые необоснованно увеличивают затраты, и избавление от ненужных фрагментов кода. Оба эти способа на самом деле позволяют решить одну задачу - избавиться от ненужных затрат на разных уровнях технологического стека.
Давайте на примере посмотрим, как можно использовать модель и интерпретировать полученные результаты. Рассмотрим поэтапно решение поставленной ниже задачи, применяя модель системы массового обслуживания M/M/m (рабочую книгу Microsoft Excel), которая доступна на нашем сайте http://www.hotsos.com. Задача по сути своей проста, но для ее решения требуется понимание теории массового обслуживания.
Задача формулируется следующим образом:
На выполнение важной команды SQL расходуется 0,49 секунды процессорного времени. Предположим, что в период пиковой загрузки системы каждый из 100 пользователей будет выполнять эту команду с частотой четыре раза в минуту. Сервер, работающий под Linux, допускает установку до 16 процессоров. Сколько процессоров потребуется данному серверу, если необходимо обеспечить время отклика не более одной секунды по крайней мере для 95% выполнений команды пользователями в период пиковой загрузки?
Попробуем ее решить.
Проверка на применимость модели M/M/m
В первую очередь необходимо проверить, можно ли применить модель массового обслуживания M/M/wz/oo/FCFS (или, для краткости, M/M/m) к исследуемой нами системе:
M/M/m/co/FCFS (экспоненциальное время между поступлениями запросов)
Если существует возможность измерить интервал между поступлениями запросов, то первым делом необходимо проверить, подчиняются ли такие интервалы экспоненциальному распределению. Сделаем это с помощью программы из примера 9.4. Если окажется, что время между поступлениями запросов распределено не экспоненциально, то следует рассмотреть более короткий временной промежуток. Например, в случае I (который воспроизведен в табл. 9.5) из уже рассмотренного примера с посетителями ресторана распределение времени между приходами клиентов отличается от экспоненциального на промежутке с 11:30 до 13:30. Но вот в промежутке с 12:00 до 12:15 оно с большой вероятностью имеет экспоненциальное распределение.
Таблица 9.5. Два существенно разных сценария, в обоих из которых среднее значение интервала между событиями травно 30 секундам
Количество приходов
Интервалы времени
|
Случай I
|
Случай II
|
11:30-11:45
|
0
|
34
|
11:45-12:00
|
0
|
28
|
12:00-12:15
|
240
|
31
|
12:15-12:30
|
0
|
37
|
12:30-12:45
|
0
|
24
|
12:45-13:00
|
0
|
30
|
13:00-13:15
|
0
|
32
|
13:15-13:30
|
0
|
24
|
Среднее для 15-минутных интервалов
|
30
|
30
|
Если реальное время между поступлениями запросов измерить невозможно (например, система еще не спроектирована), то придется подключить воображение. Почти для любой ситуации можно создать такое временное окно, в котором время между поступлениями запросов будет с большой вероятностью подчиняться экспоненциальному распределению (или, что то же самое, интенсивность запросов будет иметь распределение Пуассона). В нашем примере будем считать, что измерения подтверждают распределение поступлений запросов по закону Пуассона.
M/M/m/co/FCFS (экспоненциальное время обслуживания)
Необходимо убедиться в том, что экспоненциально распределено время обслуживания. И здесь на помощь приходит программа из примера 9.4 (или какое-то другое средство). Если время обслуживания распределено не экспоненциально, то следует переопределить исследуемую единицу обслуживания. Допустим, вы рассматриваете в качестве единицы обслуживания отчеты, при этом время их обслуживания может составлять от 0,2 до 1392,7 секунды. Тогда время обслуживания, вероятнее всего, не будет распределено экспоненциально. Выберите в качестве единицы измерения определенный тип отчетов, время обслуживания которого не подвержено таким значительным колебаниям. Или же выберите более мелкую единицу измерения, например, для этой цели подойдут операции LIO.
В нашем примере будем считать, что измерения, проведенные в тестируемой системе, подтвердили экспоненциальное распределение времени обслуживания для «важной команды SQL».
M/M/m/co/FCFS (m однородных параллельных независимых каналов обслуживания)
В формулировке задачи сказано, что в нашем случае в роли канала обслуживания выступает процессор компьютера, работающего под управлением операционной системы Linux. Linux полностью поддерживает симметричную многопроцессорную обработку (SMP), так что нам известно, что наши каналы обслуживания однородны, параллельны и независимы. Некоторые конфигурации операционных систем (например, использующие привязку задач к процессорам) нарушают ограничение на однородность процессоров. Далее вы узнаете о том, что в случае применения данной модели необходимо также учитывать несовершенство масштабирования. И наконец, мы используем модель M/M/m для прогнозирования производительности системы с более чем m процессорами.
M/M/m/oo/FCFS (отсутствие ограничений на длину очереди)
На длину очереди к процессору Linux не налагается никаких ограничений, поэтому можно не беспокоиться о составляющей «с» определения M/M/m.
Стандартная политика планирования Linux близка к обслуживанию в порядке поступления. Несмотря на то, что алгоритм планирования разрешает использование приоритетов для процессов и выбор одной из нескольких политик (FCFS или циклическое обслуживание (round-robin)), модель M/M/m показала себя как пригодная для прогнозирования производительности систем Linux.
< Предыдущая | Следующая > |
---|