Otimizando o Desempenho do SimRWA 2.0 usando a Técnica de

Transcrição

Otimizando o Desempenho do SimRWA 2.0 usando a Técnica de
Otimizando o Desempenho do SimRWA 2.0 usando a
Técnica de Profiler para Identificação de Gargalos
Gilvan M. Durães1, André C. B. Soares, William F. Giozza
NUPERC – Universidade Salvador – UNIFACS
R. Ponciano de Oliveira, 126, Rio Vermelho – 41950-275 – Salvador, BA – Brazil
[email protected], {andre.soares, giozza}@unifacs.br
Abstract. The SimRWA is a simulation tool for RWA (Routing and Wavelength
Assignment) algorithms and survivability technique in all optical networks. In
this paper the profiler technique is used to identify bottlenecks in the source
code of SimRWA. Once identified the main bottlenecks, they were eliminated,
resulting in a response time reduction of about 35%.
Resumo. O SimRWA é uma ferramenta para simulação de algoritmos RWA e
de técnicas de sobrevivência em redes ópticas transparentes. Este artigo
apresenta uma otimização do desempenho do SimRWA usando a técnica de
profiler para a identificação de gargalos do código. Os resultados alcançados
implicaram numa redução de aproximadamente 35% no tempo de resposta do
SimRWA.
Palavras-Chave: redes ópticas, simulador, profiler.
1. Introdução
Atualmente tem sido desenvolvida uma nova geração de redes de transporte baseada em
uma infra-estrutura óptica inteligente que utiliza a multiplexação WDM – Wavelength
Division Multiplexing. Essa nova tecnologia de redes, chamada de redes ópticas, é
apontada como um dos principais veículos para atender, de forma satisfatória, a
crescente demanda de banda passante nas redes de transporte, provocada pelo
crescimento do número de usuários da Internet e o surgimento de novas aplicações
envolvendo voz e vídeo como vídeo sob demanda, teleconferência, imagens médicas de
alta resolução, etc.
As redes ópticas podem ser classificadas em opacas ou transparentes
[Ramaswami e Sivarajan, 1998]. As redes ópticas opacas realizam roteamento no nível
eletrônico sendo necessária a utilização de conversores OEO – Óptico-Eletro-Óptico.
As redes ópticas transparentes realizam roteamento no nível óptico eliminando os
conversores OEO. Os conversores OEO são responsáveis pela inserção de atrasos de
processamento além de aumentar o custo dos equipamentos [Mouftah e Ho, 2002]. Por
isso a evolução das redes ópticas aponta para as redes ópticas transparentes.
No estabelecimento de uma conexão entre dois nós através de uma rede óptica
transparente é necessário escolher uma rota e alocar um comprimento de onda. Esse
problema é conhecido na literatura como o problema RWA – Routing and Wavelength
1
Bolsista de Iniciação Científica (PIBIC FAPESB), aluno do curso de Ciência da Computação da
Universidade Salvador.
Assignment. O problema RWA pode ser classificado em estático ou dinâmico [Soares e
Giozza, 2004]. O problema RWA estático tem como objetivo minimizar o número de
comprimentos de onda necessários para atender um conjunto de conexões conhecidas
previamente. Já no problema RWA dinâmico, as conexões não são conhecidas
previamente. Nesse caso o objetivo é selecionar uma rota e alocar um comprimento de
onda, minimizando a probabilidade de bloqueio de futuras conexões, dado um conjunto
de comprimento de onda.
Na ausência de conversores de comprimento de onda, uma conexão deve utilizar
o mesmo comprimento de onda em todos os enlaces físicos que compõem o caminho
óptico. Essa propriedade é conhecida como continuidade obrigatória de comprimento de
onda.
Conversores de comprimento de onda são dispositivos localizados nos nós da
rede óptica que possibilitam a conversão de um comprimento de onda de entrada em
outro comprimento de onda de saída. Esses dispositivos permitem uma melhor
utilização dos comprimentos de onda, minimizando a probabilidade de bloqueio de
conexões [Chu et al., 2003].
Conversores de comprimento de onda são dispositivos ainda caros. Uma
alternativa para eliminar os custos dos conversores de comprimento de onda é a adoção
de algoritmos de alocação de comprimento de onda. Esses algoritmos devem minimizar
a probabilidade de bloqueio de futuras conexões numa rede óptica transparente. Vários
trabalhos recentes demonstram que os algoritmos de roteamento e alocação de
comprimento de onda são os principais instrumentos para diminuir a probabilidade de
bloqueio em redes ópticas transparentes [Pan HW DO, 2003] [Zang et al., 2000] [Barry e
Subramaniam, 1997].
Dada a complexidade da solução analítica para o cálculo da probabilidade de
bloqueio de conexões em redes ópticas transparentes e a inexistência de sistemas reais
disponíveis para a realização de medições, é indispensável a utilização de simuladores
de redes ópticas para a realização destes estudos.
O SimRWA é uma ferramenta para simulação de algoritmos de alocação de
comprimentos de onda e rotas em redes ópticas transparentes permitindo comparar esses
algoritmos sob diferentes condições de tráfego e utilizando topologias genéricas [Soares
et al.,2004]. Além disso, o SimRWA possibilita o estudo dos algoritmos de roteamento
e alocação de comprimentos de onda sob o dimensionamento do número e do tipo de
transmissores e receptores nos nós da rede óptica [Soares et al.,2005c] e sob diferentes
técnicas de sobrevivência [Soares et al., 2005b]. Ele foi desenvolvido utilizando a
linguagem de programação JAVA.
O uso do SimRWA para estudos de redes ópticas modelando cenários
complexos requer altos tempos de resposta, mesmo utilizando máquinas com um alto
poder de processamento. Diante disso, surge o interesse em otimizar a ferramenta com o
objetivo de diminuir o tempo de resposta.
Este artigo descreve os passos da aplicação da técnica profiler no SimRWA e
como a técnica de profiler contribuiu para identificação de gargalos no SimRWA. Além
disso, são detalhadas as modificações realizadas com o objetivo de eliminar e/ou reduzir
os gargalos identificados.
O restante deste artigo está organizado da seguinte forma: a Seção 2 apresenta as
motivações e objetivos deste trabalho. A Seção 3 descreve a técnica de profiler,
evidencia os gargalos identificados no SimRWA 2.0 [Soares et al.,2005a] e apresenta a
seqüência de alterações feitas no seu código fonte. Por fim, a conclusão é apresentada
na Seção 4.
2. Motivações e Objetivos
Após a utilização do SimRWA para a realização de diversos estudos de avaliação de
desempenho foi identificado um alto tempo de resposta para simulações mais
complexas. Diante disso, foi feito um estudo de desempenho com relação ao tempo de
resposta do SimRWA. Nesse estudo foi utilizada a topologia da rede NSFNET (Figura
1).
Figura 1. Topologia da rede NSFNET.
Foram simulados os algoritmos Random, Most Used, Least Used, Max-Sum e
Relative Capacity Loss utilizando roteamento fixo de menor caminho (algoritmo de
Dijkstra) [Soares e Giozza, 2004]. Todos os enlaces são bidirecionais utilizando para
cada sentido uma fibra óptica multiplexando 40 comprimentos de onda. As intensidades
de tráfego por nó foram 10, 30, 50, 70, 90, 110, 130 e 150 Erlangs. Foram realizadas 4
replicações de 100.000 requisições de conexões para cada intensidade de tráfego. As
simulações foram executadas em um PC AMD Semprom(tm) 2600+ 1,6 GHz, 240 MB
de RAM, com Windows XP SP2, apenas na Máquina Virtual Java (JVM) e o tempo de
resposta do SimRWA foi de aproximadamente 112 minutos o que consideramos um alto
tempo de resposta. Diante desse tempo de resposta significativamente alto, surgiu o
interesse de otimizar o SimRWA e, devido ao grande número de métodos em todas as
70 classes do SimRWA, utilizar ferramenta de profiler para identificação de gargalos de
processamento.
3. Identificando e Eliminado Gargalos de Processamento do SimRWA 2.0
O profiler é uma técnica de otimização que permite detectar falhas no código que
podem causar retardo na aplicação. Durante a execução do aplicativo em teste o profiler
mantém um registro de todas as chamadas dos métodos, gerando em tempo de
execução, dados estatísticos sobre: criação de objetos, coleta de lixo e uso de recursos
do sistema (processador, memória, rede, disco) para cada método, indicando o seu nome
e sua classe. Estas informações são necessárias para diagnosticar erros e problemas de
desempenho relacionados ao código. A técnica de profiler é geralmente empregada
através da utilização de uma ferramenta de profiler (software) que analisa a utilização
dos recursos do computador em função da execução de um código fonte específico (e.g.
classes Java) [BORLAND SOFTWARE CORPORATION, 2005], [APPPERFECT
CORPORATION, 2005] [YOURKIT LCC, 2005]. Dessa forma, uma ferramenta de
profiler pode ser composta por módulos que analisam a utilização de recursos sob
diferentes aspectos:
a) Profiler da Memória – é a parte responsável por investigar problemas
relacionados à memória. Esta opção mostra as classes carregadas, quais métodos usam
a memória excessivamente, escapes de memória, referências e detalhes da coleta
automática de lixo.
b) Profiler do Processador – esta opção fornece informações sobre a utilização
do processador, como o número de vezes que um método é invocado, o seu tempo de
execução e o tempo total da aplicação.
c) Thread Profiler – permite analisar o processo de execução de cada parte do
aplicativo, relatando seus estados (executando, esperando, bloqueado, parado). Caso
exista um deadlock, ponto em que o aplicativo fica bloqueado devido à espera de partes
do processo por um evento que pode nunca ocorrer, o Thread Profiler mostra todas as
partes envolvidas.
d) Profiler do Sistema – fornece informações detalhadas sobre os recursos do
sistema que estão sendo usados pelos vários processos em execução na máquina:
utilização da rede, quantidade de pacotes enviados e recebidos, percentagem de
utilização do processador, memória livre e memória utilizada, escrita e leitura do disco.
Neste trabalho foi utilizado o Optimizeit Enterprise Suite 6.0 for JAVA
[BORLAND SOFTWARE CORPORATION, 2005] e especialmente o profiler do
processador para identificar os métodos mais invocados e com maiores tempos de
execução no SimRWA.
3.1. Os Gargalos do SimRWA 2.0
Para este trabalho, todas as simulações feitas seguem o cenário descrito na Seção 2.
Os resultados dos tempos de resposta apresentados nesta Seção foram obtidos
submetendo o SimRWA 2.0 ao Optimizeit Enterprise Suite 6.0 for JAVA. Para cada
tempo apresentado foi feita uma média aritmética de 5 execuções da ferramenta de
profiler. Isso foi feito devido a variabilidade dos resultados para um mesmo cenário
estudado em diferentes execuções do Optimizeit Enterprise Suite 6.0 for JAVA. Os
tempos dos métodos são tempos absolutos acumulados durante toda a simulação, ou
seja, o Optimizeit pára de incrementar o tempo de um método quando este invoca um
outro método.
Na Tabela 1 destacamos os métodos com maiores tempos de execução da versão
2.0, bem como a média do tempo total das simulações fornecidos pela ferramenta de
profiler.
Tabela 1. Métodos da versão 2.0 com maiores tempos de execução.
Método
Tempo (ms)
%
procuraNo()
4.225.079
31,25
caminhoLivreParaRota()
2.125.975
15,73
interfacceParaNoA()
1.680.884
12,43
proximoDeAOtimo()
1.643.186
12,15
Rcl.heuristicaAtual()
784.414
5,80
lambdaLivreParaNoA()
699.117
5,17
getDestino()
447.921
3,31
insere()
290.065
2,15
13.519.291
100
Total
A Tabela 1 apresenta os principais métodos candidatos a otimização, isto é os
métodos que representam gargalos de processamento do SimRWA.
As subseções a seguir apresentam a seqüência de alterações feitas no código
fonte e as comparações de desempenho entre versões.
3.2 Primeira Alteração.
Foi encontrado no método caminhoLivreParaRota() invocação desnecessária do método
proximoDeAOtimo(), conforme mostra a Figura 2.
Figura 2. Invocação desnecessária do método proxDeAOtimo() no método
caminhoLivreParaRota() do SimRWA 2.0.
Observe que a variável noOri (linha 8) estava recebendo o retorno do método
proxDeAOtimo(noOri), mas este retorno já estava armazenado na variável noAdj (linha
2). Sendo assim, necessário apenas copiar o valor de noAdj para noOri.
Este mesmo tipo de erro foi encontrado e corrigido em mais 11 métodos,
gerando a versão 2.1 do SimRWA. Os resultados de desempenho são apresentados na
Tabela 2.
Tabela 2. Comparação de desempenho entre as versões 2.0 e 2.1 do SimRWA
SimRWA 2.1
Método
Ganho em Relação a
versão 2.0
Tempo(ms)
%
Tempo(ms)
%
procuraNo()
4.266.039
31,25
40.960
0,30
caminhoLivreParaRota()
1.991.875
15,73
-134.100
-0,99
interfacceParaNoA()
1.722.241
12,43
41.357
0,31
proximoDeAOtimo()
1.134.115
12,15
-509.071
-3,77
Rcl.heuristicaAtual()
791.063
5,80
6.648
0,05
lambdaLivreParaNoA()
730.053
5,17
30.936
0,23
getDestino()
444.391
3,31
-3.530
-0,03
insere()
353.393
2,15
63.328
0,47
12.925.859
100
-593.431
-4,39
Total
Conforme observado, houve uma melhora significativa nos tempos dos métodos
caminhoLivreParaRota() e proximoDeAOtimo() e, consequentemente, uma queda de
4,39% no tempo total da simulação.
3.3 Segunda Alteração.
O método procuraNo(), na versão 2.1 do SimRWA, ainda é o método que mais tempo
de CPU consome.
No SimRWA, o Vector 2“listaNoRota3” de inteiros armazena os identificadores
dos respectivos objetos da classe ElementosNo 4especificados por um objeto da classe
Rota. Assim, quando é necessário acessar e/ou alterar os atributos de um objeto da
classe ElementosNo, é chamado o método procuraNo() para que, depois de procurar no
Vector “listaNo”, retorne o nó “ElementoNo” correspondente ao identificador
armazenado no Vector “listaNoRota”.
2
Classe do pacote java.util.
Atributo da Classe Rota que pertence ao SimRWA, especifica quais os nós compõem uma determinada
rota.
4
Classe do SimRWA que representa um nó óptico.
3
Figura 3. O método procuraNo().
A solução encontrada foi armazenar uma referência para o próprio objeto da
classe ElementoNo em “ listaNoRota” e não apenas o seu identificador, assim, não é
mais necessário invocar o método procuraNo() para acessar os atributos de cada objeto
da classe ElementoNo pertencente a uma rota.
Esta solução foi aplicada obtendo-se a versão 2.2 do SimRWA. A Tabela 3
mostra o desempenho obtido na versão 2.2 em relação à versão anterior.
Tabela 3. Comparação de desempenho entre as versões 2.1 e 2.2 do SimRWA
SimRWA 2.2
Método
Ganho em Relação a
versão 2.1
Tempo(ms)
%
Tempo(ms)
%
34
0,00
-4.266.005
-33,0
caminhoLivreParaRota()
1.734.415
17,59
-257.460
-1,99
interfacceParaNoA()
2.145.285
21,75
423.044
3,27
proximoDeAOtimo()
1.813.117
18,38
679.002
5,25
Rcl.heuristicaAtual()
777.163
7,88
-13.900
-0,11
lambdaLivreParaNoA()
716.805
7,27
-13.248
-0,10
getDestino()
484.839
4,92
40.448
0,31
insere()
311.851
3,16
-41.542
-0,32
9.862.473
100
-3.063.386
-23,70
procuraNo()
Total
Conforme esperado, houve uma grande diminuição no tempo gasto em
procuraNo() e uma queda de 23,7% no tempo total da simulação.
Todavia, os métodos interfacceParaNoA() e proximoDeAOtimo() aumentaram
seus tempos devido ao Vector “ listaNoRota” armazenar referências para objetos da
classe ElementoNo e não mais inteiros como antes. A terceira alteração foi feita nestes
métodos.
3.4 Terceira Alteração.
Agora, após a diminuição quase que total do tempo gasto por procuraNo(), os 3
métodos que mais se destacam são: caminhoLivreParaRota(), interfacceParaNoA() e
proximoDeAOtimo().
Ambos os métodos, apresentam invocações repetitivas de outros métodos. Como
exemplo, a Figura 4 mostra o método interfacceParaNoA(). Observa-se que foi tirada
do loop a invocação do método getId() (linha 9) e atribuído o seu retorno à variável idA
antes de entrar no loop (linha 5).
Figura 4. Invocações repetitivas do método getId() no método
interfacceParaNoA().
O mesmo ocorre nos métodos caminhoLivreParaRota() e proximoDeAOtimo()
com os métodos getDestino() e getId(), respectivamente.
Essa foi a alteração feita gerando a versão 2.3 do SimRWA e os resultados
seguem na Tabela 4.
Tabela 4. Comparação de desempenho entre as versões 2.2 e 2.3 do SimRWA
SimRWA 2.3
Método
Ganho em Relação a
versão 2.2
Tempo(ms)
%
Tempo(ms)
%
97
0,00
63
0,00
caminhoLivreParaRota()
1.658.328
17,59
-76.087
-0,77
interfacceParaNoA()
2.031.661
21,55
-113.624
-1,15
proximoDeAOtimo()
1.747.270
18,53
-65.847
-0,67
Rcl.heuristicaAtual()
787.936
8,36
10.773
0,11
lambdaLivreParaNoA()
769.926
8,17
53.122
0,54
getDestino()
212.426
2,25
-272.414
-2,76
procuraNo()
insere()
Total
241.396
2,56
-70.456
-0,71
9.429.292
100
-433.181
-4,39
3.5 Desempenho Acumulado.
A Tabela 5 compara a versão 2.0 do SimRWA, antes da aplicação das otimizações, com
a versão 2.3 do SimRWA, após as eliminações dos principais gargalos, localizadas nos
métodos críticos identificados pelo Optimizeit.
Ressaltamos que foram feitas 5 simulações idênticas para cada versão e todos os
tempos apresentados são resultados da média aritmética destas simulações.
Tabela 5. Comparação de desempenho entre as versões 2.0 e 2.3 do SimRWA
SimRWA 2.3
Método
Ganho em Relação a
versão 2.0
Tempo(ms)
%
Tempo(ms)
%
97
0,00
-4.224.983
-31,25
caminhoLivreParaRota()
1.658.328
17,59
-467.647
-3,46
interfacceParaNoA()
2.031.661
21,55
350.777
2,5
proximoDeAOtimo()
1.747.270
18,53
104.085
0,77
Rcl.heuristicaAtual()
787.936
8,36
3.522
0,03
lambdaLivreParaNoA()
769.926
8,17
70.809
0,52
getDestino()
212.426
2,25
-235.496
-1,74
insere()
241.396
2,56
-48.670
-0,36
9.429.292
100
-4.089.998
-30,25
procuraNo()
Total
A diminuição do tempo de resposta em cerca de 30%, após pequenas alterações
no código evidencia a grande importância da técnica profiler, ao revelar os métodos
críticos do SimRWA os quais foram modificados. É importante ressaltar que a
identificação dos gargalos não seria trivial sem a utilização da ferramenta de profiler,
dado o grande número de classes e métodos do SimRWA. Além disso, devemos
evidenciar também que a eliminação dos gargalos identificados pela ferramenta de
profiler foi feita através de uma análise cuidadosa dos métodos críticos, posteriormente
otimizados por nossa equipe.
Para medir a real otimização (em termos de tempo de resposta) do SimRWA 2.3
em relação a versão 2.0 realizamos o mesmo estudo descrito na Seção 2. Desta vez,
medimos o tempo de resposta da versão 2.3 sem a utilização da ferramenta de profiler.
O tempo para a simulação desse último experimento foi de aproximadamente 73
minutos, ou seja, o SimRWA 2.3 gastou aproximadamente 35% a menos do tempo do
SimRWA 2.0. Essas simulações foram realizadas apenas na Máquina Virtual Java
(JVM). Ressaltamos que também foram feitas 5 simulações idênticas tanto na versão 2.0
como na versão 2.3 do SimRWA para esta comparação e que os tempos apresentados
são resultados da média aritmética destas simulações.
O ganho de aproximadamente 5% quando as simulações são feitas apenas na
Máquina Virtual Java é em decorrência do não processamento da ferramenta de profiler
durante tais simulações.
4. Conclusão
A implantação de redes ópticas transparentes para compor a futura infra-estutrura de
transporte dos backbones dos provedores de serviço de telecomunicações é uma
tendência mundial. Os algoritmos de alocação de comprimento de onda e as estratégias
de roteamento estudados constituem-se em instrumentos valiosos na otimização dos
recursos das redes ópticas transparentes. Principalmente quando a tecnologia de
conversores de comprimento de onda ainda não está amadurecida e competitiva.
Atualmente, a utilização de ferramentas para simulação de redes ópticas transparentes é
de grande importância para a realização de dimensionamentos e estudos comparativos.
Com o objetivo de reduzir o tempo de resposta da ferramenta SimRWA
apresentamos neste trabalho a utilização da técnica de profiler para identificação de
gargalos que posteriormente foram eliminados com nossa intervenção. Após a
realização da otimização descrita neste artigo foi possível alcançar uma diminuição de
aproximadamente 35% no tempo de resposta do SimRWA. É importante evidenciar que
a diminuição do tempo de resposta é um grande incentivo para que sejam realizadas
simulações de cenários mais realísticos e consequentemente mais complexos.
Referências
Ramaswami, R. e Sivarajan, K. N. (1998). Optical Network - A Practical Perspective.
Morgan Kaufmann Publishers.
Mouftah, H. T. and Ho, P. (2002). Optical Networks - Architecture and Survivability.
Kluwer Academic Publishers.
Soares, A. C. B. e Giozza, W. F. (2004). Avaliação de desempenho de algoritmos para
alocação dinâmica de comprimentos de onda em redes ópticas transparentes. In
Simpósio Brasileiro de Redes de Computadores 2004, pages 661–674.
Chu, X., Li, B., e Chlamtac, I. (2003a). Wavelength converter placement under different
rwa algorithms in wavelength-routed all optical networks. IEEE TRANSACTION
ONCOMMUNICATIONS, pages 607–617.
Pan, D., Qi, Z., Zhao, J., and Ji, Y. (2003). A new dynamic wavelength assignment
algorithm:load equalization algorithm. In International Conference on
Communication technology, pages734– 737.
Zang, H., Jue, J. P., e Mukherjee, B. (2000). A review of routing and wavelength
assignment approaches for wavelength-routed optical WDM network. Optical
Network Magazine.
Barry, R. A. e Subramaniam, S. (1997). The max-sum wavelength assignment algorithm
in wdm ring networks. In OFC ’97.
Soares, A. C. B., Neto, J. C. M., e Giozza, W. F. (2004). SimRWA: Uma ferramenta
para avaliação de desempenho de algoritmos para alocação de comprimentos de onda
e rotas em redes ópticas transparentes. In III Salão de Ferramentas do Simpósio
Brasileiro de Redes de Computadores, pages 915–922.
Soares, A. C. B., Assis, K. D. R., e Giozza, W. F. (2005c). WDM Mesh Networks under
Limitations in the Number of Transceivers per Node . In ICT 2005.
Soares, A. C. B., Neto, J. C. M., e Giozza, W. F. (2005b). Sobrevivência em redes
ópticas wdm sob influência de algoritmos de alocação de rota e de comprimentos de
onda. In Simpósio Brasileiro de Telecomunicações - SBrT.
Soares, A. C. B., Neto, J. C. M., e Giozza, W. F. (2005a). SimRWA 2.0: Uma
ferramenta para avaliação de desempenho de algoritmos RWA e de técnicas de
sobrevivência em redes ópticas transparentes. In IV Salão de Ferramentas do
Simpósio Brasileiro de Redes de Computadores.
AppPerfect, “Java Testing and Monitoring Solutions”,
http://www.appperfect.com, acessado em 27/01/2006.
disponível
em
Optimizeit™ Enterprise Suite, “Uma Solução de Performance Completa para Java”,
disponível em http://www.borland.com/br/products/optimizeit/, acessado em
27/01/2006.
YourKit, “The Industry Leader in Java
http://www.yourkit.com/, acessado em 27/01/2006.
Profiling”,
disponível
em

Documentos relacionados