Simulação de Filas Marcus Vinicius de Oliveira [email protected] DMAT - Universidade Federal de Minas Gerais 13 de dezembro de 2011 Resumo O objetivo deste trabalho é apresentar um algorı́tmo de simulação de filas M/M/n, com a implementação para uma fila M/M/2. O algorı́tmo segue a metodologia apresentada em [1]. A implementação foi realizada em MATLAB (código anexo). O objetivo é obter o comprimento médio das filas e o tempo médio de espera em função das taxas de chegada e partida. 1 Introdução A Teoria de Filas encontra aplicações nos mais diversos ramos, seja para a otimização de filas em seu sentido mais popular (de um banco por exemplo), seja em sistemas computacionais para organização de acesso à CPU, disco, memória e outros recursos. Dessa forma, os clientes podem ser pessoas, processos, threads, jobs, pacotes, transações de bancos de dados, etc. A razão pela qual as filas existem é óbvia: a demanda de serviço é maior que a capacidade de atendimento do sistema. A Teoria de Filas é um ramo da probabilidade que estuda o fenômeno de formação de filas de solicitantes de serviços, fonecidos por um determinado recurso. Permite estimar importantes medidas de desempenho de um sistema a partir de propriedades mensuráveis das filas, possibilitando seu dimensionamento segundo as demandas dos clientes, evitando desperdı́cios e inúmeros problemas. O comportamento estocástico das filas será analisado e simulado neste trabalho, visando obter resultados como o tempo médio de permanência na fila até que o cliente seja atendido. As filas que serão abordadas neste trabalho são do tipo M/M/n em que esta notação indica as caracterı́sticas da fila: Markov/Markov/(n servidores), idicando que o processo de chegada é Markoviano, a distribuição dos tempor de serviço é exponencial, Markoviana, e existem n servidores. Esta notação é denominada Notação de Kendall. 2 Modelagem de uma fila Uma fila basicamente é um servidor que fornece um serviço aos clientes, formando-se uma fila até que o cliente seja atendido. Naturalmente podem existir vário servidores. Nas 1 próximas seções apresentaremos duas topologias de fila, a saber M/M/1 e M/M/n. Em ambos os casos as filas são únicas e os servidores são iguais a n. 2.1 Filas M/M/1 Nesta topologia existe apenas um servidor disponı́vel para atender aos clientes. A chegada de clientes segue um processo de Poisson com taxa λ e portanto o tempo entre duas chegadas tem distribuição exponencial de parâmetrp λ. A figura 2.1. Os clientes chegam a uma taxa λ e portanto o tempo médio entre duas chegadas de clientes é igual a 1/λ, ao passo que a taxa de serviço será denotado por µ, e analogamente o tempo médio de serviço é 1/µ. Define-se intensidade de trafego como a razão entre as taxas de chegada e de partida. ρ= λ µ (1) Figura 1: Esquema de uma fila M/M/1 Note que a propriedade de Markov é verificada para a quantidade de clientes na fila, uma vez que trivialmente vale que: N (t + h) = N (t) + A(h) − D(h) em que N (t) é o número de clientes na fila no tempo t, A(h) é o número de clientes que chega à fina no intervalo (t, t + h) e D(h) é o número de pessoas que sai da fila no intervalo (t, t + h). Como tanto A quanto D só dependem de h, como a própria notação sugere, a propriedade de Markov é válida. 2.2 Filas M/M/n Uma fila M/M/n é uma fila que tem n servidores disponı́veis para atender aos clientes. O esquema desta topologia é apresentado na figura 2.2. Nas simulações, assume-se inicialmente que a taxa de chegada é igual a 1000bps (bits por segundo), nomenclatura que se justifica pela aplicação em tráfego de redes. Fixada uma taxa de chegada, assume-se que os servidores tem ambos o mesmo desempenho, sendo a taxa de serviço variada através da variação da intensidade de tráfego. 2 Figura 2: Esquema de uma fila M/M/2 2.3 O algorı́tmo O algorı́tmos pode ser apresentado pelo fluxograma da figura 2.3. A implementação foi realizada como apresentado em [1].Inicialmente verifica-se o servidor que tem o evento de partida mais próximo. Se for um evento de partida, ou seja se o valor corrente de AT for menor que DT para ambos os servidores então será um evento de partida, sendo acionado o bloco evento de chegada. Caso contrario será disparado um evento de partida. Para disparar o evento de partida é necessário escolher qual é o servidor que apresenta este evento mais próximo, como pode ser observado no código anexo. Figura 3: Algorı́tmo para simulação de uma fila M/M/n No caso em que existem k servidores, existem k pessoas sendo servidas ao mesmo tempo e como cada uma é servida com taxa µ, então a taxa de serviço é igual a kµ. Isso significa que é possı́vel modelar a fila como um processo birth-and-death com λn = λ e: 3 µn = nµ, n ≤ k kµ, n ≥ k (2) A figura 2.3 apresenta um diagrama de transição de estados para modelagem de uma fila M/M/m. Basicamente ela apenas traduz o que está apresentado na equação2. Pela figura é fácil ver que a condição de espabilidade da fila é que mµ > λ. Figura 4: Modelagem de uma fila markoviana M/M/m O fluxograma de processamento de chegada e partida não serão apresentados e podem ser consultados em [1]. Em anexo estão descritos detalhadamente as definições das variáveis de interesse, também seguindo o proposto por [1], além de todo o código utilizado na simulação. Estes resultados também podem res obtidos utilizando-se o modelo em simulink na figura Figura 5: Modelo em Simulink para M/M/m Os resultados apresentados na seção anterior foram obtidos utilizando os códigos anexos, não o modelo acima, que pode ser encontrado na toolbox Simevents mo Matlab. É possı́vel variar os parâmetros da fila e verificar o comportamento e a estabilidade da fila, além de variar a quantidade de servidores. Há ainda a possibilidade de implementar com maior facilidade uma situação em que os servidores não sejam homogêneos, o que não é contemplado neste trabalho. 3 Resultados Nesta seção serão apresentados os resultados de simulação de uma fila M/M/2, como os apresentados em [1], além de comparações com resultados teóricos, que serão assumidos sem demonstração. Para o funcionamento correto dos códigos deve-se atentar para o nome de cada arquivo. 4 Figura 6: Curva de tempo médio de espera em função da intensidade de tráfego ρ As formulas analı́ticas para o tempo médio, e para o comprimento da fila permitem a validação dos resultados obtidos experimentalmente. Os parâmetros ρ e λ correspondem à intensidade de trafego e taxa de chegada, respectivamente, e n é o número de servidores. A equação 3 fornece os valores de Tq em ms. Tq = p0 = ρn (ρ/n) p0 n!(1 − ρ/n)2 " n−1 X ρk k=0 ρn 1 + k! n! 1 − ρ/n (3) #−1 Nq = λTq h i−1 h 2 1 Para o caso n = 2, tem-se que p0 = 1 + ρ + ρ2 1−ρ/2 = 1+ρ+ 5 (4) (5) ρ2 2−ρ i−1 . Figura 7: Comparação de tempo médio entre o resultado experimental e a expressão teórica (3) Pela figura 3, observa-se que os resultados experimentais são bastante próximos das expressões teóricas apresentadas em [1]. Nota-se que quanto maior for a intensidade de tráfego, ou seja, a razão entre as taxas de chegada e de partida, maior será o tempo médio de espera, o que é absolutamente natural e intuitivo. Já ao aumentar a quantidade de servidores, espera-se que o tempo médio de espera deve aumentar para um mesmo ρ. Como pode ser observado, os valores de ρ simulados foram limitados a 1.9. Isso se justifica pelo fato de que se a taxa de chegada for maior que duas vezes a taxa de partida, ou seja se ρ > 2 a fila crescerá arbitrariamente. Isso pode ser confirmado pela equação 3, uma vez que: lim− ρ→n ρn nρ n! 1 − p ρ 2 0 n =∞ Deve-se argumentar porém que à medida que ρ se aproxima de n à esquerda o denominador da expressão diminui com expoente quadrado, ao passo que p0 também diminui porém em primeira ordem, fazendo com que Tq cresca arbitratiamente. Como para ρ > n a tendência seria a mesma, tem-se que para estabilizar a fila é necessário impor ρ < n. A figura 3 apresenta o comprimento médio da fila em função do parâmetro ρ. Os resultados experimentais corroboram a expressão analı́tica, equação 5. O comprimento médio da fila aumenta arbitrariamente à medida que se ρ se aproxima de n(= 2). 6 Figura 8: Comparação de comprimento médio entre o resultado experimental e a expressão teórica (5 4 Conclusão Verificou-se que o algorı́tmo proposto por [1] apresenta ótimo desempenho para simulação de filas do tipo M/M/n, em particular para n = 2, configuração para a qual os testes foram realizados. Verficou-se as condições necessárias para a estabilidade da fila, bem como a dependência do tempo médio de espera e do comprimento da fila com a intensidade de trafego (ρ). As compatações entre expressões teóricas e resultados experimentais foram altamente satisfatórias. 5 Código MATLAB utilizado nas simulações Utilizando o algorı́tmo proposto por [1] foi implementado o seguinte código em MATLAB com o qual obteve-se os resultados apresentados. % Trabalho Final de Processos Estocásticos - UFMG % Marcus Vinicius de Oliveira % % % % % % % % % % -----------------------Definiç~ oes das variáveis -----------------------DT[j] : Tempo de Partida, j=1,2 BS[j] : Servidor ocupado, j=1,2 (Variável booleana) QL : Comprimento da fila ART : Tempo médio de chegada SERT : Tempo médio de serviço (assumido id^ entico para ambos CLK : Clock global da simulaç~ ao CITs : Intervalo entre chegada de clientes (aleatório) 7 % CST % TWT % NMS : Intervalo entre atendimento de clientes (aleatório) : Tempo total de espera : Número total de clientes atendidos % -------------------------------------------------------------------- clc; close all; %clear all; % Definiç~ oes RHO = i; Taxa_chegada = 1000; ART = 1/Taxa_chegada; Taxa_servico = Taxa_chegada/RHO; SERT = 1/Taxa_servico; Tfinal = 200; % Inicializaç~ ao de variáveis CLK = 0; QL = 0; TWT = 0; NMS = 0; AT = 0; BS = [false;false]; DT = [1e25;1e25]; stop = false; while (stop == false) % Analisa se é um evento de chegada ou de partida x = [AT;AT] - DT; if(x<[0;0]) evento = {’chegada’;0}; % Atualiza o evento processa_chegada; % Processa a chegada else server = find(DT == min(DT)); % Escolhe servidor melhor evento = {’partida’;server}; % Atualiza o evento processa_partida; % Processa a partida end; if (CLK >= Tfinal) stop = true; resultados 8 end; end; % Código de processamento de partida TWT = TWT + QL*(DT(server)-CLK); CLK = DT(server); BS(server) = false; NMS = NMS + 1; if(QL > 0) BS(server) = true; QL = QL-1; DT(server) = CLK - SERT*log(rand); else DT(server) = 1e25; end; % Código de processamento de chegada TWT = TWT + QL*(AT-CLK); CLK = AT; AT = CLK - ART*log(rand); if(BS == [true;true]) QL = QL+1; else server = min(find(BS == false)); BS(server) = true; DT(server) = CLK - SERT*log(rand); end; % Gera gráficos para relatório a partir da simulaç~ ao k = 1; j = 0.1:0.1:1.9; for i=0.1:0.1:1.9 trabalho_est; Tempo_medio(k) = Tempo_medio_espera; Comprimento_medio(k) = Comp_medio; k = k+1; end; plot(j,Tempo_medio); 9 Referências [1] SADIKU, M. N and TOFIGHI, M. R.A Tutorial on Simulation of Queueing Models, International Journal of Electrical Engineering Education, vol. 36, pp. 102-120, 1999 10