EXPLORANDO REDES ÓTICAS
COMO MEMÓRIA CACHE
Enrique Vinicio Carrera Erazo
TESE SUBMETIDA AO CORPO
DOCENTE DA COORDENAÇÃO DOS
PROGRAMAS DE PÓS-GRADUAÇÃO DE ENGENHARIA DA UNIVERSIDADE
FEDERAL
DO
RIO
DE
JANEIRO
COMO
PARTE
DOS
REQUISITOS
NECESSÁRIOS PARA A OBTENÇÃO DO GRAU DE DOUTOR EM CIÊNCIAS EM
ENGENHARIA DE SISTEMAS E COMPUTAÇÃO.
Aprovada por:
Prof. Ricardo Bianchini, Ph.D.
Prof. Cláudio Luis de Amorim, Ph.D.
Prof. Inês de Castro Dutra, Ph.D.
Prof. Orlando Gomes Loques Filho, Ph.D.
Prof. Júlio Salek Aude, Ph.D.
Prof. Wagner Meira Júnior, Ph.D.
RIO DE JANEIRO, RJ - BRASIL
NOVEMBRO DE 1999
CARRERA ERAZO, ENRIQUE VINICIO
Explorando Redes Óticas como Memória
Cache [Rio de Janeiro] 1999
XIV, 159 p. 29,7 cm (COPPE/UFRJ, D.Sc.,
Engenharia de Sistemas e Computação, 1999)
Tese – Universidade Federal do Rio de
Janeiro, COPPE
1 - Arquitetura de Computadores
2 - Sistemas Paralelos e Distribuı́dos
I. COPPE/UFRJ II. Tı́tulo (série)
ii
Aos meus pais,
Enrique e Nelva
iii
Agradecimentos
Primeiramente, gostaria de agradecer ao meu orientador, Ricardo Bianchini, pela
paciência comigo ao longo de todo este tempo, pelo estı́mulo constante para que eu superasse meus próprios limites, pelas longas jornadas de trabalho ao meu lado, pela ajuda
desinteressada fora do campo acadêmico e por ser, mais do que um simples orientador,
um amigo e companheiro.
Gostaria também de agradecer a todo o grupo de colegas e amigos das reuniões de
quarta-feira (Carla, Clicia, Cristiana, Eduardo, Lauro, Raquel, Rodrigo S., Rodrigo M. e
Silvio) pelas discussões relacionadas ao meu trabalho e pela amizade ao longo de todo
o meu doutorado. Agradeço especialmente a Cristiana, Eduardo e Lauro pela ajuda na
revisão desta Tese.
Agradeço também à Universidade Federal do Rio de Janeiro e, em especial ao Programa de Sistemas e Computação da Coordenação dos Programas de Pós-graduação em
Engenharia, por ter contribuı́do para a minha formação. N ão posso deixar de agradecer também ao Conselho Nacional de Pesquisa e Desenvolvimento pelo apoio financeiro
recebido durante todos os meus anos de estudo.
Um agradecimento especial à minha esposa e ao meu filho que não tiveram a minha
companhia e carinho, durante estes dois últimos anos, para que eu pudesse fazer de um
dos meus sonhos realidade.
Finalmente, agradeço ao meu pai, mãe e irmãs que sempre me apoiaram em todas as
minhas decisões, me dando forças para continuar em frente.
iv
Resumo da Tese apresentada à COPPE/UFRJ como parte dos requisitos necessários para
a obtenção do grau de Doutor em Ciências (D.Sc)
EXPLORANDO REDES ÓTICAS COMO MEMÓRIA CACHE
Enrique Vinicio Carrera Erazo
Novembro/1999
Orientador: Ricardo Bianchini
Programa: Engenharia de Sistemas e Computação
Os recentes avanços na tecnologia de componentes óticos têm permitido a construção
de redes óticas extremamente rápidas. Como conseqüência disso, essas redes vêm sendo
consideradas por vários pesquisadores como uma opção para o desenvolvimento de sistemas paralelos e distribuı́dos. No entanto, essas pesquisas não exploram totalmente
o potencial da tecnologia ótica. A capacidade que as fibras óticas têm de atuar como
memórias de linha de retardo, por exemplo, não é explorada. Esta Tese visa completar
essa lacuna. Mais especificamente, nossa proposta é utilizar redes de interconexão ótica
como memórias cache em diferentes nı́veis do sistema de memória de sistemas paralelos
e distribuı́dos. Com este objetivo, projetamos e avaliamos quatro tipos de redes óticas,
três das quais são capazes de armazenar informação na pr ópria rede. A avaliação de todas
estas redes é plenamente satisfatória. Os resultados das nossas simulações confirmam que
a utilização de cacheamento ótico tem grande potencial de melhorar o desempenho de
sistemas paralelos e distribuı́dos, especialmente se suportado por redes óticas eficientes.
v
Abstract of Thesis presented to COPPE/UFRJ as a partial fulfillment of the requirements
for the degree of Doctor of Science (D.Sc.)
EXPLOITING OPTICAL NETWORKS AS CACHE MEMORY
Enrique Vinicio Carrera Erazo
November/1999
Advisor: Ricardo Bianchini
Department: Computing and Systems Engineering
The recent improvements in optical technology have enabled the construction of very
fast interconnection networks. As a result of these improvements, optical networks are
being considered by several researchers as a serious option in the development of parallel
and distributed systems. However, the designs proposed by these researchers do not fully
exploit the potential of optical technology. For instance, the ability of optical fibers to act
as delay line memories has not been exploited thus far. This Thesis fills this gap. More
specifically, our proposal is to use optical interconnection networks as cache memories at
different levels of the memory system in parallel and distributed systems. In this direction,
we design and evaluate four optical networks, three of them are able to store data in the
network itself. The evaluation of these networks is fully satisfactory. The results of
our simulations confirm that optical caching has an enormous potential to improve the
performance of parallel and distributed systems, specially if supported by efficient optical
networks.
vi
Conteúdo
1
Introdução
1.1 Contribuições da Pesquisa . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Organização da Tese . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
Redes Óticas
2.1 Comunicação Ótica . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Fibras Óticas . . . . . . . . . . . . . . . . . . . . . . .
2.1.2 Transmissores e Receptores . . . . . . . . . . . . . . .
2.1.3 Técnicas de Acesso ao Meio . . . . . . . . . . . . . . .
2.2 Redes WDM . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Classificação das Redes WDM . . . . . . . . . . . . . .
2.2.2 Redes WDM Single-Hop . . . . . . . . . . . . . . . . .
2.2.3 Redes WDM Multiple-Hop . . . . . . . . . . . . . . . .
2.2.4 Processamento Paralelo e Distribuı́do com Redes WDM
2.3 Redes OTDM . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 A Tecnologia OTDM . . . . . . . . . . . . . . . . . . .
2.3.2 Processamento Paralelo e Distribuı́do com Redes OTDM
2.4 Outras Redes Óticas . . . . . . . . . . . . . . . . . . . . . . . .
2.4.1 Redes FDDI . . . . . . . . . . . . . . . . . . . . . . .
2.4.2 Redes ATM . . . . . . . . . . . . . . . . . . . . . . . .
2.5 Redes Gigabit-Ethernet . . . . . . . . . . . . . . . . . . . . . .
2.6 Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
Sistemas de Memória
3.1 Memórias Cache Tradicionais . . .
3.1.1 Associatividade das Caches
3.1.2 Identificação de Blocos . . .
3.1.3 Substituição de Blocos . . .
3.1.4 Estratégias de Escrita . . . .
3.2 Memórias de Linha de Retardo . . .
3.2.1 Memórias Sı́ncronas . . . .
3.2.2 Memórias Assı́ncronas . . .
3.2.3 Problemas Principais . . . .
vii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
4
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
5
7
7
8
9
10
12
13
14
15
15
17
17
18
19
19
.
.
.
.
.
.
.
.
.
21
21
22
22
23
23
24
25
28
29
3.3
4
Utilização em Computação Paralela e Distribuı́da . . . . . . . . . . . . .
OPTNET
4.1 Fundamentos . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 DMON . . . . . . . . . . . . . . . . . . . . . . . .
4.1.2 LambdaNet . . . . . . . . . . . . . . . . . . . . . .
4.2 Arquitetura de OPTNET . . . . . . . . . . . . . . . . . . .
4.2.1 Arquitetura Básica . . . . . . . . . . . . . . . . . .
4.2.2 Protocolo de Coerência Básico . . . . . . . . . . . .
4.2.3 Suportando Múltiplos Pedidos de Leitura Pendentes
4.3 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.1 Simulação . . . . . . . . . . . . . . . . . . . . . . .
4.3.2 Aplicações . . . . . . . . . . . . . . . . . . . . . .
4.4 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.1 Desempenho Geral . . . . . . . . . . . . . . . . . .
4.4.2 Desempenho das Leituras . . . . . . . . . . . . . .
4.4.3 Desempenho das Escritas . . . . . . . . . . . . . . .
4.4.4 Impacto dos Parâmetros Arquiteturais . . . . . . . .
4.5 Trabalhos Relacionados . . . . . . . . . . . . . . . . . . . .
4.6 Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . .
32
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
34
34
34
36
37
37
38
39
41
41
43
44
44
46
48
50
53
54
5
NetCache
5.1 Arquitetura de NetCache . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Arquitetura Básica . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.2 Protocolo de Coerência . . . . . . . . . . . . . . . . . . . . . . .
5.1.3 Implementação Alternativa . . . . . . . . . . . . . . . . . . . . .
5.2 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.1 Simulação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.2 Aplicações . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.1 Desempenho Geral . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.2 Eficiência da Cache Compartilhada . . . . . . . . . . . . . . . .
5.3.3 Avaliação de Diferentes Organizações e Polı́ticas de Substituição
5.3.4 Impacto dos Parâmetros Arquiteturais . . . . . . . . . . . . . . .
5.3.5 Comparação com Outros Sistemas . . . . . . . . . . . . . . . . .
5.4 Trabalhos Relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5 Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
55
56
58
60
60
60
63
63
64
66
68
72
75
76
77
6
OWCache
6.1 Uma Cache Ótica para Escritas . . . . . . . . . . . . . . . . . . . . . . .
6.1.1 Arquitetura do Multiprocessador e Gerência da Memória Virtual .
6.1.2 OWCache = OPTNET + Anel Ótico . . . . . . . . . . . . . . . .
78
79
79
81
viii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6.2
6.3
6.4
6.5
6.6
7
8
Metodologia . . . . . . . . . . . . . . . . . .
6.2.1 Simulação . . . . . . . . . . . . . . .
6.2.2 Aplicações . . . . . . . . . . . . . .
Resultados Experimentais . . . . . . . . . . .
6.3.1 Benefı́cios de Desempenho . . . . . .
6.3.2 Impacto dos Parâmetros Arquiteturais
Estendendo um Multiprocessador Tradicional
6.4.1 Arquitetura Básica . . . . . . . . . .
6.4.2 Resultados Experimentais . . . . . .
Trabalhos Relacionados . . . . . . . . . . . .
Conclusões . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Implementação de uma Memória de Rede na Internet
7.1 Fundamentos . . . . . . . . . . . . . . . . . . . .
7.1.1 A Internet . . . . . . . . . . . . . . . . . .
7.1.2 Redes Ativas . . . . . . . . . . . . . . . .
7.1.3 Exemplos de Aplicações Distribuı́das . . .
7.2 Memória de Rede . . . . . . . . . . . . . . . . . .
7.3 Metodologia . . . . . . . . . . . . . . . . . . . . .
7.3.1 A Aplicação . . . . . . . . . . . . . . . .
7.3.2 Configurações Básicas . . . . . . . . . . .
7.4 Resultados . . . . . . . . . . . . . . . . . . . . . .
7.4.1 Validação do Simulador . . . . . . . . . .
7.4.2 Resultados Base . . . . . . . . . . . . . .
7.4.3 Variação de Parâmetros . . . . . . . . . . .
7.5 Trabalhos Relacionados . . . . . . . . . . . . . . .
7.6 Conclusões . . . . . . . . . . . . . . . . . . . . .
Conclusões e Trabalhos Futuros
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 85
. 85
. 85
. 86
. 86
. 91
. 96
. 96
. 97
. 99
. 101
.
.
.
.
.
.
.
.
.
.
.
.
.
.
102
103
103
104
105
106
110
111
112
113
113
115
117
119
120
.
.
.
.
.
.
.
.
.
.
.
.
.
.
121
ix
Lista de Figuras
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
Propagação da Luz numa Fibra Ótica . . . . . . . . . . . . . .
A Técnica de Multiplexação WDM . . . . . . . . . . . . . . .
Uma Rede WDM Single-Hop . . . . . . . . . . . . . . . . . .
Topologia da Rede TeraNet . . . . . . . . . . . . . . . . . . .
Sistema de Transmissão OTDM . . . . . . . . . . . . . . . .
Sistema OTDM para Multiprocessadores e Multicomputadores
Uma Rede FDDI . . . . . . . . . . . . . . . . . . . . . . . .
Uma Rede ATM . . . . . . . . . . . . . . . . . . . . . . . . .
Uma Rede Gigabit-Ethernet . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
6
9
10
13
15
16
17
18
19
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
Diagrama de Blocos de uma Memória de Linha de Retardo . . . . . . . .
Memória de Linha de Retardo Sı́ncrona . . . . . . . . . . . . . . . . . .
Pulse-Stretching para a Memória de Linha de Retardo Sı́ncrona . . . . . .
Memória Sı́ncrona com Contador Ótico . . . . . . . . . . . . . . . . . .
Interface Optoeletrônica da Memória Sı́ncrona . . . . . . . . . . . . . . .
Memória de Linha de Retardo Assı́ncrona . . . . . . . . . . . . . . . . .
Evolução da Velocidade de Transmissão nos Sistemas Óticos . . . . . . .
Latência Média de Acesso em Função da Capacidade de Armazenamento
24
25
26
27
27
29
32
32
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
35
36
37
38
44
45
46
4.9
4.10
4.11
4.12
4.13
A Interface de Rede da Arquitetura DMON . . . . . . . . . . . . . . . .
A Interface de Rede da Arquitetura LambdaNet . . . . . . . . . . . . . .
Detalhe da Arquitetura dos Nós . . . . . . . . . . . . . . . . . . . . . . .
A Interface de Rede da Arquitetura OPTNET . . . . . . . . . . . . . . .
Ganho de Desempenho num Multiprocessador de 16 Nós com OPTNET .
Tempos de Execução de OPTNET, LambdaNet, DMON-U e DMON-I . .
Latência Média das Leituras . . . . . . . . . . . . . . . . . . . . . . . .
Latência Média de uma Falha de Leitura para OPTNET, LambdaNet,
DMON-U e DMON-I . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tempos de Execução para 1, 2 e 4 Canais de Atualização em 16 Nós . . .
Tempos de Execução para 1, 2 e 4 Canais de Atualização em 32 Nós . . .
Tempos de Execução como Função do Tamanho da Cache Secundária . .
Tempos de Execução como Função da Taxa de Transmissão . . . . . . .
Tempos de Execução como Função da Latência de Leitura na Memóri . .
46
49
49
51
52
52
5.1
Detalhe da Arquitetura de NetCache . . . . . . . . . . . . . . . . . . . .
56
x
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5.2
5.3
5.4
Ganho de Desempenho num Multiprocessador de 16 Nós com NetCache .
Tempos de Execução de NetCache, LambdaNet, DMON-U e DMON-I . .
Porcentagem da Latência de Leitura no Tempo de Execução, Taxa de
Acerto na Cache Compartilhada, Redução da Latência de Leitura numa
Falha e Redução da Latência de Leitura Total . . . . . . . . . . . . . . .
5.5 Taxas de Acerto para uma Cache Compartilhada de 16, 32 e 64 KBytes .
5.6 Latências de Leitura numa Cache Compartilhada de 16, 32 e 64 KBytes .
5.7 Tempos de Execução numa Cache Compartilhada de 16, 32 e 64 KBytes .
5.8 Taxas de Acerto para a Cache Compartilhada como Função da Associatividade de Cada Canal . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.9 Taxas de Acerto para a Cache Compartilhada como Função da Polı́tica de
Substituição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.10 Tempos de Execução como Função do Tamanho da Cache Secundári . . .
5.11 Tempos de Execução como Função da Taxa de Transmissão . . . . . . .
5.12 Tempos de Execução como Função da Latência de Leitura na Memória .
6.1
6.2
6.3
Arquitetura dos Nós . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Arquitetura de OWCache . . . . . . . . . . . . . . . . . . . . . . . . . .
Tempo de Execução do MP OPTNET e do MP OWCache sob Prefetching
Ótimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4 Tempo de Execução do MP OPTNET e do MP OWCache sob Prefetching
Básico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5 Tempo de Execução do MP OWCache para 2, 4, e 8 Nós de Entrada/Saı́da
sob Prefetching Ótimo . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.6 Tempo de Execução do MP OWCache para 2, 4, e 8 Nós de Entrada/Saı́da
sob Prefetching Básico . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.7 Tempo de Execução do MP OWCache com 256, 512, e 1024-KB sob
Prefetching Ótimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.8 Tempo de Execução do MP OWCache com 256, 512, e 1024-KB sob
Prefetching Básico . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.9 Tempo de Execução do MP OPTNET para Vários Tamanhos de Cache de
Disco Combinada sob Prefetching Ótimo . . . . . . . . . . . . . . . . .
6.10 Tempo de Execução do MP OPTNET para Vários Tamanhos de Cache de
Disco Combinada sob Prefetching Básico . . . . . . . . . . . . . . . . .
7.1
7.2
7.3
7.4
7.5
7.6
7.7
Tráfego para um Leilão de Mercadorias . . . . . . . . . . . . . . .
Estrutura Topológica da Internet . . . . . . . . . . . . . . . . . . .
Estrutura Topológica da Internet-2 . . . . . . . . . . . . . . . . . .
Número de Roteamentos para Cada Configuração . . . . . . . . . .
Número de Ofertas Atendidas por Segundo para Cada Configuração
Exemplos de Topologias de Rede . . . . . . . . . . . . . . . . . . .
Desempenho de Cada Configuração para Diferentes Topologias . . .
xi
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
64
65
67
68
69
69
71
72
73
74
75
80
82
89
90
91
91
92
92
93
94
103
104
110
115
116
118
118
Lista de Tabelas
2.1
Caracterı́sticas da Tecnologia OTDM . . . . . . . . . . . . . . . . . . . .
14
4.1
4.2
Tempos de Leitura para OPTNET, LambdaNet e DMON . . . . . . . . .
Tempos para uma Transação de Coerência em OPTNET, LambdaNet,
DMON-U e DMON-I . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Descrição das Aplicações e Principais Parâmetros de Entrada . . . . . . .
Porcentagens de Write-Stall e Write-buffer Flush para OPTNET, LambdaNet, DMON-U e DMON-I. . . . . . . . . . . . . . . . . . . . . . . . .
42
4.3
4.4
5.1
5.2
5.3
43
43
48
5.4
Tempos de Leitura para NetCache em Ciclos de Processador . . . . . . .
Tempos de Leitura para LambdaNet e DMON em Ciclos de Processador .
Tempos de uma Transação de Coerência para NetCache, LambdaNet,
DMON-U e DMON-I em Ciclos de Processador . . . . . . . . . . . . . .
Descrição das Aplicações e Principais Parâmetros de Entrada . . . . . . .
63
64
6.1
6.2
6.3
6.4
6.5
6.6
6.7
Parâmetros Base Principais e os seus Valores . . . . . . . . . . . . . .
Descrição das Aplicações e os seus Principais Parâmetros de Entrada . .
Tempos Médios de Swap-Out sob Prefetching Ótimo . . . . . . . . . .
Tempos Médios de Swap-Out sob Prefetching Básico . . . . . . . . . .
Número Médio de Páginas Escritas sob Prefetching Ótimo . . . . . . .
Número Médio de Páginas Escritas sob Prefetching Básico . . . . . . .
Taxas de Acerto para OWCache sob Diferentes Técnicas de Prefetching
84
86
87
87
88
88
89
7.1
7.2
7.3
Parâmetros Usados pelos Simuladores . . . . . . . . . . . . . . . . . . . 110
Parâmetros da Aplicação . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Parâmetros da Rede Virtual . . . . . . . . . . . . . . . . . . . . . . . . . 113
xii
.
.
.
.
.
.
.
61
62
Capı́tulo 1
Introdução
Os recentes avanços na tecnologia de componentes óticos têm permitido a construção de
redes óticas extremamente rápidas [32, 60]. Uma rede ótica é normalmente constituı́da
por uma ou mais fibras óticas, além dos respectivos receptores e transmissores de cada
nó. Em cada fibra ótica pode-se implementar um número relativamente grande de canais
de comunicação independentes, onde cada canal pode ter taxas de transmissão bastante
elevadas. Assim, uma das principais caracterı́sticas de uma rede ótica é a sua grande
largura de faixa (agregada e por canal).
Devido a essa caracterı́stica, redes óticas vêm sendo consideradas por vários pesquisadores como uma opção no desenvolvimento de sistemas paralelos e distribuı́dos
(e.g., [21, 32]). Na maioria dos casos, essas pesquisas simplesmente substituem a rede
eletrônica tradicional por uma rede ótica equivalente, produzindo grandes ganhos de desempenho devido à maior largura de faixa existente no subsistema de comunicação. No
entanto, esse tipo de estratégia não explora totalmente o potencial da tecnologia ótica. A
possibilidade de implementar canais ponto-a-ponto e canais de disseminação numa única
rede, por exemplo, não é suficientemente explorada.
Nesta Tese propomos a exploração de uma outra caracterı́stica das fibras óticas no
projeto de sistemas paralelos e distribuı́dos: a sua capacidade para armazenar informação
ou, em outras palavras, a capacidade da fibra ótica de atuar como uma memória de linha
de retardo (Delay Line Memory) [66]. Como a luz se propaga a uma velocidade finita e
constante dentro da fibra (aproximadamente 2, 1 × 108 m/s), transcorre um tempo fixo a
partir do instante que um dado entra até que esse mesmo dado saia da fibra. Desta forma,
se os extremos da linha de retardo são conectados entre si e o sinal ótico é regerado
periodicamente, a fibra se transforma numa memória; os dados enviados através da fibra
permanecem accessı́veis nela, até serem substituı́dos (sobrescritos) por outros. Devido
à sua grande largura de faixa, é possı́vel armazenar uma quantidade razoável de dados
em uns poucos metros de fibra (e.g., em um canal de comunicação de 100 metros de
comprimento e com uma taxa de transmissão de 10 Gbits/s podem ser armazenados 5
Kbits). A quantidade de informação armazenada na fibra é de fundamental importância,
na medida em que o tempo de acesso a esse tipo de memória depende do comprimento da
fibra; quanto mais longa a fibra, maior o tempo médio de acesso aos dados.
1
De forma a alcançar um tempo de acesso relativamente baixo, estamos propondo utilizar redes óticas como memórias cache em diferentes nı́veis do sistema de memória de
sistemas de computação paralelos e distribuı́dos. Tal esquema tem várias vantagens, tais
como: a) o tamanho da nossa memória cache (ou memória de rede) não precisa ser extremamente grande, o que permite tempos de acesso relativamente baixos; b) a cache ótica
permite evitar acessos aos nı́veis mais baixos do sistema de memória, podendo diminuir
o tráfego de informação no restante da rede e nos barramentos dos nı́veis inferiores do
sistema de memória; c) a cache ótica pode ser compartilhada por todos os processadores
sem contenção; d) a cache ótica pode reduzir qualquer problema de acesso não uniforme
aos nı́veis mais baixos do sistema de memória; e e) a memória de rede garante exclusão
mútua no acesso a dados compartilhados sem necessidade de hardware ou software adicional. Além disso, quando a tecnologia de roteadores ativos [11, 72] é adicionada à
nossa memória de rede, ela permite a implementação do que denominamos “cacheamento
ativo”, o cacheamento e processamento simultâneos da informação de forma distribuı́da.
Para quantificar o impacto dessas vantagens no desempenho de vários sistemas paralelos e distribuı́dos, projetamos e avaliamos quatro tipos de redes óticas, três das quais são
capazes de armazenar informação na própria rede. A primeira dessas redes com capacidade de armazenamento é NetCache [16], uma rede de interconexão para os processadores
de um multiprocessador que serve como uma cache de terceiro nı́vel para os dados compartilhados pelas aplicações paralelas. Descendo na hierarquia do sistema de memória,
também projetamos e avaliamos OWCache [15], uma rede de interconexão ótica para
multiprocessadores que atua como uma cache compartilhada para escritas ao disco. Tanto
NetCache como OWCache baseiam-se numa nova rede ótica, também projetada por nós,
chamada de OPTNET (OPTimized OPTical NETwork) [14], para realizar a comunicação
dos dados. Finalmente, descendo mais ainda na hierarquia do sistema de memória e
relaxando o acoplamento existente entre os diferentes elementos de processamento, projetamos e avaliamos um sistema que permite o cacheamento ativo dos dados dinâmicos
acessados pelas aplicações distribuı́das que executam sobre a Internet.
A avaliação de todos esses sistemas é plenamente satisfatória. Um multiprocessador de 16 nós baseado em OPTNET foi avaliado utilizando simulações detalhadas da
execução de aplicações paralelas. Esse multiprocessador foi comparado a outros sistemas
também baseados em duas redes de interconexão óticas: DMON [33] e LambdaNet [31].
Essas duas redes são de grande interesse, uma vez que DMON utiliza um hardware bastante simples e LambdaNet tem excelente desempenho. Os resultados dessa comparação
demonstram que o multiprocessador baseado em OPTNET supera consistentemente os
sistemas baseados em DMON para todas as aplicações avaliadas, utilizando a mesma
quantidade de hardware ótico. Uma comparação entre OPTNET e LambdaNet mostra
diferenças de desempenho de 4%, em média, em favor dos multiprocessadores baseados
em LambdaNet. Esses resultados são vantajosos para OPTNET, já que LambdaNet requer um hardware ótico muito mais custoso do que a nossa rede. Concluimos a partir
desses resultados que OPTNET apresenta uma excelente relação custo/desempenho para
2
a implementação de multiprocessadores.
Para verificar que um multiprocessador baseado em NetCache atinge melhores desempenhos do que aqueles baseados em redes óticas que não implementam cacheamento
ótico, usamos simulações detalhadas da execução de aplicações paralelas num multiprocessador de 16 nós com 32 KBytes de cache ótica. NetCache foi também comparada a
DMON e LambdaNet. Nossas comparações demonstram que o multiprocessador baseado em NetCache supera consistentemente os sistemas baseados em DMON para todas
as aplicações avaliadas. As diferenças de desempenho nesse caso podem ser tão grandes
quanto 105%. NetCache também apresenta resultados favoráveis em relação a LambdaNet. Para 9 aplicações, as vantagens no tempo de execução de NetCache estão entre
7 e 79%. Para as outras 3 aplicações, o desempenho dos dois sistemas é comparável.
Concluimos, a partir desses resultados, que NetCache apresenta melhor desempenho que
qualquer outra rede ótica já proposta.
Na avaliação de OWCache, por sua vez, foram utilizadas simulações detalhadas da
execução de aplicações paralelas out-of-core num multiprocessador com 8 nós de processamento, com coerência de caches e com 4 nós habilitados para operações de entrada/saı́da. Foram também considerados os dois extremos em termos de técnicas de prefeching de páginas: uma estratégia de prefetching ótimo e uma estratégia de prefetching
básico. Sob a estratégia de prefetching ótimo, os resultados demonstram que OWCache
melhora os tempos de swap-out de 1 a 3 ordens de magnitude com relação aos resultados
de OPTNET. Os benefı́cios de OWCache não são tão significativos sob a estratégia de prefetching básico, mas ainda são consideráveis. Em resumo, OWCache melhora o tempo
de execução em até 64% sob um prefetching ótimo e em até 39% sob um prefetching
básico, novamente em relação aos resultados de OPTNET. Os benefı́cios de desempenho
de OWCache vêm principalmente dos swap-outs mais rápidos e da sua capacidade para
atuar como uma victim-cache. Com a finalidade de mostrar que a memória de rede não
é útil apenas para a multiprocessadores interconectados por uma rede ótica, projetamos e
avaliamos uma extensão ao subsistema de entrada/saı́da de um multiprocessador convencional que também atua como uma cache de escritas ao disco. Esta extensão é baseada
em OWCache e apresenta resultados de desempenho similares aos já mencionados [17].
Para avaliar a nossa memória de rede no ambiente da Internet foram utilizadas
simulações detalhadas de aplicações distribuı́das executando sobre uma rede que reproduz
a topologia encontrada na Internet-2 e é baseada na tecnologia de roteadores ativos. Os
resultados destes experimentos mostram que, para o caso do cacheamento ativo de dados
dinâmicos em leilões eletrônicos, o ganho no número de transações realizadas por unidade
de tempo pode chegar a 436% quando comparado a um sistema convencional, onde são
utilizados apenas 4 roteadores ativos. Este ganho de desempenho é produto da eliminação
da contenção existente no servidor e da diminuição do número médio de hops realizados
pelas mensagens (66% em média). Como mostra o nosso variado espectro de simulações,
estes ganhos são dificilmente atingı́veis através de propostas baseadas exclusivamente em
roteadores ativos ou em algum outro tipo de processamento distribuı́do.
3
Todos estes resultados confirmam que a utilização do cacheamento ótico tem grande
potencial de melhorar o desempenho dos sistemas paralelos e distribuı́dos, especialmente
se suportado por redes óticas eficientes.
1.1 Contribuições da Pesquisa
A idéia de usar uma rede ótica como memória cache em sistemas paralelos e distribuı́dos
nunca foi explorada anteriormente. Sendo assim, as contribuições mais importantes da
nossa pesquisa podem ser resumidas nos seguintes pontos:
• Propor e avaliar novas redes óticas que permitam explorar a elevada largura de
faixa e a capacidade de disseminação oferecidas pelas comunicações óticas na
implementação de sistemas paralelos. Nossa contribuição especı́fica nesse ponto
é OPTNET.
• Propor e avaliar novas redes óticas que atuem também como memórias cache
na implementação de sistemas de computação paralela. Nossas contribuições especı́ficas nesse ponto são NetCache e OWCache.
• Estudar e aplicar estes mesmos conceitos na construção de sistemas de computação
distribuı́da, especificamente nos sistemas distribuı́dos de grande porte como os encontrados na Internet. Nossa contribuição especı́fica nesse ponto é o cacheamento
ativo de dados na Internet.
1.2 Organização da Tese
O resto desta Tese está organizado da seguinte forma. Nos capı́tulos 2 e 3 apresentamos
os conhecimentos básicos que suportam o trabalho que estamos propondo. No capı́tulo
2 são apresentados os fundamentos das redes óticas, assim como alguns trabalhos relacionados com o uso destas redes na implementação de sistemas paralelos e distribuı́dos.
No capı́tulo 3, por sua vez, são apresentados os fundamentos das memórias cache e das
linhas de retardo óticas. Alguns trabalhos relacionados com a utilização das memórias de
linha de retardo ótica são também discutidos. A seguir, o capı́tulo 4 propõe e avalia a rede
OPTNET, enquanto o capı́tulo 5 propõe e avalia a rede NetCache. O capı́tulo 6, por sua
vez, propõe e avalia OWCache. Posteriormente, o capı́tulo 7 propõe e avalia a utilização
da memória de rede para a otimização de aplicações distribuı́das executando sobre a Internet. Finalmente, no capı́tulo 8 apresentamos as principais conclusões da nossa pesquisa e
algumas propostas de trabalhos futuros.
4
Capı́tulo 2
Redes Óticas
Neste capı́tulo apresentamos os fundamentos da comunicação ótica, introduzindo os termos que serão utilizados no restante deste documento. Algumas redes óticas que estão
sendo aplicadas na construção de computadores paralelos são também estudadas. Entre
as redes mais importantes temos as redes WDM (Wavelength Division Multiplexing) e
as redes OTDM (Optical Time Division Multiplexing). As redes WDM têm sido aplicadas tanto a multicomputadores como a multiprocessadores. OTDM, por sua vez, é uma
tecnologia que ainda não está madura, mas tem grande potencial para o futuro.
2.1 Comunicação Ótica
Devido ao potencial das fibras óticas para uma transmissão de dados quase sem perdas e
com uma largura de faixa bastante grande, as redes óticas tiveram um crescimento bastante rápido nos últimos 25 anos. Alguns dos conceitos mais importantes nesta área são
definidos a seguir.
2.1.1 Fibras Óticas
Uma propriedade interessante dos raios de luz é que quando eles atravessam de uma
substância a outra, uma parte da luz é refletida e a outra passa à nova substância. Os raios
de luz que ingressam na nova substância sofrem uma mudança na sua trajetória. Este
fenômeno é chamado de refração. A quantidade de luz refletida e refratada depende do
ı́ndice de refração entre as duas substâncias e do ângulo com que a luz atinge a separação
entre elas. Desta forma, existe um ângulo de incidência, chamado de ângulo crı́tico, onde
a luz é completamente refletida.
Usando esta propriedade, é possı́vel criar fios de fibra de vidro extremamente finos
que podem transmitir a luz a grandes distâncias. A figura 2.1 mostra a estrutura da fibra
e a forma como a luz é transmitida por ela. Um fino fio de vidro, chamado de núcleo, é
recoberto de uma outra camada de vidro com um ı́ndice de refração ligeiramente diferente
do ı́ndice do núcleo. Como resultado deste processo, um raio de luz enviado por um
extremo do núcleo permanecerá nele até alcançar o outro extremo, já que o raio de luz
será refletido a cada vez que tentar passar do núcleo para o material que o recobre.
5
Cladding
Core
Figura 2.1: Propagação da Luz numa Fibra Ótica
O ı́ndice de refração também tem outro significado: ele estabelece a velocidade com
que a luz viaja dentro de uma determinada substância. Para uma fibra ótica o ı́ndice de
refração é aproximadamente 1,45, o que significa que a luz viaja na fibra a 0,69 da sua
velocidade no vazio. Em outras palavras, a velocidade da luz na fibra é aproximadamente
2, 1 × 108 m/s.
A largura de faixa da fibra é determinada pela quantidade de pulsos de luz que podem
ser transmitidos por unidade de tempo. Devido a vários fatores fı́sicos, as fibras apenas
permitem usar 3 faixas do espectro ótico. Cada faixa tem uma largura aproximada de 200
nanômetros e elas estão centradas em torno dos 0,85, 1,3 e 1,5 micrômetros. Cada faixa
do espectro tem uma largura de aproximadamente 25 THz. Equipamentos convencionais
podem transmitir entre 0,7 e 1 bits por Hz, de forma que uma simples fibra pode ser usada
para transmitir entre 50 e 75 Tbits/s [60].
Na realidade, a taxa de bits atingı́vel é um pouco menor, já que a construção de tais
equipamentos é cara. Mais eficiente é construir vários dispositivos transmitindo em paralelo através de canais independentes com a ajuda de alguma técnica de multiplexação
como WDM ou OTDM. WDM permite a multiplexação de centenas de canais através da
sua transmissão por diferentes comprimentos de onda. OTDM, por outro lado, aloca um
slot para cada canal em intervalos de tempo fixos, permitindo a multiplexação de milhares
de canais numa fibra só. Mesmo deixando espaço entre os diferentes canais, uma única
fibra pode ser capaz de transmitir dezenas de Tbits/s com estas técnicas de multiplexação
[32].
Apesar de todo esse potencial, a comunicação ótica sofre de alguns problemas. A
seguir descrevemos os mais importantes dentre esses problemas:
• Dispersão. A dispersão é um problema importante já que ela limita a taxa de bits
transmissı́vel numa fibra de um determinado comprimento. Quanto mais um pulso
viaja na fibra, mais aumenta a sua largura, tornando cada vez mais difı́cil a sua
deteção no receptor, pois os pulsos se misturam. Este fenômeno tem sido minimizado através da utilização de fibras mono-modo, de melhorias na fabricação dos
lasers e das fibras óticas, e em especial, através da transmissão por solitons. Solitons são pulsos de luz que não sofrem nenhuma distorção independente da distância
de propagação na fibra, já que, devido à sua forma, os efeitos de dispersão e outros
fenômenos fı́sicos na fibra se compensam.
• Absorção. Em alguns casos, a luz que atravessa a fibra encontra impurezas no seu
6
caminho ou interage com o material do núcleo de modo a se transformar em outro tipo de energia, e.g., calor. Assim, um pulso de luz pode ser absorvido pela
fibra conforme ele avança na sua trajetória. Isto faz com que seja necessário amplificar o sinal periodicamente. Os dispositivos usados para regerar a potência do
sinal são chamados de repetidores ou amplificadores. Os repetidores são dispositivos optoeletrônicos que recebem o sinal de entrada, o convertem para o domı́nio
eletrônico, e posteriormente voltam a convertê-lo para o domı́nio ótico. Os amplificadores óticos, por sua vez, não requerem essa conversão entre domı́nios, mas não
são capazes de consertar distorções como as produzidas pela dispersão. Note que
mesmo a transmissão por solitons precisa de fases de regeração, já que pode sofrer
absorção.
2.1.2 Transmissores e Receptores
Transmissores e receptores são termos genéricos para os dispositivos ligados à fibra que
transmitem e recebem os sinais, respectivamente. Os transmissores são tipicamente lasers
semicondutores fabricados em silı́cio ou GaAs. Os receptores, por sua vez, são fotodiodos, as vezes acoplados a filtros que extraem unicamente as frequências de interesse.
Os transmissores e receptores podem ser de dois tipos: fixos e sintonizáveis. Os
transmissores e receptores fixos são aqueles que podem transmitir ou receber num único
canal. Os dispositivos sintonizáveis, por outro lado podem selecionar dinamicamente o
canal no qual eles transmitem ou do qual recebem a informação. Embora os dispositivos
sintonizáveis sejam mais flexı́veis e reduzam custos na maioria dos casos, eles apresentam o problema de requerer uma latência adicional para a sintonização, sincronização e
recuperação de relógio do novo canal. Estes tempos estão diminuindo conforme avança a
tecnologia de componentes óticos, mas ainda apresentam valores consideráveis (na ordem
de centenas de nanosegundos) [10].
2.1.3 Técnicas de Acesso ao Meio
Quando vários transmissores e/ou receptores compartilham um mesmo meio de
propagação, e.g., um único canal WDM, mecanismos de controle são necessários para
garantir o uso correto desse meio durante a transmissão das mensagens. Desta forma, um
conjunto de transmissores e/ou receptores precisa ganhar acesso ao meio antes de proceder com a transmissão das mensagens. A seguir apresentamos as técnicas de acesso mais
comuns:
• TDMA (Time Division Medium Access). Esta técnica de acesso aloca um slot em
intervalos de tempo fixos para a comunicação entre dois elementos quaisquer. Alguns problemas com esta técnica são a perda da largura de faixa do meio quando um
elemento transmissor não tem nada a transmistir, e o fato das mensagens estarem
limitadas a um tamanho máximo igual ao tamanho do slot.
7
• TDMA com slot variável. Esta técnica de acesso permite que o slot alocado para
cada transmissão seja de tamanho variável, aliviando assim os problemas apresentados por TDMA. Desta forma, os elementos que não tem nada a transmitir reduzem o seu slot a um tempo mı́nimo e as mensagens podem ter qualquer tamanho.
Para determinar o tamanho do slot usado para cada transmissão, bits adicionais no
cabeçalho da mensagem ou canais de controle adicionais podem ser utilizados.
• CSMA/CD (Carrier Sense Multiple Access/Collision Detection). Nesta técnica de
acesso ao meio todos os receptores “escutam” todas as transmissões e todos os
transmissores podem iniciar uma comunicação a qualquer momento. Como existe
a possibilidade de ter transmissões simultâneas, cada elemento transmissor monitora a sua própria comunicação. Se uma transmissão já foi iniciada, o transmissor
espera o fim da mesma, antes de tentar iniciar uma nova. No caso de dois ou mais
transmissores iniciarem uma comunicação simultaneamente, uma colisão acontece,
um sinal de alerta é emitido, e uma retransmissão ocorre ap ós um tempo aleatório.
A principal desvantagem desta técnica é o número elevado de colisões em sistemas
com grande demanda de comunicação.
• Token Passing. Para usar esta técnica, um anel lógico entre os elementos transmissores com direito de acesso ao meio é estabelecido. Através desses elementos
um token é continuamente transmitido. Quando um elemento transmissor deseja
se comunicar, ele espera a chegada do token, o retém até transmitir a mensagem,
e posteriormente o envia para o próximo elemento no anel. Cada receptor deve
sempre verificar a chegada de um token ou de uma mensagem dirigida a ele. O
maior problema deste esquema é o tempo gasto com a circulação do token em sistemas com pouca demanda de comunicação ou quando o número de elementos que
compartilham o meio é bastante grande. No entanto, a possibilidade de starvation é eliminada, já que existe um tempo máximo para a transmissão de qualquer
mensagem.
2.2 Redes WDM
Atualmente, através de uma cuidadosa fabricação das fibras óticas, dos transmissores e
dos receptores, é possı́vel construir sistemas de comunicação óticos livres de dispersão,
com baixa atenuação e com uma grande largura de faixa. No entanto, devido ao hardware
associado aos pontos terminais de um sistema de comunicação ótico ser normalmente de
natureza eletrônica, as taxas de transmissão são limitadas a uns poucos Gbits/s. Assim,
para poder aproveitar o enorme potencial dos sistemas de comunicação óticos, técnicas
de multiplexação devem ser utilizadas.
WDM é uma dessas técnicas. Com WDM, vários canais de comunicação independentes podem ser implementados na mesma fibra ótica mediante a divisão da sua largura de
faixa. Para isso, cada canal utiliza um comprimento de onda diferente para a transmissão
8
Tx A
Rx A
Tx B
Rx B
Tx C
Rx C
Fiber
Tx D
Rx D
Figura 2.2: A Técnica de Multiplexação WDM
dos seus dados (figura 2.2).
As redes óticas que usam esta técnica de multiplexação são denominadas redes WDM.
A forma mais simples de implementar uma rede WDM é através de um acoplador passivo
em estrela e um conjunto de receptores e transmissores operando em diferentes comprimentos de onda [10]. O acoplador passivo em estrela dissemina cada comprimento de
onda (canal WDM) a todos os nós de processamento conectados à rede. Normalmente,
os nós não escutam todos os canais, pois o número de dispositivos óticos determina em
grande parte o custo da rede. Na maioria dos casos, cada canal possui um único nó transmissor e um único nó receptor, mas às vezes canais de disseminação são implementados,
permitindo que um nó possa transmitir a todos os outros nós da rede.
Devido ao rápido desenvolvimento da tecnologia usada na sua implementação, WDM
tem se convertido numa das mais populares técnicas de multiplexação. Atualmente, podem ser encontrados comercialmente multiplexadores e demultiplexadores WDM com
mais de uma centena de canais. Além disso, a chegada dos transmissores e receptores
sintonizáveis tem contribuı́do para uma significativa redução no número de dispositivos
óticos usados por estas redes [30, 43].
2.2.1 Classificação das Redes WDM
Em [56], Mukherjee apresentou a seguinte classificação das redes WDM baseado nos
tipos de transmissores e receptores utilizados na sua implementação:
1. Transmissores e Receptores Fixos. Nas redes FT-FR (Fixed Transmitters and Fixed
Receivers), cada nó possui um transmissor ou receptor para cada um dos canais
pré-estabelecidos de transmissão ou recepção, respectivamente. Estas são as redes
menos flexı́veis, já que cada nó está limitado pelo número de canais de transmissão
e recepção disponı́veis.
2. Transmissores Sintonizáveis e Receptores Fixos. As redes TT-FR (Tunable Transmitters and Fixed Receivers) são mais flexı́veis que as redes FT-FR, pois um nó pode
transmitir para qualquer outro nó com base na sintonização do canal de recepção
correspondente. O problema principal destas redes são as colisões que surgem
quando dois ou mais transmissores tentam contatar um mesmo receptor. Este problema pode ser tratado usando algum esquema convencional para a resolução de colisões (e.g., CSMA/CD), esquemas de reserva (e.g., TDMA), ou dispositivos óticos
9
Fiber
Tx
Tx
Processor
Processor
Rx
Rx
Tx
...
Processor
Passive
star
coupler
Rx
Figura 2.3: Uma Rede WDM Single-Hop
especiais (e.g., Protect-Against-Collision Switches) que suprimem múltiplas transmissões por um mesmo canal.
3. Transmissores Fixos e Receptores Sintonizáveis. Como as redes TT-FR, as redes
FT-TR (Fixed Transmitters and Tunable Receivers) são bastante flexı́veis. O problema maior destas redes é determinar que canal um nó deve sintonizar para receber
uma mensagem qualquer. No entanto, as redes FT-TR apresentam a vantagem de
poder implementar multicast de forma relativamente simples (um grupo de receptores sintonizando um mesmo canal).
4. Transmissores e Receptores Sintonizáveis. As redes TT-TR (Tunable Transmitters and Tunable Receivers) possuem, provavelmente, a arquitetura de rede mais
flexı́vel. Mas essa flexibilidade faz com que o protocolo de acesso seja complexo
devido à dificuldade de coordenar tanto os transmissores como os receptores para
alcançar a conectividade desejada.
Existe também uma outra forma de classificar as redes WDM: redes single-hop, onde
todos os nós podem se comunicar diretamente com todos os outros nós, e redes multiplehop, onde cada nó pode-se comunicar diretamente com apenas uns poucos nós. Nestas
últimas redes, para um nó poder se comunicar com todos os outros nós da rede, um ou
mais nós intermediários são utilizados para retransmitir a mensagem até chegar ao nó
destino. A seguir analisamos, com mais detalhes, estas classes de redes.
2.2.2 Redes WDM Single-Hop
As redes WDM single-hop são as mais simples de implementar. O seu esquema básico
é apresentado na figura 2.3. Cada nó é ligado através de uma fibra a algum tipo de dispositivo ótico que multiplexa todas as entradas em todas as saı́das. Esse dispositivo de
multiplexação pode ser um acoplador passivo em estrela, o qual é um bloco de sı́lica especialmente projetado que envia uma cópia do sinal recebido em cada entrada através de
cada saı́da.
Note que o efeito de dividir o sinal incidente é que cada um dos N nós recebe só
1/N do sinal original. Se N for muito grande, o sinal resultante é muito fraco, tornando
difı́cil a operação a grandes taxas de transmissão. Assim, o sinal incidente deve ter uma
10
potência mı́nima para manter uma taxa de erros aceitável. No entanto, com a tecnologia
atual, podem ser suportadas centenas de nós transmitindo a velocidades na ordem dos
Gbits/s.
A rede WDM single-hop mais geral é a rede FT-FR na qual cada nó possui C transmissores e C receptores, onde C é o número total de canais. Mas, essa configuração
utiliza um número extremamente grande de componentes óticos. Assim, existem vários
protótipos de redes WDM single-hop sendo construı́dos que utilizam transmissores e receptores sintonizáveis para diminuir o número de componentes óticos utilizados. A seguir
são analisadas algumas dessas propostas:
LambdaNet [31]. O esquema de interconexão LambdaNet permite a ligação de N nós
usando uma abordagem FT-FR. Cada nó na rede tem um único transmissor e N receptores,
um para cada canal. O receptor escuta sempre todos os canais e recebe as transmissões que
deseja, sem necessidade de um protocolo de acesso para os diferentes canais, nem tempo
de sintonização. Além disso, permite a implementação de multicast. A desvantagem desta
abordagem é a necessidade de N receptores em cada nó, o que aumenta o custo do projeto
e do sistema final. LambdaNet será descrita em mais detalhes no capı́tulo 4.
Optimul [28]. O esquema de interconexão de Optimul também usa uma abordagem FTFR, e objetiva prover baixa latência com um número pequeno de canais. A idéia básica
consiste em dividir os N nós de processamento em C grupos, onde C é o número de
canais. Os nós dentro de cada grupo usam um canal de transmissão comum. Em cada nó
existem C receptores que permitem a recepção simultânea dos C canais. Além disso, cada
grupo tem uma lógica externa (eletrônica) de acesso que permite a seleção dos pedidos
de transmissão provenientes de nós distintos para um mesmo canal. A sua arquitetura
é similar a LambdaNet exceto pelo fato de reduzir o número de receptores através do
compartilhamento dos canais.
Rainbow [34]. Esta é uma rede que usa a abordagem FT-TR, onde cada nó possui um
canal exclusivo para a transmissão das suas mensagens. Para resolver o problema de
determinar que canal um nó deve sintonizar, Rainbow utiliza um protocolo de busca do
receptor. Se o nó A deseja se comunicar com o nó B, A sintoniza o canal de transmissão
de B, e envia um sinal de polling, pelo seu canal, contendo os endereços de A e B. Se
B não está se comunicando com um outro nó, o seu receptor estará procurando entre os
diferentes canais por uma mensagem de polling com o seu endereço. Eventualmente, B
receberá a mensagem de polling de A, e enviará uma mensagem de conexão pelo seu
canal. O nó A, então, receberá essa mensagem de conexão e começará a transmitir a
mensagem. A principal vantagem destas redes, além de suportar multicast, é o fato de
requererem só um transmissor e um receptor por nó. As suas desvantagens são, por
outro lado, o tempo elevado para estabelecimento de uma conexão e a necessidade de
mecanismos para evitar deadlocks.
Star-Track [10]. O esquema apresentado por esta rede é também FT-TR, mas para resolver o problema de determinar que canal um nó deve sintonizar, Star-Track utiliza uma
11
rede eletrônica em anel para a passagem de tokens. Os tokens são usados para ganhar
acesso aos canais WDM e determinar a sintonização dos receptores num instante determinado. Em cada token existem subtokens, um para cada receptor. Quando o token chega
a um nó que deseja transmitir, o nó escreve o seu endereço no subtoken associado ao nó
destino (só se o subtoken estiver vazio). Quando o token eventualmente chegar ao nó receptor, ele verificará o seu subtoken e determinará o canal que deve ser sintonizado para
poder receber a próxima mensagem.
DMON [33]. Esta rede utiliza um esquema {F,T}T-FR, ou seja, cada nó pode receber
mensagens através de um único canal. Para garantir o mecanismo de controle de acesso a
estes canais, um canal adicional de disseminação é usado. Este canal, chamado de canal
de controle, usa TDMA como protocolo de acesso ao meio. Quando um nó quer transmitir por um dos canais de comunicação ponto-a-ponto, ele deve primeiro esperar pela sua
vez de acessar o canal de controle e então disseminar a sua intenção de transmitir no canal
ponto-a-ponto. Essa disseminação faz com que os outros nós saibam da comunicação que
vai se realizar, evitando qualquer conflito. Como DMON é uma rede orientada ao suporte
de multiprocessadores, ela também possui um segundo canal adicional de disseminação
para a transmissão de eventos globais. Este último canal também usa TDMA como protocolo de acesso ao meio. DMON será descrita em mais detalhes no capı́tulo 4.
OPTNET [14]. Esta rede utiliza um esquema FT-{F,T}R. De forma similar a DMON,
ela também apresenta um canal de disseminação, chamado de canal de pedidos, que usa
TDMA como protocolo de acesso ao meio. As mensagens que fluem através dos canais de
comunicação ponto-a-ponto são as respostas às solicitações enviadas pelo canal de pedidos. Assim, um nó sabe antecipadamente qual é o canal que o seu receptor deve sintonizar,
pois conhece o nó para quem ele fez o pedido. Além disso, esta rede possui outros dois
canais de disseminação para a transmissão de eventos globais. Estes dois últimos canais
adicionais usam TDMA com slot variável como protocolo de acesso ao meio. OPTNET
está sendo proposta no contexto desta tese e será descrita em mais detalhes no capı́tulo 4.
2.2.3 Redes WDM Multiple-Hop
Uma forma de eliminar a limitação de tamanho das redes single-hop, assim como evitar
a necessidade de transmissores e/ou receptores sintonizáveis, é construir uma rede WDM
multiple-hop [57]. Neste tipo de rede, os transmissores e receptores são geralmente fixos
num determinado comprimento de onda,1 e cada nó pode se comunicar diretamente com
apenas uns poucos nós. Para um nó poder se comunicar com todos os outros nós da rede,
um ou mais nós intermediários devem ser utilizados para retransmitir a mensagem até o
nó destino. Devido ao fato de que a maioria de redes WDM multiple-hop não precisam
dividir o sinal de entrada entre várias saı́das, a potência mı́nima requerida para ter uma
taxa de erros baixa é muito menor que numa rede single-hop.
1
Algumas vezes são usados dispositivos sintonizáveis para adaptar a rede a possı́veis falhas ou como
resposta a uma mudança substancial nos padrões de tráfego.
12
NIU 0
NIU 4
Coupler
NIU 1
NIU 5
NIU 2
NIU 6
Coupler
NIU 3
NIU 7
Figura 2.4: Topologia da Rede TeraNet
As redes WDM multiple-hop podem ser projetadas de várias formas. A idéia básica
é construir um grafo de conectividade entre os nós, tal que o número de hops necessários
para que dois nós quaisquer possam se comunicar seja pequeno. Desta forma, o número
de vezes que uma mensagem tem que ser retransmitida até chegar ao nó destino também é
pequeno. Poucas redes deste tipo têm sido construı́das, alguns exemplos são apresentados
a seguir.
TeraNet [60]. Neste sistema, os nós de processamento são ligados à rede através das suas
NIUs (Network Interface Units). Cada NIU tem dois transmissores e dois receptores,
como mostra a figura 2.4. Todos os transmissores e receptores são fixos em diferentes
comprimentos de onda. Os comprimentos de onda ao longo da rede são arranjados de
forma que cada um deles possua um único transmissor e um único receptor. Assim,
cada NIU pode enviar dados a duas NIUs e recebê-los de duas outras, possivelmente
diferentes das primeiras. Note que na figura 2.4, a NIU 0 pode enviar dados às NIUs 4
e 6, e pode receber das NIUs 5 e 6. As NIUs, por sua vez, estão conectadas através
de múltiplos acopladores passivos em estrela. A tarefa é então garantir que exista um
caminho de comunicação entre duas NIUs quaisquer. Na figura 2.4, por exemplo, para a
NIU 0 se comunicar com a NIU 3 é necessário passar pela NIU 6. Observe também que
existem outros possı́veis caminhos para essa mesma comunicação (e.g., NIU 0, NIU 4,
NIU 1, NIU 5, NIU 3). Uma vantagem importante da rede TeraNet é que ela não necessita
protocolos de controle de acesso para mediar a comunicação, apesar do pequeno número
de receptores e transmissores utilizados.
2.2.4 Processamento Paralelo e Distribuı́do com Redes WDM
Uma rede WDM é ideal para a computação paralela ou distribuı́da, pois ela pode prover
canais ponto-a-ponto entre cada par de nós ou canais compartilhados com capacidade de
disseminação. Quando se usa uma rede WDM na implementação de computadores paralelos ou distribuı́dos, os diferentes canais de comunicação devem ser arranjados de forma
a permitir que os elementos de processamento se comuniquem sob condições ótimas de
baixa latência, uma grande largura de faixa e escalabilidade. No entanto, três desafios
surgem em torno deste tipo de projeto:
13
Propriedade
1995
Futuro
Número de canais
250
5000
Largura de faixa de cada canal
1 Gbit/s
50 Gbits/s
Tempo de seleção de um canal
< 5 nseg
< 2 nseg
Custo por nó
∼ US$ 20000 ∼ US$ 1000
Tabela 2.1: Caracterı́sticas da Tecnologia OTDM
• Fazer uso efetivo da largura de faixa oferecida pela fibra ótica, tanto implementando
um número maior de canais WDM numa única fibra (dense WDM), como melhorando as condições efetivas de operação dos diferentes dispositivos optoeletrônicos.
• Implementar protocolos de coerência e sincronização que se beneficiem da imensa
largura de faixa das redes WDM.
• Minimizar a quantidade de tempo gasto na decisão de que processadores vão se
comunicar por que canais, e maximizar o tempo da transferência de dados.
Alguns exemplos da utilização de redes óticas na implementação de computadores
paralelos são LambdaNet, Optimul, DMON e OPTNET. DMON e OPTNET apresentam
um número de componentes óticos menor do que LambdaNet e Optimul, sendo que o
número de componentes de Optimul é inferior ao de LambdaNet. Além disso, o protocolo
de coerência de DMON e OPTNET é um tanto mais elaborado que o de LambdaNet e
Optimul. No que se refere ao tempo utilizado na arbitragem dos canais, LambdaNet não
consome tempo nenhum, Optimul gasta menos que OPTNET e OPTNET, por sua vez,
gasta menos que DMON. Todas estas redes serão descritas e comparadas com maiores
detalhes no capı́tulo 4.
2.3 Redes OTDM
As redes óticas OTDM (Optical Time Division Multiplexing) foram propostas como uma
alternativa às redes WDM, e.g., [70, 59]. Esta abordagem usa um único comprimento de
onda que é disseminado a todos os nós para transportar os diferentes sinais ou canais de
comunicação, sendo que cada canal usa frequências de relógio compatı́veis com as dos
componentes eletrônicos.
As redes OTDM possuem algumas vantagens em relação às redes WDM. Entre as
vantagens principais estão: a) a sincronização inerente à multiplexação OTDM permite a
implementação de um controle e arbitragem mais eficientes, b) OTDM requer, na maioria das vezes, um demultiplexador ativo e um sistema para o alinhamento de canais, mas
não requer um controle preciso do filtro do receptor nem do comprimento de onda do
transmissor, e c) requer um único laser. No entanto, a tecnologia OTDM ainda não é suficientemente madura. Espera-se que os rápidos avanços nas pesquisas nesta área permitam
um grande desenvolvimento da tecnologia OTDM nos próximos anos. Na tabela 2.1 são
14
Modulators
A
A
B
B
Laser
C
C
Elect. cycle
D
D
Delay
Figura 2.5: Sistema de Transmissão OTDM
resumidas as propriedades mais importantes das redes OTDM, mostrando tanto os valores
alcançados em 1995 como os potencialmente alcançáveis no futuro [59].
2.3.1 A Tecnologia OTDM
A figura 2.5 mostra o esquema de um sistema de transmissão OTDM com N=4 canais.
Uma seqüência de pulsos de relógio óticos extremamente curtos (sua duração é na ordem dos pico ou femto-segundos) proveniente de um laser é dividida em N partes. Cada
seqüência é individualmente modulada por um sinal de dados eletrônico e retardada por
uma fração do perı́odo de relógio. Essas seqüências de pulsos modulados são multiplexadas de forma passiva (operação OR) para serem transmitidas através de uma única fibra.
Isto permite obter uma taxa de transmissão agregada N vezes superior a taxa de transmissão eletrônica, a qual é observada pelos moduladores e receptores. Note que tanto
os moduladores como os receptores são dispositivos optoeletrônicos controlados, a maioria das vezes, por drivers eletrônicos. Note também que a necessidade do laser produzir
pulsos extremamente curtos (menores que 1/N do perı́odo do relógio) é para evitar interferência entre os diferentes canais multiplexados.
Do lado do receptor, essa seqüência de pulsos única é demultiplexada e o seu relógio
recuperado. Desta forma, o sinal ótico de entrada é separado nos diferentes canais de
dados. A demultiplexação pode ser feita através de um esquema optoeletrônico ou totalmente ótico.
A potência e comprimento de onda do sinal ótico são ajustados para otimizar as caracterı́sticas de transmissão na fibra. Amplificadores óticos podem ser utilizados para manter
a potência correta do sinal e assegurar uma relação sinal/ruı́do suficiente para operar livre
de erros. A dispersão pode também ser facilmente controlada nestes sistemas através da
utilização de técnicas de transmissão por solitons.
2.3.2 Processamento Paralelo e Distribuı́do com Redes OTDM
Esta tecnologia, embora ainda não muito desenvolvida, também tem sido utilizada para o
projeto de computadores paralelos e distribuı́dos. Por exemplo, Nowatzyk e Prucnal [59]
propuseram um multiprocessador totalmente interconectado através de uma rede OTDM
15
Laser
MUX
HUB
S
Delay1
DMUX
Delay2
Rx
Mod.
TOAD
Figura 2.6: Sistema OTDM para Multiprocessadores e Multicomputadores
para tomar vantagem da sua capacidade de disseminação escalável. A sua proposta reconhece que a ótica produz oportunidades únicas para a simplificação do protocolo de
coerência de caches e a sincronização nos multiprocessadores escaláveis.
Na figura 2.6 mostramos o esquema do sistema proposto em [59]. Os pulsos de relógio
do laser são separados por um divisor ótico passivo (“DMUX”) que distribui o sinal a
todos os nós. Em cada nó, um modulador (“Mod.”) codifica os dados nos pulsos de luz,
para posteriormente serem enviados a um elemento de retardo programável (“Delay1”)
que determina em qual canal esses dados aparecerão. A seguir, a saı́da de todos os nós é
enviada de volta para um acoplador central (“MUX”) que combina todos os pulsos para
redistribuı́-los novamente a todos os nós.
O receptor em cada nó, por sua vez, usa um dispositivo (“S”) que separa os pulsos de
dados dos pulsos de relógio (e.g., em virtude da sua polarização), e passa os dados a um
outro elemento de retardo programável (“Delay2”) que seleciona o canal a ser recebido.
O pulso de relógio é então utilizado para abrir uma porta l ógica AND que permite isolar
os dados do canal selecionado dos outros dados. O fluxo de bits resultante é então enviado
a um fotodiodo que converte os dados de volta ao domı́nio eletrônico. Note que a porta
lógica AND é implementada com um dispositivo chamado de TOAD (Terahertz Optical
Asymmetric Demultiplexer) [69] que permite taxas de transmissão de 250 Gbits/s, sendo
que os limites tecnológicos indicam que uma operação a taxas superiores aos 5 Tbits/s é
concebı́vel.
Uma caraterı́stica importante deste sistema é que os componentes eletrônicos determinam a frequência do canal. Além disso, cada nó é capaz de transmitir e receber em qualquer um dos canais. Em particular, os nós são também capazes de receber a sua própria
transmissão. Esta capacidade permite que um nó compense o retardo da propagação do
sinal entre o seu modulador e o acoplador central, de forma a alinhar as transmissões de
todos os nós.
16
Concentrator
Workstation
Figura 2.7: Uma Rede FDDI
2.4 Outras Redes Óticas
Embora existam muitas propostas de canais de interconexão óticos, como por exemplo
Fibre-Channel [5], OPTOBUS [68] e SuperHIPPI, entre outros, poucas são as redes comerciais que utilizam eficientemente a comunicação ótica na transmissão de suas mensagens. Isso talvez se deva aos preços relativamente altos que a tecnologia ótica ainda
apresenta na atualidade. Os exemplos mais conhecidos deste tipo de rede, além das redes
WDM e OTDM, são as redes FDDI, ATM e Gigabit-Ethernet.
2.4.1 Redes FDDI
As redes FDDI (Fiber Distributed Data Interface) [4] são redes originalmente projetadas
para operar sobre enlaces de fibra ótica a 100 Mbits/s e com distâncias entre estações que
podem chegar a 60 kilômetros. Atualmente, o padrão FDDI também inclui suporte para
a interconexão de nós através de cabos de cobre, mas com distâncias menores que 100
metros.
Fisicamente, as redes FDDI são formadas por dois anéis que ligam vários dispositivos
chamados de concentradores (figura 2.7). Cada nó da rede deve estar ligado a um desses
concentradores. A transmissão de dados através dos anéis da rede é feita em sentidos
contrários para facilitar a recuperação de falhas. Além disso, estas redes permitem a
transmissão sı́ncrona ou assı́ncrona dos pacotes de dados através dos anéis. O protocolo
de acesso ao meio usado pelas redes FDDI é o de passagem de tokens.
Estas redes não foram utilizadas mais intensamente na área de processamento paralelo
por apresentarem caracterı́sticas de desempenho ainda inferiores às requeridas por estes
sistemas. Apesar da taxa de transmissão nominal ser de 100 Mbits/s, taxas de 75 Mbits/s
apenas são atingidas em média na prática. Além disso, com a chegada de novos padrões
de rede, como por exemplo ATM e Gigabit-Ethernet, elas estão sendo substituı́das.
17
ATM Switch
Workstation
Figura 2.8: Uma Rede ATM
2.4.2 Redes ATM
As redes ATM (Asynchronous Transfer Mode) usam um protocolo de comutação de rede
orientado a conexão para transmitir pequenas unidades de tamanho fixo, chamadas de
células. A idéia das células é facilitar a comutação por hardware. A camada fı́sica das
redes ATM normalmente utiliza outros padrões já existentes, como por exemplo SONET
(Synchronous Optical Network) ou Fibre-Channel, para permitir taxas de transmissão de
155, 622 e potencialmente 2480 Mbits/s sobre fibras óticas. Uma rede ATM tı́pica é
apresentada na figura 2.8. Cada processador está conectado a um comutador ATM, e
todos os comutadores estão ligados por enlaces ponto-a-ponto com dois canais, um para
a transmissão e outro para a recepção das células.
No que se refere à utilização destas redes no processamento paralelo, as redes ATM
têm sido estudadas principalmente no contexto dos multicomputadores fracamente acoplados. Alguns exemplos de tais estudos são: o uso de redes ATM para simplesmente
aproveitar a sua maior taxa de transmissão em relação a outras redes de área local existentes [40, 77], a implementação de primitivas de comunicação coletiva com ajuda dos comutadores ATM [41], o suporte de acessos a memória remota com baixa latência usando
redes ATM [74], a implementação de mensagens ativas em redes ATM [79, 77], e uma
interface de rede a nı́vel do usuário [78].
Tais estudos mostram que a comunicação através de redes ATM atuais não alcança o
patamar de largura de faixa e latência desejado em computação paralela. Desta forma,
mesmo sendo o desempenho das redes ATM superior ao de outras redes locais existentes
(e.g., Ethernet, Token-Ring, Fast-Ethernet, entre outras), a sua utilização ainda está orientada às aplicações paralelas e distribuı́das com uma relação computação/comunicação
elevada. Além disso, a natureza em rajadas dos padrões de comunicação encontrados nas
aplicações paralelas requer algumas modificações no padrão ATM para que o seu desempenho seja tão robusto como o obtido em computadores paralelos dedicados.
18
10 Gbps
Workstation
100 Gbps
Switch
Figura 2.9: Uma Rede Gigabit-Ethernet
2.5 Redes Gigabit-Ethernet
Gigabit-Ethernet é uma extensão ao padrão IEEE 802.3 (Ethernet) que permite a
atualização progressiva da infraestrutura de rede local já existente. Anteriormente, o
padrão 802.3 incluia taxas de transmissão de 1 a 100 Mbits/s (Fast-Ethernet). GigabitEthernet incrementa essas taxas de transmissão a 1 Gbit/s, suportando uma comunicação
comutada bidirecional tanto através de cabos de cobre como por meio de redes óticas.
Na prática, estas redes apresentam taxas de transmissão efetiva próximas aos 950 Mbits/s
(bidirecional) [26]. Devido a que Gigabit-Ethernet utiliza a mesma filosofia e protocolos
dos seus predecesores, a interconexão com redes Ethernet e Fast-Ethernet é simples e
facilmente escalável através de comutadores e/ou repetidores (figura 2.9). Além disso,
de forma similar a ATM, Gigabit-Ethernet permite a implementação de mecanismos que
garantem qualidade de serviço na transmissão dos dados.
Mesmo quando são utilizadas fibras óticas para ligar os elementos de processamento
aos comutadores, distâncias máximas de 320 metros podem existir entre os equipamentos
terminais da rede devido às restrições temporais do protocolo de acesso ao meio usado
por este tipo de redes (CSMA/CD) [29]. Desta forma, Gigabit-Ethernet está orientada,
principalmente, a suportar o grande tráfego gerado nas redes locais atuais, onde cada vez
é mais freqüente a utilização de grandes arquivos com imagens, som e video, assim como
a troca de informações com outras redes.
Como esta é uma tecnologia relativamente nova, ainda não existem trabalhos avaliando este tipo de rede no desempenho de aplicações paralelas e/ou distribuı́das. No
entanto, a espectativa é que Gigabit-Ethernet apresente um desempenho igual ou melhor que as redes ATM devido a sua grande largura de faixa e a sua capacidade inata de
disseminação.
2.6 Conclusões
Devido às caracterı́sticas únicas das redes óticas, redes deste tipo estão sendo consideradas
no projeto de sistemas de computação paralela e distribuı́da. Os ganhos de desempenho
19
apresentados por estas redes não provêm unicamente da sua maior largura de faixa, mas
da possibilidade de simplificar e otimizar os protocolos de coerência e/ou sincronização,
usados nesses sistemas, através de uma comunicação por disseminação. Desta forma, as
diferenças de desempenho entre um sistema baseado numa rede eletrônica e um sistema
baseado numa rede ótica podem chegar a ser bastante significativas, mesmo quando as
latências de comunicação são as mesmas em ambos os sistemas.
Para aproveitar todo o potencial da ótica, técnicas de multiplexação (e.g., WDM ou
OTDM) são normalmente utilizadas. Nos sistemas apresentados nos capı́tulos 4, 5 e 6
será utilizada a técnica de multiplexação WDM devido a sua imediata disponibilidade,
mas nada nesses sistemas é absolutamente dependente desta técnica de multiplexação.
20
Capı́tulo 3
Sistemas de Memória
Neste capı́tulo apresentamos alguns fundamentos sobre os sistemas de memória. Como
as caches óticas que propomos podem ser organizadas de forma semelhante às caches
eletrônicas, começamos o capı́tulo descrevendo os conceitos principais dessas caches tradicionais. Em seguida, abordamos os conceitos principais relativos às memórias de linha
de retardo ótica.
3.1 Memórias Cache Tradicionais
Uma das propriedades mais importantes e mais exploradas nos programas de computador
é a sua localidade de referência. Em programas seqüenciais, a localidade de referência
pode ser de dois tipos. O primeiro é a localidade temporal, a qual estabelece que os dados
e instruções recentemente acessados têm uma probabilidade maior de serem acessados
num futuro próximo. O segundo tipo é a localidade espacial, a qual estabelece que os
dados e instruções com endereços próximos apresentam uma certa tendência a serem
referenciados juntos.
Esses dois tipos da localidade de referência, aliados ao fato de que memórias mais
rápidas são mais caras, produziram o conceito de hierarquia de memória: memórias
pequenas e rápidas são usadas para manter os elementos mais recentemente acessados
mais próximos do processador. A hierarquia de memória pode ter vários nı́veis, sendo os
mais comuns (de menor a maior capacidade): registradores, cache, memória principal e
memória secundária (disco). Nesse trabalho nos concentramos nas memórias cache.
Uma cache é uma memória pequena e rápida localizada perto do processador para
manter os dados e instruções mais recentemente acessados. Quando o processador encontra na cache o elemento que solicita, temos um “acerto” na cache. Por outro lado,
quando o processador não encontra na cache o elemento solicitado, temos uma “falha”
na cache. Neste último caso, um bloco de dados ou instruções de tamanho fixo contendo
o elemento solicitado, chamado de bloco de cache, é recuperado da memória de nı́vel
inferior na hierarquia e colocada na cache. As caches possuem uma entrada para cada
bloco de cache que elas podem armazenar. O fato de um bloco da cache ser geralmente
maior que o tamanho dos elementos individuais acessados pelo processador é baseado no
21
princı́pio da localidade espacial.
Nos sistemas atuais, entre o processador e a memória principal pode existir mais de
um nı́vel de cache. Normalmente existe uma cache primária no mesmo chip do processador, e uma cache secundária externa a ele. No entanto, existem também sistemas que
incorporam caches de terceiro nı́vel na sua hierarquia. Em alguns casos, a cache primária
é dividida em duas, uma cache para dados e outra para instruç ões. A cache secundária em
geral é única, misturando tanto blocos de dados como de instruções.
Desta forma, cada memória cache possui um conjunto de caracterı́sticas que determinam, por exemplo, a posição de um bloco de memória dentro da cache, a forma de
identificação de cada um desses blocos, o procedimento para a substituição de um bloco,
a maneira como são feitas as escritas através da cache. Nas subseções seguintes discutimos essas caracterı́sticas, abordando as opções mais comuns para a sua implementação.
3.1.1 Associatividade das Caches
Existem três abordagens para determinar qual é a entrada da cache que um bloco recuperado do nı́vel inferior da hierarquia deve ocupar:
1. Se o bloco tem uma única entrada onde ele pode aparecer, a cache é denominada
diretamente mapeada. O mapeamento é calculado normalmente através do módulo
do endereço do bloco pelo número de blocos na cache.
2. Se o bloco pode ser colocado em qualquer entrada, a cache é denominada totalmente
associativa.
3. Se o bloco pode ser colocado num conjunto restrito de entradas, a cache é denominada associativa por conjunto. Assim, um bloco é primeiro mapeado num conjunto
e depois colocado em qualquer uma das entradas desse conjunto. O mapeamento
do conjunto é calculado normalmente através do módulo do endereço do bloco pelo
número de conjuntos na cache.
3.1.2 Identificação de Blocos
As caches possuem uma etiqueta de endereço para cada uma das suas entradas. Esta etiqueta armazena o endereço do bloco presente nessa entrada naquele instante. Em resposta
a um pedido do processador, todas as etiquetas da cache que podem conter o bloco solicitado são verificadas em paralelo para determinar se o bloco está ou não presente na
cache.
Normalmente, um bit extra, chamado de valid-bit, é também incluı́do na etiqueta de
cada entrada. Esse bit tem como função indicar se o endereço daquela entrada é válido ou
não. Se este bit não está ativado, a verificação do seu endereço não será realizada.
22
3.1.3 Substituição de Blocos
Quando acontece uma falha na cache, o controlador deve selecionar um bloco presente
nela para ser substituı́do pelo bloco solicitado. Uma vantagem das caches diretamente
mapeadas é a simplificação desta decisão: existe somente uma entrada onde o novo bloco
pode residir. Nas caches associativas por conjunto ou totalmente associativas, no entanto,
uma das seguintes estratégias de seleção é normalmente implementada:
• Aleatória. Os blocos são aleatoriamente selecionados para espalhar uniformemente
as alocações dos blocos nas entradas.
• LRU (Least Recently Used). O bloco selecionado é o que não foi utilizado por um
tempo maior. Neste caso, o princı́pio da localidade temporal é aplicado.
Para a implementação da estratégia LRU, cada entrada da cache deve possuir alguns
bits adicionais para gravar a ordem de acesso aos blocos. Devido à limitação no número de
bits disponı́veis nas etiquetas de cada entrada, polı́ticas aproximadas são implementadas
na maioria dos casos.
3.1.4 Estratégias de Escrita
As polı́ticas de escrita normalmente diferenciam os projetos das caches. As duas opções
básicas quando acontece uma escrita na cache são:
1. Write-through. A informação é escrita tanto no bloco da cache como na memória
de nı́vel inferior.
2. Write-back. A informação é escrita unicamente no bloco da cache. O bloco modificado é escrito na memória de nı́vel inferior somente quando ele for substituı́do.
No caso da polı́tica write-back, um bit extra, chamado de dirty-bit, é usado para marcar as entradas com blocos modificados que ainda não foram atualizados na memória.
Adicionalmente, como os dados não são necessários numa escrita, duas são as opções
mais comuns numa falha de escrita:
1. Write-allocate. O bloco é primeiro carregado, como no caso de uma falha de leitura,
e só depois feita a escrita.
2. Write-around. O bloco é modificado na memória de nı́vel inferior, não precisando
carregá-lo na cache.
23
Feedback Path
Input
Input and
Feedback
Gating
Output
Signal
Restoration
Delay Medium
Figura 3.1: Diagrama de Blocos de uma Memória de Linha de Retardo
3.2 Memórias de Linha de Retardo
A velocidade finita de propagação da luz nas fibras e as altas taxas de transmissão que
podem ser atingidas nos sistemas óticos fazem com que as fibras possam ser utilizadas
como linhas de retardo, e estas, por sua vez, como meios de armazenamento óticos [66,
46]. Esta é uma idéia que ainda não foi explorada para cacheamento de dados e muito
menos dentro da área de processamento paralelo e distribuı́do.
Uma opção para a implementação de uma memória de linha de retardo é apresentada
na figura 3.1 [36]. O módulo de entrada e realimentação permite escrever novos dados na
memória ao mesmo tempo que mantém circulando os dados anteriormente ingressados. O
módulo de restauração do sinal faz com que os erros por perdas de dispersão e/ou absorção
sejam praticamente eliminados. A leitura dos dados armazenados neste tipo de memória
é normalmente realizada após a fase de restauração do sinal para diminuir a probabilidade
de erros de leitura.
As linhas de retardo usadas para a implementação da memória podem usar tanto uma
comunicação sı́ncrona como uma comunicação assı́ncrona. Na comunicação sı́ncrona,
cada bloco de dados tem um tempo especı́fico para ser inserido ou chegar num ponto
determinado da fibra. Em contraste, na comunicação assı́ncrona, um bloco de dados não
tem um tempo especı́fico para chegar ou ser inserido na fibra, mas os bits que o formam
têm restrições de tempo especı́ficas a partir do instante em que o bloco é detectado na
fibra.
Na comunicação sı́ncrona, as restrições de temporização apresentam algumas vantagens e desvantagens. As principais vantagens são a utilização completa da largura de
faixa do canal e a simplificação do hardware necessário para a sua implementação, já que
os pulsos de luz que codificam a informação só podem aparecer em tempos especı́ficos e
previamente estabelecidos. Por outro lado, a sua maior desvantagem é que os retardos obtidos nas fibras óticas dependem de alguns fatores externos que dificultam a manutenção
das restrições de temporização do sistema. As variações de temperatura, por exemplo,
mudam o comprimento da fibra, alterando assim o retardo produzido pela fibra.
A comunicação assı́ncrona também apresenta algumas vantagens e desvantagens. A
sua vantagem principal é que mesmo que ocorram variações pequenas e contı́nuas no retardo produzido pela fibra, o funcionamento correto do sistema é garantido. Por outro
24
Feedback Path
CLK
MUX
OUTPUT
INPUT
WRITE
Stretch
Delay Line
Figura 3.2: Memória de Linha de Retardo Sı́ncrona
lado, as desvantagens deste tipo de comunicação são o desperdı́cio da largura de faixa do
canal com bits que identificam o inı́cio e fim de cada bloco de dados, e a maior complexidade do hardware necessário para a leitura desses blocos.
A seguir apresentamos alguns exemplos de implementação das memórias de linha de
retardo sı́ncronas e assı́ncronas, assim como os principais problemas que enfrentam esses
tipos de estruturas.
3.2.1 Memórias Sı́ncronas
Existem duas alternativas tecnológicas para a implementação de memórias sı́ncronas: a
que utiliza componentes totalmente óticos e a que só utiliza componentes optoeletrônicos.
A implementação de uma memória de linha de retardo sı́ncrona através de componentes
totalmente óticos oferece a vantagem de poder usar taxas de transmissão bastante elevadas, permitindo armazenar mais dados num comprimento de fibra menor e com latências
também menores.
Por ter caracterı́sticas interessantes e mostrar as possibilidades que oferecem os componentes totalmente óticos, a seguir descrevemos a implementação da memória de linha
de retardo sı́ncrona proposta em [36].
A memória foi implementada de acordo com o esquema apresentado na figura 3.2. O
multiplexador (“MUX”) atua como o módulo de entrada e realimentação da figura 3.1,
permitindo a passagem de somente uma das suas entradas dependendo do sinal externo
WRITE. Quando WRITE está ativado, a entrada de novos dados é permitida. Por outro
lado, quando o sinal WRITE está desativado, a realimentação dos dados é realizada. A
restauração do sinal é feita através da operação lógica AND entre o sinal de relógio CLK
e os dados provenientes da linha de retardo. Desta forma, como se observa na figura 3.3,
pulsos novos, livres de dispersão e absorção, são gerados para continuar com o processo
de realimentação.
Para garantir uma sobreposição entre o sinal de entrada e o sinal de relógio CLK
(figura 3.3), um circuito de stretching é utilizado na entrada dos dados para aumentar a
largura dos pulsos por um fator 2 × δt. Desta forma, o circuito de stretching também
permite certa tolerância a variações no retardo da linha ótica. Note que a modulação dos
dados no sistema proposto é em banda base usando o código de linha unipolar RZ.
Retornando à figura 3.2, a leitura dos dados armazenados na memória ótica é feita
através do splitter S. Este elemento simplesmente divide a potência ótica de entrada em
25
Input
δt
δt
CLK
T
Output
Figura 3.3: Pulse-Stretching para a Memória de Linha de Retardo Sı́ncrona
duas. Uma parte vai para o processo de realimentação e a outra para o receptor de leitura.
Note que a capacidade de armazenamento deste tipo de memórias é proporcional ao
comprimento da fibra e à taxa de transmissão utilizada. Mais especificamente, a capacidade de armazenamento da fibra em bits é calculada pela expressão:
(comprimento da fibra × taxa de transmissão) ÷ velocidade da luz
onde a velocidade da luz é aproximadamente 2, 1 × 108 m/s. Podemos então concluir, que
existe uma relação entre o comprimento da linha de retardo ótica (e por conseqüência,
a sua capacidade de armazenamento) e a latência de acesso à memória, já que, quanto
maior a linha de retardo, maior será o tempo de espera (em média) para um dado passar
por um determinado ponto da fibra.
Finalmente, para poder acessar os dados armazenados na memória através de circuitos eletrônicos operando a frequências inferiores às dos componentes totalmente óticos
precisamos de mecanismos de sincronização e de uma interface de entrada/saı́da optoeletrônica. Estes mecanismos serão descritos a seguir.
Sincronização. Cada dado armazenado na memória de linha de retardo possui um
endereço único como em qualquer memória tradicional. Mas, como o acesso aos dados na linha de retardo é seqüencial e depende do tempo que eles demoram para percorrer
a fibra, um contador que indique o endereço do dado que está passando pela frente da
interface de entrada/saı́da é indispensável para uma correta sincronização do acesso. No
caso da memória de linha de retardo implementada com componentes totalmente óticos,
as elevadas taxas de transmissão utilizadas criam a necessidade de que o contador também
seja baseado nesta tecnologia.
Um contador totalmente ótico é apresentado na figura 3.4 [42]. Note que a estrutura do
contador é completamente isolada da estrutura da memória ótica. Quando um dado vai ser
lido ou escrito, o endereço do dado fornecido através da entrada ADDRESS é comparado
com o endereço do dado que está a disposição nesse instante (COUNT). Quando estes dois
endereços forem iguais, o sinal de inı́cio de operação (START) será ativado, permitindo o
acesso ao dado correspondente.
No diagrama da figura 3.4, além do sinal de relógio CLK, é necessário um sinal WCK
que indica o inı́cio de uma nova palavra. Este sinal é um pulso de relógio a cada N ciclos,
26
WCK
N
CLK
N
ADDRESS
WA
Address
Comparator
CLK
1
COUNT
WCK
N
WCK
Address
Counter
1
Memory
Loop
INPUT
WRITE
START
CLK
∆
OUTPUT
Figura 3.4: Memória Sı́ncrona com Contador Ótico
ELECTRONIC
SIGNALS
NEXT
Rx
DATA_OUT
Rx
DATA_IN
Tx
ALL-OPTIC
COMPONENTS
DELAY LINE
MEMORY
OUTPUT
INPUT
ADDRESS
WRITE
ADDR_ENABLE
WRITE_ENABLE
K
Tx
START
CLK
WA
ADDR_ENABLE
Tx
M
WCK
Figura 3.5: Interface Optoeletrônica da Memória Sı́ncrona
onde N é o tamanho em bits de cada palavra. O sinal WA é ativado cada vez que um novo
endereço precisa ser inserido no sistema. Finalmente, ∆ representa o número de bits que
podem ser armazenados na memória ótica.
Interfaces de Entrada/Saı́da. Devido às elevadas taxas de transmissão que podem ser
atingidas através da utilização de componentes totalmente óticos, uma divisão muito clara
deve existir entre as partes eletrônica e ótica. Para conseguir essa divisão e ao mesmo
tempo permitir uma fácil interação entre as duas partes, uma interface de entrada/saı́da
foi projetada em [36]. Esta interface, além de transformar os sinais eletrônicos em sinais
óticos, e vice-versa, permite que a velocidade de operação da parte eletrônica seja inferior
à velocidade de operação da parte ótica por praticamente qualquer fator. A figura 3.5
mostra o diagrama desta interface.
Quando o controlador eletrônico da memória deseja fazer uma leitura, ele ativa
o sinal ADDR ENABLE para inserir o endereço do dado através do pino DATA IN.
Após configurado o endereço, o sinal ADDR ENABLE é desativado, e o dado é lido
27
através do pino DATA OUT. Numa escrita, o processo de programação do endereço é
o mesmo. A diferença está em que quando o sinal ADDR ENABLE é desativado, o sinal
WRITE ENABLE é ativado para poder escrever os dados através do pino DATA IN. Imediatamente após a escrita do dado, o sinal WRITE ENABLE deve ser novamente desativado.
Todas as escritas e leituras através de DATA IN e DATA OUT, respectivamente, devem
estar sincronizadas com o sinal NEXT. Este sinal indica que o bit presente em DATA IN
já foi lido pelos circuitos óticos, ou que existe um outro bit presente em DATA OUT para
ser lido pelos circuitos eletrônicos. Os sinais que ligam esta interface com a memória de
linha de retardo são os mesmos que foram definidos para a figura 3.4.
A relação entre as velocidades de operação da parte eletrônica e da parte ótica é estabelecida pelos retardos K e M. Espera-se que esta relação possa ser da ordem de 1:20000
quando lógicas de controle totalmente óticas mais desenvolvidas forem utilizadas. Desta
forma, relógios eletrônicos de 500 MHz poderiam se misturar com elementos óticos operando próximos dos 10 THz.
Como se pode observar na descrição acima, a lógica de controle de uma memória
de linha de retardo sı́ncrona é bastante simples. A implementação desse mesmo tipo
de memória apenas com componentes optoeletrônicos é ainda mais simples, já que a
lógica de controle pode ser construı́da no domı́nio eletrônico, simplificando as tarefas de
regeração do sinal e de sincronização dos acessos, e eliminando a necessidade de uma
interface de entrada/saı́da.
3.2.2 Memórias Assı́ncronas
Embora os componentes totalmente óticos sejam cada vez mais comuns, tarefas complexas ou com requerimentos especı́ficos, como as utilizadas pelas memórias assı́ncronas,
podem ser melhor realizadas no domı́nio eletrônico, onde os componentes têm se desenvolvido bastante e a tecnologia é suficientemente madura. Desta forma, na atualidade a
única alternativa de implementação de memórias assı́ncronas é através de componentes
optoeletrônicos.
No entanto, pelo fato de permitir que as tarefas de controle e regeração do sinal possam
ser realizadas no domı́nio eletrônico, a conversão do sinal do domı́nio eletrônico para o
ótico, e vice-versa, é necessária antes e depois dos dados serem transmitidos pela linha de
retardo. Isto faz com que as taxas de transmissão usadas na implementação da memória
assı́ncrona sejam bastante baixas (na ordem dos Gbits/s) em relação à largura de faixa
das fibras óticas. Técnicas de multiplexação devem ser então utilizadas para aumentar a
capacidade de armazenamento da linha de retardo sem aumentar a latência de acesso aos
dados. Exemplos destas técnicas de multiplexação são WDM e OTDM, como mostra o
capı́tulo 2.
Para a implementação de uma linha de memória assı́ncrona usando técnicas de
multiplexação, cada canal deve ter elementos eletrônicos de recepção/transmissão
assı́ncrona, similares aos atuais UARTs (Universal Asynchronous Receiver-Transmitter),
além dos seus correspondentes receptores e transmissores optoeletrônicos (figura 3.6).
28
Electronic
Interfacing
Rx UART Tx
Rx UART Tx
Figura 3.6: Memória de Linha de Retardo Assı́ncrona
A capacidade de armazenamento deste tipo de memória é proporcional ao número de
canais disponı́veis, ao comprimento dos canais e à taxa de transmissão utilizada. Mais
especificamente, a capacidade de armazenamento da fibra em bits é aproximadamente
igual a:
(número canais × comprimento da fibra × taxa de transmissão) ÷ velocidade da luz
O fato da capacidade de armazenamento não ser exatamente igual à expressão acima, é
devido à perda de largura de faixa com a transmissão dos bits adicionais que determinam o
inı́cio e final de cada bloco de dados. A perda da largura de faixa depende do tamanho de
cada bloco e do número de bits utilizados para marcar o inı́cio e fim dos blocos. Mas, esta
caracterı́stica desvantajosa é compensada com a maior tolerância do sistema às variações
que possa ter o retardo produzido pela fibra.
3.2.3 Problemas Principais
Tanto a alternativa da memória sı́ncrona quanto da memória assı́ncrona apresentam alguns
problemas de implementação que felizmente estão sendo resolvidos com o avanço da
tecnologia ótica. Entre os principais problemas podemos citar a variação do comprimento
da fibra com as variações de temperatura, erros de transmissão produzidos por falhas
próprias dos sistemas de comunicação ótica, e o tardio desenvolvimento dos componentes
totalmente óticos. A seguir discutimos esses problemas, mostrando algumas das suas
possı́veis soluções.
Compensação de Temperatura. A variação do comprimento da fibra (∆l) em função
das variações de temperatura (∆T ) é determinado pela equação:
∆l = α × l0 × ∆T
onde α é o coeficiente de dilatação térmica da fibra e l0 é o seu comprimento inicial. O
valor tı́pico do coeficiente de dilatação térmica é 10−6 o C −1 . Devido a este fenômeno,
uma memória de linha de retardo ótica que suporte uma variação de até 8 o C não pode
armazenar mais de 3800 bits, independente do comprimento da fibra ou da taxa de transmissão ótica utilizados [66]. Esta limitação se deve a que as variações no tamanho da
fibra impediriam a correta determinação do endereço do bit acessado. Para superar esta
restrição foram sugeridas algumas técnicas, dentre as quais:
29
1. Troca de Materiais. Uma alternativa para eliminar os indesejáveis efeitos da
variação de temperatura é usar materiais pouco sensı́veis a este fator. Um exemplo
são as fibras com coberturas especiais que diminuem a variação de comprimento
na presença de mudanças de temperatura. Outra opção é a utilização de fibras com
ı́ndices de refração inversamente proporcionais às mudanças de temperatura. O
objetivo é compensar as mudanças no comprimento da fibra com um aumento proporcional no ı́ndice de refração. Isso muda a velocidade de propagação da luz na
fibra e mantém o retardo constante.
2. Detecção do Deslocamento de Fase. Uma segunda alternativa para a compensação
de temperatura é a detecção do deslocamento de fase. Esta técnica mede o desvio de
fase do sinal que chega ao ponto de regeração com respeito ao relógio do sistema.
Para conseguir este objetivo existem duas variantes:
• Enviar o sinal de relógio pelo meio de propagação, seja usando uma fibra
paralela ou alguma técnica de multiplexação. Esse sinal será comparado ao
final da linha com o relógio do sistema.
• Derivar o sinal de relógio deslocado a partir do próprio sinal de dados mediante a utilização de um dispositivo DRF (Dielectric Resonance Filter), e
posteriormente compará-lo com o relógio do sistema.
Uma vez detectado o deslocamento de fase, pode-se usar este valor para controlar a
temperatura, ou melhor ainda, para controlar a taxa de transmissão dos dados.
3. Utilização de Múltiplos Laços. A utilização de múltiplos laços de fibra ou múltiplos
canais multiplexados, além de diminuir a latência de acesso aos dados, diminui a
dependência do sistema às variações de temperatura. Esta é uma alternativa interessante do ponto de vista de desempenho, e inclusive de projeto, mas é custosa.
A quantidade da lógica de componentes totalmente óticos é, atualmente, um fator
chave na determinação dos custos do sistema. No entanto, espera-se que com os
avanços na tecnologia de dispositivos óticos e com uma fabricação em grande escala, os custos diminuam, permitindo a construção de múltiplos laços de fibra para
a implementação de uma grande memória de retardo.
Falhas Intermitentes. Existem outros fatores que intervêm em menor grau na geraç ão
de erros dentro da memória ótica [61]. Embora estes erros sejam classificados como
intermitentes, merecem especial interesse devido às elevadas taxas de transmissão que se
deseja atingir.
1. Absorção. Apesar da absorção ser muito baixa nos sistemas de comunicação ótica
modernos (0,5 dB/Km), os outros componentes do sistema (portas lógicas, splitters,
etc.) podem introduzir perdas significativas, produzindo uma incorreta regeração do
sinal. Experimentos demonstram que com a tecnologia atual se tem taxas de erro
30
inferiores a 10−13 [50]. Estes valores deverão ser superados conforme a tecnologia
de componentes totalmente óticos alcance a sua maturidade.
2. Dispersão. Atualmente, os sistemas óticos que usam a faixa de 1,3 micrômetros
têm uma dispersão praticamente nula, permitindo a implementação de memórias
bastante grandes e com perdas por dispersão insignificantes. Com o aparecimento
de novas tecnologias de lasers, a situação das faixas de 0,85 e 1,5 micrômetros deve
também melhorar consideravelmente.
3. Interferência. Este fenômeno tem a ver com a correlação existente entre as saı́das
de um mesmo componente ótico. Essa correlação, denominada também cross-talk,
não apresenta maiores problemas nos sistemas atuais porque os componentes óticos
existentes apresentam interferências inferiores a -20 dB [36]. Espera-se, no entanto,
algumas melhoras para a próxima geração de componentes totalmente óticos.
4. Efeitos de Polarização. Certos comutadores óticos são sensı́veis à polarização dos
sinais de entrada. Devido à despolarização introduzida pela fibra, algumas perdas
podem acontecer especialmente na fase de regeração do sinal. As principais alternativas para solucionar este problema são a utilização de fibras com polarização
preservada, o uso de elementos pouco sensı́veis à polarização, ou a utilização de
elementos adicionais que polarizam novamente o sinal antes de chegar ao dispositivo ótico.
Tardio Desenvolvimento dos Componentes Totalmente Óticos. Devido ao estágio inicial de desenvolvimento em que se encontram os componentes totalmente óticos, apenas
as lógicas de controle muito simples podem ser construı́das com estes elementos. Por
causa desta limitação, somente memórias de linha de retardo sı́ncronas podem ser atualmente implementadas com componentes totalmente óticos. Espera-se que com o amadurecimento da tecnologia e a possı́vel integração da lógica ótica, o número de alternativas
para a implementação de circuitos digitais através de dispositivos totalmente óticos seja
cada vez maior e ofereça uma relação custo/desempenho muito mais vantajosa que a existente atualmente. Exemplos dessa evolução já começam a aparecer até mesmo comercialmente. Um exemplo é a porta lógica ultra-rápida totalmente ótica Sagnac [39]. Essa porta
permite operar a frequências de até 1,6 Tbits/s e foi utilizada na implementação de demultiplexadores e registradores de deslocamento óticos. Um outro exemplo é o dispositivo
TOAD [69], mencionado no capı́tulo anterior.
Felizmente, o desenvolvimento da tecnologia ótica promete avanços ainda maiores
nos próximos anos além de uma diminuição considerável no custo dos dispositivos óticos.
Espera-se que dispositivos optoeletrônicos operando a velocidades superiores aos 10
Gbits/s, e podendo multiplexar centenas de canais numa única fibra apareçam em menos
de uma década. Da mesma forma, novas soluções para o fenômeno da dilatação térmica
e para o acoplamento de dispositivos permitirão uma melhor recuperação, sincronização
e regeração do sinal, especialmente nos sistemas sı́ncronos.
31
100
10
1
0,1
0,01
1980
1985
1990
1995
2000
Figura 3.7: Evolução da Velocidade de Transmissão (em Gbits/s) nos Sistemas Óticos
60
50
40
30
20
10
0
0
20
40
60
80
100
120
140
Figura 3.8: Latência Média de Acesso (em useg) em Função da Capacidade de Armazenamento (em MBytes)
3.3 Utilização em Computação Paralela e Distribuı́da
De acordo com a tendência apresentada pela taxa de transmissão das comunicações óticas
(figura 3.7), nada impede supor que nos próximos anos vão se atingir taxas de transmissão
agregadas (usando WDM ou OTDM) próximas aos 10 Tbits/s [53] numa única fibra.
Com essa taxa de transmissão, e sabendo que a velocidade de propagação da luz nas
fibras óticas é aproximadamente 2, 1 × 108 m/s, 64 MBytes de informação podem ser
armazenados num laço de fibra de 10,24 kilômetros, com uma latência média de 25,6
microsegundos.
A figura 3.8 mostra a latência média para outras quantidades de memória supondo uma
taxa de transmissão agregada de 10 Tbits/s. Da figura pode-se concluir que, nos sistemas
seqüenciais de computação, as memórias de linha de retardo têm utilidade limitada, uma
vez que somente podem armazenar pequenas quantidades de dados, devido às elevadas
latências que as memórias maiores apresentam. Mas, quando se analisa o caso de um
sistema paralelo ou distribuı́do, no qual a memória ótica deve interconectar todos os nós
do sistema e permitir o acesso de todos esses nós aos dados armazenados na fibra, existem
certos fatores que mudam esse cenário. Entre os fatores principais podemos mencionar:
32
• A memória ótica pode armazenar um conjunto de dados especı́fico (e.g., variáveis
de sincronização) ou agir como uma cache de todos os dados compartilhados, evitando assim acessos a nı́veis inferiores do sistema de memória e, conseqüentemente,
permitindo a diminuição da latência média de acesso à memória. Como resultado
dessa diminuição, uma rede ótica com capacidade de armazenamento pode apresentar uma relação custo/desempenho melhor que a oferecida pelas redes de interconexão existentes.
• Os processadores podem ter acesso simultâneo aos dados armazenados na fibra sem
gerar contenção. Além disso, a implementação de técnicas de tolerância à latência,
como prefetching, não consome largura de faixa.
• O custo para manter a coerência dos dados armazenados na fibra é praticamente nulo. Além disso, as caracterı́sticas de disseminação da fibra permitem a implementação eficiente de protocolos de coerência de cache baseados em
atualizações e/ou primitivas de comunicação coletiva.
• A memória ótica pode reduzir qualquer problema de acesso n ão uniforme aos nı́veis
mais baixos do sistema de memória.
• O sistema se adapta facilmente ao modelo de memória compartilhada, facilitando
a programação tanto a nı́vel do usuário como do sistema (o modelo de troca de
mensagens também é suportado naturalmente).
No entanto, ainda existem várias questões para serem resolvidas e alguns desafios que
precisam ser superados. Entre as principais questões que ainda precisam ser resolvidas,
podemos mencionar as seguintes:
1. Que tipos de configurações para o cacheamento de dados apresentam uma melhor
relação custo/desempenho? Cacheamento de dados da memória principal? Da
memória secundária?
2. Quais são os protocolos de consistência, técnicas de cacheamento e tolerância à
latência mais adequados para esses tipos de sistemas de cacheamento ótico?
3. Que classes de aplicações paralelas ou distribuı́das se beneficiam mais do cacheamento ótico em cada nı́vel do sistema de memória?
Estamos atacando todas estas questões na nossa Tese. Os próximos capı́tulos apresentam os nossos resultados preliminares nessa direção.
33
Capı́tulo 4
OPTNET
Este capı́tulo descreve OPTNET (OPTimized OPTical NETwork) [14], uma nova rede
ótica com o seu próprio protocolo de coerência associado que explora algumas das caracterı́sticas principais da comunicação ótica no projeto de multiprocessadores escaláveis.
De acordo com a classificação apresentada no capı́tulo 2, esta é uma rede single-hop FT{F,T}R. As três caracterı́sticas principais que diferenciam OPTNET de outras redes óticas
são: a) os seus canais de disseminação se comportam bem sob alta contenção, b) os seus
canais para comunicação ponto-a-ponto não requerem nenhum mecanismo de controle de
acesso, e c) atinge um ótimo desempenho de comunicação com um custo de hardware
ótico baixo.
4.1 Fundamentos
O desempenho de um multiprocessador baseado em OPTNET vai ser comparado em
relação a outros multiprocessadores baseados nas redes de interconexão ótica DMON
e LambdaNet. Estas redes foram selecionadas pelos seguintes motivos: DMON (Decoupled Multichannel Optical Network) é uma das poucas redes propostas especificamente
para multiprocessadores, e quando acoplada com o protocolo de coerência I-SPEED, tem
mostrado ser superior àqueles multiprocessadores baseados unicamente em snooping ou
em diretórios. LambdaNet, por sua vez, introduz complexidade na busca de desempenho.
Desta forma, esta rede pode-se converter num limite superior de desempenho se combinada com protocolos de coerência eficientes. A seguir, estas redes serão descritas com
mais detalhes.
4.1.1 DMON
Esta é uma rede WDM que foi proposta por Ha e Pinkston em [33]. A rede divide os seus
p + 2 canais (onde p é o número de nós no sistema) em 2 grupos: o primeiro é usado
para uma comunicação por disseminação, enquanto que o segundo é usado para uma
comunicação ponto-a-ponto entre os nós. O primeiro grupo é formado por 2 canais compartilhados por todos os nós do sistema: o canal de controle e o canal de disseminação.
Os outros p canais, chamados de home-channels, pertencem ao segundo grupo de canais.
34
NI i
NI 1
Electronic
Interfacing
Tx C
Tx B
WDM
MUX
TTx
Star
Coupler
Rx C
Rx B
WDM
DMUX
Rx i
NI 2
...
NI p
Figura 4.1: A Interface de Rede da Arquitetura DMON
O canal de controle é usado para controlar, de forma distribuı́da, todos os outros canais
através de um esquema de reserva [21]. Um nó que quer transmitir por um dos canais
deve primeiro esperar pelo seu turno de acesso ao canal de controle e então disseminar a
seu intenção de transmissão. Essa disseminação faz com que os outros nós conheçam a
comunicação que se realizará, evitando assim qualquer conflito. O canal de controle, por
sua vez, é multiplexado usando o protocolo TDMA.
O canal de disseminação é usado para a comunicação de eventos globais como as
operações de coerência e sincronização, enquanto que os home-channels são usados unicamente para operações de pedido e envio de blocos de memória. Cada nó pode transmitir
em qualquer home-channel, mas só pode receber de um único home-channel. Cada nó
atua como o home (o nó responsável por prover cópias atualizadas) de 1/p dos blocos de
memória. Um nó recebe pedidos dos seus blocos através do seu próprio home-channel, e
as respostas são enviadas pelo home-channel do solicitante.
Note que as transações de leitura e escrita seguem diferentes caminhos em DMON.
Este desacoplamento dos recursos baseado no tipo de referência é uma das caracterı́sticas
principais de DMON. Embora este desacoplamento apresente benefı́cios que ajudam a
reduzir a latência de acesso à memória, ele pode também produzir condições de corrida
quando uma operação de coerência e uma leitura, correspondentes ao mesmo bloco, acontecem simultaneamente.
Como se observa na figura 4.1, a interface de rede (“NI”) da arquitetura DMON apresenta dois transmissores fixos (“Tx”), um para cada canal de disseminação1 , um transmissor sintonizável (“TTx”), para os home-channels, e três receptores fixos (“Rx”), dois para
os canais de disseminação e um para o home-channel do nó. O custo de hardware total
da arquitetura DMON em termos do número de componentes óticos é 6 × p.
SPEED (Snoopy Protocol Enhanced and Extended with Directory) é um protocolo
de coerência de caches de alto desempenho criado para explorar as caracterı́sticas de
comunicação de DMON. Na sua versão com invalidações (I-SPEED), a única descrita em
[33], o protocolo define 4 estados para os blocos de memória: clean, exclusive, shared
e invalid. O protocolo só permite que uma cópia do bloco esteja no estado exclusive ou
shared. Um nó que possui na sua cache um bloco num destes estados é o dono do bloco.
1
Estes transmissores fixos não são parte da proposta original de DMON. Foram adicionados para evitar
penalidades adicionais devido à constante resintonização do transmissor sintonizável.
35
NI i
NI 1
Electronic
Interfacing
Tx i
Rx 1
Rx 2
...
Star
Coupler
WDM
DMUX
NI 2
...
Rx p
NI p
Figura 4.2: A Interface de Rede da Arquitetura LambdaNet
A cópia de um bloco em estado exclusive ou shared é repassada ao solicitante como clean.
O home de cada bloco de memória possui uma entrada de diretório que armazena o atual
dono do bloco. Todas as falhas num bloco de memória são enviadas ao seu home e, se
necessário, repassadas ao nó dono do bloco.
I-SPEED também define estados para manipular condições de corrida. Uma condição
de corrida é detectada quando uma operação de coerência é vista por um bloco que tem
uma leitura pendente. I-SPEED trata esta condição forçando a invalidação da cópia do
bloco (possivelmente inconsistente) após a leitura pendente ser completada. Mais detalhes
acerca de I-SPEED podem ser encontrados em [33].
Um protocolo baseado em atualizações também foi proposto para DMON em [14]. O
protocolo é bastante simples pois todas as escritas a dados compartilhados são enviadas
aos seus correspondentes homes. Assim, uma falha na cache pode ser satisfeita imediatamente pelo home, eliminando a necessidade dos diretórios. Este protocolo também
inclui suporte para manipular condições de corrida. Como em I-SPEED, uma condição
de corrida é detectada quando uma operação de coerência é vista por um bloco que tem
uma leitura pendente. Neste caso, as atualizações recebidas durante a operação de leitura
pendente são armazenadas e aplicadas ao bloco após terminada a operação de leitura.
Devido a que um único canal de disseminação não é capaz de suportar o tráfego pesado de atualizações relativo a um conjunto grande de aplicações, a arquitetura básica
de DMON foi estendida com um canal de disseminação extra para a transferência das
atualizações. Um nó pode transmitir somente num dos canais de coerência, o qual é
determinado como uma função da identificação do nó, mas pode receber de ambos os canais. Com exceção deste canal extra (e os receptores associados), o hardware desta rede é
o mesmo (figura 4.1). Assim, o custo de hardware total da versão modificada de DMON,
em termos de número de componentes óticos, é 7 × p.
4.1.2 LambdaNet
A arquitetura LambdaNet foi proposta por Goodman et al. em [31]. A rede aloca um
canal WDM para cada nó, permitindo que cada nó transmita a todos os outros nós sem
necessidade de esquemas de arbitragem. Nesta organização cada nó usa um transmissor
fixo (“Tx”) e p receptores fixos (“Rx”), como mostra a figura 4.2. Assim, cada nó recebe
todo o tráfego da rede simultaneamente, e procede a selecioná-lo por intermédio de circui36
µP
L1
WB
L2
LM
NI
Figura 4.3: Detalhe da Arquitetura dos Nós
tos eletrônicos. Este esquema permite que os canais sejam usados para uma comunicação
ponto-a-ponto ou por disseminação. O custo total de hardware de LambdaNet é então
p2 + p.
Diferentemente de DMON, LambdaNet não foi proposta com um protocolo de
coerência associado. Mas, por motivos de comparação, pode ser considerado um multiprocessador com LambdaNet e com um protocolo de coerência de caches baseado em
atualizações, onde as transações de escrita e sincronização são disseminados a todos os
nós, enquanto que o tráfego de leitura usa uma comunicação ponto-a-ponto entre o solicitante e o home. Como no protocolo proposto para DMON baseado em atualizações , os
módulos de memória são mantidos atualizados todo o tempo, permitindo que os homes
possam responder imediatamente aos pedidos de bloco resultantes de falhas nas caches.
Note que a arquitetura LambdaNet não é prática devido ao seu custo de hardware. Ela
é incluı́da na maioria de estudos como uma base para a comparação dos outros esquemas.
A combinação de LambdaNet e o protocolo de coerência sugerido representa um limite
superior de desempenho para multiprocessadores, pois o protocolo de coerência baseado
em atualizações evita falhas de coerência na cache, os canais de LambdaNet não requerem
nenhum protocolo de acesso ao meio, e o seu hardware não requer a sintonização de
transmissores ou receptores.
4.2 Arquitetura de OPTNET
Esta seção inicia descrevendo a arquitetura e o protocolo de coerência básico associado,
para então descrever as extensões ao protocolo que permitem suportar múltiplos pedidos
de leitura pendentes.
4.2.1 Arquitetura Básica
OPTNET supõe que cada nó no multiprocessador é extremamente simples. Na verdade,
todos os componentes de hardware do nó são convencionais com exceção da interface
de rede. Mais especificamente, cada nó inclui um processador (“P”), um write-buffer
(“WB”), caches primárias (“L1”) e secundárias (“L2”), memória local (“LM”), e a interface de rede (“NI”) que liga o nó a OPTNET (figura 4.3).
37
NI i
NI 1
Tx R
Electronic
Interfacing
Tx C
WDM
MUX
Tx i
Star
Coupler
Rx R
Rx C1
Rx C2
WDM
DMUX
NI 2
...
NI p
TRx
Figura 4.4: A Interface de Rede da Arquitetura OPTNET
A figura 4.4 mostra a arquitetura da rede. Como em DMON, OPTNET divide os
canais de comunicação em dois grupos: o primeiro para o tráfego por disseminação e o
segundo para uma comunicação ponto-a-ponto. Três canais, um canal de pedidos e dois
canais de coerência, são destinados ao primeiro grupo, enquanto que p canais, chamados
de home-channels, são destinados ao segundo.
O canal de pedidos é usado para solicitar blocos de memória. A resposta a tal pedido
é enviada pelo home (o nó responsável por prover cópias atualizadas do bloco) através do
seu correspondente home-channel. Os canais de coerência são utilizados para disseminar
transações de coerência e sincronização. Como o canal de controle em DMON, o canal
de pedidos usa TDMA para controlar o acesso ao meio. O acesso aos canais de coerência,
por outro lado, é controlado usando TDMA com slots de tempo variável. À diferença
de DMON, os home-channels não requerem nenhum tipo de arbitragem, pois só o home
pode transmitir pelo seu canal.
Cada nó pode transmitir no canal de pedidos, num dos canais de coerência (determinado como uma função da identificação do nó), e no seu home-channel, mas pode receber de qualquer um dos canais por disseminação ou de qualquer um dos home-channels.
Desta forma, cada nó requer 3 transmissores fixos (“Tx”) (um para o canal de pedidos,
um para o home-channel, e o último para um dos canais de coerência), 3 receptores fixos
(“Rx”) (para os canais por disseminação), e um receptor sintonizável (“TRx”) (para os
home-channels). O custo de hardware de OPTNET é então 7 × p componentes óticos.
4.2.2 Protocolo de Coerência Básico
Com a finalidade de explorar na sua totalidade os benefı́cios potenciais de OPTNET, o
protocolo de coerência do multiprocessador deve ser ajustado à rede. Assim, o protocolo de coerência proposto para OPTNET é baseado em atualizações e suportado tanto
por comunicações ponto-a-ponto como por disseminação. O tráfego de atualizações flui
através dos canais de coerência, enquanto que os blocos de memória são enviados por
intermédio dos home-channels. O canal de pedidos transporta todos os pedidos de leitura.
A descrição a seguir mostra em detalhes o protocolo de coer ência em termos das ações
tomadas nos acessos de leitura e escrita.
Leituras. Num acesso de leitura, a hierarquia de memória é atravessada de forma a per-
38
mitir que a palavra requerida seja encontrada o mais rápido possı́vel. Assim, os conteúdos
das caches primárias e secundárias são verificados, como em qualquer outro sistema de
computação com múltiplas caches. Uma falha nas caches é tratada diferentemente dependendo do tipo de dado a ser lido. No caso do bloco ser privado ou mapeado na memória
local, o acesso é tratado pela memória local, a mesma que retorna o bloco diretamente ao
processador.
Se o bloco é compartilhado e está mapeado num outro nó, o pedido é enviado ao seu
home através do canal de pedidos e o receptor sintonizável é ajustado ao home-channel
do respectivo home. Quando o pedido chega ao home, ele lê o bloco e o retorna por
intermédio do home-channel. O nó solicitante espera pelo bloco a ser recebido, o retira
da interface de rede, e o entrega ao sistema de caches.
Escritas. A arquitetura de multiprocessador baseado em OPTNET implementa o modelo de consistência de memória release-consistency [27]. Escritas consecutivas para um
mesmo bloco de cache são agrupadas no write-buffer. O conjunto de escritas a um bloco
privado é enviado diretamente à memória local através do sistema de caches. Conjuntos
de escritas a blocos compartilhados são sempre enviadas a um dos canais de coerência
na forma de uma atualização, novamente através do sistema de caches. Uma atualização
somente contém as palavras que foram modificadas em cada bloco.
Cada atualização deve ser reconhecida pelo home correspondente antes que outra
atualização com o mesmo home seja emitida, desta forma os módulos de memória não
requerem filas de entrada extremamente grandes (i.e., os reconhecimentos são usados
para controle de fluxo). Os outros nós que possuem na sua cache o bloco para o qual
está sendo enviada a atualização, simplesmente atualizam as suas caches locais. Quando
o home recebe a atualização, ele a insere na fila de memória e envia o reconhecimento
através do canal de pedidos. No entanto, o reconhecimento pode não ser enviado imediatamente se a fila de memória estiver preenchida até um determinado ponto. Neste caso, o
home adia a transferência do reconhecimento até que ele possa permitir a emissão de uma
outra atualização proveniente do mesmo nó. Um nó só pode adquirir um lock ou passar
por uma barreira após esvaziar a sua fila de memória. Normalmente as mensagens de
reconhecimento não sobrecarregam o canal de pedidos devido a serem mensagens curtas,
que cabem num único slot do canal de pedidos.
Finalmente, o protocolo de coerência trata as condições de corrida que resultam do desacoplamento das transações de leitura e escrita, armazenando as atualizações para combiná-las posteriormente com o bloco recebido de memória.
4.2.3 Suportando Múltiplos Pedidos de Leitura Pendentes
O protocolo de coerência básico de OPTNET não suporta múltiplos pedidos de leitura
pendentes. Esta limitação resulta do fato de que a rede possui um único receptor sintonizável que deve ser ajustado a um único home-channel durante um acesso de leitura. No
entanto, facilitar múltiplos pedidos de leitura pendentes é importante se o multiproces-
39
sador baseado em OPTNET explora técnicas de tolerância à latência ou usa processadores superescalares. Assim, a seguir será descrita uma simples extensão ao protocolo de
coerência de OPTNET que permite o suporte de múltiplos pedidos de leitura pendentes.
A extensão só afeta os pedidos de leitura que são emitidos enquanto outros pedidos estão pendentes. Nesta situação, uma seqüência de pedido/resposta é transformada
num par de seqüências pedido/resposta. Essas seqüências serão chamadas de read-andbuffer/block-buffered e transfer-block/block-reply. O pedido read-and-buffer é enviado ao
home imediatamente após uma falha de leitura na cache secundária. Quando o pedido
chega à interface OPTNET do home, ela lê o bloco e o armazena numa memória interna.
Após armazenado o bloco, a interface do home envia a resposta block-buffered ao nó que
solicitou a leitura. Depois de receber a mensagem block-buffered do home, a interface solicitante inclui o correspondente número do bloco numa fila FIFO. Quando o bloco atinge
a cabeça da fila, esta interface envia o pedido transfer-block ao home, sintoniza o homechannel adequado e espera pelo bloco chegar. Após receber a mensagem transfer-block,
a interface do home responde com o bloco de memória e libera o espaço ocupado por ele.
Quando o bloco de memória é recebido pela interface solicitante, o número de bloco correspondente é jogado fora da fila FIFO. As mensagens read-and-buffer, block-buffered e
transfer-block são enviadas através do canal de pedidos normal. A transferência do bloco
de memória é feita através dos home-channels como no protocolo básico de OPTNET.
Esta extensão ao protocolo não deve impactar no desempenho notavelmente. Na verdade, quando não existem outros pedidos de leitura pendentes para esse nó, a seqüência
pedido/resposta acontece como no sistema básico. Quando existem outros pedidos de
leitura pendentes, o envio de uma seqüência extra de pedido/resposta nem sempre afeta
o overhead de acesso aos dados, pois uma falha de leitura não está necessariamente no
caminho crı́tico da computação. Além disso, o custo de enviar as mensagens extras é relativamente pequeno (19 ciclos de processador em média para cada mensagem), e podem
ser enviadas em paralelo com a sintonização do receptor e o acesso à memória.
As únicas duas questões que permanecem são: quanto tráfego adicional será gerado
pelas mensagens adicionais e se um único canal pode tratar todo esse tráfego. Os experimentos mostram que o aumento máximo do tráfego pode variar entre 18 e 198%, com
uma média de 116%. Embora esses aumentos sejam significantes, eles não degradam o
desempenho, já que o canal de pedidos é extremamente subtilizado. Os experimentos que
serão apresentados mais à frente mostram que a porcentagem de slots livres no canal de
pedidos varia de 88 a 98%, com uma média de 91%. Adicionalmente, a contenção para os
slots no canal de pedidos é bastante baixa, somente 13% dos pedidos ou reconhecimentos
competem por acesso ao canal.
A implementação destas modificações não tem custo de hardware ótico, mas existe
um custo eletrônico bastante baixo: uma pequena quantidade de memória extra (DRAM)
em cada interface OPTNET. Cada interface deve incluir o×tamanho do endereço Bytes
para manter a fila de pedidos pendentes, onde o é o máximo número de pedidos pendentes por nó e o tamanho do endereço de um bloco é 4. Além disso, para simplificar o
40
gerenciamento, a quantidade de memória para armazenar os blocos de memória deve ser
p × o × (b + tamanho do endereço), onde p é o número de nós no multiprocessador e
b é o tamanho dos blocos de memória. Cada grupo de o × (b + tamanho do endereço)
Bytes deve ser alocado aos blocos pedidos por um nó diferente. Assim, 4368 Bytes por
interface são suficientes para permitir 4 pedidos pendentes num sistema de 16 nós com
blocos de memória de 64 Bytes.
Finalmente, é interessante notar que, à diferença de DMON e LambdaNet, o suporte
para múltiplos pedidos de leitura pendentes de OPTNET não requer hardware ótico extra
nem produz gargalos no desempenho do sistema.
4.3 Metodologia
Para avaliar o desempenho de OPTNET e compará-lo em relação a propostas de multiprocessadores baseados em redes óticas previamente estudadas, utilizamos simulações de
aplicações paralelas reais. Como o simulador não implementa processadores superescalares, as simulações correspondem à proposta básica de OPTNET.
4.3.1 Simulação
Simulamos multiprocessadores de 16 nós com as redes de interconexão OPTNET, DMON
e LambdaNet. Os simuladores são baseados no MINT [76]. Cada nó das máquinas simuladas contém um processador de 200 MHz, um write-buffer de 16 entradas, uma cache
primária de 4 KBytes diretamente mapeada e com blocos de 32 Bytes, uma cache secundária de 16 KBytes diretamente mapeada e com blocos de 64 Bytes, memória local,
e uma interface de rede. Note que os tamanhos das caches foram simulados propositadamente pequenos, já que as limitações no tempo de simulação nos impedem de usar
entradas com tamanho real. Na verdade, a capacidade das caches primária e secundária
foram reduzidas por aproximadamente um fator de 32. O objetivo destas reduções é produzir quase o mesmo tráfego de acessos à memória que nos sistemas reais.
Os dados compartilhados são intercalados entre as memórias a nı́vel de bloco. Foi assumido que todas as instruções e acertos de leitura na cache primária demoram um ciclo
de processador. Falhas de leitura na cache primária bloqueiam o processador até que o pedido de leitura seja satisfeito. Um acerto de leitura na cache secundária demora 12 ciclos
para completar. As escritas entram no write-buffer e demoram um ciclo, exceto quando
o write-buffer está cheio. Neste último caso, o processador é bloqueado até que uma entrada seja liberada. As leituras podem ser escalonadas antes das escritas enfileiradas no
write-buffer. Um módulo de memória pode prover as primeiras duas palavras 12 ciclos
após a emissão do pedido. As outras palavras são entregues a uma taxa de duas palavras
por cada 4 ciclos do processador. A contenção nas memórias e na rede é completamente
modelada.
No protocolo de coerência baseado em atualizações, unicamente a cache secundária
é atualizada quando uma atualização chega ao nó. A cópia do bloco na cache primária é
41
Operação
OPTNET
Falha na cache secundária
1. Verificação da cache primária
2. Verificação da cache secundária
3. Retardo médio TDMA
4. Reserva do canal
5. Retardo de sintonização
6. Pedido à memória
7. Retardo de propagação
8. Leitura de memória
9. Retardo médio TDMA
10. Reserva do canal
11. Transferência de bloco
12. Retardo de propagação
13. Transferência da NI para a cache sec.
Total
1
4
16
–
–
2∗
1
44+
–
–
22
1
16
107
Latência
LambdaNet DMON
1
4
–
–
–
2∗
1
44+
–
–
22∗
1
16
91
1
4
16
2∗
4
3
1
44+
16
2∗
23
1
16
133
Tabela 4.1: Tempos de Leitura para OPTNET, LambdaNet e DMON
invalidada. Além disso, para reduzir o tráfego de escritas, o write-buffer agrupa as escritas
para um mesmo bloco em todos os sistemas simulados. Uma atualização somente contém
as palavras que foram modificadas em cada bloco. As implementações dos protocolos
assumem um modelo de memória release-consistency [27].
A taxa de transmissão ótica foi estabelecida em 5 Gbits/s, o que produz as latências
listadas na tabela 4.1 para uma falha de leitura. As latências de uma transação de coerência
em OPTNET, LambdaNet, DMON com coerência baseada em atualizações (DMON-U), e
DMON com I-SPEED (DMON-I) são mostradas na tabela 4.2, assumindo que 8 palavras
foram escritas em cada bloco de cache2 . Todos os números nas tabelas estão em ciclos
de processador e assumem um cenário livre de contenção nos canais de comunicação
e na memória. Os valores marcados com ’ ∗ ’ e ’+ ’ são os que podem ser aumentados
pela contenção/serialização na rede e memória, respectivamente. As latências totais de
uma falha de leitura na cache secundária (tabela 4.1) mostra que LambdaNet possui 18%
menos overhead que OPTNET nestas operações, pelo menos na ausência de qualquer
tipo de contenção. Sob as mesmas condições, OPTNET possui 24% menos overhead
que DMON. As latências totais das transações de coerência (tabela 4.2) mostram que
LambdaNet possui 46% menos overhead que OPTNET e DMON-I nestas operações,
pelo menos na ausência de contenção e assumindo 8 palavras escritas por bloco. Sob as
mesmas condições, OPTNET e DMON-I apresentam 19% menos overhead que DMONU.
Note que, nestas simulações, a duração mı́nima de um slot TDMA é 2 ciclos de pro2
Note que a maior parte das transações de coerência são normalmente realizadas fora do caminho crı́tico
do processador pelo write-buffer.
42
Operação
1. Verificação da cache secundária
2. Escrita na NI
3. Retardo médio TDMA
4. Reserva do canal
5. Atualização/Invalidação
6. Retardo de propagação
7. Retardo médio TDMA
8. Reserva do canal
9. Reconhecimento
10. Retardo de propagação
11. Escrita na cache secundária
Total
Latência (em ciclos)
OPTNET LambdaNet DMON-U DMON-I
4
4
4
4
10
10
10
2
∗
8
–
16
16
∗
–
–
2
2∗
15
13
14
3
1
1
1
1
16
–
16
16
–
–
2∗
2∗
2∗
2∗
2
2
1
1
1
1
–
–
–
8
57
31
68
57
Tabela 4.2: Tempos para uma Transação de Coerência em OPTNET, LambdaNet,
DMON-U e DMON-I
Programa
CG
Em3d
Gauss
Mg
Ocean
Radix
Raytrace
SOR
Water
WF
Descrição
Gradiente Conjugado (kernel)
Propagação de ondas eletromagnéticas
Eliminação de Gauss sem blocos
Poisson 3D usando técnicas de multigrid
Simulação da movimentação de oceanos
Ordenação de inteiros
Traçador paralelo de raios luminosos
Relaxamento progressivo
Simulação de moléculas de água (spatial)
Algoritmo do caminho mais curto
Tamanho da Entrada
1400 × 1400 doubles, 78148 6= 0
8 K nós, 5% remotos, 10 iter.
256 × 256 floats
24 × 24 × 64 floats, 6 iterações
Grade 66 × 66
512 K chaves, radix 1024
teapot
256 × 256 floats, 100 iterações
512 moléculas, 4 passos
384 vértices, conectividade 50%
Tabela 4.3: Descrição das Aplicações e Principais Parâmetros de Entrada
cessador, tanto para DMON como para OPTNET. Assim, cada slot do canal de controle
em DMON e do canal de pedidos em OPTNET é de 2 ciclos. Cada slot dos canais de
coerência em OPTNET é de pelo menos 2 ciclos, neste caso, a duração real de cada slot
depende do número de palavras atualizadas.
Os parâmetros de simulação assumidos representam uma percepção pessoal do que é
razoável para os multiprocessadores atuais e num futuro pr óximo. O estudo do espaço
de parâmetros apresentado na seção de resultados permitirá investigar o impacto das mais
importantes hipóteses arquiteturais realizadas.
4.3.2 Aplicações
O conjunto de aplicações consiste de 10 programas: CG, Em3d, Gauss, Mg, Ocean, Radix, Raytrace, SOR, Water e WF. A tabela 4.3 mostra as aplicações e os seus parâmetros
de entrada. Ocean, Radix, Raytrace e Water são do SPLASH-2 e foram amplamente des43
19.5
19,5
16
14
speedup
12
10
8
6
4
2
wf
water
sor
raytrace
radix
ocean
mg
gauss
em3d
cg
0
Figura 4.5: Ganho de Desempenho num Multiprocessador de 16 Nós com OPTNET
critas em outros trabalhos [82]. CG e Mg são implementações paralelas do conjunto de
aplicações NAS, as mesmas que são descritas com mais detalhes em [6]. Em3d é da Universidade de Berkeley [20] e simula a propagação de ondas eletromagnéticas através de
objetos em 3D. Gauss, SOR e WF foram desenvolvidas na Universidade de Rochester.
Gauss realiza uma eliminação de Gauss sem agrupamento em blocos. SOR realiza o relaxamento sucessivo de uma matriz de elementos. WF é uma versão paralela do algoritmo
de Warshall-Floyd para calcular o caminho mais curto entre todos os pares de nós de um
grafo representado por uma matriz adjacente.
4.4 Resultados
Nesta seção é avaliado o desempenho de um multiprocessador baseado em OPTNET em
relação a sistemas baseados em LambdaNet e DMON. Primeiro são mostrados os resultados de tempo de execução, para posteriormente analisar detalhadamente o desempenho
das leituras e das escritas em cada sistema. Finalmente, é estudado o efeito de alguns dos
parâmetros de simulação.
4.4.1 Desempenho Geral
A figura 4.5 mostra o ganho de desempenho das aplicações executando num multiprocessador baseado em OPTNET com 16 nós. A figura demonstra que, exceto para CG e WF,
as aplicações exibem ganhos bons para 16 nós. Em3d, SOR e Water, em particular, atingem valores excelentes, acima de 14. Os dois extremos no ganho de desempenho, Em3d
e WF, requerem uma explicação mais detalhada. Em3d apresenta um ganho super-linear
como resultado das elevadas taxas de falha nas caches primárias e secundárias quando
executada num único nó. As caches não são efetivas para esta aplicação num único nó.
WF mostra um ganho baixo com 16 nós devido às grandes penalidades das barreiras como
produto da falta de balanceamento de carga significativa existente nessa aplicação.
44
1,8
OPTNET
Lambda
DMON-U
DMON-I
1,6
1,4
1,2
1,0
0,8
0,6
0,4
0,2
wf
water
sor
raytrace
radix
ocean
mg
gauss
em3d
cg
0,0
Figura 4.6: Tempos de Execução (com Relação ao MP OPTNET) de OPTNET, LambdaNet, DMON-U e DMON-I
A figura 4.6 mostra os tempos de execução das 10 aplicações num multiprocessador
de 16 nós. Para cada aplicação são mostrados, da esquerda para a direita, os desempenhos
de OPTNET, LambdaNet, DMON-U e DMON-I, normalizados aos resultados de OPTNET. Esta figura demonstra que o desempenho de DMON-U é igual ou melhor que o de
DMON-I para todas as aplicações, exceto Water. As diferenças entre estes dois sistemas
são em média 11%, sendo mais significativas para Em3d (16%), Gauss (16%), Ocean
(43%) e Radix (14%).
Como era esperado, uma comparação entre LambdaNet e DMON-U é sempre favorável ao primeiro sistema. O ganho de desempenho de LambdaNet é em média 19%.
SOR e Water apresentam um ganho pequeno em LambdaNet. Para as outras aplicações,
as diferenças de desempenho variam de 16% para Gauss a 28% para CG, com uma média
de 22%. A razão principal para este resultado é que a latência de uma falha de leitura na
cache secundária em DMON-U é muito maior que em LambdaNet, especialmente quando
os canais de DMON-U estão sujeitos à contenção.
Uma comparação entre OPTNET e DMON-U é claramente favorável a OPTNET em
todos os casos com exceção de SOR e Water onde os desempenhos são similares. Para as
outras 8 aplicações, o ganho de OPTNET varia de 10% para Mg a 21% para Radix, com
uma média de 16%. Levando em conta todas as aplicações, a vantagem de OPTNET é em
média 14%. A principal explicação para esta disparidade de desempenho é que a latência
de uma falha de leitura na cache secundária em DMON-U é notavelmente maior que em
OPTNET, especialmente quando DMON-U está sujeito à contenção na rede.
A figura 4.6 demonstra que os multiprocessadores baseados em OPTNET e LambdaNet são essencialmente equivalentes para 4 aplicações: Radix, Raytrace, SOR e Water.
Para as outras 6 aplicações, os ganhos de desempenho de LambdaNet nunca são maiores
que 12% e são em média 8%. Levando em conta todas as aplicações, o ganho de LambdaNet é em média 4%. Devido a Lambdanet requerer O(p2 ) hardware ótico, um fator de
p vezes mais hardware que OPTNET, os resultados obtidos são excelentes em favor de
45
25
OPTNET
Lambda
DMON-U
DMON-I
20
15
10
5
wf
water
sor
raytrace
radix
ocean
mg
gauss
em3d
cg
0
Figura 4.7: Latência Média das Leituras em Ciclos de Processador
418
300
other
memory
network
base
250
200
150
100
wf
water
sor
raytrace
radix
ocean
mg
gauss
em3d
0
cg
50
Figura 4.8: Latência Média de uma Falha de Leitura (em Ciclos de Processador) para
OPTNET, LambdaNet, DMON-U e DMON-I
OPTNET.
A explicação das diferenças de desempenho apresentadas está no custo médio das
leituras e das escritas nos vários sistemas para cada aplicação. Assim, a seguir será feito
um estudo destas operações para todos os sistemas e aplicações.
4.4.2 Desempenho das Leituras
As figuras 4.7 e 4.8 estão concentradas no desempenho das operações de leitura dos sistemas que estão sendo avaliados. A figura 4.7 apresenta a latência média das operações
de leitura, enquanto que a figura 4.8 mostra a latência média de uma falha de leitura na
cache secundária. Todas as latências são em ciclos de processador. A figura 4.8 divide
as latências no seu componente livre de contenção (“base”) e nos retardos causados pela
contenção na rede (“network”), nas memórias (“memory”), e no acesso aos pinos do processador e barramento de memória (“other”). Nas duas figuras, as barras correspondem
46
a, da esquerda para a direita, OPTNET, LambdaNet, DMON-U e DMON-I.
As figura 4.7 mostra que a latência de leitura média obtida pelos 3 sistemas baseados
em atualizações (OPTNET, LambdaNet e DMON-U) é menor que a de DMON-I, exceto
nos casos de Radix e Water. Este resultado pode ser explicado em parte pelo fato de que os
sistemas baseados em atualizações exibem uma menor taxa de falhas na cache secundária
que DMON-I. No entanto, as diferenças nas taxas de falha não são extremamente significativas, pois as aplicações simuladas são dominadas por falhas de substituição. Como é
mostrado na figura 4.8, o fator mais importante nesta comparação é que as falhas de leitura
demoram mais para serem satisfeitas nos sistemas baseados em DMON que em OPTNET
e LambdaNet, mesmo na ausência de contenção. Adicionalmente, DMON-I sofre mais
com a contenção em memória e na rede que os outros sistemas. Por exemplo, descartando
os resultados de Radix e Water, DMON-I apresenta latências para uma falha de leitura na
cache secundária 42% maiores que as de OPTNET em média, enquanto que num cenário
livre de contenção a diferença é só de 24%. A contenção na rede e em memória são mais
acentuadas em DMON-I devido às escritas dos blocos de cache modificados, à leitura de
diretórios requerida em todos os pedidos de memória, e às mensagens extras necessárias
para conduzir um pedido ao atual dono do bloco.
Entre os sistemas baseados em atualizações, LambdaNet apresenta a menor latência
de leitura, enquanto que DMON-U apresenta a maior. A latência de leitura média de
OPTNET está entre estes dois extremos. Descartando os resultados de Radix e Water,
a latência de leitura no sistema LambdaNet é somente 7% menor em média que a de
OPTNET, enquanto que as leituras no sistema DMON-U são 20% mais custosas em média
que em OPTNET.
Como se pode observar na figura 4.8, o sistema baseado em LambdaNet é usualmente
mais propenso à contenção que os sistemas baseados em OPTNET e DMON-U, devido
a duas caracterı́sticas do primeiro sistema: a) as transaç ões de leitura e escrita não são
desacopladas, e b) a ausência de pontos de serialização para as atualizações dos diferentes nós gera um enorme tráfego de atualizações. Como resultado destas caracterı́sticas,
quando uma aplicação apresenta uma excessiva quantidade de atualizações (Radix e Water são os casos extremos), as transações de leitura são retardadas, pois leituras e escritas
competem pelos mesmos recursos de comunicação, cache e memória principal. Por outro
lado, a degradação de desempenho gerada pela contenção não é suficiente para diminuir
a contribuição das ótimas latências de LambdaNet sem contenção. Por exemplo, descartando os resultados de Radix e Water, LambdaNet apresenta, em média, uma latência para
uma falha de leitura menor que a de OPTNET em só 8%, enquanto que as latências livres
de contenção diferem 15%.
A contenção afeta os sistemas baseados em DMON-U e OPTNET em forma similar. Nos dois multiprocessadores, as latências de uma falha na cache secundária livre
de contenção e total diferem em 24% na média. Como uma falha na cache secundária
num cenário livre de contenção demora mais tempo para ser satisfeita em DMON-U, este
sistema apresenta um comportamento das leituras pior que OPTNET.
47
Programa
CG
Em3d
Gauss
Mg
Ocean
Radix
Raytrace
SOR
Water
WF
OPTNET
LambdaNet
DMON-U
DMON-I
Stall Flush Stall Flush Stall Flush Stall Flush
0,1
0,5
0,0
0,1
0,0
0,4
0,1
2,2
0,0
0,2
0,0
0,4
0,0
0,2
0,0
0,5
0,1
0,6
0,0
0,4
0,1
0,6
0,2
0,8
0,5
0,2
0,0
0,3
0,7
0,2
2,2
0,6
1,8
3,4
0,1
1,1
1,4
3,4
2,2
11,3
23,5
0,1
14,6
0,1
38,6
0,1
43,7
0,1
0,0
0,1
0,0
0,0
0,0
0,1
0,0
0,1
0,2
0,4
0,0
0,2
0,2
0,5
0,3
1,4
1,1
0,0
0,0
0,0
0,2
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,4
0,0
0,0
0,0
Tabela 4.4: Porcentagens de Write-Stall e Write-buffer Flush para OPTNET, LambdaNet,
DMON-U e DMON-I.
Em resumo, estes resultados são favoráveis a OPTNET para todas as aplicações, levando em conta a complexidade do sistema baseado em LambdaNet. Mesmo nos casos
de Radix e Water, onde o comportamento é um tanto diferente das outras aplicações devido ao seu elevado tráfego de coerência, OPTNET mostra um bom desempenho para as
leituras.
4.4.3 Desempenho das Escritas
Tendo discutido o desempenho das operações de leitura em cada um dos sistemas que
estão sendo avaliados, resta estudar o desempenho das operações de escrita. A tabela
4.4 apresenta os atrasos de escrita e de esvaziamento do write-buffer como porcentagem
do tempo total de execução de cada uma das aplicações executando nos diferentes sistemas. A tabela mostra que, exceto para Radix, as latências das operações de escrita são
desprezı́veis em todos os sistemas, demonstrando que um write-buffer de 16 entradas é
normalmente suficiente para esconder o custo das operações de coerência. Em Radix as
escritas são muito frequentes (aproximadamente uma escrita a cada 5 ciclos) e não podem ser agrupadas pelos write-buffers, causando frequentemente paradas na execução do
programa. Adicionalmente, a tabela mostra que o tempo gasto com o esvaziamento dos
write-buffers é desprezı́vel como uma porcentagem do tempo de execução, mesmo no
caso de Radix. A única exceção é Ocean executando em DMON-I, onde o tempo gasto
com o esvaziamento do write-buffer representa 11,3% do tempo total.
Estes resultados sugerem que o overhead das operações de coerência não é um
sério problema de desempenho na maioria dos casos, mesmo para os sistemas baseados em atualizações que forçam o sistema de comunicação com um elevado número de
atualizações. No entanto, isto acontece somente porque estes sistemas incluem múltiplos
canais de disseminação para as operações de coerência. O aumento do número de canais
de coerência tem um significativo impacto no retardo de acesso ao meio e na serialização
imposta pelas transações de coerência dos diferentes nós. Como um exemplo deste im48
1,2
busy
read
write
sync
1,0
0,8
0,6
0,4
wf
water
sor
raytrace
radix
ocean
mg
gauss
em3d
0,0
cg
0,2
Figura 4.9: Tempos de Execução (com Relação a 1 Canal de Atualização) para 1, 2 e 4
Canais de Atualização em 16 Nós
busy
read
write
sync
mg
ocean
radix
raytrace
1,2
1,0
0,8
0,6
0,4
wf
water
sor
gauss
em3d
0,0
cg
0,2
Figura 4.10: Tempos de Execução (com Relação a 1 Canal de Atualização) para 1, 2 e 4
Canais de Atualização em 32 Nós
pacto, considere um sistema com 16 nós e um único canal de coerência TDMA. Nesse
sistema, um nó será retardado em média 8 slots TDMA antes de obter acesso ao canal de
coerência. Além disso, só uma transação de coerência pode ser iniciada em cada slot. Por
outro lado, com dois canais de coerência, o mesmo nó seria somente retardado em média
4 slots TDMA para iniciar uma transação de coerência. Adicionalmente, duas transações
de coerência podem ser iniciadas em paralelo a cada slot TDMA.
Para quantificar este efeito no caso de OPTNET, considere as figuras 4.9 e 4.10. As
figuras mostram o tempo de execução de cada aplicação num sistema OPTNET com 16
e 32 nós, respectivamente, assumindo 1, 2 e 4 canais de coerência. As barras na figura
são divididas em tempo de processador (“busy”) e tempo gasto com operações de leitura
(“read”), escrita (“write”) e sincronização (“sync”). Todos os resultados são normalizados
para os resultados de um único canal.
Três observações principais podem ser feitas a partir destas figuras. A primeira é que,
para algumas aplicações, o desempenho pode ser significativamente melhorado usando
49
mais que um canal de coerência. Este efeito é mais acentuado em configurações com
um número maior de nós, onde a serialização do acesso a um único canal de coerência
tem um elevado impacto negativo no desempenho do sistema. Os ganhos de desempenho
resultam, principalmente, dos ganhos no desempenho das escritas, i.e., reduz os tempos
gastos com escritas e esvaziamento do write-buffer. Note, no entanto, que estes ganhos
causam às vezes um aumento significativo das latências de leitura, como nos casos de Radix e Water, devido ao aumento de contenção. Este efeito é particularmente acentuado em
Radix com 16 ou 32 nós. Na tabela 4.4 se observa que o tempo de escrita representa uma
fração significativa do tempo de execução com dois canais de coerência. Como mostram
as figuras 4.9 e 4.10, a diminuição do tempo de escrita é completamente contrabalançado
pelo aumento na latência de leitura.
A segunda observação é que dois canais de coerência são suficientes para obter a maioria de benefı́cios atingı́veis pela utilização de múltiplos canais, pelo menos até 32 nós.
Devido a decrescerem exponencialmente os ganhos alcançados pelo aumento no número
de canais de atualização, pode-se achar que dois canais de coerência devem oferecer uma
melhor relação custo/desempenho para máquinas com até 64 ou 128 nós.
A terceira observação importante que resulta destas figuras é que as aplicações podem
ser claramente divididas em dois grupos: aquelas para as quais um canal de coerência
é suficiente (CG, Em3d, Mg, Raytrace e WF) e aquelas para as quais dois canais são
suficientes (Gauss, Ocean, Radix, SOR e Water).
Em resumo, os resultados desta seção mostram que todos os sistemas são equivalentes
em termos do desempenho das operações de escrita na maioria dos casos. A exceção
é a aplicação Radix, para a qual LambdaNet apresenta o menor overhead de escritas.
Os resultados acima também justificam a seleção de dois como o número de canais de
coerência em OPTNET.
4.4.4 Impacto dos Parâmetros Arquiteturais
Nesta subseção será avaliado o impacto de algumas das suposições feitas nas simulações
anteriores e, assim, poder entender o comportamento de OPTNET mais detalhadamente.
Inicialmente, será feito um estudo do efeito do tamanho da cache secundária. Logo após
será realizada uma avaliação do impacto da taxa de transmissão e, finalmente, será abordado o efeito de diferentes latências de leitura nas memórias eletrônicas. Para simplificar
a análise, os resultados estarão concentrados numa aplicação representativa de cada um
dos grupos identificados na seção anterior: Mg e Ocean.
Tamanho da Cache Secundária. O tamanho da cache secundária pode potencialmente
afetar a comparação entre os sistemas estudados, devido às suas diferenças nas latências
de falha de uma leitura. A intuição inicial é que aumentos nos tamanhos das caches deve
reduzir as diferenças do tempo de execução entre os sistemas, tanto como esses aumentos
reduzam a taxa de falhas de leitura. Adicionalmente, para caches muito grandes, os sistemas baseados em atualizações devem se beneficiar mais dos aumentos nos tamanhos das
50
35
30
mg-DI
mg-DU
mg-ON
mg-L
ocean-DI
ocean-DU
ocean-ON
ocean-L
25
20
15
10
5
8 KB
16 KB
32 KB
64 KB
Figura 4.11: Tempos de Execução (em Milhões de Ciclos) como Função do Tamanho da
Cache Secundária
caches que DMON-I, pois a taxa de falha nos primeiros sistemas tende a ser igual à taxa
de falhas de inicialização, enquanto que a taxa de falhas de DMON-I tende a ser a soma
das taxas de falha de inicialização e coerência.
A figura 4.11 apresenta o impacto do tamanho da cache secundária no tempo de
execução de Mg e Ocean num multiprocessador de 16 nós com OPTNET (“ON”), LambdaNet (“L”), DMON-U (“DU”) e DMON-I (“DI”). A figura confirma a intuição mencionada acima. Em particular, a figura mostra que um aumento no tamanho da cache
reduz as diferenças no tempo de execução para Mg. Esta aplicação apresenta uma excelente localidade de referência e, assim, os aumentos no tamanho das caches reduzem
notavelmente as taxas de falha de leitura tanto para os sistemas baseados em atualizações
como para DMON-I. As reduções nas taxas de falha de leitura como uma função do
aumento do tamanho das caches não são significativas em Ocean, especialmente para o
caso de DMON-I. Apesar disto não ser completamente óbvio na figura, o desempenho de
DMON-I melhora, mas a uma taxa inferior que a dos sistemas baseados em atualizações.
Taxa de Transmissão. A taxa de transmissão ótica também tem um efeito potencial sobre
as nossas comparações. Intuitivamente, taxas de transmissão maiores devem reduzir as
diferenças no tempo de execução entre os sistemas baseados em atualizações, devido às
menores discrepâncias de tempo nas latências de leitura e nas transações de coerência. A
figura 4.12 apresenta o tempo de execução de um sistema com 16 nós como uma função
da taxa de transmissão (em Gbits/s) de cada canal. A figura confirma o esperado, mostrando que, com o avanço da tecnologia, as diferenças de desempenho entre OPTNET e
LambdaNet decrescem, fazendo com que OPTNET seja ainda mais competitiva.
Latência da Leitura de Memória. O tempo de serviço das memórias é outro fator que
pode afetar a comparação dos sistemas. É esperado que aumentos nas latências de leitura reduzam as diferenças percentuais entre os sistemas baseados em atualizações, como
resultado das menores diferenças nas suas latências de leitura. Em comparação com
51
35
30
25
mg-DI
mg-DU
mg-ON
mg-L
ocean-DI
ocean-DU
ocean-ON
ocean-L
20
15
10
5
3 Gbps
5 Gbps
10 Gbps
Figura 4.12: Tempos de Execução (em Milhões de Ciclos) como Função da Taxa de
Transmissão
35
30
mg-DI
mg-DU
mg-ON
mg-L
ocean-DI
ocean-DU
ocean-ON
ocean-L
25
20
15
10
5
28
44
60
76
92
Figura 4.13: Tempos de Execução (em Milhões de Ciclos) como Função da Latência de
Leitura na Memória (em Ciclos de Processador)
DMON-I, os sistemas baseados em atualizações devem ser mais atrativos sob elevada
latência, já que qualquer diferença na taxa de falhas produz um efeito ainda mais acentuado. A figura 4.13 mostra o tempo de execução de um multiprocessador de 16 nós em
função da latência de leitura de um bloco de memória (em ciclos de processador). Embora as tendências de desempenho não sejam muito acentuadas na figura, os experimentos
confirmam a intuição.
Em resumo, o tamanho da cache secundária, a taxa de transmissão, o tempo de serviço
das memórias têm um efeito significativo no desempenho destes sistemas. No entanto,
este efeito é só quantitativo, i.e., a variação destes parâmetros não muda qualitativamente
as tendências observadas nos resultados da seção anterior.
52
4.5 Trabalhos Relacionados
Uma abordagem comum para a utilização da comunicação ótica em redes de computadores é através das redes WDM, como mencionado no capı́tulo 2. Redes óticas OTDM
também têm sido propostas como uma alternativa às redes WDM [59, 70], mas a tecnologia OTDM ainda não está madura.
Redes óticas com WDM têm sido parte de outros projetos de computação paralela,
embora os resultados obtidos sejam os primeiros a comparar v árias destas redes sob as
mesmas condições arquiteturais. Ghose et al. [28] propuseram uma rede ótica WDM
chamada de Optimul para explorar os benefı́cios da operação concorrente de múltiplos
canais tanto em computadores paralelos com memória compartilhada como com passagem de mensagens. LambdaNet é o limite superior de desempenho para Optimul, já que a
contenção originada pelo compartilhamento dos canais de Optimul degrada o seu desempenho em proporção ao número de nós que compartilham cada canal. Para o caso de um
multiprocessador, Optimul utiliza um esquema de atualizações com snooping para tomar
vantagem da enorme largura de faixa dos enlaces óticos. A comparação feita entre OPTNET e LambdaNet indica que OPTNET também deve apresentar uma melhor relação
custo/desempenho que Optimul, já que as diferenças de desempenho entre os sistemas
OPTNET e Optimul devem ser ainda menores que as existentes entre os sistemas OPTNET e LambdaNet, e o custo do hardware ótico de Optimul é somente um fator constante
melhor que o de LambdaNet.
Ha e Pinkston [33] propuseram a rede DMON e o sistema DMON-I estudado anteriormente. Embora DMON seja uma rede bastante similar a OPTNET, as diferenças principais são duas: a) os canais de disseminação de OPTNET são mais bem-comportados sob
alta contenção, e b) os canais de comunicação ponto-a-ponto de OPTNET não requerem
nenhum mecanismo para controle de acesso. Além de outras contribuições, o nosso estudo estendeu o seu trabalho propondo um sistema baseado em atualizações para DMON.
Os resultados de desempenho mostram que OPTNET é melhor que os sistemas baseados
em DMON em todos os casos.
Dowd e Chu [21] estudaram a interação dos diferentes mecanismos de controle de
acesso com os protocolos de coerência nos multiprocessadores escaláveis. Mais especificamente, o desempenho de um sistema com um protocolo de coerência baseado em
diretórios e com um protocolo de acesso TDMA foi comparado a um sistema com um
protocolo de coerência baseado em snooping e com um protocolo de acesso baseado em
reserva. Ambos os sistemas utilizaram protocolos de coerência baseados em invalidações.
Os resultados mostram que o sistema baseado em snooping é melhor que o baseado em
diretórios para a maioria das hipóteses arquiteturais. DMON-I, por outro lado, usa tanto
snooping como diretórios para criar um sistema baseado em invalidaç ões superior ao uso
exclusivo de snooping ou diretórios. Os sistemas baseados em OPTNET, LambdaNet
e DMON-U não usam diretórios, mas utilizam protocolos baseados em atualizações, os
quais se sabe, são superiores aos baseados em invalidações na presença de uma largura de
faixa extremamente grande [21].
53
4.6 Conclusões
Neste capı́tulo foi apresentada OPTNET, uma nova rede ótica e o seu protocolo de
coerência associado para multiprocessadores. Através de um grande conjunto de detalhadas simulações, foi demonstrado que o desempenho dos sistemas baseados em OPTNET
é superior ao apresentado pelos sistemas baseados em DMON para todas as aplicações
avaliadas. Note que OPTNET não requer mais hardware que DMON. Além disso, a
comparação entre OPTNET e LambdaNet mostra que as diferenças de desempenho são
de 0 a 12% em favor de LambdaNet (em média 4%). Estes resultados são extremamente
favoráveis a OPTNET devido à diferença considerável em requerimentos de hardware
ótico existente entre os dois multiprocessadores. Mas mesmo quando o custo dos componentes óticos seja baixo, a complexidade linear do hardware ótico de OPTNET permitirá
uma maior escalibilidade que a oferecida por LambdaNet.
Um estudo de variação de parâmetros mostra resultados qualitativamente similares para a maioria de hipóteses arquiteturais. Baseado nisso, pode-se concluir que
OPTNET apresenta a melhor relação custo/desempenho para multiprocessadores para
a maioria das suposições arquiteturais. As caracterı́sticas principais para a excelente
relação custo/desempenho de OPTNET podem-se resumir nos seguintes pontos: a) a
disseminação dos pedidos de acesso à memória e das transações de sincronização simplifica o hardware eliminando a necessidade de diretórios, b) a disseminação das transações
de sincronização otimiza o protocolo de coerência ao informar eficientemente aos processadores das mudanças feitas nos dados compartilhados, e c) o agrupamento de canais
melhora o desempenho ao desacoplar o tráfego de escritas do tráfego de leituras que é
mais crı́tico para o tempo de execução.
54
Capı́tulo 5
NetCache
A disparidade que existe entre as velocidades do processador e da memória continua
crescendo. Na atualidade, um acesso a memória demora algumas dezenas de ciclos para
completar, especialmente nos multiprocessadores escaláveis. As memórias cache são consideradas, normalmente, a melhor técnica para tolerar as elevadas latências de acesso a
memória. Os sistemas de computação modernos usam vários nı́veis de caches para reduzir
o custo médio de um acesso a memória. Infelizmente, às vezes as caches são menores que
os conjuntos de trabalho associados aos seus processadores, o que produz uma porcentagem relativamente grande de referências aos módulos de memória. Essa possibilidade
afeta particularmente o desempenho de um sistema quando as referências à memória são
dirigidas aos módulos remotos através de uma rede de interconexão escalável.
Baseados nas observações anteriores e na necessidade de reduzir a latência média de
acesso à memória, este capı́tulo propõe a utilização de uma rede ótica, não só como um
meio de comunicação, mas também como uma cache para os dados compartilhados dentro de um multiprocessador. Mais especificamente, a nossa proposta é usar uma rede ótica
em anel para manter circulando continuamente uma certa quantidade de dados compartilhados recentemente acessados. Esses dados são organizados numa estrutura similar à de
uma cache compartilhada por todos os processadores. A maioria dos aspectos aplicáveis
às caches tradicionais, tais como taxas de acerto/falha, capacidade, unidades de armazenamento e associatividade, são também aplicáveis a essa rede, chamada de NetCache
[16].
5.1 Arquitetura de NetCache
Esta seção inicia descrevendo a arquitetura básica da rede para posteriormente, descrever com mais detalhes o protocolo de coerência e as operações de acesso a memória.
Finalmente, algumas implementações alternativas que cumprem os mesmos objetivos de
NetCache serão discutidas.
55
Electronic
Interfacing
NI i
Tx R
Tx C
Tx i
Rx R
Rx C1
Rx C2
TRx
Tx t
Rx t
WDM
MUX
NI 1
NI p
Star
WDM
DMUX
NI 2
Star
Coupler
...
Add &
Drop
Filter Ring
...
...
TRx t
Figura 5.1: Detalhe da Arquitetura de NetCache
5.1.1 Arquitetura Básica
Cada nó do multiprocessador baseado em NetCache é extremamente simples e tem uma
estrutura similar à apresentada no capı́tulo anterior para OPTNET (veja a figura 4.3). A
única diferença neste caso é que a interface de rede conecta o nó a duas subredes: uma
subrede WDM em estrela e uma subrede WDM em anel.
A figura 5.1 detalha a arquitetura de NetCache, incluindo as suas interfaces e subredes.
A subrede em estrela é a mesma apresentada para OPTNET, enquanto que a subrede em
anel é diferente de qualquer outra rede ótica previamente proposta. Assim, a subrede em
anel será a única descrita nesta seção.
A subrede em anel é o aspecto mais interessante da arquitetura de NetCache, já que ela
é usada para armazenar certa quantidade de dados compartilhados recentemente acessados. Os dados estão continuamente circulando no anel através de canais WDM, referidos
como cache-channels. De acordo com as classificações apresentadas nos capı́tulos 2 e
3, os cache-channels formam uma rede FT-{F,T}R e implementam uma memória ótica
sı́ncrona baseada unicamente em componentes optoeletrônicos. Além disso, os dados
estão organizados como em uma cache compartilhada por todos os nós da máquina. Desta
forma, o anel se transforma num nı́vel extra de cache que armazena dados de qualquer nó.
No entanto, o anel não respeita as propriedades de inclusão da hierarquia de caches, i.e.,
os dados armazenados pelo anel não são necessariamente um superconjunto dos dados
armazenados nas caches de nı́veis superiores. Em outras palavras, a capacidade de armazenamento do anel é totalmente independente dos tamanhos individuais ou combinados
das caches secundárias. A capacidade de armazenamento do anel é simplesmente proporcional ao número de canais disponı́veis, à largura de faixa e ao comprimento dos canais,
como mostrado no capı́tulo 3.
Note que existe uma relação entre o comprimento da fibra ótica (e por conseqüência,
a capacidade de armazenamento do anel) e a latência de acesso a memória remota, já que
quanto maior seja a fibra maior será a latência de circulaç ão dos dados no anel, sendo que
o tempo de acesso aos dados no anel deve ser inferior ao tempo de acesso aos dados re-
56
motos. Quanto maior seja a latência de acesso aos dados remotos, maior pode ser a cache
compartilhada. Aumentos na capacidade de armazenamento podem também ser produzidos por um aumento no número de canais ou na taxa de transmissão. No entanto, esses
fatores dependem diretamente dos desenvolvimentos tecnológicos futuros. Felizmente,
esses desenvolvimentos acontecerão naturalmente, já que a necessidade por largura de
faixa continua crescendo e a comunicação ótica se faz mais popular.
O anel trabalha da seguinte maneira. Cada cache-channel armazena os blocos de um
home em particular. Assumindo um total de c cache-channels e p processadores, cada
home possui t = c/p cache-channels para os seus blocos. Como os cache-channels e
blocos são associados aos homes de uma forma round-robin intercalada, o cache-channel
destinado a um certo bloco pode ser determinado através do m ódulo do endereço do bloco
pelo número total de canais (c). Um bloco determinado pode ser introduzido em qualquer
lugar dentro do cache-channel.
Como numa cache convencional, a cache compartilhada possui uma etiqueta de
endereço junto a cada bloco (linha de cache compartilhada). A etiqueta contém parte
do endereço do bloco de cache e consome uma fração (usualmente bastante pequena) da
capacidade de armazenamento do anel. O acesso a cada bloco por parte dos diferentes
processadores é estritamente seqüencial como determinado pelo fluxo de dados no cachechannel. A interface de rede acessa um bloco através de um registrador de deslocamento
que obtém réplicas dos bits que circulam pelo anel. Cada registrador de deslocamento é da
largura de um bloco de cache. Quando o registrador é preenchido totalmente, o hardware
move o bloco para um outro registrador, chamado de registrador de acesso, onde os dados
podem ser manipulados. Com uma taxa de transmissão de 10 Gbits/s e considerando um
bloco de cache de 64 Bytes, o registrador de deslocamento demora 50 nanosegundos para
ser preenchido. Esse tempo é suficiente para comparar a etiqueta e possivelmente copiar
o bloco antes que o registrador de acesso seja sobrescrito.
A interface de NetCache em cada nó pode ler qualquer um dos cache-channels, mas
só pode escrever nos t cache-channels associados ao nó. Além disso, a interface de NetCache resincroniza e regera os t cache-channels. Para cumprir com esta funcionalidade,
a interface requer 2 receptores sintonizáveis (“TRx”) e t conjuntos de receptores (“Rx”)
e transmissores (“Tx”) fixos, como mostra a figura 5.1. Um dos receptores sintonizáveis
é usado para acessar o cache-channel do último pedido, enquanto que o outro é présintonizado ao canal seguinte1. Os t transmissores fixos são usados para inserir novos
dados em qualquer um dos cache-channels associados ao nó. Em conjunto com esses
transmissores, os t receptores fixos são utilizados para recircular os dados nos cachechannels associados ao nó. Assim, o custo de hardware para esta subrede é de 2×p+2×c
componentes óticos.
Como a complexidade de hardware da subrede em estrela é 7 × p (OPTNET), o custo
total de hardware da arquitetura NetCache é 9 × p + 2 × c. Nas simulações realizadas,
1
O objetivo é ocultar o custo de sintonização mediante a predição do canal que será requerido posteriormente.
57
c é igual a 8 × p, o que dá um total de 25 × p componentes óticos. Esta complexidade
de hardware é 4 vezes maior que a de DMON, mas é linear em p, o que é oposto à
complexidade quadrática em p de LambaNet.
5.1.2 Protocolo de Coerência
O protocolo de coerência é uma parte integrante da arquitetura de NetCache. Ele é baseado numa coerência com atualizações e suportado tanto por uma comunicação pontoa-ponto como por disseminação. O tráfego de atualizações flui através dos canais de
coerência, enquanto que os blocos de dados são enviados pelos home-channels e cachechannels. O canal de pedidos transporta todos os pedidos de leitura à memória e os
reconhecimentos das atualizações. A descrição, a seguir, mostra o protocolo de coerência
para as operações de leitura e escrita com mais detalhes.
Leituras. Num acesso de leitura, a hierarquia de memória é atravessada de forma a
permitir que a palavra requerida seja encontrada o mais rápido possı́vel. Uma falha na
cache secundária bloqueia o processador e é tratada diferentemente dependendo do tipo
de dado a ser lido. No caso do bloco solicitado ser privado ou mapeado na memória local,
o acesso de leitura é dirigido à memória local, sendo o bloco retornado diretamente ao
processador.
Se o bloco é compartilhado e está mapeado num outro nó, a falha causa um acesso
à NetCache. O pedido é enviado ao correspondente nó através do canal de pedidos, e o
receptor sintonizável na subrede em estrela é ajustado ao correspondente home-channel.
Em paralelo, o nó solicitante sintoniza um dos receptores na subrede em anel ao respectivo
cache-channel. O nó solicitante então espera até o bloco ser recebido, seja através do
home-channel ou do cache-channel. Posteriormente, o bloco será lido e retornado à cache
secundária.
Quando um pedido chega ao home, ele verifica se o bloco já está em algum dos cachechannels. Para manter esta informação, a interface de NetCache mantém uma hash-table
que armazena os endereços dos blocos que atualmente estão no anel. Se o bloco já está
na cache compartilhada, o home simplesmente ignora o pedido, pois o bloco será eventualmente recebido pelo nó solicitante. Se o bloco não está atualmente na cache, o home lê
o bloco da memória e o coloca no respectivo cache-channel, substituindo um dos blocos
aı́ presentes, se necessário2 . Além de retornar o bloco pedido através do cache-channel, a
interface de NetCache também envia o bloco através do seu home-channel.
É importante notar que o protocolo inicia as transações de leitura nas duas subredes de
forma a garantir que uma falha na cache compartilhada não demore mais que um acesso
à memória remota. Se as leituras fossem iniciadas unicamente na subrede em anel, as
falhas de acesso na cache compartilhada demorariam uma meia volta a mais (em média)
no anel para serem satisfeitas.
2
As substituições são aleatórias e não requerem escritas adicionais à memória, pois a cache compartilhada e a memória estão sempre atualizadas.
58
Escritas. A arquitetura do multiprocessador simulado implementa o modelo de memória
release-consistency [27]. Escritas consecutivas a um mesmo bloco são agrupadas no
write-buffer. Escritas a um bloco privado são enviadas diretamente à memória local
através das caches primária e secundária. Escritas a blocos compartilhados são sempre
enviadas por um dos canais de coerência na forma de uma atualização através das caches
locais. Uma atualização só leva as palavras do bloco que foram modificadas.
Cada atualização deve ser reconhecida pelo seu correspondente home antes que uma
outra atualização do mesmo nó possa ser emitida. Desta forma, se evita que os módulos de
memória possuam filas de entrada grandes (i.e., os reconhecimentos às atualizações são
usados como um mecanismo de controle de fluxo). Os outros nós, que possuem cópias do
bloco nas suas caches, simplesmente atualizam as caches locais. Quando o home recebe
a atualização, ela é inserida numa fila FIFO, e o home envia um reconhecimento através
do canal de pedidos. No entanto, o reconhecimento não pode ser enviado imediatamente
se a fila de memória estiver cheia acima de um ponto de histerese. Neste caso, o home
retarda o envio do reconhecimento até que possa permitir, de forma segura, o envio de
outra atualização por parte do mesmo nó. Um nó pode unicamente adquirir um lock ou
passar uma barreira depois de ter esvaziado a sua fila de memória. Note que os reconhecimentos das atualizações não sobrecarregam o canal de pedidos, pois os reconhecimentos
são mensagens curtas que ocupam um único slot.
Depois de ter inserido a atualização na fila de memória, o home verifica se o bloco
atualizado está presente num dos seus cache-channel. Se está presente, além de atualizar
a sua memória e as caches locais, o home atualiza o seu cache-channel. Existem duas
condições de corrida no protocolo de coerência que devem ser levadas em conta. A primeira ocorre quando uma operação de coerência é observada por um bloco que tem uma
leitura pendente. De forma similar ao protocolo proposto para OPTNET, esta condição é
tratada armazenando as atualizações e posteriormente combinando-as com o bloco recebido da memória. O segundo tipo de corrida ocorre devido à existência de uma janela de
tempo entre a disseminação da atualização e a modificação da cópia do bloco na cache
compartilhada. Durante esta janela de tempo, um nó pode iniciar a leitura de um bloco,
lê-lo da cache compartilhada, e nunca aplicar a atualização correspondente. Para evitar este problema, cada interface de rede inclui uma pequena fila FIFO que armazena os
endereços dos blocos que foram previamente atualizados. Qualquer acesso à cache compartilhada, procurando um bloco presente na fila, deve ser atrasado até que o endereço do
bloco saia da fila. Isto garante que quando a leitura for realizada, a cópia do bloco na cache compartilhada estará também atualizada. A gerência desta fila extra é muito simples:
a entrada na cabeça da fila pode ser jogada fora quando ela tiver residido na fila por um
tempo igual a duas voltas na subrede em anel, i.e., a máxima quantidade de tempo que
o home pode demorar para atualizar o bloco na cache compartilhada. Assim, o tamanho
máximo da fila é igual ao número máximo de atualizações que podem ser emitidas nesse
perı́odo de tempo. Nas simulações realizadas, esse valor é 54.
59
5.1.3 Implementação Alternativa
O principal objetivo da arquitetura de NetCache, trazer os dados das memórias remotas
para mais perto do processador, pode ser alcançado com uma implementação diferente da
rede. Mais especificamente, ao invés de armazenar os dados na fibra ótica da subrede em
anel, eles podem ser armazenados numa memória eletrônica e continuamente disseminados através de canais adicionais na subrede em estrela. Na verdade, os c cache-channels
do anel podem ser trocados por c canais extras na subrede em estrela, transmitindo os
mesmos dados anteriormente transmitidos em cada um dos canais extra. Esta arquitetura
modificada teria um desempenho idêntico ao de NetCache, já que manteria a sua capacidade de armazenamento, a sua organização lógica, o protocolo de coerência e as latências
para o caso de uma falha de leitura na cache secundária. Adicionalmente, a nova arquitetura reduziria o hardware ótico, pois c receptores fixos poderiam ser eliminados. No
entanto, seriam necessárias memórias eletrônicas adicionais, suficientes para armazenar
os dados a serem disseminados.
Devido às similaridades entre estas duas arquiteturas, os resultados apresentados
nas próximas seções são válidos para as duas alternativas. A seleção da forma de
implementação unicamente depende do custo do hardware (eletrônica vs. ótica) no momento que o multiprocessador seja construı́do. Ao longo deste capı́tulo foi selecionada
a implementação de NetCache por duas razões: a) o custo decrescente dos componentes
óticos sugere que no futuro a ótica pode prover uma melhor relação custo/desempenho
que a eletrônica, e o mais importante pelo momento, b) existe a intenção de extrapolar o uso de NetCache aos blocos do disco, o que requereria uma grande quantidade de
memória eletrônica para a sua implementação alternativa. A arquitetura de NetCache
pode ser aplicada ao caso de blocos de disco com um mı́nimo custo adicional: o de uma
fibra ótica maior.
5.2 Metodologia
Para avaliar o desempenho de NetCache e compará-lo em relação a propostas de multiprocessadores baseados em redes óticas previamente estudadas, utilizamos simulações de
aplicações paralelas reais.
5.2.1 Simulação
Simulamos multiprocessadores de 16 nós com as redes de interconexão NetCache,
DMON e LambdaNet. Os simuladores são baseados no MINT [76]. Cada nó das
máquinas simuladas contém um processador de 200 MHz, um write-buffer de 16 entradas,
uma cache primária de 4 KBytes diretamente mapeada e com blocos de 32 Bytes, uma
cache secundária de 16 KBytes diretamente mapeada e com blocos de 64 Bytes, memória
local, e uma interface de rede.
Note que as caches simuladas são pequenas porque as limitações no tempo de
60
Operação
Acerto na cache compartilhada
1. Verificação da cache primária
2. Verificação da cache secundária
3. Retardo médio na cache compartilhada
4. Transferência da NI para a cache secundária
Total
Falha na cache compartilhada
1. Verificação da cache primária
2. Verificação da cache secundária
3. Retardo médio TDMA
4. Pedido à memória
5. Retardo de propagação
6. Leitura de memória
7. Transferência do bloco
8. Retardo de propagação
9. Transferência da NI para a cache secundária
Total
Latência
1
4
25
16
46
1
4
8
1∗
1
76+
11
1
16
119
Tabela 5.1: Tempos de Leitura para NetCache em Ciclos de Processador
simulação nos impedem de usar entradas reais. Na verdade, a capacidade das caches
primária e secundária foram reduzidas por um fator de 32. O objetivo destas reduções
é produzir, aproximadamente, o mesmo tráfego de acessos à memória que nos sistemas
reais. Assim, a capacidade de armazenamento de NetCache deverá também aumentar
por um fator próximo a 32 no caso de sistemas reais. O aumento do tamanho do armazenamento de NetCache pode ser realizado aumentando o comprimento do anel ótico (e
aumentando assim a sua latência de round-trip), aumentando a taxa de transmissão e/ou
usando mais cache-channels. De qualquer forma, aumentar a capacidade do anel ótico simulado por um fator de 32 pode não ser prático com a tecnologia ótica atual. No entanto,
espera-se que num futuro próximo este aumento de tamanho seja possı́vel. Na verdade, as
suposições de capacidade podem ser consideradas altamente conservadoras com relação
ao potencial da ótica, especialmente se são consideradas técnicas de multiplexação tais
como OTDM a qual suportaria até 5000 canais [59].
Os dados compartilhados são intercalados a nı́vel do bloco entre as diferentes
memórias. Assumimos que todas as instruções e acertos de leitura na cache primária
demoram um ciclo de processador. Falhas de leitura na cache primária bloqueiam o processador até que o pedido de leitura é satisfeito. Um acerto de leitura na cache secundária
demora 12 ciclos para completar. As escritas vão ao write-buffer e demoram um ciclo,
exceto quando o write-buffer está cheio. Neste último caso, o processador é bloqueado
até que uma entrada seja liberada. As leituras podem ser escalonadas antes que as escritas
no write-buffer. Um módulo de memória pode prover as primeiras duas palavras 12 ciclos
após a emissão do pedido. As outras palavras são entregues a uma taxa de duas palavras
61
Operação
Latência
LambdaNet DMON
Falha na cache secundária
1. Verificação da cache primária
2. Verificação da cache secundária
3. Retardo médio TDMA
4. Reserva do canal
5. Retardo de sintonização
6. Pedido à memória
7. Retardo de propagação
8. Leitura de memória
9. Retardo médio TDMA
10. Reserva do canal
11. Transferência de bloco
12. Retardo de propagação
13. Transferência da NI para a cache secundária
Total
1
4
–
–
–
1∗
1
76+
–
–
11∗
1
16
111
1
4
8
1∗
4
2
1
76+
8
1∗
12
1
16
135
Tabela 5.2: Tempos de Leitura para LambdaNet e DMON em Ciclos de Processador
por cada 8 ciclos. A contenção na memória e na rede são totalmente modeladas.
No protocolo de coerência baseado em atualizações, somente o bloco na cache secundária é atualizado quando uma atualização chega ao nó. A cópia desse bloco na cache primária é invalidada. Além disso, para reduzir o tráfego de escritas, o write-buffer
agrupa todas as escritas para um mesmo bloco em todos os protocolos implementados.
Uma atualização somente leva as palavras que foram modificadas em cada bloco. As
implementações dos protocolos assumem um modelo de memória release-consistency
[27].
A taxa de transmissão ótica simulada foi de 10 Gbits/s. Nas simulações de NetCache
assumimos 128 cache-channels. O comprimento da fibra é aproximadamente 45 metros.
Estes parâmetros produzem uma latência de 40 ciclos para uma circulação completa dos
dados e uma capacidade de armazenamento de 32 KBytes. O tamanho do bloco de cache
compartilhada é 64 Bytes.
O protocolo de coerência implementado acima da cache compartilhada foi descrito
anteriormente. A latência de leitura na cache compartilhada de NetCache foi dividida
nos seus componentes base na tabela 5.1. As latências de uma falha de leitura na cache
secundária para LambdaNet e DMON são apresentadas na tabela 5.2. As latências de
uma transação de coerência em NetCache, LambdaNet, DMON com coerência baseada
em atualizações (DMON-U), e DMON com I-SPEED (DMON-I) são mostradas na tabela
5.3, assumindo 8 palavras escritas em cada bloco de cache3 . Todos os números nas tabelas
estão em ciclos de processador e assumem um cenário livre de contenção nos canais de
3
Note que a maior parte de todas as transações de coerência são normalmente escondidas do processador
pelo write-buffer.
62
Operação
1. Verificação da cache secundária
2. Escrita na NI
3. Retardo médio TDMA
4. Reserva do canal
5. Atualização/Invalidação
6. Retardo de propagação
7. Retardo médio TDMA
8. Reserva do canal
9. Reconhecimento
10. Retardo de propagação
11. Escrita na cache secundária
Total
NetCache
4
10
8∗
–
8
1
8
–
1∗
1
–
41
Latência (em ciclos)
LambdaNet DMON-U DMON-I
4
4
4
10
10
2
–
8
8
∗
–
1
1∗
7
8
2
1
1
1
–
8
8
–
1∗
1∗
1∗
1
1
1
1
1
–
–
8
24
43
37
Tabela 5.3: Tempos de uma Transação de Coerência para NetCache, LambdaNet, DMONU e DMON-I em Ciclos de Processador
comunicação e na memória. Os valores marcados com ’ ∗ ’ e ’+ ’ são os que podem ser
aumentados pela contenção e/ou serialização na rede e memória, respectivamente.
Note que durante as simulações o mı́nimo slot TDMA é de um ciclo de processador
tanto para DMON como para NetCache. Assim, cada slot do canal de controle em DMON
e do canal de pedidos em NetCache é de um ciclo. Cada slot dos canais de coerência em
NetCache é de pelo menos 2 ciclos. A duração real de cada slot neste caso depende do
número de palavras atualizadas.
Os parâmetros de simulação assumidos representam uma percepção pessoal do que é
razoável para os multiprocessadores atuais e num futuro pr óximo. O estudo do espaço
de parâmetros apresentado na seção de resultados permitirá investigar o impacto das mais
importantes hipóteses arquiteturais.
5.2.2 Aplicações
O conjunto de aplicações usadas nesta avaliação são as 10 usadas na avaliação de OPTNET, além de FFT e LU. Essas duas novas aplicações são parte do SPLASH-2 [82] e foram incluı́das por apresentar caracterı́sticas importantes do reuso de dados: FFT quase não
tem reuso e LU apresenta um reuso significativo. A tabela 5.4 mostra todas as aplicações
e os seus parâmetros de entrada.
5.3 Resultados
Nesta seção será avaliado o desempenho de um multiprocessador baseado em NetCache
e comparado com multiprocessadores baseados nas redes LambdaNet e DMON. Inicialmente são mostrados os resultados de tempos de execução e de eficiência da arquitetura
como uma cache de dados. Posteriormente serão avaliadas diferentes organizações da
63
Programa
CG
Em3d
FFT
Gauss
LU
Mg
Ocean
Radix
Raytrace
SOR
Water
WF
Descrição
Gradiente Conjugado (kernel)
Propagação de ondas eletromagnéticas
Transformada Rápida de Fourier 1D
Eliminação de Gauss sem blocos
Fatorização LU por blocos
Poisson 3D usando técnicas de multigrid
Simulação da movimentação de oceanos
Ordenação de inteiros
Traçador paralelo de raios luminosos
Relaxamento progressivo
Simulação de moléculas de água (spatial)
Algoritmo do caminho mais curto
Tamanho da Entrada
1400 × 1400 doubles, 78148 <> 0
8 K nós, 5% remotos, 10 iter.
16 K pontos
256 × 256 floats
512 × 512 floats
24 × 24 × 64 floats, 6 iterações
Grade 66 × 66
512 K chaves, radix 1024
teapot
256 × 256 floats, 100 iterações
512 moléculas, 4 passos
384 vértices, conectividade 50%
Tabela 5.4: Descrição das Aplicações e Principais Parâmetros de Entrada
23,4
16
16,8
14
speedup
12
10
8
6
4
2
wf
water
sor
raytrace
radix
ocean
mg
lu
gauss
fft
em3d
cg
0
Figura 5.2: Ganho de Desempenho num Multiprocessador de 16 Nós com NetCache
cache e polı́ticas de substituição. Finalmente, o efeito de algumas das suposições feitas
durante as simulações base serão avaliadas.
5.3.1 Desempenho Geral
A figura 5.2 mostra o ganho de desempenho das aplicações executando num multiprocessador baseado em NetCache com 16 nós e uma cache compartilhada de 32 KBytes. A
figura demonstra que, exceto para CG, LU e WF, as aplicações exibem ganhos bons para
16 nós. Os dois extremos, Em3d e WF, foram explicados no capı́tulo anterior.
A figura 5.3 mostra os tempos de execução das 12 aplicações num multiprocessador
de 16 nós e 32 KBytes de cache compartilhada. Para cada aplicação são mostrados, da
esquerda para a direita, os desempenhos de NetCache, LambdaNet, DMON-U e DMONI, normalizados aos resultados de NetCache. Esta figura demonstra que o desempenho de
DMON-U é igual ou melhor que o de DMON-I. A vantagem de DMON-U sobre DMON64
2,5
NetCache
Lambda
DMON-U
DMON-I
2,0
1,5
1,0
0,5
wf
water
sor
raytrace
radix
ocean
mg
lu
gauss
fft
em3d
cg
0,0
Figura 5.3: Tempos de Execução (com Relação ao MP NetCache) de NetCache, LambdaNet, DMON-U e DMON-I
I é, em média, 12%. Os dois sistemas apresentam o mesmo desempenho para FFT, LU,
Raytrace, Water e WF, mas para as outras aplicações a vantagem de DMON-U está entre
5% (CG) e 42% (Radix), com uma média de 21%. Estes resultados podem ser explicados
em parte pelo fato de que os sistemas baseados em atualizações exibem uma taxa de falha
na cache secundária menor que em DMON-I. No entanto, as diferenças na taxa de falha
não são extremamente significativas, pois as aplicações simuladas são dominadas por
falhas de substituição. O fator mais importante nesta comparação é o fato de que DMONI sofre mais de contenção na rede e memória que os outros sistemas. A contenção é mais
pronunciada no sistema DMON-I devido às escritas dos blocos de cache modificados que
são jogados fora das caches secundárias, aos acessos de diretório requeridos em todos os
pedidos a memória, e às mensagens extras requeridas para o re-envio de um pedido ao
dono atual do bloco.
Uma comparação entre os sistemas LambdaNet e DMON-U mostra que o primeiro
sistema se comporta ao menos tão bem como o segundo para todas as aplicações, mas as
diferenças de desempenho são sempre pequenas, em média 6%. Os dois sistemas mostram quase o mesmo desempenho para FFT, LU, Radix, SOR e Water. Para as outras 7
aplicações, a vantagem de LambdaNet está entre 5% (Gauss) e 11% (CG e WF), com
uma média de 9%. Esta diferença relativamente pequena pode parecer surpreendente devido à latência de leitura ser o maior overhead em todas as aplicações (exceto WF), e a
latência de uma falha na cache secundária sem contenção no sistema DMON-U ser 22%
maior que no sistema LambdaNet. No entanto, o sistema LambdaNet é normalmente
mais propenso à contenção que DMON-U ou NetCache devido a duas caracterı́sticas: a)
as transações de leitura e escrita não estão desacopladas em LambdaNet, e b) a ausência
de pontos de serialização para as atualizações dos diferentes nós gera um tráfego de
atualizações enorme para LambdaNet. Desta forma, os efeitos de contenção explicam
porque as diferenças de desempenho em favor de LambdaNet não são tão significativas.
Uma comparação entre os sistemas NetCache e DMON-I é claramente favorável a
65
NetCache em todos os casos. A vantagem de desempenho de NetCache é em média 42%
para as aplicações utilizadas. Para FFT e Water os dois sistemas são similares, mas para
as outras 10 aplicações, a vantagem de NetCache está entre 20% (Raytrace) e 105% (WF),
dando em média 50%. Os motivos principais para a imensa disparidade entre NetCache
e DMON-I são dois: a) uma fração significativa das falhas de leitura na cache secundária
são acertos na cache compartilhada de NetCache, o que reduz tremendamente a latência
dessas operações, e b) mesmo quando a cache compartilhada é relativamente ineficiente,
as latências de uma falha de leitura na cache secundária são maiores em DMON-I que em
NetCache, especialmente quando a quantidade de tráfego gerado pela aplicação na rede é
significativa.
NetCache também apresenta um melhor desempenho que DMON-U. A vantagem do
sistema NetCache tem uma média de 27% para as aplicações simuladas. Exceto para FFT
e Radix, onde as diferenças de desempenho são desprezı́veis, o ganho de NetCache varia
de 7% (Water) a 99% (WF), dando uma média de 32%. Esta diferença de desempenho
significativa pode ser atribuı́da em grande parte à habilidade da cache compartilhada para
reduzir a latência média das leituras, pois as latências sem contenção de uma falha de
leitura na cache secundária somente diferem 13%, e a contenção afeta os dois sistemas de
forma similar.
A figura 5.3 demonstra que uma comparação entre NetCache e LambdaNet é claramente favorável a NetCache. Os tempos de execução de NetCache são em média 20%
menores para as aplicações utilizadas. O desempenho dos dois sistemas é equivalente para
3 aplicações: Em3d, FFT e Radix. Para as outras 9 aplicações, a vantagem de NetCache é
em média 26%, variando de 7% para SOR e Water a 41 e 79% para Gauss e WF, respectivamente. Sem considerar as 5 aplicações para as quais as diferenças de desempenho são
inferiores a 10%, a vantagem média de NetCache sobre LambdaNet aumenta para 31%.
Novamente, o principal motivo para estes resultados é a habilidade de NetCache para reduzir a latência média de leituras quando uma porcentagem não desprezı́vel de falhas na
cache secundária acertam na cache compartilhada. Os experimentos realizados para NetCache, sem a cache compartilhada, confirmam esta afirmação. Em geral, o desempenho
de OPTNET é um pouco pior que LambdaNet (em média 1%), um pouco melhor que
DMON-U (em média 4%), e bastante superior a DMON-I (em média 17%). Para avaliar
a arquitetura de NetCache mais detalhadamente, a próxima subseção trata da eficiência
da cache ótica. Posteriormente, serão avaliadas organizações e polı́ticas alternativas para
a cache compartilhada.
5.3.2 Eficiência da Cache Compartilhada
A figura 5.4 mostra a eficiência de NetCache como uma cache de dados, assumindo,
novamente, um multiprocessador de 16 nós. Para cada aplicação é mostrado um grupo de
4 barras. A barra mais à esquerda representa a latência de leitura como uma porcentagem
do tempo total de execução em NetCache sem a cache compartilhada. As outras barras
apresentam resultados de NetCache com 32 KBytes de cache compartilhada, da esquerda
66
90
RL of Total
Hit Rate
Miss Lat.
Read Lat.
80
70
60
50
40
30
20
10
wf
water
sor
raytrace
radix
ocean
mg
lu
gauss
fft
em3d
cg
0
Figura 5.4: Porcentagem da Latência de Leitura no Tempo de Execução, Taxa de Acerto
(em Porcentagem) na Cache Compartilhada, Redução da Latência de Leitura numa Falha
e Redução da Latência de Leitura Total
para a direita: a taxa de acerto na cache compartilhada, a porcentagem de redução na
latência de uma falha na cache secundária, e a porcentagem de redução na latência de
leitura total.
A figura demonstra que, para unicamente 3 aplicações (Radix, Water e WF), a latência
de leitura é uma fração pequena do tempo total de execução num multiprocessador com
NetCache, mas sem a cache compartilhada. A latência de leitura é uma fração significativa
nas outras 9 aplicações. É justamente nessas aplicações com maior fração de latência de
leitura que a cache compartilhada apresenta uma maior contribuição. No entanto, como
se observa na figura, nem todas as aplicações exibem taxas de acerto elevadas quando é
assumida uma cache de 32 KBytes.
Resumindo, os resultados das taxas de acerto dividem as aplicações em 3 grupos. O primeiro (chamado de pouco-reuso) inclui as aplicações com uma insignificante
reutilização de dados na cache compartilhada. Neste grupo estão Em3d, FFT e Radix,
para as quais menos de 32% das falhas na cache secundária acertam na cache compartilhada. Como resultado disso, as reduções na latência de uma falha na cache secundária e
na latência total de leitura são quase desprezı́veis para estas aplicações. O segundo grupo
de aplicações (muito-reuso) exibe uma significativa reutilização dos dados na cache compartilhada. Três aplicações pertencem a este grupo: Gauss, LU e Mg. As suas taxas de
acerto são bastante altas, aproximadamente 70%, o que produz uma redução na latência
de uma falha na cache secundária e na latência total de leitura de pelo menos 35%. As
outras 6 aplicações (CG, Ocean, Raytrace, SOR, Water e WF) formam o terceiro grupo
(moderado-reuso) com taxas de acerto intermédias e reduções nas latências de leitura na
ordem de 20 a 30%.
Estes resultados sugerem que NetCache não poderia melhorar o desempenho de
LambdaNet para Em3d, FFT, Radix e Water. Estas aplicações simplesmente não se beneficiam da cache compartilhada, seja porque as suas taxas de acerto são baixas ou porque
67
100
16 KB
32 KB
64 KB
90
80
70
60
50
40
30
20
10
wf
water
sor
raytrace
radix
ocean
mg
lu
gauss
fft
em3d
cg
0
Figura 5.5: Taxas de Acerto (em Porcentagem) para uma Cache Compartilhada de 16, 32
e 64 KBytes
a latência das leituras não é um parâmetro importante no desempenho destas aplicações.
Por outro lado, estes resultados sugerem que WF não devia se beneficiar de NetCache, o
que as simulações não confirmam. O motivo para este resultado (aparentemente) surpreendente é que a redução na latência de leitura conseguido por NetCache tem um importante efeito colateral: melhora o comportamento das sincronizações em 7 das aplicações
executadas (CG, LU, Mg, Ocean, Radix, Water e WF). Para WF, em particular, uma cache
compartilhada de 32 KBytes melhora o overhead das sincronizações em 56%, aliviando
a falta de balanceamento exposta durante as barreiras da aplicação.
5.3.3 Avaliação de
Substituição
Diferentes
Organizações
e
Polı́ticas
de
A seguir serão avaliadas diversas organizações da cache compartilhada e diferentes
polı́ticas de substituição. Em particular, será estudado o tamanho da cache compartilhada,
o tamanho do bloco da cache ótica, a sua associatividade, e a polı́tica de substituição da
cache compartilhada.
Tamanho da Cache Compartilhada. A figura 5.5 apresenta as taxas de acerto em NetCache para 16, 32 e 64 KBytes de cache compartilhada num multiprocessador com 16 nós.
O tamanho da cache compartilhada foi alterado mudando o número de cache-channels.
Mais especificamente, uma cache compartilhada de 16 KBytes é implementada com 64
cache-channels, e uma cache de 64 KBytes é implementada com 256 cache-channels.
A figura 5.5 mostra que as taxas de acerto das aplicações nos grupos pouco-reuso e
muito-reuso não são afetadas pelo tamanho da cache. No caso das aplicações com pouco
reuso, o motivo para este comportamento é que a cache compartilhada é muito pequena
para manter o conjunto de trabalho de todos os nós. A insensibilidade das aplicações com
muito reuso ao tamanho da cache tem um motivo diferente: uma cache compartilhada
de 16 KBytes já é suficiente para manter a maior parte do conjunto de trabalho, assim,
68
1,0
0,9
0,8
0,7
0 KB
16 KB
32 KB
64 KB
0,6
0,5
0,4
0,3
0,2
0,1
wf
water
sor
raytrace
radix
ocean
mg
lu
gauss
fft
em3d
cg
0,0
Figura 5.6: Latências de Leitura (com Relação ao MP OPTNET) numa Cache Compartilhada de 16, 32 e 64 KBytes
1,0
0,9
0,8
0,7
0 KB
16 KB
32 KB
64 KB
0,6
0,5
0,4
0,3
0,2
0,1
wf
water
sor
raytrace
radix
ocean
mg
lu
gauss
fft
em3d
cg
0,0
Figura 5.7: Tempos de Execução (com Relação ao MP OPTNET) numa Cache Compartilhada de 16, 32 e 64 KBytes
os aumentos de tamanho produzem apenas impactos pequenos nas taxas de acerto. As
aplicações no grupo moderado-reuso mostram os resultados mais interessantes. As taxas
de acerto destas aplicações melhoram significativamente com os aumentos no tamanho da
cache compartilhada, exceto para WF. O motivo desta exceção é que o tamanho da cache
compartilhada é insignificante comparado com o tamanho do conjunto de trabalho de WF.
Esta aplicação não se comporta exatamente como as do grupo pouco-reuso devido às suas
excelentes propriedades de localidade espacial.
As figuras 5.6 e 5.7 mostram as latências de leitura e os tempos de execução, respectivamente, para cada tamanho de cache compartilhada. Note que as figuras também
incluem uma barra (a mais à esquerda) correspondente a um multiprocessador com NetCache sem a cache compartilhada. Os dados da figura estão normalizados aos resultados
do multiprocessador sem a cache compartilhada. A mais importante observação que pode
69
ser feita da figura 5.6 é que o uso da cache compartilhada reduz significativamente a
latência de leitura para a maioria das aplicações (grupos moderado-reuso e muito-reuso).
As reduções na latência de leitura para estas aplicações pode chegar a 50%, como é o caso
de SOR com uma cache compartilhada de 64 KBytes, sendo em média 28% para uma cache compartilhada de 32 KBytes. Além disso, como era esperado, as reduções na latência
de leitura conseguidas pelos diferentes tamanhos de cache têm as mesmas tendências da
figura 5.5.
O efeito desses benefı́cios também é notório no desempenho total do sistema. A figura
5.7 demonstra que o uso de uma cache compartilhada melhora os tempos de execução
significativamente, exceto para Em3d, FFT, Radix e Water. Os ganhos de desempenho
alcançados por WF são particularmente significativos, 47%. Uma comparação dos resultados para os diferentes tamanhos de cache justifica a seleção de uma cache compartilhada
de 32 KBytes como a nossa arquitetura base, pois este tamanho apresenta uma melhor
relação custo/desempenho que os outros sistemas.
Tamanho de Bloco da Cache Compartilhada. Também avaliamos o tamanho do bloco
da cache compartilhada, mantendo constante o tamanho da cache em 32 KB. Lembre-se
que o tamanho base é 64 Bytes, o menor possı́vel considerando que o bloco da cache
secundária é também de 64 Bytes. Os experimentos mostram que um aumento no tamanho do bloco, para tirar vantagem da localidade dos programas, é uma má decisão.
Para as aplicações com pouca localidade espacial, tal aumento de tamanho simplesmente
aumenta a quantidade de poluição da cache compartilhada. Por exemplo, o overhead no
desempenho associado a um bloco de 128 Bytes alcança 33% para Em3d e 12% para
CG. Para algumas aplicações estes overheads não são muito acentuados, mas não existe
nenhuma vantagem na utilização de blocos maiores que 64 Bytes.
O tamanho de bloco da cache compartilhada segue as mesmas tendências observadas
nas caches tradicionais: um aumento no tamanho do bloco normalmente degrada o desempenho quando a cache é relativamente pequena, ou quando, a diminuição da taxa de
falhas obtida por blocos maiores não compensa a sua maior latência de procura.
Associatividade da Cache Compartilhada. Atualmente, a arquitetura de NetCache determina que um certo bloco só pode ser encontrado num canal especı́fico, i.e., os blocos são diretamente mapeados aos canais. Além disso, a arquitetura determina que um
bloco pode estar em qualquer lugar dentro do canal, i.e., os cache-channels são totalmente associativos. Esta organização simplifica bastante o hardware da subrede em anel
por duas razões. A primeira é que o nó que falha no acesso a um bloco não requer mais
de um receptor sintonizável. A segunda razão é que o home não precisa se preocupar com
endereços de linhas de cache especı́ficos dentro do canal, o home simplesmente insere o
bloco na primeira linha de cache utilizável.
Para avaliar como seria possı́vel melhorar o desempenho de NetCache mudando a
associatividade da cache compartilhada, realizamos experimentos onde os cache-channels
não são diretamente mapeados, i.e., um certo bloco deve ser colocado numa linha da cache
compartilhada especı́fica dentro do seu cache-channel. Mudar a alocação dos blocos aos
70
80
Fully
Direct
70
60
50
40
30
20
10
wf
water
sor
raytrace
radix
ocean
mg
lu
gauss
fft
em3d
cg
0
Figura 5.8: Taxas de Acerto (em Porcentagem) para a Cache Compartilhada como Função
da Associatividade de Cada Canal
canais não é uma opção, pois isso envolve um hardware mais complexo.
A figura 5.8 mostra as taxas de acerto de uma cache compartilhada de 32 KBytes
como função da associatividade de cada cache-channel. A barra à esquerda de cada
grupo representa a organização padrão de NetCache (“Fully”), enquanto que a barra à
direita representa a opção de ter cache-channels diretamente mapeados (“Direct”). A figura mostra que os cache-channels diretamente mapeados alcançam taxas de acerto muito
pequenas em todos os casos. As taxas de acerto nunca são maiores que 25%. Assim, estes
resultados justificam claramente a seleção feita para a arquitetura de NetCache.
A associatividade da cache compartilhada também segue as mesmas tendências observadas nas caches tradicionais, onde as caches totalmente associativas apresentam taxas
de acerto maiores que as diretamente mapeadas.
Polı́tica de Substituição na Cache Compartilhada. Outro aspecto importante na arquitetura de NetCache é a polı́tica de substituição de blocos na cache compartilhada. A
arquitetura determina que um bloco aleatório (o bloco contido na próxima linha de cache que passe na frente do nó) no correspondente cache-channel deve ser substituı́do
quando um novo bloco vai ser inserido na cache compartilhada. Novamente, esta polı́tica
simplifica o hardware da subrede em anel, pois a interface da subrede não precisa manter nenhuma informação adicional. Além disso, a polı́tica padrão otimiza a operação de
substituição, já que um novo bloco é inserido na cache compartilhada tão logo quanto for
possı́vel.
Para avaliar como seria possı́vel melhorar o desempenho de NetCache usando uma
melhor polı́tica de substituição, realizamos experimentos assumindo polı́ticas LFU (Least
Frequently Used), LRU (Least Recently Used) e FIFO (First In, First Out).
A figure 5.9 apresenta as taxas de acerto numa cache compartilhada de 32 KBytes
como função da polı́tica de substituição. Da esquerda para a direita, as barras em cada
grupo representam a polı́tica aleatória, atualmente aplicada por NetCache, e as polı́ticas
71
80
70
60
Random
LFU
LRU
FIFO
50
40
30
20
10
wf
water
sor
raytrace
radix
ocean
mg
lu
gauss
fft
em3d
cg
0
Figura 5.9: Taxas de Acerto (em Porcentagem) para a Cache Compartilhada como Função
da Polı́tica de Substituição
LFU, LRU e FIFO. A figura mostra que a polı́tica aleatória alcança taxas de acerto maiores
em todos os casos, exceto SOR. Para certas aplicações, como Em3d, Ocean e Radix,
a superioridade da polı́tica aleatória sobre as outras é substancial. As polı́ticas LRU e
FIFO atingem um desempenho comparável, mas as vezes significativamente pior que a
polı́tica aleatória. Embora LFU apresente o melhor resultado para SOR, ela se comporta
pobremente em relação às outras polı́ticas em alguns casos (Gauss, LU, Mg, Raytrace,
Water e WF). Novamente, estes resultados justificam a seleção da polı́tica de substituição
para NetCache.
Estes resultados das polı́ticas de substituição na cache compartilhada são um tanto surpreendentes, pois estratégias mais sofisticadas apresentam taxas de acerto menores que a
estratégia aleatória. A polı́tica LRU normalmente atinge bons resultados nas caches tradicionais, a cache compartilhada se comporta de modo diferente por duas razões: a) cada
cache-channel só pode armazenar 4 blocos, assim a estratégia aleatória tem uma probabilidade razoável de selecionar o melhor, e o mais importante, b) todos os processadores
do sistema inserem blocos na cache compartilhada, não unicamente o processador local
conectado à cache tradicional. Com estas caracterı́sticas e as diferentes temporizações
dos acessos a memória, uma polı́tica do tipo LRU deixa de ter sentido.
5.3.4 Impacto dos Parâmetros Arquiteturais
Nesta subseção será avaliado o impacto de algumas das suposições feitas nas simulações
para poder entender melhor o comportamento de NetCache. Inicialmente será feito um
estudo com diferentes tamanhos da cache secundária, logo será realizada uma avaliação
do impacto da taxa de transmissão, e finalmente será tratado o efeito da latência de leitura das memórias. Para simplificar a análise, os resultados estarão concentrados numa
aplicação representativa de cada um dos grupos muito-reuso e pouco-reuso, Gauss e Radix, respectivamente.
72
50
45
40
radix-DI
radix-L
radix-DU
radix-N
gauss-DI
gauss-DU
gauss-L
gauss-N
35
30
25
20
15
10
16 KB
32 KB
64 KB
Figura 5.10: Tempos de Execução (em Milhões de Ciclos) como Função do Tamanho da
Cache Secundária
Tamanho da Cache Secundária. A figura 5.10 apresenta os tempos de execução dos
sistemas NetCache (“N”), LambdaNet (“L”), DMON-U (“DU”) e DMON-I (“DI”), com
16 nós, para Gauss e Radix como função do tamanho da cache secundária. Lembre-se que
os experimentos base assumem uma cache secundária de 16 KBytes. Todos os resultados
assumem uma cache compartilhada de 32 KBytes.
Como era esperado, um aumento no tamanho da cache secundária reduz os benefı́cios
potenciais da cache compartilhada, pois este aumento de tamanho produz uma redução na
taxa de falhas de leitura. Isto é exatamente o que sucede com Gauss, uma aplicação com
boa localidade. No entanto, a vantagem de NetCache permanece considerável em todos
os casos, ainda para caches secundárias 4 vezes maiores que as do experimento base.
Por outro lado, os aumentos do tamanho da cache secundária não afetam significativamente a taxa de falhas em Radix, já que esta aplicação exibe uma localidade extremamente
baixa. Desta forma, somente DMON-I melhora o tempo de execução de Radix com esse
aumento de tamanho. Esse ganho de desempenho é uma conseqüência da redução na
contenção quando um relativamente pequeno número de falhas e escritas a memória são
evitadas.
Finalmente, note que tanto para Gauss como para Radix, um aumento de 4 vezes
na quantidade da cache secundária dos multiprocessadores baseados em LambdaNet e
DMON não é suficiente para ganhar de NetCache com uma cache compartilhada de 32
KBytes e uma cache secundária de 16 KBytes. Este resultado mostra o fato de que esses outros sistemas requerem uma grande quantidade de cache eletrônica adicional para
atingir os benefı́cios de uma cache compartilhada de 32 KBytes.
Taxas de Transmissão. A figura 5.11 apresenta o tempo de execução dos sistemas NetCache, LambdaNet, DMON-U e DMON-I como função da taxa de transmissão ótica.
Lembre-se que os experimentos base assumem uma taxa de 10 Gbits/s. Todos os resultados de NetCache assumem uma cache compartilhada de 32 KBytes, i.e., o comprimento
73
50
45
40
radix-DI
radix-L
radix-DU
radix-N
gauss-DI
gauss-DU
gauss-L
gauss-N
35
30
25
20
15
10
5 Gbps
10 Gbps
20 Gbps
Figura 5.11: Tempos de Execução (em Milhões de Ciclos) como Função da Taxa de
Transmissão
da subrede em anel é ajustado inversamente com as variações da taxa de transmissão. Por
exemplo, duplicando a taxa de transmissão é necessário diminuir pela metade o comprimento do anel.
A figura mostra que as aplicações sofrem uma perda significativa de desempenho nos
multiprocessadores baseados em DMON com uma taxa de transmissão de 5 Gbits/s, especialmente quando as aplicações exibem pouca localidade. As perdas experimentadas
por NetCache e LambdaNet não são significativas. No entanto, decrementos na taxa de
transmissão têm um impacto negativo nos benefı́cios potenciais da cache compartilhada,
especialmente para aplicações do grupo muito-reuso, já que a diferença percentual entre
uma falha e um acerto na cache compartilhada é reduzida. Por exemplo, a 5 Gbits/s um
acerto de leitura na cache compartilhada demora 68 ciclos, enquanto que uma falha demora 140 ciclos, um fator de 2. A 10 Gbits/s, uma falha de leitura na cache compartilhada
demora 2,6 vezes mais do que um acerto.
No entanto, a evolução tecnológica tende a aumentar as taxas de transmissão e não a
diminuı́-las. Aumentos nas taxas de transmissão têm um impacto maior nos tempos de
execução de NetCache que nos outros sistemas, especialmente para aplicações com uma
significativa reutilização dos dados na cache compartilhada.
Latência de Leitura de Memória. A figura 5.12 apresenta os tempos de execução
dos multiprocessadores baseados em NetCache, LambdaNet e DMON como função da
latência de leitura de um bloco na memória. Lembre-se que a latência de leitura de um
bloco na memória assumida para os experimentos base foi de 76 ciclos de processador.
Os resultados de NetCache assumem uma cache compartilhada de 32 KBytes.
A figura mostra alguns resultados interessantes, o mais importante é que os aumentos
na latência elevam os tempos de execução de NetCache muito menos que nos outros
sistemas. Este comportamento é, na verdade, uma das grandes vantagens do sistema
NetCache, já que os aumentos na latência aumentam os benefı́cios potenciais alcançáveis
74
50
45
40
radix-DI
radix-L
radix-DU
radix-N
gauss-DI
gauss-DU
gauss-L
gauss-N
35
30
25
20
15
10
44
76
108
Figura 5.12: Tempos de Execução (em Milhões de Ciclos) como Função da Latência de
Leitura na Memória (em Ciclos de Processador)
pela cache compartilhada.
5.3.5 Comparação com Outros Sistemas
Para finalizar a seção de resultados é importante comparar a arquitetura de NetCache com
outros tipos de sistemas, pelo menos em termos qualitativos.
Uma comparação direta entre NetCache e um multiprocessador com uma rede
eletrônica tradicional não seria necessária devido à significativa disparidade de desempenho existente entre este último e um multiprocessador com uma rede ótica. A disparidade
é produzida por alguns fatores como a largura de faixa da rede, a possibilidade de ter
canais independentes entre os diferentes conjuntos de nós, e a possibilidade de usar uma
coerência baseada em snooping.
Poderia se pensar que, ao invés de NetCache, seria mais benéfico usar uma rede ótica
simples (como OPTNET) e aumentar o tamanho da cache secundária. Mesmo que caches
secundárias maiores possam melhorar o desempenho de certas aplicações, o suficiente
para ganhar de NetCache com caches secundárias pequenas, a quantidade de cache adicional, necessária para isto acontecer, pode ser bastante significativa, como demonstrado na
subseção anterior. Além disso, ainda em sistemas com caches secundárias grandes, a maioria de aplicações deve ainda se beneficiar de uma cache compartilhada de baixo nı́vel,
especialmente quando os custos da tecnologia ótica diminuam e as taxas de transmissão
aumentem.
Da mesma forma, é possı́vel conceber uma organização onde uma cache eletrônica
adicional é colocada do lado da memória com uma rede ótica mais simples. Estas caches
de memória seriam compartilhadas por todos os nós da máquina e adicionariam um novo
nı́vel na hierarquia. Esse novo nı́vel retardaria os acessos a memória que não possam
ser satisfeitos pelas caches adicionais. NetCache também adiciona um novo nı́vel na
hierarquia de memória, mas este nı́vel não retarda os acessos que falham nele.
75
5.4 Trabalhos Relacionados
A arquitetura de NetCache é a única do seu gênero que se conhece até o momento.
Uma mistura de rede e cache nunca foi proposta e/ou avaliada para multiprocessadores. No entanto, algumas poucas áreas estão relacionadas com esta pesquisa, por exemplo
a utilização de redes óticas em máquinas paralelas, o uso de linhas de retardo óticas e a
utilização de caches compartilhadas em multiprocessadores.
Memórias de linhas de retardo têm sido implementadas em sistemas de comunicação
ótica [46] e em computadores totalmente óticos [42]. Estas memórias temporais apresentam um tempo de acesso e capacidade de armazenamento proporcional ao comprimento
do canal e à taxa de transmissão dos dados [66]. As memórias de linha de retardo ótica
não foram utilizadas como caches nem aplicadas a multiprocessadores, embora as redes
óticas sejam parte de alguns projetos de computação paralela [28, 33], como mostrado
nos capı́tulos 2 e 4. As únicas caracterı́sticas da comunicação ótica que estes projetos
exploram são a sua grande largura de faixa e a capacidade de disseminação a uma grande
quantidade de nós. Além destas caracterı́sticas, NetCache também explora o potencial
armazenamento de dados nas redes óticas.
Alguns estudos têm proposto a utilização de caches compartilhadas para multiprocessadores formados de um ou vários chips, e.g., [58, 24, 22, 54, 7, 62]. Em termos de
multiprocessadores de um único chip, Nayfeh e Olukotun [58] têm proposto a construção
de grupos de processadores compartilhando uma grande cache, mas sem incluir caches
individuais para cada processador. Em [24] é discutido o projeto de um grupo de processadores num único chip com caches locais e uma cache secundária compartilhada.
[22] mostra resultados para uma cache compartilhada infinita e totalmente associativa, e
compara este sistema com um outro que tenha caches individuais para cada processador.
Outros estudos consideraram caches de rede para um multiprocessador de vários
chips. Cada nó do sistema ASURA [54] é um grupo de processadores com uma interface
de rede que contêm parte do espaço de endereçamento global e cacheia dados remotos.
Da mesma forma, Bennett et al. [7] avaliam os benefı́cios de adicionar uma cache compartilhada à interface de rede de um grupo de processadores como um meio de melhorar
o desempenho de estações de trabalho configuradas como um multiprocessador. Finalmente, Stache [62] implementa uma alternativa totalmente associativa e controlada por
software para uma cache de rede.
Embora NetCache evite os acessos a memória principal como uma cache compartilhada ou cache de rede, este trabalho se diferencia dos anteriores em alguns pontos: a)
NetCache armazena dados de todos os nós, não só dos que podem caber num único chip,
b) NetCache armazena dados sem redundância, enquanto que caches de rede isoladas podem gastar espaço armazenando múltiplas cópias dos dados, c) além de armazenar dados,
NetCache serve também como uma rede de comunicação, e d) NetCache é baseado em
ótica, não em eletrônica.
76
5.5 Conclusões
Neste capı́tulo foi proposto um novo conceito arquitetural: uma mistura rede/cache ótica
chamada de NetCache. Através de um grande conjunto de simulações mostramos que
um multiprocessador baseado em NetCache supera facilmente a outros sistemas baseados em redes óticas, especialmente quando as aplicações têm uma grande quantidade de
reutilização dos dados. Adicionalmente, as decisões de projeto de NetCache foram justificadas mediante uma extensa avaliação da organização e polı́ticas usadas pela cache
compartilhada. Finalmente, o estudo da variação de parâmetros mostra que os benefı́cios
de NetCache podem ser aumentados no futuro. Baseados nesses resultados e nos decrescentes custos dos componentes óticos, a principal conclusão é que a arquitetura de
NetCache é altamente eficiente e deve ser definitivamente considerada pelos projetistas
de multiprocessadores.
77
Capı́tulo 6
OWCache
Algumas aplicações acessam mais dados do que cabe na memória principal. Nessas
aplicações, chamadas de out-of-core, a redução dos custos de acesso ao disco é um dos
principais problemas de desempenho a serem resolvidos. Por este motivo, os programadores desse tipo de aplicações normalmente as codificam com chamadas explı́citas de
entrada/saı́da. No entanto, escrever aplicações com chamadas explı́citas de entrada/saı́da
apresenta algumas desvantagens [55]: a programação se converte frequentemente numa
tarefa bastante difı́cil [81]; as chamadas ao sistema para entrada/saı́da envolvem custos de cópia entre as áreas do usuário e do sistema operacional; e o código resultante
não é sempre portável (do ponto de vista de desempenho) entre máquinas com diferentes configurações de memória e/ou recursos, por exemplo diferentes quantidades de
memória ou latências de entrada/saı́da. Em contraste com o estilo de programação com
entrada/saı́da explı́cita, acreditamos que as aplicações out-of-core devem se basear exclusivamente nos mecanismos de memória virtual e que os custos de acesso ao disco devem
ser atenuados pelo mesmo sistema que executa tais aplicações. A nossa preferência pela
entrada/saı́da baseada em memória virtual é análoga a favorecer memória compartilhada
ao invés de troca de mensagens como um modelo de programação mais apropriado para
a programação paralela.
Basicamente, a entrada/saı́da baseada em memória virtual envolve leitura de páginas
da memória e escrita de páginas para o disco (swap-outs). As leituras de páginas podem
geralmente ser tratadas com eficiência através do prefetching dinâmico dos dados para a
memória principal (ou para a cache do controlador de disco), conforme mostra [52, 45].
Nos casos onde o prefetching dinâmico não é muito eficiente por si só, ele pode ser refinado através do envolvimento do compilador [55] ou através de indicações dos possı́veis
acessos futuros [44]. As escritas ao disco, no entanto, são mais difı́ceis de se otimizar,
mesmo quando elas acontecem fora do caminho crı́tico da computação. O problema de
desempenho das escritas ao disco está relacionado com a sua concentração ao longo de
pequenos intervalos de tempo. Como resultado deste comportamento, o sistema operacional deve sempre reservar um número relativamente grande de frames livres para evitar que
o processador pare, esperando que as operações de escrita anteriores terminem. Na verdade, quanto mais eficiente é a técnica de prefetching, maior é o número de frames livres
78
que o sistema operacional deve reservar. Esta situação é especialmente problemática nos
multiprocessadores escaláveis, onde nem todos os nós são capazes de realizar operações
de entrada/saı́da (e.g., [2, 3]), pois tanto as limitações de latência como as de largura de
faixa do disco retardam estas escritas.
Assim, este capı́tulo propõe uma extensão simples à rede de interconexão ótica de
um multiprocessador escalável para otimizar as escritas ao disco (swap-outs). Mais especificamente, esta proposta estende a rede de interconexão com um anel ótico que não
somente transfere páginas entre as memórias locais e os discos do multiprocessador, como
também atua como uma grande cache compartilhada para as escritas ao disco. Quando
existe espaço na cache de disco, as páginas a serem escritas são copiadas do anel ótico à
cache, de forma que as páginas escritas por um mesmo nó são copiadas em conjunto. A
rede estendida proporciona vários benefı́cios de desempenho ao sistema: ela provê uma
área adicional onde as páginas a serem escritas podem permanecer até que o disco esteja
livre; ela aumenta a possibilidade de combinar várias escritas ao disco; e ela atua como
uma victim-cache para as páginas que saem da memória e posteriormente são acessadas
pelo mesmo processador ou por um processador diferente.
Com a finalidade de determinar como estes benefı́cios afetam o desempenho do sistema, o anel ótico foi avaliado como uma extensão da rede OPTNET [14]. A extensão adiciona basicamente um anel ótico com vários canais WDM, chamados de cache-channels,
à rede OPTNET. Estes cache-channels são utilizados para armazenar os swap-outs. A
combinação de OPTNET com o anel ótico é chamada de OWCache [15].
Para mostrar que o anel ótico pode também ser aplicado com sucesso a multiprocessadores tradicionais, onde os processadores são interconectados através de redes eletrônicas,
determinamos quais seriam os seus benefı́cios num multiprocessador conectado por uma
grade eletrônica. Neste caso, o anel ótico é projetado como uma simples extensão
ao subsistema de entrada/saı́da do multiprocessador. A diferença entre OWCache e
esta extensão, chamada de NWCache [17], está no fato de que NWCache não requer
modificações no hardware do multiprocessador e é mais flexı́vel e modular, pois a interface NWCache pode ser inserida no barramento de entrada/saı́da dos nós de qualquer
multiprocessador.
6.1 Uma Cache Ótica para Escritas
Nesta seção descrevemos a arquitetura básica do multiprocessador e o sistema operacional
considerados, assim como a arquitetura e uso do anel ótico que implementa OWCache.
6.1.1 Arquitetura do Multiprocessador e Gerência da Memória Virtual
A arquitetura básica do multiprocessador considerado corresponde a um multiprocessador escalável com coerência de caches, onde os processadores são interconectados através
79
Regular Node
uP
TLB
L1
WB
L2
I/O Bridge
LM
NI
Fiber
I/O-Enabled Node
Figura 6.1: Arquitetura dos Nós
de uma rede OPTNET ligeiramente modificada. A ligeira modificação melhora o desempenho de OPTNET na presença de tráfego gerado pelos swap-outs. Esta modificação se
resume ao incremento de um quarto canal de disseminação, chamado de swap-channel,
que cuida de todo o tráfego produzido pelos swap-outs. Da mesma forma que os canais
de coerência em OPTNET, o swap-channel usa TDMA com intervalos de tempo variável
para controle de acesso ao meio. A inclusão de um canal extra requer a adição de um
outro receptor fixo e de um outro transmissor fixo por nó, resultando numa complexidade
total de hardware de 9 × p componentes óticos.
Como se observa na figura 6.1, cada nó do sistema inclui um processador (“µP”), uma
TLB (Translation Lookaside Buffer), um write-buffer (“WB”), caches de primeiro (“L1”)
e segundo (“L2”) nı́veis, memória local (“LM”) e uma interface de rede (“NI”). Cada nó
capaz de realizar operações de entrada/saı́da também inclui um disco e o seu controlador
conectado ao barramento de entrada/saı́da.
A única parte do sistema operacional que consideraremos é a referente ao código para
gerência da memória virtual. Novamente, aqui será assumida uma estratégia convencional. Mais especificamente, o sistema base implementa uma tabela de páginas única para
toda a máquina, onde cada uma de suas entradas é acessada pelos diferentes processadores com exclusão mútua. Cada vez que as permissões de acesso a uma página são
restringidas, uma operação TLB-shootdown é executada, sendo todos os processadores
interrompidos para apagar as entradas dessa página na sua TLB.
O sistema operacional mantém um conjunto mı́nimo de frames livres por nó dentro
do multiprocessador. Numa falta de página, o sistema operacional envia um pedido para
essa página1 ao disco correspondente através do canal de pedidos de OPTNET (assume-se
que as páginas estão armazenadas em grupos de 32 páginas consecutivas e que o sistema
de arquivos paralelo associa cada um destes grupos a um disco diferente de modo roundrobin.) Para cada pedido, o controlador de disco lê a página da sua cache (acerto na
cache) ou disco (falha na cache) e a envia ao solicitante através do seu correspondente
1
Por simplicidade de apresentação, daqui em diante não haverá nenhuma distinção entre uma página de
memória virtual e um bloco de disco
80
home-channel. Isto é, uma operação de pedido de página é similar ao pedido de um bloco
de memória no caso da rede OPTNET.
Quando a página que produziu a falta chega ao nó, a tabela de páginas global é atualizada, permitindo que outros processadores acessem remotamente os dados dessa página.
Se a chegada desta página reduz o número de frames livres no nó para menos de um valor
mı́nimo, o sistema operacional usa LRU (Least Recently Used) para selecionar a página
a ser substituı́da. Se a página foi modificada, uma operação de swap-out é iniciada. Caso
contrário, o frame da página é simplesmente liberado.
Uma página que é retirada da memória é enviada à cache de disco correspondente
através do swap-channel. O controlador de disco responde a essa mensagem com um
ACK, se ele foi capaz de colocar a página na sua cache. As escritas têm preferência
sobre os prefetches na cache. O ACK permite que o nó que realizou o swap-out reutilize
o espaço ocupado pela página na memória. O controlador de disco responde com um
NACK, se não existe espaço livre na sua cache (i.e., a cache do controlador de disco está
cheia de páginas a serem escritas ao disco). O controlador armazena os NACKs numa fila
FIFO. Quando é liberado algum espaço na cache do controlador, o controlador envia uma
mensagem OK ao nó na cabeça da fila, o que permite que o nó correspondente re-envie a
página. As mensagens de ACK, NACK, e OK são enviadas através do canal de pedidos
de OPTNET.
O prefetching de páginas não está dentro do âmbito deste estudo. Assim, serão considerados os dois extremos de prefetching: prefetching ótimo e prefetching básico. O prefetching ótimo tenta se aproximar do desempenho atingido por compiladores altamente
sofisticados [55] ou indicações dadas pelas aplicações [44] que podem buscar antecipadamente os dados do disco para as caches ou memórias locais. A técnica ideal assume
que todos os pedidos de páginas podem ser satisfeitos diretamente da cache de disco, i.e.,
todos os acessos de leitura ao disco são executados fora do caminho crı́tico dos pedidos
de leitura.
Sob o cenário do prefetching básico, só ocorre prefetching durante uma falha na cache
de disco. Nesse caso, o controlador preenche a sua cache com as páginas que se seguem
seqüencialmente à página que produziu a falta. Esta técnica é básica por três razões: a)
os arquivos estão distribuı́dos através de vários discos; b) blocos distintos, localizados
num mesmo disco, podem ser acessados concorrentemente por v ários nós; e c) algumas
aplicações não acessam as suas páginas seqüencialmente.
6.1.2 OWCache = OPTNET + Anel Ótico
Sistema Base. A figura 6.2 mostra o sistema OWCache: uma rede OPTNET básica2 e um
anel ótico. O anel é utilizado somente para transferir as p áginas que foram recentemente
ejetadas da memória pelos diferentes nós do multiprocessador e também para armazenálas na própria rede. Qualquer outro tráfego flui através dos canais regulares de OPTNET
como foi descrito na seção 6.1.1.
2
O anel elimina a necessidade do swap-channel
81
Memory Bus
Bus
Interface
NI 5
OPTNET
FIFO
TRx
Buffer &
Driver
TRx
NI 7
NI
NI 4
NI 6
Buffer &
Driver
Buffer &
Drivers
Tx
Rx
Add &
Drop
Filter
Star
Coupler
NI 0
NI 3
NI 2
NI 1
Figura 6.2: Arquitetura de OWCache
Os swap-outs são continuamente enviados em volta dos cache-channels numa única
direção. Ou seja, o anel atua como uma cache de escritas, mantendo as páginas ejetadas da
memória, até que exista espaço suficiente na cache do controlador de disco. Se a página
é solicitada novamente enquanto está armazenada no anel ótico, ela pode ser remapeada
na memória principal e retirada do anel.
A capacidade de armazenamento do anel é totalmente independente dos tamanhos
individuais ou combinados das memórias locais. Ela é simplesmente proporcional ao
número de canais utilizáveis e à largura de faixa e comprimento dos canais.
Gerência do Anel. Cada cache-channel transfere e armazena as páginas ejetadas por um
único nó. Uma página pode ser enviada ao anel se existe espaço livre no cache-channel
associado ao nó. Um swap-out para o anel ótico permite que o nó correspondente reutilize
o espaço ocupado pela página em mémoria. No momento do swap-out, o nó deve ligar um
bit (o bit Ring) na entrada correspondente da tabela de páginas, indicando que essa página
está armazenada no anel ótico. O nó que iniciou a operação de swap-out deve também
enviar uma mensagem à interface OWCache do nó com capacidade de entrada/saı́da correspondente. Esta mensagem é enviada através do canal de pedidos de OPTNET e inclui
apenas o número da página ejetada da memória. A interface OWCache remota, então,
armazena o número do nó que ejetou a página da sua memória (obtido implicitamente
da mensagem) e o número de página numa fila FIFO associada ao correspondente cachechannel.
Cada vez que o controlador de disco ligado ao nó tem espaço para uma outra página
na sua cache, a interface de rede procura os cache-channels mais carregados e copia tantas
páginas quanto possı́vel do anel para a cache de disco. Depois que a página é enviada à
cache do controlador de disco, um ACK é enviado ao nó que originalmente ejetou essa
página. O ACK é usado pelo nó para que este possa reutilizar o espaço ocupado pela
página no anel e apagar o bit Ring associado à página.
Existem duas caracterı́sticas importantes na cópia de páginas do anel ótico para o
disco que aumentam a localidade espacial das diferentes escritas na cache: a) páginas
são normalmente copiadas na mesma ordem em que foram ejetadas da memória; e b) a
interface realiza a busca num outro canal após terminar com as páginas do canal atual.
82
Quando um nó envia páginas consecutivas ao anel, estas duas caracterı́sticas permitem
que várias escritas sejam enviadas ao disco numa única operação.
As páginas podem ser remapeadas na memória facilmente a partir do anel ótico. Durante uma falta de página, o nó verifica se o bit Ring para essa página está ligado. Se estiver desligado, a falta de página procede como descrito na seção anterior. Caso contrário, o
nó usa a última tradução virtual-para-fı́sica dessa página para determinar qual foi o último
nó que ejetou essa página. Assim o nó pode simplesmente procurar a página no correspondente cache-channel. Adicionalmente, o nó que sofreu a falta de página deve enviar
uma mensagem, através do canal de pedidos, à interface OWCache do nó que possui o
disco correspondente informando o número da página. Esta mensagem indica à interface
OWCache que a página não precisa ser escrita no disco, pois existe novamente uma cópia
dela na memória principal. Assim, a interface remota elimina o número da página da fila
FIFO dos cache-channels e envia o ACK ao nó que originalmente ejetou a página da sua
memória.
Note que OWCache não sofre de problemas de coerência, pois não é permitida mais
de uma cópia da página fora dos limites do controlador de disco. A única cópia da página
pode estar na memória ou no anel ótico.
Custo de Software. O custo de software de OWCache é ı́nfimo (supondo que o código
do núcleo do sistema operacional está disponı́vel). As únicas alterações necessárias no
código do sistema operacional são a inclusão dos bits Ring e do controle da interface
OWCache.
Custo de Hardware. O custo do hardware eletrônico do anel ótico compreende a interface do barramento de memória, as filas FIFO, e as memórias temporárias e controladores
que comunicam as partes eletrônicas e óticas da interface OWCache. Os requerimentos de
hardware ótico do anel são também mı́nimos. A interface OWCache de cada nó pode ler
de qualquer cache-channel, mas só pode escrever no cache-channel associado ao nó e, assim, não requer nenhum tipo de mecanismo de arbitragem. A interface OWCache regera e
resincroniza este cache-channel com capacidade para escrita. Para realizar esta funcionalidade, a interface requer dois receptores sintonizáveis, um transmissor fixo e um receptor
fixo, como mostrado na figura 6.2. Um dos receptores sintonizáveis é responsável por ler
as páginas escritas no disco a partir do anel, enquanto que o outro receptor sintonizável
é usado para procurar no anel uma página que produziu uma falta local. O transmissor
fixo é usado para inserir novos dados no cache-channel com capacidade para escrita. Em
conjunto com este transmissor, o receptor fixo é usado para recircular os dados no cachechannel com capacidade para escrita. Assim, o custo de hardware ótico para o anel é de
só 4 × p componentes óticos, onde p é o número de nós e cache-channels no multiprocessador. Assim, o custo total da interface OWCache (OPTNET + anel ótico) é de 11 × p
componentes óticos. Este custo é um pouco maior que OPTNET, mas é ainda aceitável
mesmo com o custo atual da tecnologia ótica. A produção em grandes quantidades dos
componentes óticos e os outros avanços da tecnologia ótica reduziriam estes custos ainda
mais.
83
Parâmetro
Número de Nós
Número de Discos
Tamanho da Página
Latência de uma falha na TLB
Latência de um TLB-Shootdown
Latência de uma Interrupção
Tamanho do Write-Buffer
Tamanho da Cache Primária
Bloco da Cache Primária
Latência da Cache Primária
Tamanho da Cache Secundária
Bloco da Cache Secundária
Latência da Cache Secundária
Tamanho da Memória por Nó
Latência do Barramento de Memória
Taxa do Barramento de Memória
Latência do Barramento de E/S
Taxa do Barramento de E/S
Taxa de Transmissão Ótica
Tempo de Vôo
Canais WDM no Anel Ótico
Latência Round-Trip do Anel
Capacidade de Armazenamento do Anel
Capacidade de Armazenamento por Canal
Cache do Controlador de Disco
Latência Mı́nima de Busca
Latência Máxima de Busca
Latência Rotacional
Taxa de Transferência do Disco
Valor
8
4
4 KBytes
100 ciclos
500 ciclos
400 ciclos
16 entradas
4 KBytes
32 Bytes
1 ciclo
16 KBytes
64 Bytes
12 ciclos
256 KBytes
12 ciclos
800 MBytes/seg
8 ciclos
300 MBytes/seg
10 Gbits/seg
1 ciclo
8
52 useg
512 KBytes
64 KBytes
16 KBytes
2 mseg
22 mseg
4 mseg
20 MBytes/seg
Tabela 6.1: Parâmetros Base Principais e os seus Valores – 1 ciclo = 5 nseg
Note que, embora o anel ótico atue como uma cache para dados de disco, ele não
garante não-volatilidade (como alguns – não todos – controladores de disco fazem), de
forma similar ao uso da memória de nós livres para armazenar swap-outs (e.g., [25]). No
entanto, este não é um problema sério, pois os dois esquemas otimizam a gerência de
memória virtual para aplicações que não têm requerimentos de confiabilidade, como é o
caso das aplicações cientı́ficas.
Note também que, embora este estudo tenha estendido a rede OPTNET com o anel
ótico, a mesma idéia pode ser aplicada a qualquer rede ótica. OPTNET foi selecionada
porque a combinação desta rede com o seu protocolo de coerência atinge a melhor relação
custo/desempenho de todos os sistemas similares sob várias hipóteses arquiteturais e para
um conjunto grande de aplicações [14], mas nenhuma caracterı́stica do projeto depende
da rede ótica base.
84
6.2 Metodologia
Como estamos interessados em avaliar o desempenho de um multiprocessador baseado
em OWCache com coerência de caches e sob diversas suposições arquiteturais, neste
estudo usamos simulações de aplicações paralelas reais.
6.2.1 Simulação
Foram utilizadas simulações detalhadas, dirigidas por eventos (baseadas no MINT [76]),
de multiprocessadores com coerência de cache baseados em OPTNET e OWCache. A
contenção gerada pela memória, rede e entrada/saı́da é totalmente modelada. A simulação
do sistema operacional do multiprocessador está limitada à parte que verdadeiramente nos
interessa, a gerência de memória virtual.
Os parâmetros da simulação e os seus valores base são mostrados na tabela 6.1. Os
tamanhos das caches e memória principal foram mantidos pequenos propositadamente,
pois limitações nos tempos de simulação nos impedem de usar tamanhos de entrada reais.
Na verdade, as capacidades das caches primárias e secundárias, o anel ótico, e a cache
de disco foram reduzidas por um fator de 32, enquanto que a capacidade da memória
principal foi reduzida por um fator de 256 com relação aos tamanhos de um sistema real.
O objetivo destas reduções é produzir aproximadamente o mesmo tráfego de memória
virtual que nos sistemas reais.
A seleção da quantidade de armazenamento ótico requer observações adicionais. O
aumento do tamanho do armazenamento de OWCache pode ser realizado aumentando-se
o comprimento do anel ótico (e aumentando-se assim a sua latência de round-trip), aumentando a taxa de transmissão e/ou usando mais cache-channels. De qualquer forma,
aumentar a capacidade do anel ótico simulado por um fator de 32 pode não ser prático com
a tecnologia ótica atual. No entanto, espera-se que num futuro próximo este aumento de
tamanho seja possı́vel. Na verdade, as suposições de capacidade podem ser consideradas
altamente conservadoras com relação ao potencial da ótica, especialmente se são consideradas técnicas de multiplexação tais como OTDM a qual suportaria até 5000 canais
[59].
Os valores base da tabela 6.1 representam nossa percepção do que é “razoável” para
os multiprocessadores atuais. O estudo do espaço de parâmetros mostrado na seção 6.3
permitirá investigar o impacto de outras importantes hipóteses arquiteturais.
6.2.2 Aplicações
Uma aplicação out-of-core é definida como sendo aquela que trabalha sobre um conjunto
de dados extremamente grande que não cabe na memória principal. Assim, o nosso conjunto de aplicações consiste de 7 programas paralelos: Em3d, FFT, Gauss, LU, Mg, Radix
e SOR, onde os seus parâmetros de entrada têm sido modificados para produzir um conjunto de dados maior que a memória principal do multiprocessador simulado. Todas essas
aplicações já foram descritas nos capı́tulos anteriores. A tabela 6.2 mostra as aplicações,
85
Prog.
Em3d
FFT
Gauss
LU
Mg
Radix
SOR
Descrição
Propagação de ondas eletromagnéticas
Transformada Rápida de Fourier 1D
Eliminação de Gauss sem blocos
Fatorização LU por blocos
Poisson 3D usando técnicas de multigrid
Ordenação de inteiros
Relaxamento progressivo
Tamanho de Entrada
Total (MB)
32 K nós, 5% remotos, 10 iter.
2,5
64 K pontos
3,1
570 × 512 doubles
2,3
576 × 576 doubles
2,7
32 × 32 × 64 floats, 10 iter.
2,4
320 K chaves, radix 1024
2,6
640 × 512 floats, 10 iterações
2,6
Tabela 6.2: Descrição das Aplicações e os seus Principais Parâmetros de Entrada
os seus parâmetros principais de entrada e o tamanho total dos seus dados (em MBytes).
Todas as aplicações mapeiam em memória os seus arquivos tanto para leitura como para
escrita3 e os acessam através dos mecanismos de memória virtual padrão. Desta forma, os
diferentes padrões de acesso à memória apresentados pelas aplicações consideradas permitem generalizar os nossos resultados para um amplo conjunto de padrões de swap-out.
6.3 Resultados Experimentais
Nesta seção será avaliado o desempenho de um multiprocessador baseado em OWCache,
comparando-o com um multiprocessador baseado em OPTNET.
6.3.1 Benefı́cios de Desempenho
Primeiramente, é importante determinar qual é o melhor número mı́nimo de frames livres
para cada combinação de multiprocessador com técnica de prefetching. Realizamos experimentos variando este número mı́nimo de frames para cada uma das aplicações estudadas.
Na presença de OWCache, a maioria das aplicações atinge o seu melhor desempenho com
um mı́nimo de só 2 frames livres, independente da estratégia de prefetching utilizada.
A melhor configuração para o multiprocessador baseado em OPTNET, entretanto, não
é obvia. Sob prefetching ótimo, 3 aplicações (Gauss, LU, e SOR) se beneficiam de grande
quantidade (≥ 16) de frames livres, enquanto duas delas (Em3d e FFT) atingem o seu melhor desempenho com apenas 2 ou 4 frames livres. As outras duas aplicações, Mg e Radix,
requerem 8 e 12 frames livres, respectivamente, para obter o seu melhor desempenho. Por
outro lado, sob prefetching básico, todas as aplicações, exceto SOR, se beneficiam de pequena quantidade (< 4) de frames livres. Assim, selecionamos 12 e 4 frames como o
número mı́nimo de frames livres sob prefetching ótimo e básico, respectivamente. Todos
os resultados apresentados a seguir, correspondem a estas configurações.
Um dos principais interesses deste estudo é determinar como os benefı́cios providos
3
A chamada mmap do UNIX força o usuário a especificar um possı́vel tamanho máximo do arquivo.
Isto não foi um problema nos casos estudados, pois sempre foi possı́vel determinar o tamanho exato de
todos os arquivos usados pelas aplicações. No entanto, nosso sentimento é que a chamada mmap do UNIX
é bastante restritiva para um estilo de programação baseado exclusivamente em memória virtual.
86
Aplicação
em3d
fft
gauss
lu
mg
radix
sor
OPTNET
49,1
70,6
30,8
40,2
29,8
47,1
31,6
OWCache
1,8
3,1
1,0
1,9
0,5
2,4
1,2
Tabela 6.3: Tempos Médios de Swap-Out (em Milhões de Ciclos de Processador) sob
Prefetching Ótimo
Aplicação
em3d
fft
gauss
lu
mg
radix
sor
OPTNET
192,7
382,1
762,3
393,3
89,4
1223,1
661,3
OWCache
2,1
43,6
78,0
41,2
6,1
2,1
2,1
Tabela 6.4: Tempos Médios de Swap-Out (em Milhares de Ciclos de Processador) sob
Prefetching Básico
por OWCache se relacionam com os seus ganhos de desempenho. Como foi mencionado,
OWCache possui os seguintes benefı́cios de desempenho: provê uma área temporal onde
as páginas ejetadas da memória podem residir até que o disco esteja livre; aumenta a
possibilidade de combinar várias escritas ao disco; e atua como uma victim-cache para
as páginas que saem da memória e posteriormente são acessadas pelo mesmo ou por um
processador diferente. A seguir revisamos algumas estatı́sticas relacionadas com cada um
destes benefı́cios.
Área Temporal de Escrita. As tabelas 6.3 e 6.4 mostram os tempos médios (em ciclos de processador) para ejetar da memória uma página sob prefetching ótimo e básico
respectivamente. As tabelas mostram que os tempos de swap-out são de 1 a 3 ordens de
magnitude menores quando OWCache é utilizado. A razão principal deste resultado é que
OWCache efetivamente aumenta a quantidade de cache de disco observada pela memória.
Um swap-out é somente retardado, na presença de OWCache, quando o cache-channel
correspondente a esse nó está cheio. Por outro lado, quando OWCache não é assumido, os
swap-outs são muito mais frequentemente retardados devido à falta de espaço na cache de
disco. Como esperado, as tabelas também mostram que os tempos de swap-out são muito
maiores sob a técnica de prefetching ótimo do que sob prefetching básico. Este resultado
se explica pelo fato de que sob prefetching ótimo os reduzidos tempos de leitura de uma
página agrupam os swap-outs no tempo, aumentando a contenção no disco.
87
Aplicação
em3d
fft
gauss
lu
mg
radix
sor
OPTNET OWCache
1,21
1,24
1,50
2,06
1,06
1,07
1,15
1,25
1,20
1,27
1,17
1,37
1,64
2,90
Aumento
2%
37%
1%
9%
6%
17%
77%
Tabela 6.5: Número Médio de Páginas Escritas sob Prefetching Ótimo
Aplicação
em3d
fft
gauss
lu
mg
radix
sor
OPTNET OWCache
1,16
1,17
1,28
1,45
1,03
1,04
1,04
1,05
1,04
1,19
1,08
1,12
1,17
1,50
Aumento
1%
13%
1%
1%
14%
4%
28%
Tabela 6.6: Número Médio de Páginas Escritas sob Prefetching Básico
Combinação de Escritas. Devido à forma em que as páginas são copiadas a partir do
anel ótico para a cache de disco, a localidade das escritas na cache de disco é normalmente
aumentada. Quando páginas consecutivas podem ser encontradas seqüencialmente na
cache do controlador do disco, as escritas destas páginas podem ser combinadas num
único acesso de escrita ao disco. Os dados nas tabelas 6.5 e 6.6 confirmam esta afirmação.
As tabelas mostram o número médio de páginas que são combinadas em cada operação
de escrita ao disco; o máximo valor possı́vel de combinação é 4, que é o número máximo
de páginas que podem caber na cache do controlador de disco. Os resultados mostram
que os ganhos na combinação de escritas são moderados sob a estratégia de prefetching
básico (≤ 28%), mas podem ser significativos sob a estratégia de prefetching ótimo (≤
77%). Novamente, o agrupamento temporal dos swap-outs sob prefetching ótimo é o
responsável por este resultado, pois é mais comum para o controlador de disco encontrar
escritas consecutivas ao mesmo tempo na sua cache.
Victim-Cache. A tabela 6.7 apresenta as taxas de acerto numa leitura de página em
OWCache sob as técnicas de prefetching ótimo e básico. A tabela mostra que as taxas de
acerto são ligeiramente maiores sob prefetching ótimo que sob prefetching básico, exceto
para Gauss e SOR, novamente devido às caracterı́sticas temporais dos swap-outs sob estas
duas técnicas. Adicionalmente, estes resultados mostram que as taxas de acerto podem
ser tão altas quanto 61% (Gauss) ou tão baixas quanto 7% (Em3d). Estes resultados se
devem à combinação de dois fatores: o tamanho do conjunto de trabalho da memória e
o grau de compartilhamento de dados das aplicações. Gauss, MG, e Em3d exibem uma
88
Aplicação
em3d
fft
gauss
lu
mg
radix
sor
Ótimo Básico
9,2
7,1
12,8
8,4
57,6
60,9
18,9
14,6
55,8
46,2
20,6
18,0
18,6
30,7
Tabela 6.7: Taxas de Acerto (em Porcentagem) para OWCache sob Diferentes Técnicas
de Prefetching
1,2
1,0
0,8
NoFree
Fault
TLB
Other
0,6
0,4
0,2
0,0
em3d fft gauss lu
mg radix
sor
Figura 6.3: Tempo de Execução (com Relação ao MP OPTNET) de OPTNET e OWCache
sob Prefetching Ótimo
significativa quantidade de compartilhamento, mas só Gauss e MG possuem conjuntos de
trabalho que (quase) podem caber no tamanho combinado de memória e OWCache. As
outras aplicações atingem taxas de acerto no intervalo de 8 a 31%.
Os efeitos benéficos da victim-cache são ainda mais pronunciados sob prefetching
básico, pois os custos de uma falta de leitura representam uma fração significativa dos
tempos de execução da aplicação. Além disso, as páginas podem ser lidas somente um
pouco mais rápido do anel ótico do que da cache do controlador de disco, reduzindo os
ganhos potenciais da victim-cache sob prefetching ótimo.
Os resultados apresentados aqui confirmam que OWCache produz benefı́cios de desempenho significativos. Os maiores ganhos são produzidos pelos rápidos swap-outs e
pela capacidade de atuar como uma victim-cache.
Desempenho Geral. As figuras 6.3 e 6.4 mostram os tempos de execução normalizados
de cada uma das aplicações sob prefetching ótimo e básico, respectivamente. De cima
para abaixo, cada barra nos gráficos está dividida em: o tempo parado como resultado
da falta de frames livres (“NoFree”); o custo das faltas de página (“Fault”); o custo das
falhas na TLB e TLB-shootdowns (“TLB”); e os componentes do tempo de execução que
não são relacionados com a gerência da memória virtual (“Other”), incluindo tempo de
89
1,2
1,0
0,8
NoFree
Fault
TLB
Other
0,6
0,4
0,2
0,0
em3d
fft
gauss
lu
mg
radix
sor
Figura 6.4: Tempo de Execução (com Relação ao MP OPTNET) de OPTNET e OWCache
sob Prefetching Básico
processador, falhas nas caches e tempos de sincronização.
A figura 6.3 mostra que sob a estratégia de prefetching ótimo, os tempos “NoFree”
são sempre muito significativos para o multiprocessador baseado em OPTNET, especialmente para Gauss e SOR. A frequência com que o sistema operacional sofre de falta de
frames livres no multiprocessador baseado em OPTNET se deve ao fato de que as leituras
de páginas terminam rapidamente, enquanto que os swap-outs consomem muito tempo.
Quando o multiprocessador inclui OWCache, os tempos “NoFree” são reduzidos bastante
como resultado dos swap-outs muito mais rápidos.
A figura também demonstra que, para algumas aplicações, o tempo que levam
as operações não relacionadas com memória virtual é significativamente reduzido na
presença de OWCache. Estas reduções são resultado, principalmente, da melhor
sincronização produzida pela grande redução no desbalanceamento de carga. Desta
forma, pode-se observar que OWCache produz ganhos de desempenho que variam de
16% (FFT) até 60 e 64% (MG e Gauss), 39% em média, quando é assumido um prefetching ótimo. Na verdade, as melhoras de desempenho são maiores que 30% em todos os
casos, exceto para Em3d e FFT.
Os resultados de desempenho, quando o prefetching básico é assumido, são totalmente
diferentes. Sob esta técnica, os tempos de execução são dominados pelas latências de
falta de página, pois as taxas de acerto na cache de disco nunca são maiores que 15%.
Assim, as latências de falta de página produzem o tempo necessário para que os swapouts terminem. Como resultado, os tempos “NoFree” quase desaparecem, diminuindo a
importância de swap-outs rápidos na arquitetura OWCache.
Sob prefetching básico, a adição de OWCache ao multiprocessador melhora o seu
desempenho de 5% (Radix) a 39% (Gauss) para todas as aplicações, exceto FFT, a qual
degrada o seu desempenho por 4%. Os ganhos relacionados com OWCache são produzidos pelas reduções razoáveis das latências de falta de página, as mesmas que são resultado
da leitura de páginas a partir da cache ótica e da diminuição da contenção no disco.
Discussão. Em resumo, mostramos que OWCache é extremamente útil quando o prefet90
1,0
0,9
0,8
fft
em3d
radix
lu
mg
sor
gauss
0,7
0,6
0,5
0,4
0,3
2 nodes
4 nodes
8 nodes
Figura 6.5: Tempo de Execução do MP OWCache (com Relação ao MP OPTNET) para
2, 4, e 8 Nós de Entrada/Saı́da sob Prefetching Ótimo
1,1
1,0
fft
lu
radix
sor
em3d
mg
gauss
0,9
0,8
0,7
0,6
0,5
2 nodes
4 nodes
8 nodes
Figura 6.6: Tempo de Execução do MP OWCache (com Relação ao MP OPTNET) para
2, 4, e 8 Nós de Entrada/Saı́da sob Prefetching Básico
ching é eficiente, principalmente como resultado dos swap-outs rápidos. OWCache não é
tão eficiente quando o prefetching é ineficiente ou inexistente, mesmo quando a sua caracterı́stica de victim-cache melhora o desempenho de muitas aplicações significativamente.
Espera-se que os resultados para técnicas de prefetching reais e sofisticadas [55, 44] estejam entre esses dois extremos. Além disso, quando as técnicas de prefetching melhorarem
e a tecnologia ótica se desenvolver, ganhos maiores virão da arquitetura OWCache.
6.3.2 Impacto dos Parâmetros Arquiteturais
Nesta subseção será estudado o efeito dos parâmetros mais importantes usados nas
simulações: o número de nós com capacidade de entrada/saı́da, o tamanho de OWCache, as caches do controlador de disco e a memória principal, e a largura de faixa usada
nos diferentes multiprocessadores.
Número de Nós com Entrada/Saı́da Habilitada. Variamos o número de nós com entrada/saı́da habilitada de 2 a 8 num sistema com 8 nós. As figuras 6.5 and 6.6 apresentam
os resultados destes experimentos para as 7 aplicações sob prefetching ótimo e básico,
respectivamente. Cada ponto das figuras representa o tempo de execução do multipro91
1,0
0,9
0,8
em3d
fft
lu
radix
mg
gauss
sor
0,7
0,6
0,5
0,4
0,3
0,2
0,1
256 KB
512 KB
1024 KB
Figura 6.7: Tempo de Execução do MP OWCache (com Relação ao MP OPTNET) com
256, 512, e 1024-KB sob Prefetching Ótimo
1,1
1,0
0,9
fft
radix
em3d
lu
mg
sor
gauss
0,8
0,7
0,6
0,5
0,4
256 KB
512 KB
1024 KB
Figura 6.8: Tempo de Execução do MP OWCache (com Relação ao MP OPTNET) com
256, 512, e 1024-KB sob Prefetching Básico
cessador baseado em OWCache, normalizado com o tempo de execução correspondente
do multiprocessador baseado exclusivamente em OPTNET. Os resultados mostram que
os ganhos de desempenho produzidos por OWCache sob prefetching ótimo decrescem
quando o número de nós com entrada/saı́da habilitada (i.e., o throughput de entrada/saı́da
do sistema) é aumentado, pois os tempos “NoFree” decrescem em porcentagem com
relação ao tempo total de execução do multiprocessador baseado em OPTNET. De qualquer forma, os ganhos de desempenho de OWCache permanecem significativos, com
todas as aplicações beneficiando-se em média 35% quando são utilizados 8 nós de entrada/saı́da.
Por outro lado, o aumento do número de nós com capacidade de entrada/saı́da normalmente aumenta o desempenho atingı́vel por OWCache sob prefetching básico, pois a
contenção no disco deixa de ser um problema para o multiprocessador baseado em OWCache.
Tamanho de OWCache. Ajustando o número de nós com capacidade de entrada/saı́da
para 4, variamos a capacidade de armazenamento de OWCache de 256 KBytes a 1 MByte
de dados através do ajuste do comprimento do anel ótico. As figuras 6.7 e 6.8 mostram
estes resultados sob prefetching ótimo e básico. Novamente, cada ponto das figuras repre92
3,5
3,0
OWC
em3d
sor
radix
mg
fft
gauss
lu
2,5
2,0
1,5
1,0
0,5
0,0
64
192
320
576
1088 2112
Figura 6.9: Tempo de Execução do MP OPTNET (com Relação ao MP OWCache) para
Vários Tamanhos de Cache de Disco Combinada (em KBytes) sob Prefetching Ótimo
senta o desempenho de OWCache normalizado com relação ao desempenho de OPTNET.
Sob prefetching ótimo, observamos que aumentando a capacidade do anel, o desempenho
de quase todas as aplicações melhora, pois os swap-outs terminam mais rápido em média.
Na verdade, swap-outs mais rápidos apresentam um impacto substancial no desempenho sob prefetching ótimo, já que os tempos “NoFree” representam invariavelmente uma
grande fração do tempo total de execução.
De forma similar, aumentos na capacidade de armazenamento melhoram o desempenho de várias aplicações sob prefetching básico. Neste caso, o desempenho melhora nas
aplicações que podem se beneficiar substancialmente da victim-cache (i.e., Gauss, LU,
MG, e SOR). Gauss e SOR são as aplicações que se beneficiam mais destes aumentos
de capacidade. A razão para esse fato é que o espaço adicional e a temporização dos
swap-outs permite um aumento significativo no número de faltas de página que podem
ser satisfeitas por OWCache. Mais especificamente, as taxas de acerto em OWCache para
Gauss variam de 45 a 61 e a 79% quando a capacidade de OWCache aumenta de 256
KBytes a 512 KBytes e a 1 MByte, enquanto que as taxas de acerto de SOR variam de 12
a 31 e a 72% para os mesmos aumentos de capacidade.
Note que em OWCache, a latência média de acesso aos dados deixa de ser crı́tica,
o que permite diminuir custos sem degradar os ganhos de desempenho obtidos pela
memória de rede. Isso se deve a que as latências de acesso aos discos são extremamente
grandes, em média, 6 ordens de magnitude maiores que as latências de acesso à memória.
Este fato permite armazenar uma quantidade maior de dados num número menor de canais através do simples aumento do comprimento da fibra.
Tamanho das Caches dos Controladores de Disco. Também executamos experimentos
onde os tamanhos das caches do controlador de disco na arquitetura baseada em OPTNET foram variados. As figuras 6.9 e 6.10 mostram estes resultados. Cada ponto nas
figuras representa o tempo de execução de OPTNET normalizado com relação ao tempo
de execução de OWCache.
Estas figuras nos permitem responder duas perguntas importantes: (1) Um multiprocessador baseado em OWCache permitiria obter um melhor desempenho que um sistema
93
1,8
1,6
1,4
OWC
em3d
fft
radix
gauss
lu
sor
mg
1,2
1,0
0,8
0,6
0,4
0,2
0,0
64
192
320
576
1088 2112
Figura 6.10: Tempo de Execução do MP OPTNET (com Relação ao MP OWCache) para
Vários Tamanhos de Cache de Disco Combinada (em KBytes) sob Prefetching Básico
baseado em OPTNET com a mesma capacidade total de armazenamento em caches? e
(2) Qual capacidade de armazenamento em caches seria necessária para que o multiprocessador baseado em OPTNET ultrapasse o sistema baseado em OWCache?
Para responder à primeira pergunta comparamos o desempenho de dois multiprocessadores com 4 nós de entrada/saı́da e um espaço de cache total de 576 KBytes. Um dos
multiprocessadores está equipado com um anel ótico de 512 KBytes e caches de 16 KBytes nos controladores de disco, enquanto que o outro tem somente caches de disco de 144
KBytes. Os resultados destes experimentos mostram que o multiprocessador baseado em
OWCache apresenta um melhor desempenho para a maioria de aplicações, mesmo sob
estas condições.
Sob prefetching ótimo, o sistema proposto é minimamente ultrapassado nas aplicações
Em3d (10%), FFT (1%) e LU (1%), somente. Os ganhos de desempenho resultam das
significativas reduções nos tempos “NoFree”, geradas pelos swap-outs mais rápidos. Os
swap-outs terminam mais rápido com OWCache como uma conseqüência da maior flexibilidade do armazenamento ótico. Mais especificamente, OWCache pode tratar com
distribuições especiais de swap-outs ao longo dos nós de entrada/saı́da mediante o cacheamento de mais dados dirigidos a certos nós que a outros em cada instante de tempo. Na
verdade, OWCache pode inclusive, se necessário, estar temporariamente preenchido com
dados dirigidos a um único nó. Grandes caches de disco, entretanto, não são tão flexı́veis,
pois a quantidade de dados que pode ser dirigida a um nó, sem causar retardos, é equivalente ao tamanho de uma única cache de disco. Este fato ilustra a principal vantagem da
cache compartilhada (OWCache) em comparação a múltiplas caches locais (caches dos
controladores de disco) com os mesmos tamanhos combinados.
Sob prefetching básico, a vantagem de desempenho de OWCache não é clara, pois os
swap-outs mais rápidos são irrelevantes em termos do desempenho geral. O multiprocessador baseado em OWCache com 576 KBytes de armazenamento total só apresenta um
melhor desempenho para 3 aplicações (Gauss, MG, e SOR). No entanto, OWCache é ultrapassado por não mais que 8%. Para Gauss, MG, e SOR, OWCache obtém vantagem da
sua capacidade de atuar como uma victim-cache. A polı́tica da victim-cache efetivamente
94
produz taxas de acerto maiores que as taxas combinadas das caches dos controladores de
disco do multiprocessador baseado em OPTNET para estas três aplicações.
Assim, estes resultados demonstram que OWCache é claramente mais eficiente que o
OPTNET sob prefetching ótimo quando ambos os sistemas envolvem a mesma quantidade
de armazenamento. Por outro lado, o prefetching básico leva a uma mistura de resultados.
Para responder à segunda pergunta comparamos o desempenho de um multiprocessador baseado em OWCache e com a mesma configuração dos experimentos anteriores,
com um multiprocessador baseado em OPTNET com 64, 192, 320, 576, 1088 e 2112
KBytes de cache de disco combinada (Figuras 6.9 e 6.10). Novamente, cada ponto nas
figuras representa o desempenho de OPTNET normalizado com relação ao desempenho
de OWCache.
Sob prefetching ótimo observamos que o multiprocessador baseado em OPTNET requer 2112 KBytes para ultrapassar OWCache em Gauss e SOR, enquanto que para MG
e Radix requer 1088 KBytes. As outras 3 aplicações requerem somente 576 KBytes.
Sob prefetching básico, por outro lado, o multiprocessador baseado em OPTNET requer
2112 KBytes para ultrapassar OWCache em Gauss e SOR, 1088 KBytes para MG e 576
KBytes para LU. As outras 3 aplicações requerem 320 KBytes ou menos para ultrapassar
OWCache. Embora estas caches de disco não sejam extremamente grandes para sistemas
reais, note que as simulações assumem uma memória principal de somente 2048 KBytes
para todo o multiprocessador.
Estes últimos resultados mostram que o multiprocessador baseado em OPTNET normalmente requer uma grande capacidade de caches de disco para atingir o mesmo desempenho do sistema OWCache. Devido à simplicidade do hardware de OWCache, ao
fato de que ela é somente uma extensão à uma rede existente, ao rápido decremento do
custo dos componentes óticos, e ao fato de que aumentar significativamente a quantidade
de memória nos controladores de disco para simplesmente satisfazer às aplicações outof-core é claramente exagerado, a solução ótica a este problema parece ser melhor que a
posição eletrônica contrária.
Tamanho da Memória Principal. Também variamos o tamanho da memória principal
de cada nó. Com a finalidade de manter as caracterı́sticas out-of-core das aplicações,
variamos também os seus tamanhos de entrada na mesma proporção. Mais especificamente, a memória principal de cada nó foi aumentada de 256 a 320 KBytes. Desta forma,
observamos que o desempenho do multiprocessador baseado em OWCache com relação
ao baseado em OPTNET é o mesmo em ambos os casos sob prefetching básico. Por
outro lado, sob prefetching ótimo, as variações de desempenho dependem da aplicação.
Por exemplo, os ganhos do sistema baseado em OWCache com relação ao baseado em
OPTNET crescem de 64 a 68% em Gauss, enquanto que em SOR, os ganhos caem de
53 a 35%. A redução nos ganhos obtidos por SOR é devida ao decremento na taxa de
swap-outs. Esta taxa cai de 5,5 a 3,8 swap-outs a cada milhão de ciclos.
Assim, pode-se concluir que os ganhos obtidos pelo uso de OWCache são significativos para a maioria de aplicações out-of-core, mesmo que o tamanho da memória principal
95
em cada nó seja maior, pois esses ganhos dependem basicamente da taxa de swap-outs.
Em nossos experimentos observamos ganhos significativos quando a taxa de swap-outs é
maior que 2 swap-outs a cada milhão de ciclos.
Largura de Faixa para Swap-Outs. A diferença significativa da largura de faixa para
swap-outs entre os dois multiprocessadores considerados pode influir consideravelmente
nas comparações. Para mostrar que este não é o caso, coletamos informação sobre a
quantidade de contenção existente no swap-channel da arquitetura baseada em OPTNET.
Observamos que a contenção no swap-channel praticamente é inexistente. Além disso,
quando se configura o multiprocessador baseado em OPTNET para usar um swap-channel
por nó (e assim evitar inclusive a arbitragem dos canais), as únicas aplicações que melhoram o seu desempenho são MG (4%) e Radix (9%) sob prefetching ótimo. As outras 5
aplicações, sob prefetching ótimo, e todas as aplicações, sob prefetching básico, apresentam os mesmos resultados de desempenho de um único swap-channel.
Pode-se concluir então que a grande largura de faixa usada pelos cache-channels não
têm influência nenhuma sobre os ganhos de desempenho obtidos por OWCache. O verdadeiro motivo para estes ganhos está na habilidade dos cache-channels de atuar como
uma área extra para escritas e como uma victim-cache.
Resumo. Estes resultados mostram que OWCache é extremamente eficiente sob ambos os tipos de prefetching, mesmo quando comparado com grandes caches de disco.
Além disso, os resultados mostram que variações no tamanho de OWCache têm efeitos
benéficos sob um prefetching ótimo, mas não necessariamente sob um prefetching básico.
6.4 Estendendo um Multiprocessador Tradicional
O estudo anterior mostra que um anel ótico pode ser benéfico para um multiprocessador
oticamente interconectado. No entanto, estes multiprocessadores não são ainda amplamente utilizáveis. Com o propósito de mostrar que o anel ótico pode ser aplicado com sucesso em arquiteturas de multiprocessadores mais tradicionais e amplamente utilizáveis,
nesta seção apresentamos a extensão de um multiprocessador conectado por uma grade
eletrônica com uma cache ótica para escritas ao disco. Esta extensão, chamada de NWCache, é mais modular e flexı́vel que OWCache, pois a interface NWCache pode ser
inserida nos barramentos de entrada/saı́da de qualquer multiprocessador. A arquitetura de
NWCache e os seus mais importantes resultados de desempenho serão discutidos abaixo.
6.4.1 Arquitetura Básica
Como a base para a implementação de NWCache, utilizamos a arquitetura de um multiprocessador tradicional com coerência de caches, onde os processadores são interconectados através de uma rede tradicional em grade e com roteamento wormhole. A estrutura
de cada nó do sistema é a mesma da figura 6.1. Este multiprocessador foi estendido com o
anel ótico simplesmente inserindo a interface NWCache no barramento de entrada/saı́da
96
de cada nó. O controlador de disco dos nós com capacidade de entrada/saı́da pode ser
conectado à interface NWCache. Assim, a interface NWCache une o nó ao anel ótico e
filtra alguns dos acessos ao disco de forma similar à interface OWCache. Alguns destes
acessos podem ser satisfeitos pela mesma interface NWCache.
Com a finalidade de implementar NWCache, o hardware padrão do multiprocessador
não requer nenhuma modificação. O código para a gerência da memória virtual é bastante
similar ao descrito anteriormente na seção 6.1.1 para OWCache.
A interface NWCache é similar à interface OWCache apresentada na figura 6.2. As
únicas diferenças entre estas interfaces são: a) a interface do barramento de memória no
projeto OWCache se transforma numa interface para o barramento de entrada/saı́da; e b)
a lógica para a interface de OPTNET no projeto OWCache é substituı́da por uma interface
de disco. Como resultado, o custo do hardware eletrônico de NWCache está restrito às
interfaces do barramento de entrada/saı́da e de disco, às filas FIFO, e às memórias e aos
controladores que ligam as partes eletrônica e ótica da interface NWCache. O custo do
hardware ótico de NWCache é também mı́nimo, somente 4 × p componentes óticos, onde
p é o número de nós e cache-channels do multiprocessador.
Novamente, o código de gerência do anel é quase o mesmo discutido na seção 6.1.2.
As mensagens que não estão relacionadas com a gerência de memória virtual ainda fluem
através da rede eletrônica. No entanto, diferente de OWCache, as mensagens enviadas
aos nós com capacidade de entrada/saı́da após o swap-out de uma página devem também
incluir o número do nó que realiza a operação, pois a interface NWCache não tem meios
para determinar a fonte dos swap-outs.
6.4.2 Resultados Experimentais
Para avaliar o desempenho do multiprocessador baseado em NWCache, utilizamos
simulações dirigidas por eventos de um multiprocessador com coerência de caches
DASH-like [49] com e sem NWCache. Os parâmetros das simulações são os mesmos
listados na tabela 6.1. A rede eletrônica assume uma latência de roteamento de 4 ciclos
do processador e uma taxa de transferência de 200 MBytes/s. Além disso, utilizamos o
mesmo conjunto de aplicações e parâmetros de entrada mostrados na tabela 6.2.
Benefı́cios de Desempenho. Os experimentos realizados para determinar o número
mı́nimo de frames livres mostra que, na presença de NWCache, a maioria das aplicações
atinge o seu melhor desempenho com um mı́nimo de somente 2 frames livres, independente da estratégia de prefetching. Por outro lado, a melhor configuração para o multiprocessador tradicional não é obvia. Sob prefetching ótimo, 4 aplicações (Gauss, LU,
Radix, e SOR) favorecem números grandes (> 12) de frames livres, enquanto duas delas
(Em3d e MG) atingem o seu melhor desempenho com somente 2 frames livres. A outra aplicação, Radix, requer 8 frames livres para obter o seu melhor desempenho. Sob
prefetching básico, por outro lado, todas as aplicações exceto SOR favorecem números
pequenos (2 ou 4) de frames livres. Assim, foram selecionados 12 e 4 frames como os
97
números mı́nimos de frames livres sob prefetching ótimo e básico, respectivamente. Todos os resultados a seguir correspondem a estas configurações.
Da mesma forma que OWCache, NWCache melhora o desempenho devido ao fato de
prover uma área extra onde as páginas podem residir até o disco estar livre; aumentando
a probabilidade de combinar várias escritas ao disco; e atuando como uma victim-cache
para as páginas que foram ejetadas da memória e posteriormente acessadas pelo mesmo
ou por um processador diferente. Estas caracterı́sticas de NWCache melhoram o desempenho de forma similar a OWCache. Em resumo, os tempos de swap-out são de 1
a 3 ordens de magnitude menores quando a extensão NWCache é usada; os ganhos na
combinação de escritas são moderados (≤ 16%) sob prefetching básico, mas podem ser
significativos (≤ 58%) sob prefetching ótimo; e as taxas de acerto no anel ótico são ligeiramente maiores sob prefetching ótimo que sob prefetching básico, variando de 9 (Em3d)
a 60% (Gauss e MG).
Além desses três benefı́cios de desempenho, que são compartilhados com OWCache,
NWCache também reduz o tráfego de dados através da rede de interconexão do multiprocessador e dos barramentos de memória, pois: a) as páginas ejetadas da memória não
são transferidas pela rede de interconexão; e b) as leituras de página que acertam em
NWCache não são transferidas pela rede, nem pelos barramentos de memória dos nós
de entrada/saı́da (quando o pedido para o nó de entrada/saı́da correspondente pode ser
abortado a tempo). Esta redução no tráfego de dados produz uma redução na contenção
observada pela rede.
Para avaliar os benefı́cios de NWCache em termos da redução de contenção, coletamos estatı́sticas da latência média de uma leitura de página a partir da cache do controlador de disco. A comparação destas estatı́sticas entre o multiprocessador tradicional
e o multiprocessador baseado em NWCache provê uma estimativa aproximada da quantidade de contenção que é eliminada. Sob prefetching básico, estes resultados mostram
que NWCache reduz as latências de um acerto na cache de disco em até 63%. Para a
maioria de aplicações, as reduções variam de 24 a 38%. Levando em consideração que
a leitura de uma página a partir da cache de disco demora 6K ciclos aproximadamente
na ausência de contenção, pode-se estabelecer que as reduções de contenção geradas por
NWCache são sempre significativas. Por exemplo, um acerto na cache de disco demora
21K ciclos em média para LU executando no multiprocessador tradicional. Isto significa
que quase 15K ciclos são devidos à contenção de várias formas. Na presença de NWCache, o número de ciclos devido à contenção em LU é reduzido a 14K ciclos, indicando
uma redução de 7%. No outro extremo, considere a redução da latência de acerto na cache de disco atingida por MG, 63%. Dos 19K ciclos que MG leva para ler uma página
das caches de disco no multiprocessador tradicional, aproximadamente 13K ciclos são
devidos à contenção. Na presença de NWCache, o número de ciclos devidos à contenção
em MG é reduzido a quase 700, ou seja 95% de redução na contenção. Por outro lado,
sob prefetching ótimo, NWCache não é bem sucedido em atenuar a contenção, pois não
existe tempo suficiente para prevenir a transferência de uma página através da rede e do
98
barramento de entrada/saı́da quando o pedido de uma página produz um acerto no anel
ótico.
Desempenho Geral. Sob prefetching ótimo, os tempos “NoFree” são reduzidos significativamente como resultado dos swap-outs muito mais rápidos permitidos por NWCache. Além disso, o tempo gasto pelas operações não relacionadas com memória virtual é significativamente reduzido na presença de NWCache. Estas reduções são resultado dos ganhos nos custos de acesso aos dados remotos e do melhor comportamento
das sincronizações, que é, por sua vez, um resultado da redução significativa do tráfego
através do sistema de memória (rede e memórias). Assim, observa-se que NWCache produz ganhos de desempenho de 41% em média, variando de 23% (Em3d) a 60 e 64% (MG
e Gauss) quando um prefetching ótimo é assumido. Na verdade, os ganhos são maiores
que 28% em todos os casos, exceto Em3d.
Sob prefetching básico, por outro lado, a adição de NWCache ao multiprocessador
melhora o seu desempenho de 3 (Radix) a 42% (Gauss) para todas as aplicações exceto
FFT, a qual degrada o seu desempenho em 3%. Os ganhos relacionados com NWCache
são produzidos pela redução razoável das latências de faltas de página, as mesmas que
são resultado das leituras que acertam na cache ótica e da diminuição de contenção.
Estes resultados confirmam que NWCache produz benefı́cios de desempenho significativos em várias formas. Os maiores ganhos de desempenho vêm dos rápidos swapouts, da victim-cache e da redução de contenção. Lembre que OWCache produz ganhos
de desempenho que são resultado dos rápidos swap-outs e da victim-cache somente; a
contenção na rede ótica de OWCache é praticamente nula. O tempo de execução de cada
aplicação mostra que as duas implementações da cache de escritas, NWCache e OWCache, produzem ganhos de desempenho similares. O impacto das variações arquiteturais é
também similar em ambos os sistemas. Estes resultados não são uma coincidência, obviamente. Para várias aplicações out-of-core, a maioria do tempo de execução é gasto
em operações de memória virtual, as mesmas que se beneficiam similarmente das duas
implementações. Para outras aplicações, NWCache é capaz de reduzir a contenção na
rede eletrônica o suficiente para fazê-la ter um comportamento tão bom como o de uma
rede ótica.
6.5 Trabalhos Relacionados
Umas poucas áreas são relacionadas com esta proposta, por exemplo, o uso de redes
WDM em computadores, o uso da ótica na implementação de memórias de linha de retardo e as otimizações de operações de escrita ao disco.
As memórias de linha de retardo foram implementadas em sistemas de comunicação
ótica [46] e em computadores totalmente óticos [42]. Do conhecido até agora, o único
sistema que explora o potencial da ótica para armazenar dados no projeto de multiprocessadores é NetCache. No sistema NetCache um anel ótico é usado para armazenar os
blocos de memória como se fosse uma cache de terceiro nı́vel compartilhada por todos os
99
processadores. Tanto NetCache como OWCache são extensões simples à rede OPTNET,
mas NWCache é uma cache de escritas ao disco ligada aos barramentos de entrada/saı́da
de um multiprocessador tradicional. Uma vantagem arquitetural dos sistemas OWCache
e NWCache, sobre NetCache, é o seu reduzido custo de hardware ótico; o número de
componentes óticos do sistema NetCache é 25 × p, onde p é o número de processadores.
Alguns pesquisadores também têm se preocupado em melhorar o desempenho das
operações de escrita em vários tipos de subsistemas de discos. Estes esforços incluem
trabalhos para melhorar o desempenho de escritas pequenas em RAIDs (e.g., [71]), usar
RAM não volátil como cache de escritas (e.g., [64]), fazer logs das escritas e posteriormente escrevê-las no disco seqüencialmente (e.g., [63]), usar a memória dos nós desocupados ou com pouca carga para armazenar as páginas ejetadas das outras memórias [25],
e usar um disco de logs para cachear as escritas dirigidas ao disco principal [38]. Os dois
últimos tipos de trabalhos são os mais parecidos com o nosso.
O armazenamento dos swap-outs na memória de outro nó é somente apropriado para
redes de estações de trabalho onde um ou mais nós podem estar desocupados ou com
carga baixa em qualquer instante. Esta mesma técnica não pode ser aplicada ao ambiente
computacional considerado pela nossa proposta, pois todos os processadores são sempre
parte da computação e não possuem memória livre para ajudar-se entre si.
A arquitetura de armazenamento proposta em [38], chamada de DCD (Disk Caching
Disk), localiza um disco de logs entre a cache de disco baseada em RAM e o disco de
dados verdadeiro, criando um nı́vel extra de cache para escritas. Novos dados a serem
escritos ao disco são armazenados na cache de RAM e posteriormente escritos seqüencialmente no disco de logs. Sobrescrever ou ler um bloco requer uma busca no disco de
logs para encontrar o bloco correspondente. Quando o disco de dados está livre, os dados
são copiados do disco de logs ao disco de dados. Este esquema melhora o desempenho
devido a reduzir significativamente as latências de busca e rotacional quando são escritos dados novos ao disco de logs, resultando numa liberação de espaço mais rápida na
cache de RAM. Sobreescrever ou ler um bloco envolve latências de busca e rotacional
comparáveis aos acessos ao disco de dados principal.
Da mesma forma que DCD, o anel ótico também tenta melhorar o desempenho das
escritas criando um nı́vel extra de cache. No entanto, o anel ótico localiza esta cache
entre a memória principal e as caches de disco, não requerendo nenhuma modificação
nos controladores de disco padrão. Além disso, sobrescrever ou ler dados da cache ótica
é tão eficiente como escrever dados novos no anel ótico. Outra vantagem da proposta
da memória de rede é que ela cria um caminho exclusivo para que as escritas cheguem
aos controladores de disco. No entanto, a tecnologia usada para implementar a cache
adicional em DCD permite maior espaço de armazenamento que a cache ótica.
100
6.6 Conclusões
Neste capı́tulo foi proposto OWCache: uma extensão simples à rede ótica de um multiprocessador com coerência de cache que melhora significativamente o desempenho das
aplicações out-of-core através da otimização dos swap-outs de páginas. As mais importantes vantagens de OWCache são os seus swap-outs mais rápidos e o seu comportamento
como uma victim-cache. Através de um conjunto grande de simulações detalhadas, mostramos que um multiprocessador baseado em OWCache pode facilmente ultrapassar o
desempenho de um multiprocessador baseado em OPTNET para a maioria das aplicações
out-of-core; as diferenças de desempenho em favor de OWCache podem ser tão grandes
quanto 64% e dependem do tipo de prefetching de disco utilizado.
Demonstramos também que o anel ótico pode ser aplicado com sucesso a um multiprocessador tradicional, conectado por uma grade eletrônica, de forma modular e flexı́vel.
Com essa finalidade, propomos NWCache: um dispositivo baseado no anel ótico que pode
ser inserido no subsistema de entrada/saı́da desses multiprocessadores. As vantagens mais
importantes de NWCache são os seus rápidos swap-outs, victim-cache e a redução da
contenção. Os resultados do tempo de execução mostram que as implementações NWCache e OWCache produzem ganhos de desempenho similares, mesmo quando essas
implementações otimizam o desempenho de formas ligeiramente diferentes.
Com base nestes resultados, no estudo de espaço de parâmetros e no custo continuamente decrescente dos componentes óticos, a nossa principal conclusão é que o anel ótico
é altamente eficiente sob várias hipóteses arquiteturais e para a maioria de aplicações paralelas out-of-core. Note no entanto que, embora este estudo esteja enfocado na otimização
de swap-outs de páginas, o cacheamento de dados com um anel ótico pode ser também
benéfico para outros tipos de tráfego com escritas ao disco.
101
Capı́tulo 7
Implementação de uma Memória de
Rede na Internet
A crescente popularidade da Internet e o aparecimento de aplicações distribuı́das que
demandam caracterı́sticas especı́ficas de serviço (e.g., grandes quantidades de dados,
informações constantemente atualizadas) estão fazendo com que os servidores de rede
se convertam em gargalos. Embora a utilização de servidores de rede escaláveis é uma
opção para atenuar este problema [18], a grande largura de faixa existente nos enlaces
entre os roteadores de alta velocidade [75] e o surgimento de tecnologias como as redes
ativas [11, 72] oferecem outras alternativas para aumentar o desempenho desse tipo de
aplicações de forma ortogonal ao desenvolvimento de servidores de rede mais poderosos.
Assim, neste capı́tulo propomos a utilização da grande largura de faixa dos enlaces
entre roteadores para a construção de uma memória de rede que, junto com a tecnologia de redes ativas, permitirá eliminar os gargalos produzidos nos servidores de rede
que tratam dados dinâmicos, melhorando notavelmente o desempenho das aplicações distribuı́das que executam sobre essas redes. Mais especificamente, a nossa idéia é manter
circulando, ao longo dos enlaces entre roteadores, os dados dinâmicos mais accessados
pela aplicação. A atualização e manutenção da coerência desses dados será realizada
através de roteadores ativos como os propostos em [73, 84, 8]. Basicamente, um roteador
ativo é um dispositivo que permite realizar um processamento personalizado sobre as diversas mensagens que circulam através dele. Desta forma, parte do processamento feito
pelos servidores pode ser realizado num número potencialmente grande de roteadores por
onde passam as mensagens das aplicações. Esta proposta está baseada na observação de
que existem certas aplicações distribuı́das, tais como os leilões eletrônicos, que trabalham
com um conjunto relativamente pequeno de dados, normalmente acessado por um grande
número de nós, que não pode ser cacheado devido a sua natureza dinâmica. Assim, o
armazenamento desses dados dentro da própria rede pode melhorar o desempenho dessas aplicações, principalmente através da diminuição da contenção nos servidores e da
redução da latência observada pelos clientes.
Para entender melhor esta proposta considere, por exemplo, a aplicação que realiza
o leilão de um determinado conjunto de mercadorias através da Internet. As páginas
para esse leilão podem ser acessadas por um número extremamente grande de possı́veis
102
Roteador
Cliente
Servidor
Sistema Tradicional
Cacheamento Ativo
Figura 7.1: Tráfego para um Leilão de Mercadorias
compradores, sendo que a página com as informações sobre as últimas ofertas para cada
mercadoria vai mudar constantemente e não poderá ser cacheada pelos clientes nem pelos
proxies da rede. Desta forma, o acesso a essa página vai gerar uma contenção enorme
no servidor que ainda vai ter que processar as ofertas geradas pelos diferentes clientes.
Além disso, nesta aplicação pode existir um número bastante expressivo de ofertas que
não são mais válidas, pois levam consigo valores inferiores ao maior até então recebido (a
caracterı́stica distribuı́da da aplicação e os retardos na comunicação podem gerar este tipo
de inconsistência). Sob este cenário, a nossa proposta é manter a página com as últimas
ofertas para cada mercadoria circulando entre os diferentes roteadores da rede (figura
7.1), sendo que a atualização dessa informação é feita através dos roteadores ativos. Esses
roteadores interceptariam as mensagens enviadas pelos clientes, tanto pedindo essa página
como fazendo novas ofertas, e eles mesmos retornariam uma resposta baseando-se na
informação armazenada na memória de rede. Desta forma, a contenção gerada no servidor
e as latências observadas pelos clientes seriam drasticamente diminuı́das, fazendo com
que o número de transações por unidade de tempo possa ser aumentado substancialmente.
7.1 Fundamentos
Nesta seção são apresentados alguns fundamentos sobre a Internet e as redes ativas. Alguns exemplos de aplicações distribuı́das que podem se beneficiar da nossa proposta são
também discutidos.
7.1.1 A Internet
A Internet pode ser vista como uma coleção de domı́nios de roteamento interconectados,
onde cada um desses domı́nios é um conjunto de nós (e.g., roteadores, gateways, elementos de processamento) que compartilham informações e polı́ticas de roteamento sob uma
única administração [12]. Cada domı́nio de roteamento pode ser classificado como um
domı́nio de extremo ou como um domı́nio de trânsito. Um domı́nio de extremo só transporta o tráfego que se origina ou termina naquele domı́nio. Um domı́nio de trânsito, por
outro lado, não apresenta essa restrição e a sua principal função é interconectar eficientemente os domı́nios de extremo.
Os domı́nios de extremo normalmente correspondem às redes de instituições ou al103
OC-48
OC-3
Extremo
Tránsito
Roteador
Figura 7.2: Estrutura Topológica da Internet
gumas outras coleções de LANs (Local Area Networks), enquanto que os domı́nios de
trânsito são as denominadas WANs (Wide Area Networks) ou MANs (Metropolitan Area
Networks). Assim, os domı́nios de trânsito estão formados por um conjunto de roteadores de alta velocidade, os quais podem estar conectados a um número determinado de
domı́nios de extremo através de nós especiais, localizados nos domı́nios de extremo, chamados gateways. Em geral, um domı́nio de extremo pode estar conectado a um ou mais
domı́nios de trânsito, e estes últimos podem ser organizados em hierarquias, como é o
caso das MANs e WANs.
Desta forma, a estrutura topológica da Internet pode ser modelada por um grafo, onde
os seus nós representam roteadores ou gateways, e as suas arestas representam as diferentes conexões entre esses elementos (figura 7.2). Assim também, os elementos de
processamento podem ser modelados como folhas conectadas a um único nó roteador.
Informações adicionais referentes à estrutura e caracterı́sticas da rede podem também
ser adicionadas ao grafo. Por exemplo, a rede Abilene (primeiro protótipo da Internet-2)
[75] possui enlaces OC-48 (2,48 Gbits/s) para interconectar os seus roteadores principais (roteadores Cisco 12000 Series com uma capacidade de roteamento de 60 Gbits/s) e
enlaces OC-3 (155 Mbits/s) para conectar os gateways dos domı́nios de extremo aos roteadores dos domı́nios de trânsito principais. Note, no entanto, que a rede Abilene prevê
a atualização dos enlaces entre os seus roteadores principais a OC-192 (9,6 Gbits/s) ou
superior nos próximos anos.
7.1.2 Redes Ativas
As redes ativas definem um novo tipo de arquitetura onde os nós internos da rede (i.e., os
elementos de roteamento da rede) são capazes de realizar computações especı́ficas sobre
os pacotes que circulam através deles [72]. O processamento realizado por esses nós pode
estar baseado no seu estado interno e/ou nas informações de controle transportadas nos
pacotes. Como resultado desse processamento, os elementos de roteamento podem escalonar zero ou mais pacotes para serem transmitidos a outros n ós e, inclusive, mudar o seu
estado interno não-transiente. É também importante mencionar que o processamento feito
pelos nós pode ser especı́fico para os pacotes de cada usuário e/ou aplicação. Desta forma,
104
as redes ativas permitem modificar dinamicamente o comportamento da rede observado
pelos usuários.
Atualmente, existem várias propostas para a implementação de uma rede ativa. Calvert et al. [11] têm caraterizado estas propostas com base em três atributos: o grau de
programabilidade da rede, a capacidade de manter ou não um estado interno nos nós,
e a granularidade de controle. A programabilidade da rede pode variar desde um conjunto fixo de parâmetros configuráveis até uma linguagem capaz de descrever qualquer
computação efetiva. A capacidade para manter um estado no interior dos nós se refere, por
sua vez, ao estado não-transiente que poderia ser instalado por alguns pacotes e acessado
por outros. Finalmente, a granularidade de controle pode permitir que um único pacote
modifique o comportamento do nós roteadores até que essa mudança seja explicitamente
sobrescrita ou, num outro extremo, um pacote pode modificar o comportamento dos roteadores apenas no seu próprio tratamento. De acordo com esta última caracterı́stica, os
dois modelos básicos para redes ativas são o uso de roteadores programáveis [84] e o uso
de pacotes ativos especiais chamados de cápsulas [73].
O uso de roteadores programáveis permite manter o formato dos pacotes existentes
mediante a provisão de um mecanismo que carrega, ao longo dos diferentes nós da rede
e previamente ao envio dos pacotes, as rotinas ou programas a serem executados pelos
diferentes nós. Assim, o envio dos pacotes é feito da mesma forma que nas redes convencionais, sendo que quando um pacote chega a um nó ativo, o seu cabeçalho é examinado
primeiro e, só então, a rotina correspondente é executada para operar sobre o conteúdo
desse pacote. O uso de pacotes ativos (ou cápsulas), por outro lado, substitui o pacote
passivo das arquiteturas convencionais por rotinas pequenas que podem ser encapsuladas
nos mesmos pacotes e executadas em cada um dos nós ao longo do seu caminho. Esses
pacotes ativos podem inclusive conter dados de usuário.
Tanto no caso dos roteadores programáveis como dos pacotes ativos, os elementos
de roteamento ativos podem interoperar com os elementos de roteamento tradicionais, os
quais simplesmente passam para frente, de forma transparente, os pacotes enviados pelas
diferentes aplicações.
7.1.3 Exemplos de Aplicações Distribuı́das
Entre as aplicações que podem se beneficiar da nossa proposta podemos citar o cacheamento ativo de informação, como é o caso do exemplo descrito na introdução deste
capı́tulo, e a sincronização de aplicações distribuı́das.
No caso do cacheamento ativo de informação, além dos leilões que são aplicações
que envolvem milhões de dólares na atualidade [83], bancos de dados que mantêm
informações que mudam constantemente (e.g., listagens de estoque, notı́cias atualizadas
sobre eventos determinados, etc.) podem também se beneficiar da nossa memória de rede.
Da mesma forma que nos leilões, essas aplicações podem armazenar o seu conjunto de
dados mais acessado na memória de rede e atualizá-lo conforme às polı́ticas definidas no
servidor.
105
Além de diminuir a contenção no servidor e de reduzir a lat ência observada pelos
clientes, esta estratégia também facilita a interação das aplicações com os dados compartilhados, pois a nossa memória de rede provê a imagem de uma memória centralizada
única baseada num modelo de consistência seqüencial. Esta última caracterı́stica, por
sua vez, simplifica a programação das aplicações. Assim, a nossa memória de rede pode
também ser utilizada na sincronização de aplicações iterativas distribuı́das. Exemplos de
tais aplicações são os jogos de realidade virtual entre usuários remotos (e.g., Doom, WarBirds, Duke 3D, Heretic), trabalho cooperativo suportado por computador (e.g., controle
de acesso aos objetos, gerenciamento de grupos), entre outras.
7.2 Memória de Rede
A implementação da memória de rede não envolve nenhuma mudança na infraestrutura
da rede, supondo a existência de um conjunto mı́nimo de roteadores ativos ao longo dos
domı́nios de trânsito usados pela aplicação. Neste caso, vamos supor, unicamente por
facilidade de apresentação, que o nosso modelo de redes ativas corresponde ao dos roteadores programáveis. Da mesma forma, também suporemos que os roteadores são capazes de manter um estado interno não-transiente e que eles suportam uma linguagem de
programação relativamente flexı́vel.
Assim sendo, a nossa memória de rede pode ser implementada em qualquer um dos
domı́nios de trânsito usados pela aplicação que possua largura de faixa suficiente para
não se tornar um gargalo de comunicação. Para a implementação da memória de rede,
as aplicações deverão primeiro carregar, durante a sua fase de inicialização, as rotinas de
processamento respectivas em cada um dos roteadores ativos do domı́nio de trânsito selecionado como linha de retardo. A seguir, alguns dos elementos de processamento usados
pela aplicação (e.g., o servidor da aplicação) podem enviar um ou mais pacotes, contendo
as informações a serem mantidas pela memória de rede, a esses roteadores ativos. A partir desse instante então, a aplicação pode começar a sua execução normal, considerando
que os pacotes enviados através da rede deverão ser associados às rotinas correspondentes mediante etiquetas especı́ficas no cabeçalho das mensagens. Adicionalmente, antes
ou durante a fase de terminação da aplicação, os elementos de processamento devem remover as rotinas previamente carregadas nos roteadores ativos, destruindo desta forma a
memória de rede implementada durante a fase de inicialização.
Rotinas de Processamento Ativo. As rotinas carregadas pela aplicação nos roteadores ativos devem ser capazes de manter circulando de forma coerente as informações
contidas na memória de rede. Além disso, essas rotinas devem também implementar algumas outras funções básicas dependentes da aplicação (e.g., a atualização e leitura de
informações), assim como a terminação da memória de rede.
A rotina que mantém circulando os dados na memória de rede é fundamental na nossa
proposta. Ela, basicamente, após receber um pacote identificado por uma etiqueta especial, envia uma mensagem de reconhecimento (acknowledgement) à fonte do pacote ori106
ginal e uma cópia do pacote ao próximo roteador no domı́nio de trânsito escolhido pela
aplicação para a implementação da memória de rede. Após enviada a cópia do pacote, o
roteador inicializa um alarme que só é desativado quando uma mensagem de reconhecimento para esse pacote é recebida. Se nenhuma mensagem de reconhecimento é recebida
até o instante em que expira o tempo do alarme, o pacote é novamente enviado. Isto garante a perpetuação da informação na memória de rede mesmo ante falhas na transmissão
dos dados.
As outras rotinas carregadas nos roteadores ativos vão depender da funcionalidade requerida pela aplicação, mas elas devem prover, fundamentalmente, mecanismos que permitam a atualização, leitura e terminação da memória de rede. As rotinas de atualização
devem facilitar a modificação parcial ou total dos dados contidos nos pacotes, podendo
inclusive enviar uma resposta, dependente dos dados existentes na memória, ao nó que
originou o pedido. As rotinas de leitura, por outro lado, devem permitir o acesso parcial ou total às informações mantidas na memória de rede. Neste caso, obviamente, é
indispensável o envio de uma resposta ao nó fonte do pedido. Finalmente, as rotinas
de terminação devem permitir a destruição da memória de rede garantindo, ou não, a
coerência e validade das informações armazenadas nela.
Por exemplo, no caso do leilão de mercadorias através da Internet, a rotina de
atualização deve alterar o valor de uma determinada mercadoria ante uma oferta maior
que o seu valor atual. No caso da oferta ser aceita, uma mensagem indicando o êxito da
submissão deve ser retornada. Caso contrário, uma mensagem de falha deverá ser enviada ao respectivo nó cliente. A rotina de leitura, por outro lado, deve facilitar que tanto
os clientes como o servidor possam atualizar as suas informações locais periodicamente
com os dados mantidos na memória de rede. Os clientes, por exemplo, podem querer ler
o último valor associado a uma determinada mercadoria antes de fazer uma outra oferta.
Finalmente, a rotina de terminação deve desativar as rotinas de atualização de todos os
roteadores ativos envolvidos na aplicação e, depois de um tempo determinado, enviar
os valores finais para o servidor de rede. Desta forma, a largura de faixa utilizada pela
aplicação é liberada e o servidor termina possuindo os resultados finais do leilão.
Um princı́pio que deve ser considerado na hora de decidir as funções que seram implementadas por cada uma das rotinas, é o chamado end-to-end argument [65]. Este
princı́pio estabelece que a confiabilidade do sistema só pode ser garantida pela própria
aplicação. Como a nossa memória de rede unicamente garante tolerância às falhas de
comunicação entre dois roteadores quaisquer, técnicas de tolerância a falhas mais elaboradas debem ser implementadas a nı́vel dos servidores e clientes para poder garantir a
coerência e perpetuidade dos dados. Um exemplo de tais técnicas poderia ser o commitment das informações diretamente entre os clientes e servidores após um longo perı́odo de
inatividade ou um certo número de time-outs consecutivos e, inclusive, momentos antes
de terminar a aplicação. Parte desse commitment poderia ser otimizado através do uso dos
roteadores ativos, mas sempre deixando a verificação final aos elementos da aplicação.
Caracterı́sticas Desejadas nas Redes Ativas. Como a proposta de redes ativas é rela107
tivamente nova e ainda é uma área de pesquisa, existem várias alternativas e soluções
para a sua implementação. A seguir serão discutidas as nossas principais suposições e/ou
requerimentos para a implementação da memória de rede.
Como foi mencionado anteriormente, a nossa proposta se baseia no modelo de roteadores programáveis e, de forma similar à proposta feita para NetScript [84], assume
que a rede de comunicação pode ser observada como uma coleção de nós ativos interconectados por enlaces virtuais formando uma rede, também virtual, de mais alto nı́vel.
Para isso, uma nova camada de comunicação deve ser implementada sobre a arquitetura
de rede existente (e.g., sobre a camada de rede IP). Esta nova camada de software deve
prover suporte para a instalação, execução e controle das rotinas ativas, para a gerência
e transmissão de pacotes entre os nós virtuais, e para a administração e alocação dos recursos de rede. Em resumo, esta nova camada deve prover a abstração de uma máquina
virtual onde as aplicações são uma coleção de threads, distribuı́das sobre os diferentes
nós virtuais, e encarregadas de processar os pacotes que circulam através da rede.
Assim, a instalação de rotinas nos roteadores ativos pode ser feita através de portas
traseiras (back-doors)que só são acessı́veis ao administrador da rede e/ou a usuários cadastrados com autenticação e verificação prévia dos mesmos. Este esquema, além de ser
simples e facilitar o projeto dos roteadores ativos, permite garantir certo nı́vel de proteção
e confiabilidade na execução das rotinas por parte dos elementos ativos. A associação dos
pacotes às rotinas, por outro lado, pode ser feita através de etiquetas no cabeçalho ou em
posições especı́ficas do corpo do pacote. Particularmente, achamos que a inclusão de uma
etiqueta no campo opcional dos pacotes IP é a alternativa mais simples. Finalmente, no
que se refere à alocação de recursos, o problema é similar ao enfrentado pelos sistemas
distribuı́dos multiusuário. Assim, esquemas empregados pelos sistemas operacionais distribuı́dos para a gerência, alocação e proteção dos recursos podem também ser utilizados
por estas máquinas virtuais.
Infelizmente, ainda não existe um padrão definitivo para as redes ativas, mas esforços
estão sendo feitos para encontrar um modelo de programação comum, uma forma de
acesso rápida e eficiente aos recursos oferecidos pelos roteadores ativos, um mecanismo
de proteção para os recursos da rede, e um esquema de instalação que permita aos usuários
colocar uma determinada funcionalidade no lugar certo dentro da rede [11, 72]. Esperase que num futuro não muito distante, esta tecnologia esteja à disposição dos usuários
convencionais.
Clientes e Servidores. A utilização da memória de rede por parte das aplicações distribuı́das requer algumas mudanças no código dos seus clientes e servidores. Do lado dos
clientes essas mudanças são mı́nimas, pois só é preciso incluir o identificador das rotinas
que trataram esses pacotes no cabeçalho dos mesmos. Isso pode ser feito facilmente sem
o conhecimento explı́cito do usuário e mesmo usando navegadores convencionais através
de plug-ins ou Java scripts fornecidos pelo servidor.
Do lado do servidor, essas mudanças são mais radicais e dependem do tipo de
aplicação. No caso do leilão, por exemplo, o servidor tem que inicializar a memória de
108
rede através da API (Application Programming Interface) fornecida pela camada de redes ativas. Após essa inicialização, ele deve também implementar algum mecanismo que
permita processar as ofertas recebidas diretamente (ofertas que não passaram por nenhum
roteador ativo). Uma alternativa para o processamento correto de tais ofertas é re-enviar
todos esses pacotes ao roteador ativo mais próximo, pois só a memória de rede possui os
valores atualizados do leilão. No entanto, uma solução mais eficiente pode ser retornar
ao cliente um novo endereço de serviço que obriga aos pacotes dos clientes a passar pelo
menos por um roteador ativo. O forwarding de um endereço para um outro servidor é
uma caracterı́stica suportada inclusive a nı́vel da linguagem HTML (Hyper-Text Markup
Language).
Um outro tópico de interesse na implementação dos clientes e servidores é a utilização
de TCP (Transport Control Protocol) ou UDP (User Datagram Protocol) como o seu
protocolo de comunicação. TCP tem a vantagem de permitir uma comunicação confiável
e ser a base do protocolo HTTP (Hyper-Text Transport Protocol), mas o seu uso requer
o estabelecimento de uma conexão entre o cliente e o servidor antes de qualquer troca
de informação. Como a nossa proposta intercepta as mensagens dirigidas ao servidor, a
comunicação entre os pontos terminais da conexão não poderia ser garantida.
Por este motivo e já que a maioria de aplicações alvo da nossa proposta requerem
uma comunicação do tipo pedido-resposta, nosso estudo vai estar restrito às aplicações
que podem se beneficiar do uso de UDP como o seu protocolo básico de transporte. Isso
simplifica bastante o código executado nos roteadores ativos e, como será mostrado na
seção experimental, não influencia no desempenho nem na correção das aplicações.
Note, no entanto, que aplicações que só podem usar TCP como o seu protocolo de
transporte também se beneficiariam da memória de rede. Para isso, seria necessário manter o estado das conexões TCP em cada um dos roteadores ativos. Obviamente, isso
geraria complicações adicionais ao processamento que tem que ser feito nos roteadores
ativos, mas pode ser um tema para estudos futuros.
Consumo de Largura de Faixa. Um outro ponto importante na nossa proposta é o consumo de largura de faixa por parte da memória de rede. Matematicamente, esse consumo
de largura de faixa pode ser expresso como:
número de pacotes × tamanho do pacote × round trips por segundo
onde o número de round trips por segundo é determinado pelas distâncias entre os roteadores, pelo tempo médio de cada roteamento e pelo número de roteadores que implementam a memória de rede. Normalmente, as distâncias entre roteadores e o número de
roteadores usados pela memória de rede são valores fixos e conhecidos. Já o tempo médio
de roteamento depende da quantidade de contenção encontrada pelos pacotes que implementam a memória de rede. Esta caracterı́stica é muito importante, pois como veremos
na seção 7.4.3, a nossa memória de rede é capaz de se adaptar a mudanças na largura de
faixa à disposição da aplicação.
109
Parâmetros
Taxa de transmissão dos roteadores
Taxa de transmissão dos gateways
Tempo de serviço no servidor
Tempo de time-out nos clientes
Tempo de time-out nos roteadores
Tempo de roteamento
Tempo de forwarding
Tempo de atualização
Tempo de leitura
Número de unidades de roteamento
Tamanho das filas de mensagens
Valor
2,48 Gbits/seg
155 Mbits/seg
200 useg
10 seg
10 seg
800 nseg
100 + 50*R useg
100 useg
100 useg
4
1024
Tabela 7.1: Parâmetros Usados pelos Simuladores
OC-48
OC-3
Denver
Kansas
Indianap Cleveland
L.A.
Atlanta
Houston
N.Y.
Roteador
Cliente
Servidor
Figura 7.3: Estrutura Topológica da Internet-2
7.3 Metodologia
Com a finalidade de poder avaliar a nossa proposta para diferentes parâmetros de rede e
ter estatı́sticas mais detalhadas sobre as aplicações que executam nessas redes, simulações
dirigidas por eventos de várias configurações e topologias foram implementadas. A tabela
7.1 apresenta os parâmetros e valores base assumidos pelas simulações para as diferentes
configurações. Tanto a taxa de transmissão dos roteadores como a dos gateways e o
tempo de roteamento são os mesmos encontrados na Internet-2. Os tempos de serviço e
processamento (i.e., leitura, atualização e forwarding), por outro lado, correspondem aos
tempos empregados por uma estação de trabalho Ultra-SPARC para essas mesmas tarefas.
O tempo de forwarding, especificamente, se refere ao tempo requerido pelo roteador para
rotear um pacote com informações da memória de rede. Note que esse tempo depende do
número de mensagens que o roteador envia aos clientes como resultado do processamento
feito sobre esse pacote (R). Por sua vez, a figura 7.3 mostra a topologia base usada
em nossos experimentos. A topologia base é a mesma implementada pela rede Abilene.
De acordo com a expressão apresentada na seção anterior e supondo uma rede livre de
contenção (i.e., um tempo de round-trip igual a 15,7 mseg), a quantidade de informação
que pode ser armazenada nesta rede é 4,7 MBytes. O efeito da variação dos parâmetros
de rede mais importantes e da topologia usada pelas aplicações será analisado na seção
7.4.3.
110
Parâmetros
Número de nós cliente
Número de compradores por nó cliente
Número de ofertas de cada comprador
Número de mercadorias leiloadas
Área de dados de cada mercadoria
Tamanho das mensagens de pedido e resposta
Valor
11
512
1024
64
32 Bytes
256 Bytes
Tabela 7.2: Parâmetros da Aplicação
7.3.1 A Aplicação
A aplicação que será avaliada com detalhe na próxima seção é o leilão de mercadorias
através da Internet. Um leilão pode ser definido como uma instituição de mercado com
regras explı́citas que determinam a alocação e preços de um determinado conjunto de
recursos com base nas ofertas provenientes dos participantes do mercado. Assim, existem
vários tipos de leilões, sendo que o mais popular, e no qual vai se concentrar nosso estudo,
é o denominado leilão EOO (English Open Outcry) [83]. Este tipo de leilão corresponde
ao caso onde se têm conjuntos de vendedores e compradores mutuamente exclusivos,
sempre é possı́vel saber qual é a última oferta para uma mercadoria determinada, e os
compradores vão incrementando os valores das suas ofertas com a finalidade de adquirir
as mercadorias.
Uma caracterı́stica importante dos compradores que participam de um leilão através
da Internet é que eles podem ser pessoas ofertando através de um navegador convencional
ou agentes de software autônomos configurados para interagir com um servidor de leilões
determinado. Uma das vantagens de usar agentes autônomos é a sua capacidade para
fazer ofertas simultâneas por várias mercadorias e com um tempo de resposta menor. A
popularidade de tais agentes faz com que o tráfego gerado nos servidores seja cada vez
maior. Assim, nossas simulações consideram que os clientes do leilão são agentes de
software autônomos e que tanto o servidor como os clientes implementam unicamente as
operações básicas requeridas pela aplicação, i.e., consulta das últimas ofertas válidas e
submissão de novas ofertas.
Tanto a consulta como a submissão de ofertas geram uma resposta por parte do servidor aos clientes do leilão. No caso da submissão de uma nova oferta, a mensagem de resposta carrega, além do resultado da transação (êxito ou fracasso na submissão), a última
maior oferta válida para essa mercadoria. A finalidade desta otimização é permitir desempenhos maiores nos servidores de leilão tradicionais quando estes estão sujeitos a grandes
cargas de trabalho, como acontece quando se utilizam agentes de software autônomos. Os
parâmetros mais importantes da aplicação usada em nossas simulações são apresentados
na tabela 7.2.
111
7.3.2 Configurações Básicas
Para poder estabelecer as verdadeiras vantagens da nossa proposta em relação a sistemas
similares, simulamos, além da configuração tradicional e da nossa proposta, outras duas
configurações que permitem o leilão de mercadorias usando exclusivamente roteadores
ativos. A seguir são descritas cada uma destas configurações.
Sistema Tradicional. A configuração tradicional consiste de um único servidor de leilões
ao qual todos os clientes enviam as suas ofertas. A rede não precisa ter nenhuma capacidade de processamento, além dos serviços básicos da camada de rede, já que o servidor
faz todo o processamento requerido pela aplicação. Este sistema será analisado em duas
variantes: com um servidor seqüencial e com um servidor distribuı́do (e.g., um cluster de
estações de trabalho). No caso do servidor distribuı́do, cada um dos processadores é responsável por leiloar um conjunto diferente de mercadorias. Assim, este esquema elimina
a necessidade de sincronização entre as diferentes unidades de processamento. Note que,
embora o desempenho do sistema distribuı́do seja melhor do que o do sistema seqüencial,
o sistema distribuı́do apresenta a desvantagem de perder desempenho quando ocorrem
desbalanceamentos nas taxas de acesso às diferentes mercadorias.
Roteadores Ativos – Filtro de Ofertas. Esta configuração é bastante similar ao sistema
anterior que se baseia unicamente num servidor seqüencial. A sua principal diferença é
que os roteadores ativos presentes na rede são usados como filtros de ofertas válidas [80].
Mais especificamente, o servidor atualiza nos roteadores ativos, de tempos em tempos, o
valor mı́nimo requerido pelas ofertas para que elas passem a ser tratadas no servidor. As
ofertas que não ultrapassam esse valor mı́nimo são respondidas diretamente pelos roteadores ativos com uma mensagem de falha. Neste caso, o tempo entre as atualizações desses valores mı́nimos tem um papel importante no desempenho do sistema. Desta forma,
analisaremos duas variantes: (a) uma atualização é enviada a todos os roteadores ativos
cada vez que uma oferta válida chega ao servidor, e (b) uma atualização é enviada a todos
os roteadores ativos a cada certo número de ofertas inválidas (no nosso simulador esse
valor é 200) que chegam ao servidor.
Roteadores Ativos – Processamento Distribuı́do. Em contraste com o sistema anterior, esta configuração permite que o processamento das ofertas seja feito totalmente nos
roteadores ativos. Para isso, o servidor distribui, durante a inicialização da aplicação,
o conjunto de mercadorias pelas quais cada roteador ativo é responsável. Cada roteador se encarrega de um conjunto distinto de mercadorias. Durante a execução do leilão,
o servidor só redireciona os pedidos que chegam a ele aos roteadores correspondentes.
Os roteadores ativos, além de responder às diferentes mensagens de oferta dirigidas a
eles, também se encarregam de rotear as mensagens dirigidas aos outros roteadores. Assim como a configuração tradicional com um servidor distribuı́do, este sistema também
apresenta degradação de desempenho frente a desbalanceamentos nas taxas de acesso às
diferentes mercadorias.
112
Parâmetros
Valor
Taxa de transmissão
100 Mbits/seg
Tempo de serviço
300 useg
Tempo de time-out
10 seg
Tempo de roteamento
150 useg
Tempo de forwarding
260 + 140*R useg
Tempo de atualização
260 useg
Tempo de leitura
260 useg
Unidades de roteamento
1
Tamanho da fila de mensagens
1024
Tabela 7.3: Parâmetros da Rede Virtual
Roteadores Ativos mais Memória de Rede. Como descrita anteriormente, a nossa
proposta permite que qualquer roteador ativo seja responsável por qualquer mercadoria,
pois a memória compartilhada implementada através da linha de retardo permite manter coerentes as informações armazenadas de forma simples e elegante. Esse comportamento ocorre porque os pacotes que implementam a memória de rede atuam como tokens
seqüencializadores dos acesso à memória compartilhada, garantindo desta forma exclusão
mútua nas atualizações dos valores mı́nimos das ofertas. É também importante mencionar
que, nesta configuração, as ofertas que chegam diretamente ao servidor (sem passar por
nenhum roteador ativo) são redirigidas a um novo endereço que obriga as mensagens a
passar por pelo menos um roteador ativo.
7.4 Resultados
Antes de apresentar os resultados para as diversas configurações analisadas na seção anterior, vamos mostrar os resultados para uma implementação da nossa proposta sobre um
cluster de estações de trabalho que valida as nossas simulações.
7.4.1 Validação do Simulador
Com a finalidade de validar os resultados obtidos através das nossas simulações, vamos
comparar esses resultados com os de uma implementação real do leilão de mercadorias. A nossa implementação se baseia numa rede virtual, com a mesma estrutura topológica da figura 7.3, implementada sobre um cluster de 23 estações de trabalho UltraSPARC que executam Solaris e estão interconectadas por uma rede Fast-Ethernet. Os
parâmetros de rede da nossa implementação, que também são usados pelas simulações
nesta comparação, são apresentados na tabela 7.3. Por sua vez, os parâmetros da aplicação
executada sobre esta rede são os mesmos mostrados na tabela 7.2.
A implementação considera tanto uma configuração tradicional (com um servidor
seqüencial ou distribuı́do) como uma baseada na nossa proposta. Para isso, cada roteador
(ativo ou não) da rede virtual foi implementado numa estação de trabalho independente.
113
O servidor de leilões também foi implementado sobre estaç ões de trabalho independentes, para desta forma, isolar os efeitos da contenção gerada nele. Finalmente, vários
agentes clientes, que fazem ofertas indistintamente para todas as mercadorias, foram implementados sobre cada uma das estações restantes. Os nós clientes fazem ofertas à sua
capacidade máxima de processamento, sendo que cada comprador espera pela resposta
correspondente antes de emitir uma nova oferta.
No que se refere à implementação dos roteadores, eles só fornecem a funcionalidade
básica requerida pela nossa proposta, usando para isso os serviços básicos da camada
IP já existente. Especificamente, as tabelas de roteamento são carregadas estaticamente
durante a fase de inicialização do roteador. No caso dos roteadores ativos, a associação
dos pacotes IP às rotinas correspondentes é feita através de uma etiqueta localizada nas
primeiras posições do frame de dados. As rotinas de processamento, por sua vez, são
também carregadas na inicialização do roteador.
Comparando os resultados desta implementação com os do nosso simulador observamos que, para o caso de uma configuração tradicional com um servidor seqüencial,
o número de roteamentos realizados pela implementação é 0,8% inferior ao número
de roteamentos contabilizados na simulação. Esta diferença se deve, basicamente, aos
números distintos de mensagens perdidas na rede devido a falhas de comunicação. Na
implementação são perdidas apenas 70K mensagens, enquanto que na simulação são
perdidas 147K mensagens de um total de 3,3M mensagens. Por outro lado, na nossa
implementação o número de ofertas atendidas por segundo chega a 3251, enquanto que
na simulação esse valor é 3213; uma diferença de apenas 1,2% no desempenho destes
sistemas.
Da mesma forma, observamos que para o caso de uma configuração tradicional com
um servidor distribuı́do que inclui 4 elementos de processamento, a diferença entre o
número de roteamentos realizados pela implementação e os contabilizados na simulação é
de apenas 1,6%. Novamente, essa diferença aparece devido às diferentes taxas de perda de
mensagens na rede de comunicação. O número de ofertas atendidas, por outro lado, chega
a 3192 por segundo na nossa implementação, enquanto que na simulação esse mesmo
valor é 3595; uma diferença de 11% entre esses dois valores.
No caso da nossa proposta, as diferenças no número de roteamentos são em média
7,9% quando comparamos os resultados da nossa implementação com os da simulação.
A disparidade destes valores não se deve exclusivamente à perda de mensagens, como
nos casos anteriores, mas também ao diferente número de round-trips que os pacotes da
memória de rede realizam na nossa implementação e na simulação. De qualquer forma, o
número de round-trips por segundo de um pacote na implementação e na simulação são
bastante próximos, 81 e 91 round-trips por segundo, respectivamente. Por outro lado, o
número de ofertas atendidas por segundo chega a 8,8K na implementação, enquanto que
na simulação é 10,9K ofertas por segundo; uma diferença de 19%.
Nos resultados anteriores podemos observar que as diferenças no desempenho dos sistemas aumentam de 1,2 para 11 e finalmente para 19%, conforme aumenta o paralelismo
114
ActDLM
ActNet
Filter
Update
TradDist
TradSeq
45
40
35
30
25
20
15
10
5
0
Figura 7.4: Número de Roteamentos (em Milhões) para Cada Configuração
no processamento das ofertas (i.e., de um servidor seqüencial para um servidor distribuı́do
e finalmente para o cacheamento ativo). A causa para o aumento dessas diferenças é que a
rede Fast-Ethernet não provê necessariamente uma ligação exclusiva para a comunicação
entre dois nós quaisquer. Assim, quanto maior o paralelismo no processamento das ofertas, maior a concorrência pelo acesso à rede, ocasionando demoras no envio das mensagens por parte da interface de rede. Este fenômeno não acontece na nossa simulação, pois
nela cada par de nós possui um canal exclusivo de comunicação, da mesma forma que
ocorre na rede Abilene.
Assim, podemos concluir, a partir desses resultados, que nos casos onde a interferência entre os diferentes enlaces de comunicação devida ao envio de mensagens entre
pares distintos de nós não é significativa, o simulador e a nossa implementação apresentam comportamentos bastante similares. Quando existe interferência entre os enlaces de
comunicação, os resultados da nossa simulação diferem um pouco (menos de 20%) da
implementação nas configurações avaliadas. Este fato nos permite afirmar que os resultados obtidos através do nosso simulador são uma boa indicação do desempenho esperado
para implementações reais das nossas diferentes configurações.
7.4.2 Resultados Base
A figura 7.4 mostra o número de roteamentos realizados pelas diferentes configurações
quando cada um dos 11 nós clientes gera 512K ofertas. A figura mostra os resultados
para o sistema tradicional com um servidor seqüencial (“TradSeq”), o sistema tradicional
com um servidor distribuı́do (“TradDist”), o sistema que usa roteadores ativos como filtros de ofertas com uma atualização a cada oferta válida (“Update”), o sistema que usa
roteadores ativos como filtros de ofertas com uma atualizaç ão a cada 200 ofertas inválidas
(“Filter”), o sistema que usa roteadores ativos para implementar um processamento distribuı́do (“ActNet”), e a nossa proposta (“ActDLM”).
Note que, como era esperado, o fato de usar um servidor com várias unidades de processamento (“TradDist”) não reduz significativamente o número de mensagens roteadas
com relação ao caso de um servidor seqüencial (“TradSeq”). As diferenças existentes
entre os sistemas “TradSeq” e “TradDist” (aproximadamente 6%) são produzidas exclu-
115
30
25
20
15
10
5
ActDLM
ActNet
Filter
Update
TradDist
TradSeq
0
Figura 7.5: Número de Ofertas Atendidas por Segundo (em Milhares) para Cada
Configuração
sivamente pela menor taxa de perda de mensagens do sistema distribuı́do. Esta menor
taxa de perda de mensagens, por sua vez, se deve à menor contenção gerada nos servidores. Por outro lado, o uso de roteadores ativos como filtros de ofertas ou para implementar
um processamento distribuı́do das ofertas reduz o número de roteamentos em relação aos
casos tradicionais, mas não tanto como a nossa proposta. Isto se deve às mensagens não
filtradas nos sistemas “Update” e “Filter”, ou às mensagens que chegam inicialmente ao
nó que não é o encarregado de processar essas ofertas no sistema “ActNet”. Além disso,
os sistemas que usam os roteadores ativos como filtros de ofertas requerem o envio de
atualizações por parte do servidor aos distintos roteadores, 30K atualizações no caso do
sistema “Filter” e 3,9M atualizações no caso do sistema “Update”.
É também importante notar que mesmo usando uma memória de rede, onde os dados compartilhados estão continuamente circulando entre os roteadores ativos, o número
de roteamentos necessários pela aplicação é muito menor na nossa proposta que nos outros sistemas. Este fato se deve a que somente 0,04% dos roteamentos correspondem ao
forwarding de pacotes da memória de rede, pois devido às distâncias consideradas na topologia da figura 7.3, o número de round-trips realizados pelos pacotes da memória de
rede é de apenas 5,6 por segundo durante todo o tempo simulado. Além disso, como todas as ofertas são tratadas no primeiro roteador ativo que encontram no seu caminho até
o servidor, o número de hops percorridos pelas mensagens é muito menor que nos outros
casos. Desta forma, a nossa proposta resulta em 66% menos roteamentos que nos casos
tradicionais e aproximadamente 40% menos roteamentos que nos casos onde são usados
exclusivamente roteadores ativos.
No que se refere ao desempenho dos sistemas, a figura 7.5 mostra o número de
ofertas processadas por unidade de tempo para os mesmos sistemas descritos anteriormente. Como pode-se observar, a utilização de um servidor distribuı́do, com 4 unidades
de processamento, aumenta notavelmente (273%) o desempenho do sistema com relação
a um servidor seqüencial. Os ganhos com o uso de filtros (independente da estratégia de
atualização) são menores, pois o servidor continua sendo um ponto de contenção devido
ao processamento das ofertas válidas (mais de 40% das ofertas não são filtradas nos sistemas “Update” e “Filter”). De qualquer forma, o ganho de desempenho dos sistemas
116
que usam o filtro de ofertas com atualizações a cada oferta válida ou a cada 200 ofertas
inválidas é de 125 e 129%, respectivamente, em relação ao desempenho de um sistema
tradicional com um servidor seqüencial.
O sistema que mais se aproxima do desempenho atingido pela nossa proposta é aquele
que usa os roteadores ativos como elementos de processamento distribuı́do. Note que
mesmo com um número considerável de roteamentos, o sistema “ActNet” apresenta um
ganho de desempenho de 398% em relação a um sistema tradicional com um servidor
seqüencial. Este ganho significativo se deve ao processamento distribuı́do que é realizado
pelos 4 roteadores ativos presentes na nossa topologia e à diminuição da contenção na
rede pelo envio de um número menor de pacotes entre os roteadores.
Vemos também que os ganhos de desempenho da nossa proposta em relação ao sistema “TradSeq” podem chegar a 436% com apenas quatro roteadores ativos. Com relação
aos sistemas que usam os roteadores ativos como filtros, os nossos ganhos são de 136 e
132% quando se utilizam atualizações a cada oferta válida ou a cada 200 ofertas inválidas,
respectivamente. Com relação aos sistemas “TradDist” e “ActNet” o nosso sistema somente apresenta ganhos de 42 e 7%, respectivamente. No entanto, como veremos na
próxima seção, estes sistemas sofrem tremendamente com desbalanceamentos de carga,
coisa que não acontece com o nosso sistema.
Em resumo, devido à memória de rede se apresentar como uma memória compartilhada baseada num modelo de consistência seqüencial, garantindo exclusão mútua entre
os diferentes acessos, e ao fato de usar a capacidade de processamento dos roteadores
ativos, esta proposta permite a implementação de aplicações distribuı́das facilmente escaláveis e com um poder de processamento maior.
7.4.3 Variação de Parâmetros
Alguns dos parâmetros mais importantes da seção anterior serão analisados a seguir. Entre
os principais temos o tipo de distribuição das ofertas geradas pelos clientes, a largura de
faixa dos enlaces entre os roteadores disponı́vel para a aplicação e o efeito da topologia
utilizada.
Distribuição Não-Uniforme das Ofertas. Quando os acessos às diferentes mercadorias
não produzem uma distribuição uniforme de carga nos diferentes elementos encarregados do processamento das ofertas, as configurações “TradDist” e “ActNet” sofrem de
degradações no seu desempenho. Especificamente, quando dois dos 4 elementos de processamento recebem 50% mais ofertas, o sistema “TradDist” degrada o seu desempenho
em aproximadamente 25%, enquanto que o sistema “ActNet” degrada o seu desempenho
em quase 15%. Assim, os ganhos da nossa proposta com relação aos sistemas “TradDist”
e “ActNet” passam de 42 e 7% a 89 e 25%, respectivamente.
Todos os outros sistemas, como era esperado, não alteram o seu desempenho, exceto
pela configuração “Filter”, onde o desbalanceamento de carga melhora o desempenho
do sistema em 7%. Este fenômeno acontece devido a uma melhor filtragem das ofertas,
117
2
OC-48
OC-3
2
3
2
Roteador
Cliente
Servidor
2
Rede A
Rede B
Figura 7.6: Exemplos de Topologias de Rede
1,2
1,0
0,8
Abilene
Network A
Network B
0,6
0,4
0,2
ActDLM
ActNet
Filter
Update
TradDist
TradSeq
0,0
Figura 7.7: Desempenho de Cada Configuração para Diferentes Topologias
o que, por sua vez, se deve à menor quantidade efetiva de mercadorias acessadas por
unidade de tempo.
Taxa de Transmissão dos Enlaces Entre os Roteadores. Mantendo a distribuição das
ofertas nos diferentes elementos de processamento uniforme, variamos a taxa de transmissão entre os roteadores principais de OC-3 (155 Mbits/s) até OC-192 (9,6 Gbits/s).
Nestes experimentos, podemos observar que o desempenho de todas as configurações
praticamente não depende desta taxa de transmissão, pois em nenhum dos casos houve
mudanças relevantes no número de ofertas processadas por unidade de tempo. Este fato
se deve a que o tempo gasto pela aplicação com o envio de mensagens através da fibra é pouco significativo mesmo quando essas distâncias são consideráveis (centenas de
kilômetros). Isto também demonstra que a contenção no servidor e nos roteadores é a
causa maior para a perda de desempenho neste tipo de aplicaç ões, pois até mesmo redes
relativamente lentas não compromentem o desempenho das aplicações nas configurações
consideradas.
Em particular, no caso da nossa proposta, as diferenças no n úmero de ofertas processadas por unidade de tempo chegam a 0,6% quando variamos a taxa de transmissão
entre os roteadores principais de OC-3 até OC-192. Um outro dado importante é que o
número de round-trips dos pacotes da memória de rede cai de 5,7 para 5,3 por segundo
(uma diferença de 7%) quando a taxa de transmissão é diminuı́da de OC-192 para OC-3.
Desta forma comprovamos que a nossa memória de rede é capaz de se adaptar a diferentes
larguras de faixa sem perdas consideráveis de desempenho.
Diferentes Topologias. A figura 7.6 mostra outras duas topologias arbitrárias utilizadas
118
para a avaliação das configurações estudadas. Nestas topologias, todas as distâncias são
100 kilômetros, exceto onde estão marcados, explicitamente, valores diferentes. Nesses
casos, o valor indica o número de centenas de kilômetros entre os roteadores correspondentes. Por sua vez, a figura 7.7 mostra o número de ofertas atendidas por segundo
pelas diferentes configurações, tanto na topologia base (figura 7.3) quanto nas duas outras topologias mostradas na figura 7.6. Os resultados estão normalizados com relação ao
desempenho atingido pela nossa proposta (“ActDSM”) para cada uma das topologias.
Como pode-se observar, a utilização de diferentes topologias na implementação das
configurações analisadas anteriormente produz pequenas variações com relação aos resultados de desempenho obtidos para a topologia base. As diferenças maiores aparecem para
os sistemas que usam os roteadores como filtros de ofertas, mas mesmo assim, elas não
ultrapassam 23%. Em termos gerais, a tendência apresentada na topologia base é mantida
em todas as outras topologias.
7.5 Trabalhos Relacionados
Existem três áreas de pesquisa que são bastante relacionadas com esta proposta: (a) o uso
de memórias de linhas de retardo no projeto de sistemas de computação, (b) a utilização
de redes ativas para a otimização de um determinado conjunto de aplicações e (c) o cacheamento de dados na Internet.
Como foi mencionado, as memórias de linha de retardo óticas foram implementadas com sucesso em sistemas de comunicação [46] e em computadores totalmente óticos
[42]. Trabalhos anteriores como NetCache, OWCache e NWCache são também outros
exemplos da utilização da grande largura de faixa das comunicações óticas no armazenamento de dados. Estes últimos trabalhos estão orientados, basicamente, à otimização do
desempenho de multiprocessadores escaláveis. No entanto, a presente proposta não precisa de um anel ótico dedicado nem de hardware ótico adicional para a implementação da
memória de rede. A nossa proposta usa a infraestrutura de rede que estará a disposição de
qualquer usuário, num futuro próximo, para a implementação da memória de rede.
A tecnologia de redes ativas, por sua vez, nasceu faz pouco tempo como uma alternativa aos vários problemas que foram identificados nas redes atuais. Assim, os seus
objetivos principais são acelerar a renovação da infraestrutura de rede existente e tornar
possı́vel o desenvolvimento de novas aplicações. Entre as aplicações que poderiam se beneficiar desta tecnologia estão a distribuição e fusão de informação [48, 47], a provisão de
qualidade de serviço [8], o gerenciamento de redes [67, 84], cacheamento de informação
[9, 47], computação móvel [35, 73], proteção de redes (e.g., firewalls) [73], entre outras.
No entanto, a proposta descrita neste capı́tulo funde o conceito das redes ativas
com a idéia de usar a própria rede para o armazenamento de informações compartilhadas. Desta forma, melhora-se ainda mais o desempenho de determinadas aplicações distribuı́das através de uma redução na contenção gerada nos servidores e na rede, e de
uma diminuição no tempo de resposta observado pelos clientes. Além disso, devido ao
119
esquema proposto para manter as informações circulando entre os roteadores ativos, a
nossa proposta se adapta automaticamente a mudanças na largura de faixa disponı́vel
para a aplicação. Este último fator é muito importante em sistemas como os assumidos,
onde várias aplicações e usuários compartilham diversos recursos.
Finalmente, existem muitos trabalhos relacionados com o cacheamento de dados na
Internet [13, 23, 37, 51], no entanto, a maioria deles trata somente do cacheamento de
arquivos (ou dados) estáticos [13, 19]. O cacheamento dos dados estáticos pode ser realizado pelos diferentes elementos de processamento envolvidos na aplicação (e.g., navegadores, agentes autônomos, servidores, etc.) [51] ou pelos proxies existentes na rede [1].
Propostas para usar roteadores ativos no cacheamento de dados estáticos foram também
feitas em [9, 47].
Nossa proposta se diferencia destes trabalhos uma vez que dados (ou arquivos)
dinâmicos são armazenados na própria rede. Além disso, a nossa proposta usa os roteadores ativos como elementos de processamento capazes de desenvolver tarefas úteis na
execução de aplicações distribuı́das, melhorando o desempenho e a escalabilidade de tais
aplicações.
7.6 Conclusões
Este capı́tulo apresentou a utilização da grande largura de faixa dos enlaces entre os roteadores para a construção de uma memória de rede que, junto com a tecnologia de redes
ativas, permitirá melhorar o desempenho de várias aplicações distribuı́das. Os resultados das nossas simulações mostraram que, para o caso do cacheamento de informações
dinâmicas, o ganho no número de transações realizadas por unidade de tempo pode chegar a 436% com relação a um sistema convencional, quando são usados 4 roteadores
ativos. Como também mostrou o nosso conjunto de simulações, estes ganhos são dificilmente atingı́veis através de propostas baseadas exclusivamente em redes ativas ou em
algum outro tipo de processamento distribuı́do. Com base nestes resultados, na tendência
de aumento da largura de faixa dos enlaces entre roteadores, e considerando que as redes
ativas são uma evolução natural da infraestrutura de redes atual, a nossa principal conclusão é que os desenvolvedores de aplicações distribuı́das devem levar em consideração
esta proposta como uma alternativa para atingir melhores desempenhos.
120
Capı́tulo 8
Conclusões e Trabalhos Futuros
O objetivo desta Tese foi explorar a capacidade das fibras óticas de atuar como memórias
de linha de retardo no projeto de sistemas de computação paralelos e distribuı́dos. Com
esse propósito, projetamos e avaliamos quatro redes óticas, três das quais são capazes de
armazenar informação na própria rede. Especificamente, foram desenvolvidas: a) OPTNET, uma rede de interconexão ótica para multiprocessadores, b) NetCache, uma rede
de interconexão que também atua como uma cache de terceiro nı́vel para os dados compartilhados de aplicações paralelas, c) OWCache, uma rede de interconexão ótica para
multiprocessadores que também atua como uma cache compartilhada para escritas ao
disco, e d) um sistema que permite o cacheamento ativo de dados dinâmicos acessados
por aplicações distribuı́das que executam sobre a Internet.
Através de simulações detalhadas de várias aplicações paralelas e distribuı́das executando sobre esses sistemas, demonstramos que os ganhos de desempenho obtidos pela
nossa proposta são plenamente satisfatórios. Em particular, NetCache supera facilmente
os outros sistemas baseados em redes óticas, especialmente quando as aplicações têm
uma grande quantidade de reutilização dos dados. Este fato se deve à redução efetiva do
tempo gasto com falhas nas caches locais. Da mesma forma, pudemos observar que, no
caso de OWCache, as caracterı́sticas mais importantes que contribuem para melhorar o
desempenho dos sistemas baseados nesta rede são os seus swap-outs mais rápidos e a sua
capacidade de se comportar como uma victim-cache. Tanto NetCache quanto OWCache
se baseiam em OPTNET, a qual apresenta uma excelente relação custo/desempenho.
Finalmente, para o caso do cacheamento ativo de dados dinâmicos na Internet, os
ganhos de desempenho são produzidos principalmente pela diminuição da contenção no
servidor e na rede, e pela redução do tempo de resposta observado pelos clientes. Estes
ganhos são dificilmente atingı́veis através de propostas baseadas exclusivamente em redes
ativas ou em algum outro tipo de processamento distribuı́do.
Em resumo, as principais vantagens de usar a própria rede de comunicação como uma
cache compartilhada são: a) o tamanho da memória de rede não precisa ser extremamente
grande, o que permite tempos de acesso relativamente baixos; b) a cache ótica permite
evitar acessos aos nı́veis mais baixos do sistema de memória, podendo diminuir o tráfego
de informação no restante da rede e nos barramentos dos nı́veis inferiores do sistema
121
de memória; c) a cache ótica pode ser compartilhada por todos os processadores sem
contenção; d) a cache ótica pode reduzir qualquer problema de acesso não uniforme aos
nı́veis mais baixos do sistema de memória; e e) a memória de rede garante exclusão mútua
no acesso a dados compartilhados sem necessidade de hardware ou software adicional.
Além disso, as outras caracterı́sticas das redes óticas (e.g., a sua grande largura de faixa
e a sua capacidade de disseminação) permitem otimizar os protocolos de coerência e
sincronização utilizados na maioria de sistemas paralelos e distribuı́dos.
Desta forma, o estudo realizado nesta Tese demonstra que a idéia de utilizar uma rede
ótica como meio de armazenamento, além de como meio de comunicação, pode melhorar
bastante o desempenho alcançado pelos sistemas de computação paralelos e distribuı́dos.
Futuramente, pretendemos melhorar a rede de interconexão proposta como cache de
terceiro nı́vel para os blocos de memória de multiprocessadores (NetCache), procurando
encontrar alternativas que permitam reduzir e/ou eliminar as suas desvantagens, especialmente com relação aos seus custos de implementação. Também pretendemos buscar
novas alternativas e sistemas para a utilização das redes óticas como meios de armazenamento de dados, procurando oferecer uma relação custo/desempenho satisfatória sob as
mais diversas variações arquiteturais. Uma possı́vel alternativa seria o uso dessas idéias
na implementação de servidores de rede escaláveis ou algum outro sistema de computação
moderno.
Um outro trabalho bastante interessante para dar continuidade à nossa pesquisa é a
exploração de técnicas de tolerância à latência baseadas na memória de rede. Devido
a não consumir largura de faixa adicional, técnicas de tolerância à latencia, tais como
o prefetching de dados, apresentam um alto potencial para melhorar o desempenho de
multiprocessadores e sistemas de computação paralela.
Assim também, estamos interessados em continuar a nossa pesquisa com a aplicação
da memória de rede dentro da Internet. Devido a não requerer hardware adicional e
ser uma das áreas com maior crescimento na atualidade, a otimização de aplicações distribuı́das executando sobre a Internet tem, sem dúvida, um grande interesse para a comunidade cientı́fica. Nesta direção, os nossos próximos passos serão a avaliação da memória
de rede numa rede de grande porte e a utilização da memória de rede para o cacheamento
da informação, assim como para a sincronização, de outros sistemas comerciais.
122
Bibliografia
[1] Abrams, M., Standridge, C. R., Abdulla, G., Williams, S., Fox, E. A. “Caching
Proxies: Limitations and Potentials”. In Proceedings of 4th International World
Wide Web Conference, Boston, MA, December 1995.
[2] Agarwal, A., Bianchini, R., Chaiken, D., Johnson, K., Kranz, D., Kubiatowicz, J.,
Lim, B.-H., Mackenzie, K., Yeung, D. “The MIT Alewife Machine: Architecture
and Performance”. In Proceedings of the 22nd Annual International Symposium on
Computer Architecture, pp. 2–13, Santa Margherita Ligure, Italy, June 1995.
[3] Alverson, R., Callahan, D., Cummings, D., Koblenz, B., Porterfield, A., Smith, B.
“The Tera Computer System”. In Proceedings of the International Conference on
Supercomputing, pp. 1–16, June 1990.
[4] ANSI, . Standard X3T12 (FDDI). Technical report, American National Standards
Institute, May 1997.
[5] ANSI, . Standard X3T11 (Fibre Channel). Technical report, American National
Standards Institute, April 1998.
[6] Bailey, D. H., Barszcz, E., Barton, J., Browning, D., Carter, R., Dagum, L., Fatoohi,
R., Fineberg, S., Frederickson, P., Lasinski, T., Schreiber, R., Simon, H., Venkatakrishnan, V., Weeratunga, S. The NAS Parallel Benchmarks. Technical Report
RNR-94-007, NASA Ames Research Center, March 1994.
[7] Bennett, J. K., Fletcher, K. E., Speight, W. E. “The Performance Value of Shared
Network Caches in Clustered Multiprocessor Workstations”. In Proceedings of the
16th International Conference on Distributed Computing Systems, May 1996.
[8] Bhattacharjee, S., Calvert, K. L., Zegura, E. W. “An Architecture for Active Networking”. In High Performance Networking 97, April 1997.
[9] Bhattacharjee, S., Calvert, K. L., Zegura, E. W. “Self-organizing Wide-area Network
Caches”. In Proceedings of IEEE INFOCOM 98, v. 2, pp. 600–608, San Francisco,
CA, April 1998.
[10] Brackett, C. A. “Dense Wavelength Division Networks: Principles and Applications”. IEEE Journal on Selected Areas in Communications, v. 8, n. 6, pp. 948–964,
August 1990.
123
[11] Calvert, K. L., Bhattacharjee, S., Zegura, E. W., Sterbenz, J. “Directions in Active
Networks”. IEEE Communications – Special Issue on Programmable Networks,
v. 36, n. 10, pp. 72–78, October 1998.
[12] Calvert, K. L., Doar, M., Zegura, E. W. “Modeling Internet Topology”. IEEE
Communications, v. 35, n. 6, pp. 160–163, June 1997.
[13] Cao, P., Irani, S. “Cost-Aware WWW Proxy Caching Algorithms”. In Proceedings
of USENIX Symposium on Internet Technologies and Systems, pp. 193–206, Monterey, CA, December 1997.
[14] Carrera, E. V., Bianchini, R. “OPTNET: A Cost-Effective Optical Network for Multiprocessors”. In Proceedings of the International Conference on Supercomputing,
pp. 401–408, Melbourne, Australia, July 1998.
[15] Carrera, E. V., Bianchini, R. “Disk Write Caching with an Optical Network”. In
Proceedings of the VI International Conference on Parallel Interconnects, pp. 452–
460, Anchorage, AK, October 1999. IEEE Computer Society Press.
[16] Carrera, E. V., Bianchini, R. “NetCache: A Network/Cache Hybrid for Multiprocessors”. In Proceedings of the III Workshop on Optics and Computer Science, pp.
859–872, San Juan, Puerto Rico, April 1999. Springer-Verlag.
[17] Carrera, E. V., Bianchini, R. “NWCache: Optimizing Disk Accesses via an Optical Network/Write cache Hybrid”. In Proceedings of the III Workshop on Optics
and Computer Science, pp. 845–858, San Juan, Puerto Rico, April 1999. SpringerVerlag.
[18] Carrera, E. V., Bianchini, R. “Evaluating Cluster-Based Network Servers”. In Proceedings of the 9th IEEE International Symposium on High Performance Distributed
Computing, pp. 63–70, Pittsburgh, PA, August 2000.
[19] Chankhunthod, A., Danzig, P., Neerdaels, C., Schwartz, M. F., Worrell, K. J. “A Hierarchical Internet Object Cache”. In Proceedings of the USENIX Annual Technical
Conference, pp. 153–163, San Diego, CA, January 1996.
[20] Culler, D., Dusseau, A., Goldstein, S. C., Krishnamurthy, A., Lumetta, S., von Eicken, T., Yelick, K. “Parallel Programming in Split-C”. In Proceedings of Supercomputing 93, pp. 262–273, November 1993.
[21] Dowd, P. W., Chu, J. “Photonic Architectures for Distributed Shared Memory Multiprocessors”. In Proceedings of the 1st International Conference on Massively Parallel Processing using Optical Interconnections, pp. 151–161, Cancun, Mexico, April
1994. IEEE Computer Society Press.
124
[22] Erlichson, A., Nayfeh, B. A., Singh, J. P., Olukotun, K. “The Benefits of Clustering
in Shared Address Space Multiprocessors: An Applications-Driven Investigation”.
In Proceedings of the 1st International Conference on Massively Parallel Processing using Optical Interconnections, Cancun, Mexico, April 1994. IEEE Computer
Society Press.
[23] Fan, L., Cao, P., Almeida, J., Broder, A. “Summary Cache: A Scalable Wide-Area
Web Cache Sharing Protocol”. In Proceedings of ACM SIGCOMM 98, pp. 254–265,
1998.
[24] Farrens, M., Tyson, G., Pleszkun, A. R. “A Study of Single Chip Processor/Cache
Organizations for Large Numbers of Transistors”. In Proceedings of the 21st Annual International Symposium on Computer Architecture, pp. 338–347, Chicago, IL,
April 1994.
[25] Felten, E., Zahorjan, J. Issues in the Implementation of a Remote Memory Paging
System. Technical Report 91-03-09, Department of Computer Science and Engineering, University of Washington, Seattle, WA, March 1991.
[26] Foundry Networks, . High Performance LAN Alternatives. Technical Report
http://www.foundrynet.com/wpvol1.html, Foundry Networks, November 1998.
[27] Gharachorloo, K., Lenoski, D., Laudon, J., Gibbons, P., Gupta, A., Hennessy, J. L.
“Memory Consistency and Event Ordering in Scalable Shared-Memory Multiprocessors”. In Proceedings of the 17th Annual International Symposium on Computer
Architecture, pp. 15–26, Seattle, WA, May 1990.
[28] Ghose, K., Horsell, R. K., Singhvi, N. “Hybrid Multiprocessing in OPTIMUL:
A Multiprocessor for Distributed and Shared Memory Multiprocessing with WDM
Optical Fiber Interconnections”. In Proceedings of the International Conference on
Parallel Processing, pp. 196–199, August 1994.
[29] Gigabit Ethernet Alliance, . Gigabit Ethernet – Overview. Technical Report http://www.gigabit-ethernet.org/technology/whitepapers/, Gigabit Ethernet Alliance, May 1999.
[30] Glance, B. S., Wiesenfeld, J. M., Koren, U., Wilson, R. W. “New Advances on Optical Components Needed for FDM Optical Networks”. IEEE Photonics Technical
Letters, v. 5, n. 10, pp. 1222–1224, October 1993.
[31] Goodman, M. S., Kobrinski, H., Vecchi, M. P., Bulley, R. M., Gimlett, J. L. “The
LAMBDANET Multiwavelength Network: Architecture, Applications, and Demonstrations”. IEEE Journal on Selected Areas in Communications, v. 8, n. 6, pp.
995–1004, August 1990.
125
[32] Green, P. E. “Optical Networking Update”. IEEE Journal on Selected Areas in
Communications, v. 14, n. 5, pp. 764–779, June 1996.
[33] Ha, J.-H., Pinkston, T. M. “SPEED DMON: Cache Coherence on an Optical Multichannel Interconnect Architecture”. Journal of Parallel and Distributed Computing,
v. 41, n. 1, pp. 78–91, 1997.
[34] Hall, E., Kravitz, J., Ramaswami, R., Halvorson, M., Tenbrink, S., Thomsen, R.
“The Rainbow-II Gigabit Optical Network”. IEEE Journal on Selected Areas in
Communications, v. 14, n. 5, pp. 814–823, June 1996.
[35] Hartman, J., Manber, U., Peterson, L., Proebsting, T. Liquid Software: A New
Paradigm for Networked Systems. Technical Report 96-11, Department of Computer
Science, University of Arizona, Tucson, AZ, June 1996.
[36] Heuring, V. P., Jordan, H. F., Pratt, J. P. “Bit-serial Architecture for Optical Computing”. Applied Optics, v. 31, n. 17, pp. 3213–3224, June 1992.
[37] Holmedahl, V., Smith, B., Yang, T. “Cooperative Caching of Dynamic Content on a
Distributed Web Server”. In Proceedings of the 7th IEEE International Symposium
on High Performance Distributed Computing, pp. 243–250, July 1998.
[38] Hu, Y., Yang, Q. “DCD – Disk Caching Disk: A New Approach for Boosting
I/O Performance”. In Proceedings of the 23rd Annual International Symposium on
Computer Architecture, pp. 169–178, Philadelphia, PA, May 1996.
[39] Huang, A., Whitaker, N., Avramopoulos, H., French, P., Houh, H., Chuang, I. “A
System’s Perspective of the Sagnac Fiber Logic Gates and Their Possible Applications”. Applied Optics, v. 33, n. 26, pp. 6254, August 1994.
[40] Huang, C., McKinley, P. K. “Communication Issues in Parallel Computing Across
ATM Networks”. IEEE Parallel and Distributed Technology, v. 2, n. 4, pp. 73–86,
1994.
[41] Huang, Y., McKinley, P. K. “Efficient Collective Operations with ATM Network
Interface Support”. In Proceedings of the International Conference on Parallel Processing, v. 1, pp. 34–43, Bloomingdale, IL, August 1996.
[42] Jordan, H. F., Heuring, V. P., Feuerstein, R. J. “Optoelectronic Time-of-Flight Design and the Demonstration of an All-Optical, Stored Program, Digital Computer”.
Proceedings of IEEE – Special Issue on Optical Computing, v. 82, n. 11, pp. 1678–
1689, November 1994.
[43] Kasovsky, L. G., Fong, T. K., Hofmeister, T. “Optical Local Area Network Technologies”. IEEE Communications, v. 32, n. 12, pp. 50–54, December 1994.
126
[44] Kimbrel, T., Tomkins, A., Patterson, R. H., Bershad, B., Cao, P., Felten, E., Gibson, G. A., Karlin, A. R., Li, K. “A Trace-Driven Comparison of Algorithms for
Parallel Prefetching and Caching”. In Proceedings of the 2nd USENIX Symposium
on Operating Systems Design and Implementation, pp. 19–34, Seattle, WA, October
1996.
[45] Kotz, D., Ellis, C. “Practical Prefetching Techniques for Multiprocessor File Systems”. Journal of Distributed and Parallel Databases, v. 1, n. 1, pp. 33–51, January
1993.
[46] Langenhorst, R., Eiselt, M., Pieper, W., G. Groβkopf, , Ludwig, R., L. Küller, ,
Dietrich, E., Weber, H. G. “Fiber Loop Optical Buffer”. Journal of Lightwave
Technology, v. 14, n. 3, pp. 324–335, March 1996.
[47] Legedza, U., Wetherall, D. J., Guttag, J. “Improving The Performance of Distributed
Applications Using Active Networks”. In Proceedings of IEEE INFOCOM 98, San
Francisco, CA, April 1998.
[48] Lehman, L.-W., Garland, S. J., Tennenhouse, D. L. “Active Reliable Multicast”. In
Proceedings of IEEE INFOCOM 98, San Francisco, CA, April 1998.
[49] Lenoski, D., Laudon, J., Joe, T., Nakahira, D., Stevens, L., Gupta, A., Hennessy, J.
“The DASH Prototype: Logic Overhead and Performance”. IEEE Transactions on
Parallel and Distributed Systems, v. 4, n. 1, pp. 41–61, January 1993.
[50] Love, C. E., Jordan, H. F. “SPOC – A Stored Program Optical Computer”. IEEE
Potentials, v. 13, n. 4, pp. 11–15, November 1994.
[51] Markatos, E. P. “Main Memory Caching of Web Documents”. In Proceedings of 5th
International World Wide Web Conference, pp. 893–906, Paris, France, May 1996.
[52] McKusick, K., Joy, W., Leffler, S., Fabry, R. “A Fast File System for UNIX”. ACM
Transactions on Computer Systems, v. 2, n. 3, pp. 181–197, August 1984.
[53] Miki, T. “The Potencial of Photonic Networks”. IEEE Communications, v. 32, n. 12,
pp. 23–27, December 1994.
[54] Mori, S., Saito, H., Goshima, M., Yanagihara, M., Tanaka, T., Fraser, D., Joe, K.,
Nitta, H., Tomita, S. “A Distributed Shared Memory Multiprocessor: ASURA –
Memory and Cache Architectures”. In Proceedings of Supercomputing 93, pp. 740–
749, 1993.
[55] Mowry, T. C., Demke, A. K., Krieger, O. “Automatic Compiler-Inserted I/O Prefetching for Out-Of-Core Applications”. In Proceedings of the 2nd USENIX Symposium on Operating Systems Design and Implementation, pp. 3–17, Seattle, WA,
October 1996.
127
[56] Mukherjee, B. “WDM-Based Local Lightware Networks – Part I: Single-hop Systems”. IEEE Network, v. 6, n. 3, pp. 12–27, May 1992.
[57] Mukherjee, B. “WDM-Based Local Lightware Networks – Part II: Multihop Systems”. IEEE Network, v. 6, n. 4, pp. 20–32, July 1992.
[58] Nayfeh, B. A., Olukotun, K. “Exploring the Design Space for a Shared-Cache Multiprocessor”. In Proceedings of the 21st Annual International Symposium on Computer Architecture, pp. 166–175, Chicago, IL, April 1994.
[59] Nowatzyk, A. G., Prucnal, P. R. “Are Crossbars Really Dead? The Case for Optical
Multiprocessor Interconnect Systems”. In Proceedings of the 22nd Annual International Symposium on Computer Architecture, pp. 106–115, Santa Margherita Ligure,
Italy, June 1995.
[60] Partridge, C. Gigabit Networking. Addison-Wesley Publishers, Reading, MA, 2nd
ed., April 1995.
[61] Pratt, J. P., Heuring, V. P. “Delay Synchronization in Time-of-Flight Optical Systems”. Applied Optics, v. 31, n. 14, pp. 2430–2437, May 1992.
[62] Reinhardt, S. K., Larus, J. R., Wood, D. A. “Tempest and Typhoon: User-Level
Shared Memory”. In Proceedings of the 21st Annual International Symposium on
Computer Architecture, pp. 325–337, Chicago, IL, April 1994.
[63] Rosenblum, M., Ousterhout, J. K. “The Design and Implementation of a LogStructured File System”. ACM Transactions on Computer Systems, v. 10, n. 2, pp.
26–52, February 1992.
[64] Ruemmler, C., Wilkes, J. “UNIX Disk Access Patterns”. In Proceedings of the
USENIX Annual Technical Conference, pp. 405–420, San Diego, CA, January 1993.
[65] Saltzer, J. H., Reed, D. P., Clark, D. D. “End-to-End Arguments in System Design”.
ACM Transactions on Computer Systems, v. 2, n. 4, pp. 277–288, November 1984.
[66] Sarrazin, D. B., Jordan, H. F., Heuring, V. P. “Fiber Optic Delay Line Memory”.
Applied Optics, v. 29, n. 5, pp. 627–637, February 1990.
[67] Schwartz, B., Jackson, A. W., Strayer, W. T., Zhou, W., Rockwell, D., Partridge, C.
“Smart Packets for Active Networks”. In OpenArch 99, March 1999.
[68] Schwartz, D. B., Chun, C. K. Y., Grula, J., Planer, S., Raskin, G., Shook, S. “OPTOBUS I: Performance of a 4 Gb/s Optical Interconnect”. In Proceedings of the
3rd International Conference on Massively Parallel Processing using Optical Interconnections, pp. 256–263, Maui, Hawaii, October 1996. IEEE Computer Society
Press.
128
[69] Sokoloff, J. P., Prucnal, P. R., Glesk, I., Kane, M. “A Terahertz Optical Asymmetric
Demultiplexer”. IEEE Photonics Technology Letters, v. 5, n. 7, pp. 106–117, July
1993.
[70] Spirit, D. M., Ellis, A. D., Barnsley, P. E. “Optical Time Division Multiplexing:
Systems and Networks”. IEEE Communications, v. 32, n. 12, pp. 56–62, December
1994.
[71] Stodolsky, D., Holland, M., Courtright II, W., Gibson, G. “Parity Logging Disk
Arrays”. ACM Transactions on Computer Systems, v. 12, n. 3, pp. 206–235, August
1994.
[72] Tennenhouse, D. L., Smith, J. M., Sincoskie, W. D., Wetherall, D. J., Minden, G. J.
“A Survey of Active Network Research”. IEEE Communications, v. 35, n. 1, pp.
80–86, January 1997.
[73] Tennenhouse, D. L., Wetherall, D. J. “Towards an Active Network Architecture”.
ACM Computer Communication Review, v. 26, n. 2, pp. 5–17, April 1996.
[74] Thekkath, C. A., Levy, H. M., Lazowska, E. D. Efficient Support for Multicomputing
on ATM Networks. Technical Report 93-04-03, Department of Computer Science
and Engineering, University of Washington, Seattle, WA, April 1993.
[75] UCAID, .
Abilene:
Project Summary.
http://www.ucaid.edu/abilene/html/project summary.html,
tion for Advanced Internet Development, March 1999.
Technical Report
University Corpora-
[76] Veenstra, J. E., Fowler, R. J. “MINT: A Front End for Efficient Simulation of SharedMemory Multiprocessors”. In Proceedings of the 2nd International Workshop on
Modeling, Analysis and Simulation of Computer and Telecommunication Systems,
pp. 201–207, Durham, NC, January 1994.
[77] von Eicken, T., Basu, A., Buch, V. “Low-Latency Communication Over ATM
Networks Using Active Messages”. IEEE Micro, v. 15, n. 1, pp. 46–53, February
1995.
[78] von Eicken, T., Basu, A., Buch, V., Vogels, W. “U-Net: A User-Level Network
Interface for Parallel and Distributed Computing”. In Proceedings of the 15th ACM
Symposium on Operating Systems Principles, pp. 40–53, Copper Mountain, Colorado, December 1995.
[79] von Eicken, T., Culler, D. E., Goldstein, S. C., Schauser, K. E. “Active Messages:
A Mechanism for Integrated Communication and Computation”. In Proceedings of
the 19th Annual International Symposium on Computer Architecture, pp. 256–266,
Gold Coast, Australia, May 1992.
129
[80] Wetherall, D. J., Legedza, U., Guttag, J. “Introducing New Internet Services: Why
and How”. IEEE Network – Special Issue on Active and Controllable Networks,
v. 12, n. 3, pp. 12–19, July 1998.
[81] Womble, D. E., Greenberg, D. S., Riesen, R. E., Wheat, S. R. “Out of Core, Out
of Mind: Practical Parallel I/O”. In Proceedings of the Scalable Parallel Libraries
Conference, pp. 10–16, Mississippi State University, October 1993.
[82] Woo, S. C., Ohara, M., Torrie, E., Singh, J. P., Gupta, A. “The SPLASH-2 Programs: Characterization and Methodological Considerations”. In Proceedings of
the 22nd Annual International Symposium on Computer Architecture, pp. 24–36,
Santa Margherita Ligure, Italy, May 1995.
[83] Wurman, P. R., Wellman, M. P., Walsh, W. E. “The Michigan Internet AuctionBot:
A Configurable Auction Server for Human and Software Agents”. In Proceedings
of the 2nd International Conference on Autonomous Agents, pp. 301–308, Minneapolis, MN, May 1998.
[84] Yemini, Y., da Silva, S. “Towards Programable Networks”. In IFIP/IEEE International Workshop on Distributed Systems: Operations and Management, L’Aquila,
Italy, October 1996.
130
Download

EXPLORANDO REDES ´OTICAS COMO MEM ´ORIA CACHE