КР Трубицын ИУ 5-93 (954216), страница 14
Текст из файла (страница 14)
Бдi - буфер, имитирующий очередь запросов к i-му диску;
ОАдi - обслуживающий аппарат, имитирующий работу i-го диска.
Р - вероятность обращения запроса к ЦП после обработки на диске.
Обслуживание заявок во всех ОА подчиняется экспоненциальному закону.
Исходными данными аналитической модели являются:
Таблица38.. Входные данные аналитической модели
Обозначение | Описание |
N | число рабочих станций сети |
Т0 | среднее значение времени дообработки на рабочей станции сети запроса от этой станции к базе данных на сервере |
Тр | среднее значение времени формирования запроса от рабочей станции сети к базе данных на сервере |
tк | среднее значение времени передачи запроса по каналу |
M | число процессоров сервера |
K | число дисков сервера |
tпрi | среднее значение времени обработки запроса в ЦП сервера |
tдi | среднее значение времени обработки запроса в диске сервера |
Рi | вероятность обращения запроса к i-му диску сервера после обработки запроса в процессоре |
Выходными характеристиками аналитической модели являются:
Таблица39. Выходные характеристики аналитической модели
Обозначение | Описание |
Треак | среднее значение времени реакции системы |
rк | коэффициент загрузки ОА, имитирующего работу канала передачи данных |
rпрi | коэффициент загрузки ОА, имитирующего работу i-го процессора сервера |
rдi | коэффициент загрузки ОА, имитирующего работу i-го диска сервера |
Введём следующие обозначения:
lф1 – среднее значение суммарной интенсивности фонового потока запросов, выходящих из ОА, имитирующих работу рабочих станций, в канал;
lф1b – среднее значение интенсивности фонового потока запросов, проходящих через ОА, имитирующих работу сервера и дисков, где b=1/(1–р);
b – среднее количество проходов запроса по тракту процессор-диски за время одного цикла его обработки в системе.
tк – среднее значение времени обработки запроса в канале передачи данных;
tк=0.5(tк1+ tк2 ), где
tк1 – среднее время передачи запроса по каналу в прямом направлении;
tк2 – среднее время передачи запроса по каналу в обратном направлении;
n – количество серверов, обслуживающих рабочие станции;
– количество дисков в сервере, при условии, что все они одинаковые;
Pi – вероятность обращения к i-му диску сервера.
Порядок расчета рассматриваемой системы методом фонового потока
При расчете используется приближённый итерационный алгоритм нахождения значения выходных характеристик рассматриваемой системы
-
Определяем начальное значение для lф1:
К1 принимает значения в диапазоне 0.995…0.99995.
-
Определяем средние времена пребывания запроса в узлах системы: канале, процессорах, дисках:
-
Определяем интенсивность фонового потока после очередной итерации:
-
Сравниваем lф1 и lф. Если
, то переход на пункт 6, иначе на пункту 5.
-
Определяем новое приближённое значение для lф1:
К2 принимает значения в диапазоне 10…1000, .
Переход на пункт 2.
-
Определяем выходные результаты аналитической модели.
Определяем средние времена пребывания запроса в узлах системы: канале, процессорах и дисках.
Определяем загрузку основных узлов системы: рабочей станции, пользователя,канала передачи данных, процессоров и дисков сервера.
загрузка рабочей станции:
загрузка пользователя: где
загрузка канала
загрузка процессора
загрузка дисков где
Листинг программы
private void btnStart_Click(object sender, RoutedEventArgs e)
{
//входные данные
int N = Convert.ToInt32(this.mtxtN.Text);
int PR = Convert.ToInt32(this.mtxtPR.Text);
int D = Convert.ToInt32(this.mtxtDn.Text);
int T0 = Convert.ToInt32(this.mtxtT0.Text);
int Tp = Convert.ToInt32(this.mtxtTp.Text);
int Tk = Convert.ToInt32(this.mtxtTk.Text);
int Td = Convert.ToInt32(this.mtxtTd.Text);
int Tpr = Convert.ToInt32(this.mtxtTpr.Text);
double K1 = Convert.ToDouble(this.mtxtK1.Text);
double K2 = Convert.ToDouble(this.mtxtK2.Text);
double B = 1 / (1 - Convert.ToDouble(this.mtxtPi.Text));
double delta = Convert.ToDouble(this.mtxtD.Text);
double Pi = Math.Pow(Convert.ToInt32(this.mtxtDn.Text), -1);
double _lf1;
double _lf;
double _Tk;
double _Td;
double _Tpr;
int iter = 0;
//шаг 1
_lf1 = K1 * Math.Min(1 / (2 * Tk), Math.Min(PR / (B * Tpr), 1 / (B * Pi * Td))) * (N - 1) / N;
while (true)
{
//шаг 2
_Tk = (2 * Tk) / (1 - 2 * _lf1 * Tk);
_Tpr = (B * Tpr) / (1 - Math.Pow(B * _lf1 * Tpr / PR, PR));
_Td = B * Pi * Td / (1 - B * Pi * _lf1 * Td);
//шаг 3
_lf = (N - 1) / (T0 + Tp + _Tk + _Tpr + _Td);
//шаг 4
if (delta > (Math.Abs(_lf1 - _lf) / _lf))
break;
//шаг 5
_lf1 = _lf1 - (_lf1 - _lf) / K2;
iter++;
}
//шаг 6
_Tk = (2 * Tk) / (1 - 2 * _lf1 * Tk);
_Tpr = (B * Tpr) / (1 - Math.Pow(B * _lf1 * Tpr / PR, PR));
_Td = B * Pi * Td / (1 - B * Pi * _lf1 * Td);
double Tsc = T0 + Tp + _Tk + _Tpr + _Td;
double Rpc = (T0 + Tp) / Tsc;
double a = N / Tsc;
double Rk = 2 * a * Tk;
double Rpr = B * a * Tpr;
double Rd = B * a * Pi * Td;
this.txtRpc.Text = Rpc.ToString();
this.txtRu.Text = (Tp / Tsc).ToString();
this.txtNpc.Text = (N * Rpc).ToString();
this.txtNpcf.Text = (N * Tp / Tsc).ToString();
this.txtRk.Text = Rk.ToString();
this.txtRd1.Text = Rd.ToString();
this.txtRpr.Text = (Rpr / PR).ToString();
this.txtTsc.Text = Tsc.ToString();
this.txtTrs.Text = (Tsc - Tp).ToString();
this.txtIter.Text = iter.ToString();
}
Таблица 38. Результаты аналитического моделирования.
Номер эксперимента | 1 | 2 | 3 | 4 | 5 |
Исходные данные | |||||
Количество рабочих станций | 21 | 21 | 21 | 21 | 21 |
Среднее время дообработки запроса на РС | 210 | 420 | 210 | 210 | 210 |
Среднее время формирования запроса на РС | 210 | 420 | 210 | 210 | 210 |
Среднее время передачи через канал в прямом направлении | 5 | 5 | 10 | 5 | 5 |
Среднее время передачи через канал в обратном направлении | 5 | 5 | 10 | 5 | 5 |
Количество процессоров | 2 | 1 | 1 | 1 | 1 |
Среднее время обработки запроса на процессоре | 10 | 10 | 10 | 20 | 10 |
Количество дисков | 2 | 1 | 1 | 1 | 1 |
Среднее время обработки запроса на диске | 20 | 20 | 20 | 20 | 40 |
Вероятность обращения запроса к диску сервера после обработки запроса в процессоре | 0,8 | 0,8 | 0,8 | 0,8 | 0,8 |
Вероятность обращения запроса к ЦП после обработки на диске | 0 | 0 | 0 | 0 | 0 |
Результаты моделирования | |||||
Загрузка рабочей станции | 0,384 | 0,385 | 0,196 | 0,186 | 0,099 |
Загрузка пользователя рабочей станции | 0,192 | 0,192 | 0,098 | 0,093 | 0,049 |
Среднее количество работающих РС | 8,08 | 8,104 | 4,133 | 3,924 | 2,086 |
Среднее количество РС, формирующих запрос | 4,04 | 4,052 | 2,066 | 1,962 | 1,043 |
Загрузка канала | 0,192 | 0,096 | 0,196 | 0,093 | 0,049 |
Загрузка процессора | 0,48 | 0,482 | 0,492 | 0,934 | 0,248 |
Загрузка диска | 0,961 | 0,964 | 0,984 | 0,934 | 0,993 |
Среднее время цикла системы | 1092 | 2176 | 2134 | 2247 | 4227 |
Среднее время реакции системы | 882 | 1756 | 1923 | 2037 | 4016 |
Количество итераций | 2460 | 2320 | 1427 | 2044 | 1007 |
-
Имитационное моделирование сети
Рис. 73. Формализованная схема рассматриваемой РСОД.
Структура программы
Структура программы имеет следующий вид:
Таблица 4139. Структура программы.
Блоки и метки | Пояснение |
INITIAL | Задание количественных и временных параметров исходных данных моделируемой системы |
STORAGE | Задание многоканальных узлов системы |
FUNCTION | Задание функции распределения запросов по узлам и времени выполнения запросов в узлах |
GENERATE | Генерация количества задач, циркулирующих в системе |
Метка WOSF | Объединяет набор блоков, описывающих формирование запроса на рабочей станции |
Метка CAN | Объединяет набор блоков, описывающих обработку запроса в канале |
Метка SVR | Объединяет набор блоков, описывающих обработку запроса в процессоре |
Метка REP | Объединяет набор блоков, описывающих правило перехода запроса после обработки на диске в канал |
Метка WOSD | Объединяет набор блоков, описывающих дообработку запроса на рабочей станции |
Листинг программы на языке GPSS
INITIAL X$STATION_N,32