Professional Documents
Culture Documents
Juazeiro, 2019
MAURÍCIO SILVA SOARES
Juazeiro, 2019
1
RESUMO
Este trabalho faz uma comparação das análises de um mesmo sistema de fila,
utilizando-se das técnicas QSN-RI e Análise do Valor Médio. Para a aplicação das
técnicas utilizou-se de algoritmos desenvolvidos em C++, em ambas. Sendo o
sistema de filas o mesmo para as duas técnicas. Esse sistema é composto por um
roteador, um notebook, um switch, um servidor de backup e uma impressora. Então
fez-se a comparação entre os tempos de utilização, tamanho das filas e tempo de
resposta para cada técnica de análise.
2
LISTA DE FIGURAS
3
LISTA DE TABELAS
4
SUMÁRIO
1. INTRODUÇÃO 6
1.1 CÁLCULOS 6
2. RESULTADOS 8
2.1 QSN-RI 8
2.2 ANÁLISE DO VALOR MÉDIO 12
3. ANÁLISES E GRÁFICOS 14
REFERÊNCIAS 15
5
1. INTRODUÇÃO
Este trabalho faz uma comparação entre dois métodos para análise de
sistema de filas. As técnicas utilizadas são o QSN-RI e Análise do Valor Médio. Para
aplicação dessas técnicas, utilizou-se de algoritmos desenvolvidos em C++, os
quais podem ser encontrados em anexo neste documento.
A rede em análise é composta por cinco elementos, são eles: um roteador,
um notebook, um switch, um servidor de backup e uma impressora. Para facilitar no
desenvolvimento de rede e sua análise atribui-se uma aplicação para a mesma, que
tem como objetivo receber arquivos, mais especificamente fotos, podendo ser
pacotes de documentos de texto, então os armazena no computador
central(notebook) responsável pelos downloads, criam-se cópias de backup e então
as imprime. Uma rede como essas pode ser aplicada em uma gráfica por
exemplo(ver Figura 1).
1.1 CÁLCULOS
Para a realização da simulação, faz-se necessário saber o caminho do
pacote de dados. Para o caso aqui discutido, a sequência é a seguinte: 0, 1, 0, 2, 3,
2, 4. O pacote contém 5 fotos para backup e impressão, cada foto com 5MB, tendo
assim um tamanho total de 25MB, o que resulta em 200Mb.
Para o cálculo de iat(interarrival time) considerou-se que a cada minuto
chegavam seis documentos, resultando assim em um iat de 10s/doc. Como o único
iat necessário é o inicial, o próximo passo é calcular o st(service time) para cada
componente da rede. Para isso utiliza-se como base os valores da tabela a seguir
(Tabela 1):
6
Tabela 1 - Desempenho dos equipamentos em MB e Mb.
EQUIPAMENTO DESEMPENHO
0 Roteador 1.33333 2
1 Notebook 0.337837 1
2 Switch 2 2
3 Backup 0.18115942 1
4 Impressora 7.5 1
7
2. RESULTADOS
A partir das informações anteriores e dos valores calculados, faz-se possível
executar as análises através do QSN-RI e Análise do Valor Médio. Então, os
resultados entregues pelos algoritmos executados poderão ser comparados.
2.1 QSN-RI
Nas tabelas seguintes, estão listados os resultados utilizando o algoritmo QSN-RI,
para 10 repetições do experimento. As tabelas estão dispostas na organização: primeiro os
resultados do experimento e na tabela seguinte, os cálculos estatísticos, para os resultados
de tamanho médio da fila(E[nq]), tempo médio de espera na fila(E[w]), e utilização para
cada equipamento que compõe o sistema.
Os dados aqui representados são o tamanho médio da fila, E[nq]n (Tabela 3), na
Tabela 4 estão as análises estatísticas para esses dados.
8
amostra
9
4 0,194 0,010 0,498 0,004 21,763
10
Percentil 10% 0,194 0,01 0,4665 0,002 16,6683
11
Média 0,1330948 0,0345813 0,19897068 0,0180839 0,7477754
harmônica da 09735565 45857489 4872134 81337481 89435852
amostra
12
2 0,266 0,03 0,423 0,0159 0,916
13
... ... ... ... ... ...
14
3. ANÁLISES E GRÁFICOS
Ao analisar as utilizações do sistema Un, com a AVM, percebe-se que a
impressora, que é o equipamento final do sistema, possui alta utilização, chegando
em 100% e causando um estrangulamento. Mostrando que para altas quantidades
de usuários no sistema, ele tende a entrar em estrangulamento devido ao gargalo
causado pela impressora. Ao analisar a média das N repetições, encontra-se uma
utilização de 99,94%, o que é inaceitável considerando que as utilizações não
devem ultrapassar a casa dos 70%. Então, fica claro que o sistema não suporta tal
quantidade de tarefas, pois ao observar os resultados da Tabela 11, já na tarefa 6 a
utilização atinge 75,4%.
Observando a utilização da impressora, mas com os resultados do QSN-RI,
encontramos uma média mais baixa que no AVM, sendo igual a 74,86%, uma
diferença considerável, dado que no AVM o equipamento rapidamente se torna o
gargalo.
No gráfico seguinte(Figura 2), é possível ver o comportamento da utilização
da impressora com o aumento de requisições no sistema.
Para esse gráfico o número de usuários foi limitado para 500, essa decisão
foi tomada porque ao utilizar de todo o espectro de requisições, a curva da utilização
não ficava evidente. Além do mais, desde muito antes desse valor, o equipamento já
se encontrava em 100% de utilização.
15
Gráfico do tempo de resposta da impressora por número de usuários
16
4. CONCLUSÕES
Percebe-se uma grande discrepância entre os resultados obtidos à partir das
análises. Ao se comparar a utilização média da impressora para cada algoritmo,
percebe que a utilização se mostra muito maior para o AVM.
Era esperado que os valores de utilização fossem altos, e que pela
quantidade de tarefas, em algum momento iria ocorrer um gargalo no sistema. O
que pode ser claramente visto no AVM, pois a partir da tarefa de número 2002, o
sistema já se encontrava em utilização máxima. Não é possível observar isso com o
QSN-RI, apenas comparar as médias entre cada um, as quais já se mostraram
discrepantes, e de acordo com o comportamento esperado o AVM se mostrou muito
mais condizente com uma situação real.
No quesito tempo de espera(r) é encontrado um valor maior que o dobro para
o tempo de fila(w). Mas isso é esperado, dado que o tempo de espera inclui o tempo
de serviço(st), de modo que r=w+s. Assim não é possível fazer uma comparação
direta entre esses resultados.
De qualquer modo, as dua técnicas de análise encontram o mesmo
problema, um gargalo na impressora. O que já era esperado, dado que este é um
dispositivo mecânico com alta latência. Para minimizar isso, recomenda-se a
aquisição de mais impressoras.
17
REFERÊNCIAS
18
ANEXO
Código QSN-RI
//----------------------------------------------------------------
-------------
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
#include <sstream>
//----------------------------------------------------------------
-------------
using namespace std;
//----------------------------------------------------------------
--------------
typedef long double real;
//----------------------------------------------------------------
--------------
class clEvent{
public:
int nq;
real iat, st, at, bs, es, idt;
};
//----------------------------------------------------------------
--------------
class clQS{
public:
real l, m, T, U, E[7], V[7];
vector<clEvent> Event;
};
//----------------------------------------------------------------
--------------
class clQSN{
private:
size_t s;
vector<size_t> S;
real F ( real );
19
void O pen ( size_t, s ize_t );
void C lose ( s
ize_t, s ize_t );
void N q ( v oid );
public:
vector<clQS> QS;
20
// Nq(i);
}
Xa = QS[i].Event[ QS[i].Event.size()-1 ];
X.iat = Xa.idt;
X.st = F( QS[f].m );
Xa = QS[f].Event[ QS[f].Event.size()-1 ];
X.at = Xa.at + X.iat;
X.bs = X.at > Xa.es ? X.at : Xa.es;
X.es = X.bs + X.st;
X.idt = X.es - Xa.es;
QS[f].Event.push_back(X);
// Nq(f);
}
void clQSN::Close( size_t i, size_t f ){
clEvent X, Xa;
Xa = QS[i].Event[ QS[i].Event.size()-1 ];
X.iat = Xa.idt;
X.st = F( QS[f].m );
Xa = QS[f].Event[ QS[f].Event.size()-1 ];
X.at = Xa.at + X.iat;
X.bs = X.at > Xa.es ? X.at : Xa.es;
X.es = X.bs + X.st;
X.idt = X.es - Xa.es;
QS[f].Event.push_back(X);
// Nq(f);
}
void clQSN::Nq( void ){
for( size_t qs = 0; qs < QS.size(); qs++ ){
for( size_t e = 1; e < QS[qs].Event.size(); e++ ){
size_t c = e-1;
QS[qs].Event[e].nq = 0;
while( QS[qs].Event[e].at < QS[qs].Event[c].es ){
QS[qs].Event[e].nq += 1;
c--;
}
}
}
}
21
void clQSN::Simulate( int N ){
for( size_t i = 0; i < s; i++ )
QS[ S[i] ].Event.push_back({0,0,0,0,0,0,0});
for( int e = 1; e < N; e++ ){
for( size_t i = 1; i < s; i++ ){
Open(S[i-1],S[i]);
//Close(S[i-1],S[i]);
}
}
}
void clQSN::Statistic( int Ni ){
Nq();
for( size_t qs = 0; qs < QS.size(); qs++ ){
size_t N = QS[qs].Event.size();
real x[7], Sx[7], Sxx[7];
for( size_t s = 0; s < 7; s++ )
Sx[s] = Sxx[s] = 0.0;
for( size_t e = Ni; e < N; e++ ){
clEvent X = QS[qs].Event[e];
x[0] = X.iat ;
x[1] = X.st ;
x[2] = X.nq ;
x[3] = X.idt ;
x[4] = X.bs-X.at; //w
x[5] = X.es-X.bs; //s
x[6] = X.es-X.at; //r
for( int s = 0; s < 7; s++ ){
Sx [s] += x[s];
Sxx[s] += x[s]*x[s];
}
}
QS[qs].T = QS[qs].Event[N-1].es-QS[qs].Event[Ni-1].bs;
QS[qs].U = Sx[1]/QS[qs].T;
for( int s = 0; s < 7; s++ ){
QS[qs].E[s] = Sx [s]/(N-Ni);
QS[qs].V[s] = Sxx[s]/(N-Ni)-QS[qs].E[s]*QS[qs].E[s];
}
}
}
string RI( void ){
int R = 10,
22
N = 15000,
Ni = 0.9*N,
qs = 5,
s = 7;
std::vector<size_t> S;
S.reserve(7);
S.push_back(0);
S.push_back(1);
S.push_back(0);
S.push_back(2);
S.push_back(3);
S.push_back(2);
S.push_back(4);
std::vector<real> D;
D.reserve(6);
D.push_back(10);
D.push_back(1.3333);
D.push_back(0.337837);
D.push_back(2);
D.push_back(0.18115942);
D.push_back(7.5);
clQSN QSN[R];
stringstream str;
<html><body>"
str << "
<< " <br>QSN Table"
23
<br>QS Number:" << qs
<< "
<< " <br>Sequence:";
for( i
nt r = 0; r < R; r++ ){
str << "<tr><td>" << r+1;
for( size_t qs = 0; qs < QSN[r].QS.size(); qs++ ){
str << "<td>" << qs
<< "<td>" << QSN[r].QS[qs].T
24
// << "<td>" << QSN[r].QS[qs].E[0] //
iat
// << "<td>" << QSN[r].QS[qs].E[1] //
st
<< "<td>" << QSN[r].QS[qs].E[2] //
nq
// << "<td>" << QSN[r].QS[qs].E[3] //
idt
<< "<td>" << QSN[r].QS[qs].E[4] // w
// << "<td>" << QSN[r].QS[qs].E[5] // s
// << "<td>" << QSN[r].QS[qs].E[6] // r
// << "<td>" << QSN[r].QS[qs].V[0]
// << "<td>" << QSN[r].QS[qs].V[1]
// << "<td>" << QSN[r].QS[qs].V[2]
// << "<td>" << QSN[r].QS[qs].V[3]
// << "<td>" << QSN[r].QS[qs].V[4]
// << "<td>" << QSN[r].QS[qs].V[5]
// << "<td>" << QSN[r].QS[qs].V[6]
<< "<td>" << QSN[r].QS[qs].U;
// << "<td>" << 1.0-QSN[r].QS[qs].U;
}
}
return str.str();
}
int main( void ){
string str = RI();
ofstream fo;
fo.open("out.QSN.MM1-RI-C++.html");
replace(str.begin(), str.end(),'.',',');
fo << str;
fo.close();
return 0;
}
//----------------------------------------------------------------
--------------
25
------------------------------------------------------------------
--
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <ctime>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
//
------------------------------------------------------------------
--
using namespace std;
//
------------------------------------------------------------------
--
R, X, Z = 4.0;
stringstream ss;
ss << setprecision(3);
26
ss << "n;R0;R1;R2;R3;R4;R;X;Q0;Q1;Q2;Q3;Q4;U0;U1;U2;U3;U4;" <<
endl;
Q0 = Q1 = Q2 = Q3 = Q4 = 0.0; // n = 0;
for( i
nt n = 1; n <= N; n++ ){
R0 = S0*(1.0 + Q0);
R1 = S1*(1.0 + Q1);
R2 = S2*(1.0 + Q2);
R3 = S3*(1.0 + Q3);
R4 = S4*(1.0 + Q4);
Q0 = X*R0*V0;
Q1 = X*R1*V1;
Q2 = X*R2*V2;
Q3 = X*R3*V3;
Q4 = X*R4*V4;
U0 = Q0/(1+Q0);
U1 = Q1/(1+Q1);
U2 = Q2/(1+Q2);
U3 = Q3/(1+Q3);
U4 = Q4/(1+Q4);
27
replace(str.begin(), str.end(),'.',',');
fo.open("MVA-MS.csv");
fo << str;
fo.close();
return 0;
}
28