Программа модели. Для задания исходных данных используем переменные пользователя
Для задания исходных данных используем переменные пользователя. Они задаются с помощью команды EQU. Переменным пользователя даны такие же имена, как и в постановке задачи, но добавлен знак подчеркивания. Например, T1_, S1_ и т. д. Время моделирования зададим переменной пользователя VrMod.
Арифметическая переменная для расчета времени обработки VrObr запроса на сервере:
VrObr VARIABLE (Normal(2,S1_#Koef,S2_#Koef))/Q_
Переменная пользователя Koef введена для удобства изменения (пропорционального изменения) характеристик нормального закона распределения, которому подчиняется вычислительная сложность запросов. Особенно целесообразно использование этой переменной при проведении экспериментов. Примеры применения приведены в главе 7.
Вероятность обработки VerObr запросов на сервере будем определять как отношение количества обработанных N$ObrZap запросов к количеству всего поступивших N$KolZap запросов:
VerObr VARIABLE N$ObrZap/N$KolZap
В арифметическом выражении VerObr, например, N$ObrZap - системный числовой атрибут - количество транзактов, вошедших в блок с меткой ObrZap, а N$KolZap - количество транзактов, вошедших в блок с меткой KolZap.
Все необходимое для написания программы модели имеется. Напишем программу решения прямой задачи.
; Обработка запросов сервером. Прямая задача
; Задание исходных данных
T1_ EQU 120; Средний интервал поступления запросов, с
S1_ EQU 60000000; Среднее значение вычислительной сложности запросов, оп
S2_ EQU 200000; Стандартное отклонение вычислительной сложности запросов, оп
Q_ EQU 600000; Среднее значение производительности сервера, оп/с
Koef EQU 1; Коэффициент изменения характеристик нормального распределения
VrObr VARIABLE (Normal(2,(S1_#Koef),(S2_#Koef))/Q_
VerObr VARIABLE N$ObrZap/N$KolZap
VrMod EQU 3600; Время моделирования, 1 ед. мод. времени = 1 с.
; Сегмент имитации обработки запросов
GENERATE (Exponential(1,0,T1_)); Источник запросов
KolZap GATE NU Server,PotZap; Свободен ли сервер? Если да, то
SEIZE Server; занять сервер
ADVANCE V$VrObr; Имитация обработки запроса
RELEASE Server; Освободить сервер ObrZap TERMINATE; Обработанные запросы
PotZap TERMINATE; Потерянные запросы
; Сегмент задания времени моделирования и расчета результатов
GENERATE VrMod
TEST L X$Prog,TG1,Met1; Если X$Prog < TG1,
SAVEVALUE Prog,TG1; то X$Prog = TG1
Met1 TEST E TG1,1,Met2; Если TG1 = 1, то
SAVEVALUE VerObr, V$VerObr; расчет и сохранение
в ячейке VerObr вероятности обработки запросов
SAVEVALUE Res,(INT(N$ObrZap/X$Prog)); расчет и сохранение в ячейке Res количества обработанных запросов
Met2 TERMINATE 1
START 1000,NP; Прогоны до установившегося режима
RESET; Сброс накопленной статистики
START 9604; Количество прогонов модели
При расчете количества обработанных запросов
SAVEVALUE Res,(INT(N$ObrZap/X$Prog))
в арифметическом выражении N$ObrZap/X$Prog используется число прогонов. В арифметическом выражении указано не явное число прогонов, а в виде содержимого ячейки X$Prog. Число прогонов заносится предварительно в эту ячейку по завершении первого прогона модели, но до того момента, когда из счетчика завершений TG1 будет вычтена первая единица. В этом случае арифметическое выражение не зависит от числа прогонов, которое может меняться на различных этапах создания и эксплуатации модели, в том числе и в зависимости от исходных данных, а также от точности и достоверности результатов моделирования. Поскольку количество обработанных запросов не может быть дробным числом, то для получения целого числа, записываемого в ячейку Res, используется процедура INT из встроенной библиотеки.
Для уменьшения машинного времени расчет искомых показателей производится не после каждого прогона, а после завершения последнего прогона, т. е. когда содержимое счетчика завершений будет равно единице (TG1 = 1).
Date: 2015-07-17; view: 400; Нарушение авторских прав Понравилась страница? Лайкни для друзей: |
|
|