[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по настройке производительности


Определение необходимого объема памяти с помощью команды rmss

Команда rmss (эмулятор системы с сокращенным объемом памяти) позволяет уменьшить размер оперативной памяти компьютера, доступной программам, не удаляя карты памяти из системного блока. Кроме того, команда rmss позволяет протестировать работу приложения в системе с различными объемами памяти и просмотреть собранную статистику с информацией о времени ответа приложения и числе операций подкачки. Команда rmss позволяет получить ответ на следующий вопрос: "Какой объем физической памяти необходим для работы операционной системы и заданного приложения с высокой производительностью?". В многопользовательской системе этот вопрос можно переформулировать следующим образом: "Сколько пользователей могут одновременно работать с данным приложением на компьютере с оперативной памятью объемом X Мб?"

Как правило, команда rmss применяется при планировании нагрузки на систему для определения объема памяти, необходимого для выполнения заданной рабочей схемы. Однако она может применяться и для обнаружения неполадок, особенно в тех случаях, когда увеличение объема памяти привело к снижению производительности системы.

Для того чтобы узнать, установлена ли команда rmss в системе, вызовите следующую команду:

# lslpp -lI perfagent.tools

Важно помнить о том, что команда rmss ограничивает общий объем оперативной памяти, который применяется операционной системой и другими приложениями, выполняющимися в системе. Этот объем не совпадает с объемом памяти, используемой самим приложением. Поскольку применение команды rmss может привести к резкому снижению производительности системы, ее разрешено вызывать только пользователю root и пользователям, входящим в группу system.

Способы применения rmss

Существует два сценария работы команды rmss:

  1. Команда просто изменяет объем памяти системы.
  2. Команда играет роль драйвера, который несколько раз вызывает указанное приложение, каждый раз изменяя объем памяти, и собирает информацию о производительности приложения.

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

Примечание: Перед вызовом команды rmss выключите управление нагрузкой на память VMM с помощью команды /usr/samples/kernel/schedtune -h 0 (дополнительная информация приведена в разделе Настройка параметров управления нагрузкой на память VMM с помощью команды schedtune). В противном случае функция управления нагрузкой на памяти со стороны VMM может исказить результаты измерений при малых объемах памяти. После того как приложение будет протестировано, восстановите значения параметров управления нагрузкой на память, которые применяются в вашей системе (если обычно в этих параметрах оставляются значения по умолчанию, вызовите команду /usr/samples/kernel/schedtune -D).

Изменение объема памяти с помощью команды rmss

Для того чтобы изменить объем памяти системы, вызовите команду с флагом -c. Например, для того чтобы уменьшить объем памяти до 128 Мб, вызовите следующую команду:

# rmss -c 128

В качестве объема памяти можно указать целое или дробное число мегабайт (например, 128,25). Кроме того, новый объем памяти не должен быть меньше 8 Мб или больше фактического объема оперативной памяти компьютера. Значение, до которого можно сократить объем памяти системы с помощью команды rmss, зависит и от размера стандартных структур системы, например, ядра. Когда команде rmss не удается изменить объем памяти системы, она выдает сообщение об ошибке.

Для сокращения объема доступной оперативной памяти команда rmss удаляет некоторые страницы из списка свободных страниц VMM. Удаленные страницы перемещаются в пул непригодных к использованию страниц и возвращаются в список свободных при восстановлении объема физической памяти. Кроме того, команда rmss динамически обновляет некоторые системные переменные и структуры данных, значение или размер которых зависит от объема доступной оперативной памяти.

Для изменения объема памяти может потребоваться некоторое время (до 15 - 20 с). В общем случае, чем больше нужно сократить объем памяти, тем дольше выполняется команда rmss. По окончании выполнения команды rmss появляется следующее сообщение:

Моделируемый объем памяти установлен равным 128,00 Мб.

Для того чтобы узнать текущий объем памяти, вызовите команду с флагом -p:

# rmss -p

Команда rmss выдаст примерно следующее сообщение:

Моделируемый объем памяти равен 128,00 Мб.

Для того чтобы восстановить исходный объем памяти компьютера, вызовите команду с флагом -r:

# rmss -r

Независимо от текущего моделируемого объема памяти, команда rmss с флагом -r устанавливает объем памяти равным объему физической памяти компьютера. Побочным эффектом выполнения команды rmss -r является то, что для параметров vmtune устанавливаются значения по умолчанию.

Если предположить, что команда rmss была вызвана на компьютере с оперативной памятью объемом 256 Мб, то появится следующее сообщение:

Моделируемый объем памяти установлен равным 256,00 Мб.

Примечание: Команда rmss сообщает объем доступной физической памяти. Другими словами, объем памяти в выводе команды rmss представляет собой общий объем физической памяти минус объем поврежденной и занятой памяти. Например, команда rmss -r может выдать следующее сообщение:

Моделируемый объем памяти установлен равным 79,9062 Мб.

Это может означать, что некоторые страницы памяти помечены как поврежденные или зарезервированы некоторым устройством (и поэтому недоступны для пользователя).

Применение флагов -c, -p и -r

Преимущество флагов -c, -p и -r команды rmss заключается в том, что они позволяют протестировать работу сложных приложений, которые нельзя представить в виде одного исполняемого файла или сценария оболочки. Недостатком флагов -c, -p и -r является то, что они не обеспечивают автоматический сбор информации о производительности. Информацию об использовании пространства подкачки во время работы приложения можно получить с помощью команды vmstat -s.

Для того чтобы узнать, сколько страниц было загружено в память во время работы приложения, вызовите команду vmstat -s, запустите приложение, а затем снова вызовите команду vmstat -s. Разница между числом загруженных в память страниц до запуска приложения и во время работы приложения даст искомый результат. Поделив полученное значение на время, прошедшее с момента запуска приложения, вы получите среднее число страниц, загружаемых в память в секунду.

Для каждого объема оперативной памяти нужно проводить несколько измерений, запуская приложение несколько раз. Это обусловлено следующими причинами:

Ниже приведен общий сценарий применения команды rmss:

пока вы хотите проверять приложение при других объемах памяти:
  {
  Установите необходимый объем памяти с помощью команды rmss -c;
  Выполните приложение один раз для "разогрева";
  Для нескольких  итераций:
    {
    Вызовите команду vmstat -s и запомните число обращений к страницам подкачки;
    Выполните приложение и измерьте время выполнения;
    Вызовите команду vmstat -s и запомните новое число обращений к страницам подкачки;
    Вычтите исходное количество обращений из итогового и получите
       количество обращений к страницам подкачки за время работы
    приложения;
    Разделите количество обращений на время исполнения
    приложения
       для получения средней частоты обращения
    к страницам подкачки;
    }
  }
Восстановите исходный объем оперативной памяти, вызвав команду
rmss -r или перезагрузив систему

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

Запуск команды в системе с различными объемами памяти с помощью команды rmss

Для вызова команды rmss в качестве драйвера укажите флаги -s, -f, -d, -n и -o. В режиме драйвера команда rmss вызывает указанное приложение несколько раз, каждый раз изменяя объем памяти, и собирает информацию о производительности приложения. Ниже описан формат вызова для запуска команды rmss в этом режиме:

rmss [ -s начальный-размер-памяти ] [ -f
итоговый-размер-памяти ] [ -d приращение ]
     [ -n число-итераций ] [ -o файл-вывода ] команда

Ниже приведено описание флагов команды. Флаги -s, -f и -d задают диапазон объемов памяти.

-n
Сколько раз характеристики должны измеряться при каждом значении объема памяти.

-o
Файл, в который записывается отчет команды rmss. Вместо команды нужно указать приложение, характеристики которого нужно измерить в системе с различными объемами памяти.

-s
Начальный объем памяти.

-f
Итоговый объем памяти.

-d
Шаг приращения.

Все значения указываются в мегабайтах в виде целых чисел или десятичных дробей. Например, если характеристики программы нужно измерить в системе с объемом памяти 256, 224, 192, 160 и 128 Мб, то укажите следующие флаги:

-s 256 -f 128 -d 32

Если характеристики программы нужно измерить в системе с объемом памяти 128, 160, 192, 224 и 256 Мб, то укажите следующие флаги:

-s 128 -f 256 -d 32

Если флаг -s не указан, то в качестве начального объема памяти команда rmss применяет фактический объем оперативной памяти компьютера. Если не задан флаг -f, то команда rmss выполняет последнее измерение в системе с объемом памяти 8 Мб. Если не указан флаг -d, то объем памяти каждый раз изменяется на 8 Мб.

Какие значения следует указать с флагами -s, -f и -d? Самый простой критерий выбора значений заключается в том, чтобы заданный диапазон включал в себя объем памяти тех систем, в которых планируется выполнять приложение. Однако если приращение будет составлять меньше 8 Мб, то вы сможете узнать, сколько памяти остается у системы в запасе при выполнении приложения в системе со стандартным объемом памяти. Например, если при выполнении приложения в системе с объемом памяти 120 Мб возникает перегрузка памяти, а в системе с объемом памяти 128 Мб операции подкачки не выполняются, то важно знать, при каком объеме памяти начинается перегрузка. Если перегрузка начинается при объеме памяти 127 Мб, то рекомендуется запускать приложение в системах с объемом памяти больше 128 Мб, либо изменить приложение таким образом, чтобы для его выполнения требовалось меньше памяти. Если же перегрузка начинается при объеме памяти 121 Мб, то 128 Мб оперативной памяти вполне достаточно для работы приложения.

Флаг -n указывает, сколько раз характеристики программы должны измеряться при каждом значении объема памяти. После того как приложение будет выполнено указанное число раз, команда rmss выдаст статистическую информацию о средней скорости выполнения приложения в системе с данным объемом памяти. Для того чтобы при каждом объеме памяти команда выполнялась трижды, укажите:

-n 3

Если флаг -n не задан, то во время инициализации команда rmss определяет, сколько раз нужно выполнить приложение, чтобы общее время выполнения составило 10 секунд. Такая оценка гарантирует, что на информацию о производительности быстро выполняющегося приложения, собираемую командой rmss, не оказывает значительного влияния работа других программ, например, демонов.

Примечание: Если программа выполняется за очень незначительное время, то для того чтобы истратить 10 секунд процессорного времени на выполнение программы, ее придется запустить большое число раз. Поскольку команда rmss подготавливает очередной запуск программы как минимум 2 секунды, она может выполняться очень долго. В связи с этим для таких программ рекомендуется явно задавать число итераций с флагом -n.

Какое значение нужно задать с флагом -n? Если время выполнения приложения составляет больше 10 секунд, укажите -n 1. В этом случае команда будет выполняться дважды, однако при каждом объеме памяти измерение будет выполняться только один раз. Флаг -n позволяет сократить время выполнения команды rmss за счет того, что во время инициализации ей не придется определять, сколько раз нужно запускать программу. Это особенно важно при тестировании долго работающих и интерактивных приложений.

Обратите внимание, что перед выполнением измерений для очередного объема памяти команда rmss делает пробный запуск программы. "Разогрев" позволяет устранить операции ввода/вывода, связанные с загрузкой приложения в оперативную память. Хотя такие операции влияют на производительность, это влияние не обязательно связано с нехваткой оперативной памяти. Пробный запуск не учитывается в числе итераций, заданном с флагом -n.

Флаг -o позволяет задать файл, в который будет записан отчет команды rmss. Если флаг -o не задан, то отчет записывается в файл rmss.out.

В параметре команда необходимо указать приложение, характеристики которого нужно измерить. Можно указать любую исполняемую программу или сценарий оболочки, в том числе с аргументами. Есть определенные ограничения на формат команды. В частности, в ней не должен перенаправляться поток ввода или вывода (то есть команды в формате foo > output и foo < input недопустимы). Это связано с тем, что команда rmss рассматривает все значения справа от имени программы, как аргументы этой программы. Для того чтобы перенаправить поток ввода или вывода, напишите сценарий оболочки.

Для того чтобы сохранить вывод команды rmss в файле, укажите опцию -o. Если вы хотите перенаправить стандартный поток вывода команды rmss (например, добавить вывод в конец существующего файла), то вызовите команду rmss в оболочке Korn, заключив ее в скобки:

# (rmss -s 24 -f 8 foo) >> output

Анализ вывода команды rmss

Отчет для программы foo был создан командой rmss для одной из реально существующих программ. Здесь эта программа условно названа foo. Для создания отчета была вызвана следующая команда:

# rmss -s 16 -f 8 -d 1 -n 1 -o rmss.out foo

Отчет для программы foo

Имя хоста: widgeon.austin.ibm.com
Реальный объем оперативной памяти:   16.00 Мб
Время:  четверг 6 января 2000 г. 19.04.04
Команда:  foo
 
Начальное значение моделируемого объема памяти: 16.00 Мб.
 
Количество итераций для одного значения объема памяти = 1 разогрев + 1 измерение = 2.
 
Объем памяти      Подкачка      Время выполнения    Частота подкачки
(Мегабайт)                      (с.)                  (стр/с.)
-----------------------------------------------------------------
16.00            115.0           123.9                 0.9
15.00            112.0           125.1                 0.9
14.00            179.0           126.2                 1.4
13.00             81.0           125.7                 0.6
12.00            403.0           132.0                 3.1
11.00            855.0           141.5                 6.0
10.00           1161.0           146.8                 7.9
9.00            1529.0           161.3                 9.5
8.00            2931.0           202.5                 14.5

Отчет содержит четыре колонки. В левой колонке указан объем памяти, а в колонке Подкачка - среднее число страниц, загружаемых из пространства подкачки при выполнении приложения в системе с таким объемом памяти. Важно отметить, что значение Подкачка учитывает все операции подкачки, то есть операции чтения кода, данных и файлов, выполняемые всеми приложениями системы. В колонке Время выполнения указано среднее время выполнения приложения, а в колонке Частота подкачки - среднее число операций подкачки в секунду.

Обратите внимание на значения из колонки Частота подкачки. Когда объем памяти составляет от 16 до 13 Мб, частота подкачки сравнительно невелика (< 1,5 операций подкачки в секунду). Однако в диапазоне от 13 до 8 Мб частота подкачки начинает расти, достигая максимального значения в системе с объемом памяти 8 Мб. Значения из колонки Время выполнения распределяются аналогичным образом: с уменьшением объема памяти время выполнения начинает расти все быстрее, достигая максимума в системе с объемом памяти 8 Мб.

Заметим, что в системе с объемом памяти 13 Мб частота подкачки меньше (0,6 операций в секунду), чем в системе с объемом памяти 14 Мб (1,4 операции в секунду). Это не связано с ошибкой. Если измерения проводятся в рабочей системе, то изменение значений никогда не бывает плавным. Важно лишь то, что при объеме памяти 14 и 13 Мб число операций подкачки относительно невелико.

Сделайте выводы на основании полученного отчета. Если в системе с объемом памяти 8 Мб приложение выполняется очень медленно (что вполне вероятно), то увеличение объема памяти позволит значительно повысить производительность. Обратите внимание, что в системе с объемом памяти 16 Мб время ответа составляет 124 секунды, а в системе с объемом памяти 8 Мб - 202 секунды, то есть время выполнения возросло на 63 процента. С другой стороны, если в системе с объемом памяти 16 Мб приложение тоже выполняется слишком медленно, увеличение объема памяти не позволит повысить производительность, так как в этом случае операции подкачки слабо влияют на время выполнения приложения.

Отчет для операции копирования удаленного файла размером 16 Мб

Ниже приведен пример отчета rmss, созданного на компьютере-клиенте для команды, копирующей файл размером 16 Мб с удаленного сервера NFS.

Имя хоста: xray.austin.ibm.com
Реальный объем оперативной памяти:   48.00 Мб
Время:  понедельник 10 января 2000 г. 18.16.42
Команда:  cp /mnt/a16Mfile /dev/null
 
Начальное значение моделируемого объема памяти 48.00 Мб.
 
Количество итераций для одного значения объема памяти = 1 разогрев + 4 измерение = 5.
 
Объем памяти      Подкачка      Время выполнения    Частота подкачки
(Мегабайт)                      (с.)                  (стр/с.)
-----------------------------------------------------------------
48.00              0.0            2.7                   0.0
40.00              0.0            2.7                   0.0
32.00              0.0            2.7                   0.0
24.00              1520.8        26.9                  56.6
16.00              4104.2        67.5                  60.8
8.00               4106.8        66.9                  61.4

Обратите внимание, что вначале время выполнения и частота подкачки невелики, однако при объеме памяти 24 Мб они начинают резко расти и достигают максимальных значений, когда объем памяти составляет 16 и 8 Мб. Этот пример говорит о том, что команду rmss следует вызывать для как можно большего числа значений объема памяти. Если бы в данном случае диапазон значений составил от 24 до 8 Мб, то пользователь не смог бы определить объем памяти, при котором приложение выполняется без подкачки.

Рекомендации по использованию флагов -s, -f, -d, -n и -o

Одним из полезных свойств команды rmss является то, что когда ее выполнение прерывается (нажатием клавиш прерывания, в качестве которых по умолчанию применяются Ctrl-C), файл вывода не удаляется. Кроме того, при этом восстанавливается исходный размер оперативной памяти компьютера, измененный командой rmss.

Команду rmss можно запустить в фоновом режиме (даже после выхода из системы) с помощью команды nohup. Для этого укажите перед командой rmss команду nohup и введите в конце командной строки & (амперсанд):

# nohup rmss -s 48 -f 8 -o foo.out foo &

Рекомендации по работе с командой rmss

Независимо от того, для какой цели применяется команда rmss, перед ее запуском необходимо как можно точнее воссоздать ту среду, в которой обычно запускается исследуемое приложение. Совпадает ли аппаратная конфигурация и конфигурация сети той системы, в которой будут проводиться измерения, с конфигурацией рабочей системы? Будут ли пользователи применять файлы приложений, монтируемые с удаленного узла с помощью NFS или другой распределенной файловой системы? Ответ на последний вопрос особенно важен, поскольку страницы удаленных файлов учитываются VMM отдельно от страниц локальных файлов.

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

Примечание: В системе нельзя запустить сразу несколько экземпляров команды rmss.

После того как вы закончите работать с командой rmss, рекомендуется перезагрузить систему. При этом будут аннулированы все изменения, внесенные командой rmss в параметры системы. В частности, будут восстановлены значения параметров управления нагрузкой на память VMM.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]