Оценка ресурсов, необходимых для выполнения новой программы
На стадии разработки программы и создания кода трудно делать какие-либо предсказания, однако оценить ресурсы, необходимые программе, можно с помощью следующих приблизительных расчетов.
Если программа еще не написана, то невозможно точно оценить объем ресурсов, требующихся для ее выполнения. В качестве отправной точки можно считать, что для программы необходимо как минимум следующее:
- Около 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 открываются и закрываются довольно часто.