Добавлен: 30.06.2023
Просмотров: 67
Скачиваний: 3
2. В системе работают 2 сервера. Время обработки на обоих серверах идентично и состоит из предварительной обработки на сервере, формирования ответа и передачи по каналам связи.
При этом предварительная обработка на сервере занимает 2с, формирование ответа занимает 18±2с и время передачи по каналам связи занимает 3с.
3. После первого сервера поток запросов разделяется. 50% запросов уходят из системы, а 50% проходят дополнительную обработку на втором сервере.
4 Согласно заданию необходимо смоделировать процесс обработки 400 запросов.
Необходимо смоделировать процесс обработки 400 запросов и определить:
– необходимую емкость накопителя для размещения ждущих запросов. Для этого необходимо будет анализировать очередь.
– распределение времени обслуживания запроса.
Построим общую схему системы (рисунок 3.1).
50%
50%
Рисунок 3.1 – Схема системы
Опишем процесс построения модели.
Зададим поступления заявок в модель. Для этого используем оператор GENERATE.
Формат: GENERATE A,B,C,D,E,F,G
А - среднее значение интервала времени;
В - разброс или модификатор среднего значения(по умолчанию ноль);
С - время появления первого транзакта;
D - общее число генерируемых транзактов;
Е - уровень приоритета каждого транзакта;(от 0 до 127,значение по умолчанию 0);
F - число параметров (по умолчанию 12);
G - тип параметра ( F - полнословный, Н - полусловный - по умолчанию )
Интервал поступления 103, всего необходимо 400 транзактов, поэтому команда выглядит так:
40 generate 10,3,,400
По заданию необходимо получить распределение времени обслуживания запроса.
Для получения плотности распределения, ее интегральных относительных частот, среднего значения и стандартного отклонения некоторых аргументов, которыми могут быть СЧА (например, времени нахождения транзакта в модели или задержки в ее отдельных частях, длин очередей, содержимого МКУ, коэффициентов использования устройств и т. д.), используются статистические таблицы TABLE и QTABLE.
Формат: num TABLE A,B,C,D,E
num - номер таблицы;
А - аргумент таблицы (-);
В - верхняя граница нижнего интервала;
С - ширина интервала;
D - число интервалов;
Е - интервал времени (только для RT-режима).
При входе транзакта в блок TABULATE, связанный с конкретной таблицей, операнд А соответствующей карты TABLE вычисляется и заносится в эту таблицу. Если за операндом А указан знак (-), в таблицу заносится разность двух соседних значений табулируемой величины. Если в поле А указан режим IA, в таблицу заносится интервал времени между приходом двух транзактов в блок TABULATE. Если в поле А указан RT-режим, то информация заносится в таблицу через интервалы времени, заданные в поле Е. Соответствующая результирующая величина показывает, сколько входов транзактов в блок TABULATE имело место в течение указанного интервала. Стоящий в поле D символ указывает, что таблица является взвешенной. Использовать взвешенные IA или RT разностные таблицы нельзя.
Для сбора элементов данных сообщение должно войти в блок TABULATE с тем же именем таблицы, что определено в блоке TABLE.
Пользователю GPSS позволено для сбора нужных статистических
данных вводить таблицы нескольких типов. Информация заносится в таблицы с помощью специального блока TABULATE в момент входа транзакта в этот блок. Пользователь должен задать ряд характеристик для каждой из таблиц, которую он хочет использовать.
Характеристики таблицы задаются специальной картой описания таблицы – TABLE (QTABLE).
При входе транзакта в блок TABULATE симулятор ПМДС записывает в соответствующую таблицу определенную статистическую информацию. Поле А определяет номер этой таблицы, в которой накапливается соответствующая статистическая информация. Вид заносимой информации определяется на специальной карте описания таблицы помимо способа обработки. Эта карта определяет размер, а также число и границы интервалов таблицы. В каждом блоке TABULATE может быть задано число единиц, добавляемых к числу наблюдений того интервала, в который попадает при данном обращении аргумент. Это число единиц задается в поле В. Если поле В пусто, то это число принимается равным 1.
Блок TABULATE имеет следующий формат:
TABULATE <А>,[<B>]
Блок TABULATE табулирует текущее значение заданного аргумента. Способ табуляции зависит от режима работы таблицы, который определяется оператором описания таблицы TABLE.
В поле А задается номер или имя таблицы, в которую табулируется значение аргумента. Таблица должна быть определена оператором описания TABLE.
В поле В задается число единиц, которые должны быть занесены в тот частотный интервал, куда попало значение аргумента. Если поле В пусто, эта величина полагается равной единице.
Когда сообщение входит в блок TABULATE, то для нахождения таблицы используется операнд А. Если такой таблицы нет, то возникает ошибка выполнения. Таблица должна быть определена оператором TABLE. Таблица изменяется в соответствии с операндами оператора TABLE.
При входе транзакта в блок TABULATE, которой ссылается на таблицу num, аргумент А этой таблицы вычисляется и заносится в эту таблицу. При этом если за операндом А стоит знак «-», то в таблицу заносится разность двух соседних значений табулируемой величины. Если в поле А указан режим IA, в таблицу заносится интервал времени между приходом двух транзактов в блок TABULATE.
Соответственно команды объявления таблиц будет иметь следующий вид:
10 Table1 table V$PeremA,17,1,5
20 Table2 table V$PeremA,17,1,5
Запись данных в таблицы:
110 tabulate Table1
210 tabulate Table2
В таблицах будет по 5 диапазонов:
- от 16 до 17,
- от 17 до 18,
- от 18 до 19,
- от 19 до 20,
- от 20 до 21.
PeremA - значение, которое равно разности времени нахождения транзакта в модели и значения первого параметра транзакта.
Для объявления переменной используем оператор VARIABLE
Формат: num VARIABLE ехр
num - номер переменной (числовое или символическое имя);
ехр - арифметическое или логическое выражение, использующее допустимые СЧА и (или) константы; знак "%" заменяет"* при косвенной адресации.
Допустимые операторы:
= - равно,
= - не равно,
< > - не равно,
< - меньше чем,
> - больше чем,
>= - больше или равно,
>= - меньше или равно,
1 -И,
ИЛИ,
+ - сложение,
- - вычитание,
/ - деление,
* - умножение,
@ - деление по модулю @,
( ) - правило круглых скобок.
Когда производится обращение к СЧА V$, выражение, соответствующее перемен-ной VARIABLE, вычисляется с использованием целочисленной арифметики. В логических операциях ненулевые значения рассматриваются как "ИСТИНА".При этом переменная принимает значение 0 в случае "ЛОЖЬ" и 1 в случае "ИСТИНА". Переменная может иметь до 13 уровней вложения (т.е переменных, ссылающихся на другие переменные). Знак % используется при косвенной адресации, т.к * означает умножение.
Команда имеет вид:
30 PeremA variable M1-P1
В системе присутствует 2 устройства (сервер 1 и сервер 2). Также добавим устройства для моделирования предварительной обработки и передачи по каналам связи. Для моделирования задержки используется оператор ADVANCE.
Формат: ADVANCE А,В
А - среднее время задержки (константа, если В не задано);
В - разброс относительно среднего значения, должен быть меньше или равен А.
Блок ADVANCE моделирует временною задержку транзакта в течение определенного интервала. Значение задержки по умолчанию равно нулю. Если поле В не является FN$, т время задержки является случайным числом, распределенным равномерно на интервале от (; + В) до (А - В). Если поле В является функцией FN$, то время задержки определяете произведением поля А на значение функции в поле В. Функция может быть использована для задания времени задержки с определенным средним значением и отклонением, зависящим от А.
Команды:
50 advance 2 ; предварительная обработка (сервер 1)
100 advance 18,2 ; обработка (сервер 1)
130 advance 3 ; передача по каналу связи (сервер 1)
150 advance 2 ; предварительная обработка (сервер 2)
200 advance 18,2 ; обработка (сервер 2)
230 advance 3 ; передача по каналу связи (сервер 2)
Для устройств сервер 1 и сервер 2 необходимо собирать статистику, поэтому нужно использовать операторы занятия и освобождения устройства SEIZE, RELEASE. Занятие транзактом одноканального устройства моделируется блоком SEIZE, а его освобождение - блоком RELEASE:
SEIZE А
RELEASE A
A - имя устройства, занимаемого (освобождаемого) транзактом;
Операторы:
70 seize Server1
120 release Server1
170 seize Server2
220 release Server2
Для определения характеристик очередей используем блоки регистраторов очередей: QUEUE (встать в очередь) и DEPART (уйти из очереди), имеющих следующий формат:
QUEUE A, B
DEPART A, B
В поле A указывается номер или имя очереди, а в поле B - число единиц, на которое текущая длина очереди увеличивается при входе транзакта в блок QUEUE или уменьшается при входе транзакту в блок DEPART. Обычно поле B пусто, и в этом случае его значение по умолчанию принимается равным 1.
Для сбора статистики о транзакты, которые были заблокированы перед каким-либо блоком модели, блоки QUEUE и DEPART размещаются перед и после этого блока соответственно.
Также для вычисления переменной необходимо записать в параметры транзакта некоторое значение (модельное время). Для этого используем оператор ASSIGN.
Формат: ASSIGN А.В
А - номер изменяемого параметра (+, -);
В - новое значение параметра.
Если за полем А следует знак + или -, то значение поля В соответственно добавляется или вычитается из А. Если знаки - или + не указаны, то значение поля В становится текущим значением параметра.
Для реализации разветвления используем оператор transfer.
TRANSFER - изменяет движение транзакта в модели.
Формат: TRANSFER А,В,С,D
А - режим передачи (пробел,.,ALL,BOTH,FN,P,PICK,SBR,SIM);
В - следующий блок;
С - следующий блок;
D - значение индекса, используемое в режиме ALL.
Транзакт направляется в блок, определяемый в соответствии с режимом передачи, указанным в поле А.
Режимы передачи поля А:
1. Пробел - транзакт передается в блок, определяемый полем В.
2. "." - статистический режим; в поле А указано десятичное число, выражающее вероятность перехода в блок С; его дополнение до единицы указывает вероятность перехода в блок В.
3. ALL - транзакт последовательно пытается перейти в блоки, определяемые значениями В, B+D, B+2D.....C.
4. BOTH - транзакт последовательно пытается войти в блок В, затем в блок С, до тех пор, пока один из них станет доступным.
5. FN - функциональный режим: поле В является номером функции; сле-дующий блок определяется суммой значения этой функции поля С.
6. Р - параметрический режим: поле В является номером параметра; следующий блок определяется суммой значения этого параметра и поля С.
7. PICK - выборочный режим: блок выбирается с равной вероятностью из блоков с номерами: В, B+l,..., С.
8. SBR - режим перехода к подпрограмме: номер текущего блока помещается в параметр, указанный в поле С, а транзакт передается в блок, номер которого указан в поле В.
9. SIM - одновременный режим: проверяется одновременное выполнение условий беспрепятственного движения транзактов в задерживающих блоках . Если условие выполняется, транзакт передается в следующий блок, в противном случае транзакт переходит на блок С.
В нашем случае необходимо использовать режим статистической передачи (по 50%):
140 transfer 0.5,,kill
Уничтожение транзактов:
200 kill terminate 1
Итого программа имеет вид:
10 Table1 table V$PeremA,17,1,5
20 Table2 table V$PeremA,17,1,5
30 PeremA variable M1-P1
40 generate 10,3,,400
50 advance 2
60 queue queueS1
70 seize Server1
80 depart queueS1
90 assign 1,M1
100 advance 18,2
110 tabulate Table1
120 release Server1
130 advance 3
140 transfer 0.5,,kill
150 advance 2
160 queue queueS2
170 seize Server2
180 depart queueS2
190 assign 1,M1
200 advance 18,2
210 tabulate Table2
220 release Server2
230 advance 3
240 kill terminate 1
250 start 400
4 Анализ результатов
После запуска модели на исполнение получены следующие результаты:
GPSS World Simulation Report - 25_2.92.1
Tuesday, June 17, 2014 14:57:40
START TIME END TIME BLOCKS FACILITIES STORAGES
0.000 7251.407 21 2 0
NAME VALUE
KILL 21.000
PEREMA 10002.000
QUEUES1 10003.000
QUEUES2 10005.000
SERVER1 10004.000
SERVER2 10006.000
TABLE1 10000.000
TABLE2 10001.000
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
1 GENERATE 400 0 0
2 ADVANCE 400 0 0
3 QUEUE 400 0 0
4 SEIZE 400 0 0
5 DEPART 400 0 0
6 ASSIGN 400 0 0
7 ADVANCE 400 0 0
8 TABULATE 400 0 0
9 RELEASE 400 0 0
10 ADVANCE 400 0 0
11 TRANSFER 400 0 0
12 ADVANCE 213 0 0
13 QUEUE 213 0 0
14 SEIZE 213 0 0
15 DEPART 213 0 0
16 ASSIGN 213 0 0
17 ADVANCE 213 0 0
18 TABULATE 213 0 0
19 RELEASE 213 0 0
20 ADVANCE 213 0 0
KILL 21 TERMINATE 400 0 0
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
SERVER1 400 0.995 18.029 1 0 0 0 0 0
SERVER2 213 0.525 17.875 1 0 0 0 0 0
QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY
QUEUES1 180 0 400 1 88.697 1607.937 1611.967 0
QUEUES2 1 0 213 154 0.014 0.474 1.711 0
TABLE MEAN STD.DEV. RANGE RETRY FREQUENCY CUM.%
TABLE1 18.029 1.194 0
_ - 17.000 102 25.50
17.000 - 18.000 90 48.00
18.000 - 19.000 104 74.00
19.000 - 20.000 104 100.00
TABLE2 17.875 1.194 0
_ - 17.000 66 30.99
17.000 - 18.000 44 51.64
18.000 - 19.000 56 77.93
19.000 - 20.000 47 100.00
Изначально было поставлено задание смоделировать процесс обработки 400 запросов и определить:
– необходимую емкость накопителя для размещения ждущих запросов,
– распределение времени обслуживания запроса.
По первому пункту видно, что необходимая емкость накопителя для размещения ждущих запросов к первому серверу должна составлять 180 позиций. Это не очень хороший показатель, ведь почти каждая вторая заявка стоит в очереди.