[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека |
Юридическая информация |
Поиск ]
Руководство по настройке производительности
Оценка необходимых ресурсов является одной из наиболее трудных задач в
процессе планирования производительности. Исключение составляет лишь
случай, когда был приобретен пакет программ, в документации к которому есть
подробный перечень всех необходимых ресурсов. При решении этой задачи
возникают следующие трудности:
- Любую задачу всегда можно решить несколькими способами. Например,
можно написать программу на языке C (или любом другом языке высокого уровня),
сценарий оболочки, сценарий perl, сценарий awk, сценарий
sed, многооконную программу AIXwindows и т.д.
Некоторые способы, которые кажутся особенно эффективными с точки зрения
разработки алгоритма и создания программы, могут в будущем привести к
значительным затратам при эксплуатации программы.
В общем случае закономерность такова закономерность: чем выше уровень
абстракции, тем сложнее гарантировать, что не возникнет никаких неожиданных
проблем с производительностью. Необходимо всегда учитывать реальный
объем данных и число итераций, скрытых в безобидных на вид
конструкциях.
- Ресурсы, используемые конкретным процессом, определить довольно
сложно. Это не только техническая, но также и методическая
трудность. Если разные экземпляры данной программы, запущенные
несколькими пользователями, совместно обращаются к одним и тем же страницам
текста программы, то к какому процессу нужно относить использование этих
страниц памяти? Операционная система хранит в кэш-памяти страницы файлов,
использованные недавно, чтобы программы могли повторно обращаться в этим
данным. Если программа несколько раз обращается к одним и тем же
данным, то следует ли учитывать тот объем памяти, который использовался для
хранения этих данных? Точность некоторых измерений, например, показаний
системных часов, может привести к сложностям при оценке времени использования
CPU последовательно запускаемыми экземплярами одной и той же программы.
Существует два подхода к анализу неоднозначных данных, содержащихся в
отчете об использовании ресурсов. Первый основан на том, что
неопределенности игнорируются, а изменяющиеся величины исключаются из
рассмотрения до тех пор, пока в результате измерений не начнут поступать
согласованные данные. При втором подходе по возможности измеряются
реальные параметры, а для описания результатов применяются статистические
методы. Второй подход позволяет получить результаты, которые больше
соответствуют реальным условиям.
- Случаи, когда в системе выполняется только одна программа, очень
редки. Обычно в системе выполняются несколько демонов, обслуживаются
активные соединения и одновременно работают несколько пользователей.
При этом зависимость объема занятых ресурсов от числа выполняемых операций не
линейная. Например, увеличение числа экземпляров программы может
привести к использованию только нескольких новых страниц текста программы,
поскольку большая часть программы уже была в памяти. В то же время,
новый процесс может усилить конкуренцию за использование кэш-памяти
процессора. Следовательно, он не только увеличивает конкуренцию за
процессорное время, но и приводит к тому, что увеличивается время,
затрачиваемое на выполнение одной команды. Это связано с возрастанием
числа промахов в кэше, и в итоге приводит к снижению скорости выполнения всех
процессов.
При оценке параметров производительности программы постарайтесь быть как
можно ближе к реальным условиям, руководствуясь следующими
рекомендациями:
- Если программа уже существует, то выполните измерения в условиях,
максимально приближенных к исходным требованиям. Для этого лучше всего
воспользоваться специальным средством для планирования объема необходимых
ресурсов, например, BEST/1.
- Если подходящей системы нет, то установите программу в любой другой
системе и попробуйте искусственно создать в ней похожую среду.
- Если похожую среду создать не удается, то измерьте отдельные параметры
программы и используйте полученные результаты для моделирования.
- Если программа еще не создана, то найдите похожую программу с аналогичной
структурой, написанную на том же языке программирования, и измерьте ее
параметры. Не забудьте, что чем абстрактнее язык, тем осторожнее нужно
подходить к вопросу подбора подобных программ.
- Если похожую программу найти не удалось, создайте прототип программы с
основными алгоритмами на используемом языке программирования, измерьте его
параметры и смоделируйте рабочую схему.
- Только в том случае, если невозможно сделать никаких практических
измерений, можно ограничиться теоретическими оценками. Если объем
необходимых ресурсов необходимо определить на стадии планирования, то особенно
важно протестировать программу на самых ранних этапах ее разработки.
Обратите внимание, что независимые разработчики программного обеспечения
(ISV) часто приводят рекомендации по определению объема ресурсов, необходимых
для работы их приложений.
При оценке необходимого объема ресурсов вам должны интересовать четыре
параметра:
- Процессорное время
- Показатель использования процессора рабочей схемой
- Доступ к диску
- Частота, с которой рабочая схема генерирует запросы на чтение с диска или
запись на диск
- Нагрузка LAN
- Число пакетов, генерируемых рабочей схемой, и число байтов, передаваемых
при обмене данными
- Физическая память
- Объем оперативной памяти, необходимой для рабочей схемы
В следующих разделах описано, каким образом можно определить значения этих
параметров в различных ситуациях.
Если для оценки будет применяться исходная программа, ее аналог или
прототип, то выбор способа оценки определяется следующими условиями:
- Выполняются ли в системе другие задачи, помимо рабочей схемы,
характеристики которой будут измеряться.
- Есть ли у вас права на использование средств, которые могут ухудшить
производительность системы (например, является ли система рабочей, либо она
специально предназначена для проведения измерений?).
- С какой степенью точности вы можете смоделировать исходную рабочую
схему.
Использование тестовой (специально выделенной) системы - это идеальный
случай, так как в ней можно создать ситуацию искусственной перегрузки, а также
оценить объем ресурсов, используемых отдельными процессами.
Для большинства операций производительность системы можно оценить с помощью
команды vmstat:
# vmstat 5 >vmstat.output
Эта команда выдает информацию о состоянии системы каждые 5 секунд, пока
выполняется измерение. Первый отчет команды vmstat содержит
информацию, накопленную с момента загрузки системы до вызова команды
vmstat. В каждом следующем наборе выдается информация,
собранная за предшествующий интервал времени (в данном случае - за 5
секунд). Ниже приведен типичный пример вывода команды
vmstat:
нити память страница ошибки cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
0 1 75186 192 0 0 0 0 1 0 344 1998 403 6 2 92 0
Для оценки нагрузки на CPU и дисковую память вызовите команду
iostat:
# iostat 5 >iostat.output
Эта команда выдает информацию о состоянии системы каждые 5 секунд, пока
выполняется измерение. Первый отчет команды iostat содержит
информацию, накопленную с момента загрузки системы до вызова команды
iostat. В каждом следующем наборе выдается информация,
собранная за предшествующий интервал времени (в данном случае - за 5
секунд). Ниже приведен пример вывода команды iostat:
tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 0.0 19.4 5.7 70.8 4.1
Диски : % tm_act Kbps tps Kb_read Kb_wrtn
hdisk0 8.0 34.5 8.2 12 164
hdisk1 0.0 0.0 0.0 0 0
cd0 0.0 0.0 0.0 0 0
Для того чтобы получить информацию об использовании оперативной памяти,
вызовите команду svmon. Команда svmon -G выдает
информацию об использовании всей оперативной памяти. Все значения в
выводе этой команды измеряются в страницах по 4 Кб (ниже приведен пример
вывода команды в AIX версии 4.3.3):
# svmon -G
size inuse free pin virtual
memory 65527 65406 121 5963 74711
pg space 131072 37218
work pers clnt
pin 5972 0 0
in use 54177 9023 2206
В этом примере занята вся оперативная память системы объемом 256 Мб.
Около 83 процентов памяти занято рабочими сегментами - память, выделенная для
ввода-вывода активным программам (все остальное занято файлами кэша).
Если в системе запущен какой-либо продолжительный процесс, то можно получить
информацию об объеме памяти, который используется этим процессом. Ниже
приведен пример вывода команды, содержащий информацию об использовании памяти
процессом пользователя hoetzel.
# ps -fu hoetzel
UID PID PPID C STIME TTY TIME CMD
hoetzel 24896 33604 0 09:27:35 pts/3 0:00 /usr/bin/ksh
hoetzel 32496 25350 6 15:16:34 pts/5 0:00 ps -fu hoetzel
# svmon -P 24896
------------------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd
24896 ksh 4592 1456 2711 5615 N N
Vsid Esid Type Description Inuse Pin Pgsp Virtual Addr Range
4411 d work shared library text 2619 0 1187 1315 0..65535
0 0 work kernel seg 1908 1455 1399 4171 0..32767 :
65475..65535
703c 1 pers code,/dev/hd2:4188 58 0 - - 0..58
5176 2 work process private 4 1 104 108 0..129 :
65309..65535
1465 - pers /dev/hd2:16866 2 0 - - 0..1
4858 - pers /dev/hd2:8254 1 0 - - 0..0
18c5 - pers /dev/andy:207 0 0 - - 0..0
783d f work shared library data 0 0 21 21 0..3492
Экземпляр программы ksh занимает 4 страницы в рабочем сегменте
(5176). 2619 страниц памяти, отведенных общей библиотеке, и 58 страниц,
отведенных программе ksh, используются всеми работающими
программами и всеми экземплярами ksh, соответственно.
Если оперативная память размером 256 Мб слишком велика, то с помощью
команды rmss можно уменьшить объем оперативной памяти и заново
измерить параметры рабочей схемы. Если при этом сильно увеличивается
интенсивность подкачки или ухудшается время ответа, то размер уменьшен слишком
сильно. Эта процедура может применяться до тех пор, пока не будет
найден точный размер, при котором не ухудшаются характеристики рабочей
схемы. Более подробная информация приведена в разделе Определение необходимого объема памяти с помощью команды
rmss.
Для измерения нагрузки на сеть в первую очередь применяется команда
netstat. Ниже приведен пример вывода команда с информацией о
работе интерфейса Token-Ring:
# netstat -I tr0 5
input (tr0) output input (Total) output
packets errs packets errs colls packets errs packets errs colls
35552822 213488 30283693 0 0 35608011 213488 30338882 0 0
300 0 426 0 0 300 0 426 0 0
272 2 190 0 0 272 2 190 0 0
231 0 192 0 0 231 0 192 0 0
143 0 113 0 0 143 0 113 0 0
408 1 176 0 0 408 1 176 0 0
Первая строка отчета отражает совокупную нагрузку в сети с момента
последней перезагрузки. Остальные строки содержат информацию,
получаемую с интервалом в 5 секунд.
Измерение параметров в рабочей системе делается теми же способами, что и в
тестовой системе, однако при этом необходимо прилагать дополнительные усилия,
чтобы избежать снижения производительности системы.
Наиболее эффективным средством для оценки необходимого объема ресурсов
является команда vmstat, которая позволяет получить данные об
использовании оперативной памяти, устройств ввода-вывода и CPU. Если вы
укажете в команде vmstat довольно большой период сбора информации,
например, 10 секунд, то выполнение этой команды не потребует много
процессорного времени. Информация о работе с командой vmstat
приведена в разделе Определение ресурса, ограничивающего
производительность.
Под неполной рабочей схемой подразумевается измерение части параметров
рабочей схемы реальной системы для будущего переноса этой рабочей схемы в
другую систему. Поскольку система находится в рабочем состоянии,
необходимо свести к минимуму возможное влияние измерений на ее
производительность. В то же время мы должны проанализировать рабочую
схему достаточно подробно, чтобы можно было установить четкое различие между
компонентами рабочей схемы, которые нас интересуют, и остальными ее
частями. Для того чтобы выполнить частичные измерения, необходимо
выяснить, что общего у интересующих нас элементов рабочей схемы. Это
может быть:
- Одна и та же программа или небольшой пакет связанных программ
- Действие, выполняемое одним или несколькими пользователями в системе
- Запрос, поступающий с нескольких конкретных терминалов
В зависимости от того, насколько тесно связаны компоненты рабочей схемы,
воспользуйтесь одной из следующих команд:
# ps -ef | grep pgmname
# ps -fuusername, . . .
# ps -ftttyname, . . .
для поиска интересующих нас процессов и создания отчета об использовании
CPU этими процессами. После этого с помощью команды svmon
можно узнать объем памяти, занятой этими процессами.
Существует много способов оценки ресурсов, используемых отдельными
программами. Некоторые из них позволяют выполнять комплексные измерения
рабочей схемы, но они слишком сильно влияют на производительность систем в
рабочем состоянии. Большинство таких процедур обсуждается в главах,
посвященных оптимизации потребления конкретных ресурсов. Вот некоторые
из них:
- svmon
- Позволяет узнать объем оперативной памяти, занимаемый процессом.
Эта команда описана в разделе Определение объема используемой
памяти.
- time
- Измеряет время выполнения отдельной программы и затраченное на ее
выполнение время CPU. Эта команда описана в разделе Измерение нагрузки на процессор с помощью команды
time.
- tprof
- Измеряет относительную загрузку процессора программами, библиотеками
подпрограмм и ядром операционной системы. Эта команда описана в разделе
Анализ использования CPU программами с помощью команды
tprof.
- vmstat -s
- Измеряет нагрузку на подсистему ввода-вывода, создаваемую
программой. Эта команда описана в разделе Измерение
параметров дискового ввода-вывода с помощью команды vmstat.
Если программа еще не написана, то невозможно точно оценить объем ресурсов,
требующихся для ее выполнения. На стадии разработки программы и
создания кода трудно делать какие-либо предсказания, однако оценить ресурсы,
необходимые программе, можно с помощью следующих приблизительных
расчетов. В качестве отправной точки можно считать, что для программы
необходимо как минимум следующее:
- Около 50 миллисекунд процессорного времени (в основном - в системном
режиме)
- Физическая память
- Одна страница для текста программы
- Около 15 страниц (из них - 2 прикрепленных) для рабочего сегмента
(сегмента данных)
- Библиотека libc.a. Обычно эта библиотека
используется одновременно всеми программами, поэтому этот ресурс учитывается
как часть операционной системы.
- Если программа в последнее время не компилировалась, не копировалась и не
запускалась, то потребуется около 12 операций подкачки с диска. В
противном случае, не потребуется ни одной операции.
К перечисленному выше необходимо добавить ресурсы, объем которых напрямую
зависит от особенностей программы (приведенные ниже значения даны только в
качестве примера):
- Процессорное время
- Обычная программа, не выполняющая много итераций и не содержащая
подпрограмм, для которых требуется много ресурсов, практически не использует
процессор.
- Если программа выполняет большой объем вычислений, заложенных в алгоритме,
то сделайте необходимые измерения на основе прототипа программы.
- Если программа использует библиотечные функции, выполняющие большой объем
вычислений, например, такие конструкции как функция printf() в X
или Motif, то измерьте время CPU, требуемое для выполнения этих функций в
тривиальной программе.
- Физическая память
- Предположим, что на странице текста программы приходится 350 строк кода,
по 12 байт в каждой строке. Следует помнить, что стиль программирования
и опции компилятора могут уменьшить или увеличить это число в несколько
раз. Это допущение справедливо для расчета числа страниц,
соответствующего стандартному (типичному) сценарию. Если в программе
редко вызываемые подпрограммы размещаются в конце текста программы, то такие
страницы не будут все время находиться в физической памяти.
- Ссылки на общие библиотеки, отличные от libc.a,
увеличивают расход памяти. Однако дополнительная память потребуется
только для тех библиотек, которые не используются совместно с другими
программами или экземплярами оцениваемой программы. Для того чтобы
оценить объем этих библиотек, напишите тривиальную программу, использующую эти
библиотеки, и вызовите для процесса этой программы команду svmon
-P.
- Оцените объем памяти, необходимый структурам данных, объявленным в
программе. Округлите это значение (с избытком) до ближайшего целого
числа страниц.
- В программе с небольшим временем выполнения каждая операция дискового
ввода-вывода будет использовать одну страницу памяти. Предположим, что
эта страница доступна. Тогда программе не придется ждать, пока
освободится страница другой программы.
- Дисковый ввод/вывод
- При последовательном доступе к диску операция ввода/вывода считывает или
записывает 4096 байт (однако если к файлу обращались совсем недавно, то
некоторые его страницы все еще находятся в памяти).
- В случае произвольного доступа к диску, операция ввода/вывода выполняется
при обращении к любой 4096-байтовой странице для считывания/записи сколь
угодно малого объема данных (однако если к файлу обращались совсем недавно, то
некоторые его страницы все еще находятся в памяти).
- В случае последовательного доступа каждая операция чтения или записи
страницы объемом 4 Кб в большой файл занимает примерно 100 единиц работы
процессора. В случае произвольного доступа каждая операция чтения или
записи страницы размером 4 Кб занимает 300 единиц работы процессора.
Помните, что хотя файлы записываются и считываются программой последовательно,
в действительности они располагаются на разных участках диска.
Следовательно, расход процессорного времени при работе с диском на самом деле
будет ближе к значению, достигаемому при прямом, а не при последовательном
доступе.
- Средства связи
- Если дисковый ввод-вывод выполняется в удаленной файловой системе NFS, то
фактически он выполняется на сервере. Тем не менее, на клиенте
возрастает нагрузка на процессор и память.
- Значительно увеличивает загрузку процессора Удаленный вызов процедур
(RPC). Функции RPC должны быть минимизированы и собраны в пакеты;
для них необходимо создать прототип и выполнить измерения.
- В случае последовательного доступа каждая операция чтения или записи
страницы размером 4 Кб из файловой системы NFS занимает примерно 600 единиц
работы процессора в клиентской системе. В случае произвольного доступа
такая операция занимает примерно 1000 единиц процессорного времени в
клиентской системе.
- Работа Web-браузеров и Web-серверов создает значительную нагрузку на сеть,
поскольку соединения TCP открываются и закрываются довольно часто.
Лучший способ оценить ресурсы, необходимые при работе в режиме обычной и
пиковой нагрузки, - это использование специальных средств моделирования,
например, BEST/1. Можно применять и статические модели, но при этом вы
рискуете переоценить или недооценить ресурсы при работе в режиме пиковой
нагрузки. В любом случае, вам необходимо понимать, каким образом
взаимодействие программ рабочей схемы влияет на объем необходимых
ресурсов.
При разработке статической модели используйте интервал времени, равный
наихудшему времени ответа для наиболее часто вызываемой или запрашивающей
программы (обычно они одинаковы). Определите, какие программы будут
запускаться в разное время дня, в зависимости от предполагаемого числа
пользователей, времени принятия решения, скорости нажатия клавиш и
предполагаемого набора операций.
Ниже приведены некоторые рекомендации:
- Процессорное время
- Сложите значения процессорного времени для всех программ, запускаемых в
течение данного промежутка времени. Добавьте время, необходимое для
обработки обращений к диску и устройствам связи.
- Если значение, полученное для какого-либо интервала времени, превышает 75
процентов процессорного времени, то уменьшите число пользователей или
увеличьте число процессоров.
- Физическая память
- Объем физической памяти, необходимый для работы операционной системы,
зависит от общего объема физической памяти. В качестве начального
значения можно принять 6 - 8 Мб. Меньшая цифра относится к автономной
системе, большая - к системе, подключенной к сети и использующей TCP/IP или
NFS.
- Сложите объем рабочих сегментов для всех экземпляров программ, которые
будут запускаться в течение данного интервала времени, а также объем памяти,
который выделяется под структуры данных, объявленные в программах.
- Добавьте к этому необходимую память для сегментов текстов всех программ,
которые будут запускаться (одна копия текста программы применяется для всех
экземпляров программы). Помните, что в исполняемую программу
добавляются только функции из пользовательских библиотек, при этом сами
библиотеки в память не загружаются.
- Добавьте память, занимаемую всеми общими библиотеками, которые будут
использоваться какой-либо программой в рабочей схеме. (Одна копия
обслуживает все запросы.)
- Полученная оценка объема памяти не должна превышать 80 процентов от общего
объема памяти системы, так как должно оставаться достаточно памяти для
кэширования файлов и списка свободных страниц.
- Дисковый ввод/вывод
- Просуммируйте предполагаемое число операций ввода/вывода для всех
экземпляров каждой программы. Отдельно учитывайте ввод-вывод для
небольших файлов (или ввод-вывод для больших файлов в режиме произвольного
доступа) и ввод-вывод в режиме последовательного доступа при чтении/записи
больших файлов (больше 32 Кб).
- Вычтите соответствующий объем памяти из общего значения. Запись,
которая была прочитана или записана в предыдущем интервале, может быть
доступной и в текущем интервале. Затем необходимо сравнить объем памяти
предполагаемого компьютера с полным объемом памяти, требующейся для рабочей
схемы. Если помимо памяти, необходимой операционной системе и рабочей
схеме, остается неучтенная память, то, возможно, в этой области памяти
содержатся страницы файлов, которые считывались или записывались совсем
недавно. Если ваше приложение с большой вероятностью повторно
использует данные, к которым оно уже недавно обращалось, то вы можете
рассчитать параметры кэширования. Помните, что повторное использование
выполняется на уровне страницы, а не на уровне записи. Если вероятность
повторного использования записи мала, но страница содержит много записей, то
вполне вероятно, что некоторые записи будут находиться на той же странице, что
и другие записи, использованные недавно.
- Сравните полученную оценку для операций ввода-вывода (объем дискового
ввода-вывода в секунду для каждого диска) с возможностями установленных
дисков. Если значение, полученное для последовательного или
произвольного доступа, составляет более 75 процентов от объема дисков, на
которых будут хранится данные приложения, то для работы приложения потребуется
выполнить дополнительную настройку (а при необходимости - увеличить число
дисков).
- Средства связи
- Рассчитайте пропускную способность, необходимую для выполнения рабочей
схемы. Если необходимая пропускная способность всех узлов локальной
сети составляет более 70 процентов от номинальной (50 процентов для Ethernet),
то потребуется увеличить пропускную способность сети.
- Аналогичный анализ требований к CPU, оперативной памяти и подсистеме
ввода-вывода необходимо выполнить и для дополнительных операций, выполняемых
сервером.
Примечание: Эти рекомендации рассчитаны только на
тот случай, когда невозможно выполнить более точные измерения
параметров. Если существуют результаты измерений для конкретного
приложения, то используйте их вместо соответствующих теоретических расчетов,
поскольку они дают намного более точную оценку.
[ Страница назад | Страница вперед | Содержание | Индекс |
Библиотека |
Юридическая информация |
Поиск ]