Программа модели

Для задания исходных данных используем переменные пользователя. Они задаются с помощью команды 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$KolZapVrMod 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 = TG1Met1 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).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: