Mecanismos de Escalonamento 1.1 Mecanismos de escalonamento O algoritmo de escalonamento decide qual o próximo pacote que será servido na fila de espera. Este algoritmo é um dos mecanismos responsáveis por distribuir a largura de banda da ligação pelos diferentes fluxos (atribuindo a cada fluxo a largura de banda que foi pedida e aceite). Um algoritmo de escalonamento pode ser do tipo work-conserving ou non-workconserving. No primeiro caso, o servidor “trabalha” sempre, isto é, havendo pacotes em espera, eles serão sempre transmitidos. No segundo caso, um nó só pode transmitir um pacote quando este se torna elegível, isto é, quando o tempo necessário para ele se manter em espera termina. Se no nó apenas se encontrarem pacotes não elegíveis em espera, então o servidor manter-se-á inactivo. Este tipo de algoritmos de escalonamento foi projectado para aplicações que não toleram variações no atraso de transmissão. A desvantagem óbvia destes algoritmos é o desperdício de largura de banda durante os períodos em que apenas existem pacotes não elegíveis em espera. A classificação destes algoritmos de escalonamento pode ser efectuada de acordo com os princípios que definem a ordem de envio dos pacotes [Santiago02]: por ordem de chegada, de uma forma estrita, de uma forma rotativa, por aproximação ao sistema de fluídos, e em tempos pré-definidos. 1.1.1 Ordem de chegada O algoritmo de escalonamento que serve os pacotes por ordem de chegada é o FIFO (First In First Out). Este algoritmo é muito simples de implementar mas não permite diferenciação de QdS, assim como não garante a existência de limites máximos nos atrasos. Os fluxos de tráfego que recebem um serviço melhor são os que geram mais tráfego. 1.1.2 Forma estrita Neste algoritmo, o escalonador é constituído por várias filas de espera, cada uma com uma prioridade diferente. Os fluxos são classificados em diferentes níveis de prioridade e associados a uma determinada fila de espera de acordo com a sua prioridade. Este algoritmo serve o tráfego por ordem de prioridade. O tráfego de prioridade mais elevada é servido sempre antes do tráfego com prioridade inferior. Este algoritmo é simples de implementar e permite diferenciação de QdS. No entanto, se não existir nenhum mecanismo de controle de admissão dos fluxos com maior prioridade, uma grande quantidade de pacotes de elevada prioridade pode impedir completamente o serviço de pacotes com menor prioridade (este fenómeno é usualmente denominado de starvation). Este mecanismo de prioridade simples deve ser usado apenas para tráfego que exija garantias muito estritas de QdS. 1.1.3 Forma rotativa Nestes algoritmos, o escalonador é constituído por várias filas de espera com a mesma prioridade e os fluxos são associados a uma determinada fila de espera de acordo com a sua classificação. Estes algoritmos seleccionam o tráfego de uma forma rotativa. No algoritmo mais simples, Round Robin (RR), o sistema selecciona um pacote de cada fila de espera de uma forma rotativa. Este algoritmo é também muito simples mas favorece os fluxos que contêm pacotes com maior comprimento, pois o pacote é servido independentemente do seu comprimento. Existem algumas variantes deste sistema que permitem utilizar pacotes de tamanho variável sem prejudicar os mais pequenos, e ainda, atribuir uma largura de banda pesada a cada fila de espera. De entre esses mecanismos destacam-se o Weighted Round Robin (WRR) e o Deficit Round Robin (DRR). 1.1.4 Aproximação do sistema de fluídos Este conjunto de algoritmos pressupõe também a existência de escalonadores com várias filas de espera, e distribui a largura de banda pelas diversas filas de espera de uma forma pesada ou de uma forma equitativa (Fair Queuing) mas sem a noção de rotatividade. Estes algoritmos tentam emular, num sistema de pacotes, o sistema de fluídos denominado de Generalized Processor Sharing (GPS). Qualidade de Serviço em Redes IP 1.1.4.1 GPS No GPS o tráfego é considerado como sendo infinitamente divisível. Esta característica permite considerar que as várias filas de espera são servidas simultaneamente. Cada fila de espera utiliza, em cada instante, uma percentagem da capacidade da ligação que é proporcional a um peso que lhe é atribuído. Considere-se que Γ é o conjunto de filas de espera, e Γ’ ⊆ Γ é o conjunto das filas de espera não vazias durante o intervalo de tempo (τ,t). Assume-se que a taxa de serviço é C, e que a cada fila de espera i é associado um peso φi. Numa disciplina GPS, em qualquer intervalo (τ,t) a fila de espera i recebe uma taxa mínima garantida proporcional ao seu peso dada por Cφ i / ∑ j∈G ' φ j . Além disso, a uma fila i que tenha continuamente tráfego para transmitir é garantida uma taxa mínima proporcional ao seu peso, dada por ci = φi ∑ j∈G φ j C (1) 1.1.4.2 WFQ O algoritmo WFQ (Weighted Fair Queuing), também denominado de Packet Generalized Processor Sharing (PGPS) tenta emular, numa rede de pacotes, o sistema GPS. No WFQ, um pacote é servido pela mesma ordem que seria servido se o servidor estivesse a executar a disciplina GPS. No WFQ é necessário calcular o instante em que o pacote deixaria o servidor num sistema GPS. Os pacotes vão posteriormente ser servidos por ordem destes instantes de partida. No caso geral, sendo Fi k o instante de partida do pacote k pertencente à fila de espera i, [ ] Fi k = max Fi k −1 ,V (t ) + lik φi (2) em que lik é o comprimento do pacote k pertencente à fila de espera i e V(t) é o chamado round number. O cálculo da função V(t) é bastante complexo, sendo difícil a sua implementação em routers de elevado débito. Existem outros algoritmos de escalonamento que são variantes do WFQ, os quais são menos complexos e utilizados na maior parte das implementações. De entre os algoritmos destacam-se o Self-Clocking Fair Queuing (SCFQ) e o Virtual Clock (VC). 1.1.4.3 SCFQ O SCFQ propõe uma aproximação simples para calcular o instante de partida no correspondente sistema GPS. Quando um pacote chega a uma fila de espera vazia, o SCFQ usa como V(t) o instante de partida do pacote que está nesse momento em serviço (Factual). O instante de partida é então dado por [ ] Fi k = max Fi k −1 , Factual + lik φi (3) Este algoritmo é de fácil implementação em redes de elevado débito, mas pode em alguns casos específicos, não ser justo em pequenos intervalos de tempo. 1.1.4.4 VC O VC tenta emular um sistema TDM (Time Division Multiplexing). No VC, a função V(t) é substituída pelo instante de chegada do pacote, se a fila de espera se encontrar vazia. A reserva de uma taxa de serviço para cada fila de espera é efectuada por um valor Ei, acordado previamente entre as fontes de tráfego e o servidor, que representa o valor esperado para os intervalos entre chegadas à fila de espera i. O servidor atende as filas de espera por ordem do tempo virtual baseado no parâmetro Ei. O tempo virtual é o instante em que o pacote seria transmitido se essa transmissão fosse TDM. O tempo virtual do pacote k na fila de espera i é dado pela seguinte expressão: [ ] VTi k = max VTi k −1 ,Tempo + Ei (4) em que Tempo é o instante de chegada do pacote k à fila de espera i. A implementação deste algoritmo é bastante simples. Além disso, prova-se que uma rede com servidores VC pode oferecer as mesmas garantias de atraso a um fluxo que uma rede com servidores WFQ. No entanto, em determinadas situações, o VC pode não ser uma disciplina justa: o VC tem o problema de punir os fluxos que, durante algum tempo, são servidos a uma taxa superior à taxa previamente acordada e definida pelo parâmetro Ei. Qualidade de Serviço em Redes IP 1.1.5 Tempos pré-definidos Este conjunto de algoritmos é do tipo non-work conserving. A cada pacote é associado um tempo elegível e um tempo limite. Os pacotes só podem ser servidos depois de o instante de tempo actual exceder o tempo elegível do pacote. Deste modo, garante-se que todos os pacotes de um mesmo fluxo têm aproximadamente o mesmo atraso. O escalonador ordena os pacotes elegíveis para transmitir com base nos seus tempos limite. Os algoritmos de escalonamento apresentados nesta secção são o Jitter-Virtual Clock (JVC) e o Core-JitterVirtual Clock (CJVC). 1.1.5.1 JVC No JVC, o tempo elegível do pacote k da fila de espera i no nó j é dado por: TEi1, j = TCi1, j (5) [ TEik, j = max TCik, j + TSLki , j −1 , TLki ,−j1 ] (6) em que TCik, j é o tempo de chegada do pacote ao nó j, TSLki , j −1 é a diferença entre o tempo limite e o instante em que o pacote foi transmitido no nó anterior, e TLki ,−j1 é o tempo limite do pacote anterior. Note-se que o parâmetro TSLki , j −1 não é do conhecimento do nó j, e por isso este parâmetro tem de ser marcado no pacote k. O tempo limite do pacote no nó j é dado por TLki , j = TEik, j + lik ci (7) Este algoritmo tenta minorar a variação no atraso dos pacotes. Se um pacote for transmitido muito tempo antes do tempo limite num determinado nó, ele vai ter de esperar algum tempo no nó seguinte para compensar esse facto. Prova-se que uma rede com JVC fornece as mesmas garantias de atraso que uma rede com VC, por isso o JVC fornece as mesmas garantias que o WFQ.