As redes agora são mais rápidas que os discos?

126

Esta é uma pergunta de design de software

Eu costumava trabalhar na seguinte regra para velocidade

cache memory > memory > disk > network

Com cada etapa sendo 5 a 10 vezes a etapa anterior (por exemplo, a memória cache é 10 vezes mais rápida que a memória principal).

Agora, parece que a Ethernet gigabit tem latência menor que o disco local. Portanto, talvez as operações de leitura de um grande banco de dados remoto na memória sejam mais rápidas que as leituras de disco local. Isso parece heresia para um velho temporizador como eu. (Passei algum tempo construindo um cache local no disco para evitar a necessidade de fazer viagens de ida e volta à rede - daí a minha pergunta)

Alguém tem alguma experiência / números / aconselhamento nesta área?

E sim, eu sei que a única maneira real de descobrir é construir e medir, mas eu estava pensando sobre a regra geral.

editar :

Estes são os dados interessantes da resposta superior:

  • Ida e volta no mesmo datacenter 500.000 ns

  • Procura de disco 10.000.000 ns

Isso é um choque para mim; meu modelo mental é que uma ida e volta da rede é inerentemente lenta. E não é - é 10x mais rápido que um disco 'ida e volta'.

Jeff attwood publicou este bom blog no tópico http://blog.codinghorror.com/the-infinite-space-between-words/

pm100
fonte
11
Às vezes sim, às vezes não. Qual rede? Que disco?
John Gardeniers
11
Os outros dados interessantes da resposta principal: leitura sequencial de 1 MB da rede versus disco. Suspeito que o tempo de "ida e volta" omita qualquer transferência de dados significativa.
Paul
Paul: Depende do seu MTU, tenho certeza. (1MB MTU? Impressionante!) #
1933 Matt Simmons
Eu adoraria ver algumas dessas respostas reconsideradas à luz do equipamento de rede de 10 Gbps estar amplamente disponível.
pintos
rede gigabit vs ataque 5?
SoilSciGuy

Respostas:

137

Aqui estão alguns números que você provavelmente está procurando, conforme citado por Jeff Dean, um companheiro do Google:

Números que todos devem saber

L1 cache reference                             0.5 ns
Branch mispredict                              5 ns
L2 cache reference                             7 ns
Mutex lock/unlock                            100 ns (25)
Main memory reference                        100 ns
Compress 1K bytes with Zippy              10,000 ns (3,000)
Send 2K bytes over 1 Gbps network         20,000 ns
Read 1 MB sequentially from memory       250,000 ns
Round trip within same datacenter        500,000 ns
Disk seek                             10,000,000 ns
Read 1 MB sequentially from network   10,000,000 ns
Read 1 MB sequentially from disk      30,000,000 ns (20,000,000)
Send packet CA->Netherlands->CA      150,000,000 ns

É da sua apresentação intitulada Designs, Lessons and Advice from Building Large Distributed Systems e você pode obtê-lo aqui:

A palestra foi proferida no Large Distributed Systems and Middleware (LADIS) 2009 .

Outras informações


Dizem que o gcc -O4 envia seu código por e-mail para Jeff Dean para reescrever.


David d C e Freitas
fonte
+1 Muito interessante!
9dan 22/02/11
11
Algumas apresentações têm valores diferentes indicados entre parênteses. Eu suponho que o do suporte estava incorreto e ele atualizou os valores.
David d C e Freitas
11
Essa é toda a era pré-SSD? veja aqui para mais números atualizados.
Matt
Na verdade, usei esses números para criar uma apresentação mostrando por que as unidades SSD se pagam , para convencer nosso gerente de escritório de que sim, precisávamos de máquinas mais rápidas para trabalhar. Incluiu os números das informações técnicas, mas o direcionou para o gerenciamento não técnico, tanto quanto possível.
Brichins #
19

Existem muitas variáveis ​​quando se trata de rede x disco, mas, em geral, o disco é mais rápido.

Os barramentos SATA 3.0 e SAS têm 6 Gbps, contra uma rede de 1 Gbps menos sobrecarga de protocolo. Com o RAID-10 15k SAS, a rede vai parecer lenta. Além disso, você possui cache de disco e também a possibilidade de discos rígidos de estado sólido, que, dependendo do cenário, também podem aumentar a velocidade. O acesso aleatório a seqüencial de dados desempenha um fator, assim como o tamanho do bloco no qual os dados estão sendo transferidos. Tudo isso depende do aplicativo que está sendo usado para acessar o disco.

Agora, eu nem toquei no fato de que o que você está transportando pela rede está indo ou vindo do disco de qualquer maneira ... então ....... novamente, o disco é mais rápido.

JakeRobinson
fonte
11
Pontos por mencionar o RAID, que fornece leituras paralelas, algo que é improvável que você entre em uma rede em breve. Obviamente, se estamos falando de discos rígidos de laptops locais, a combinação de SAN e rede rápidas pode muito bem ser mais rápida. Especialmente com os SSDs nessa SAN.
Michael Dillon
10
As redes são inerentemente paralelizáveis ​​- do que você está falando? É incrivelmente trivial ler de vários sistemas em uma rede agregada; esse é o ponto principal por trás de sistemas como Hadoop e MPI, sem mencionar o óbvio BitTorrent.
Jgoldschrafe
2
Com o SONET / SDH, você pode ter 38Gbps ainda mais rápido que o SAS. E agregação de rede pode ser feito com algo como en.wikipedia.org/wiki/Link_aggregation
Mircea Vutcovici
10
@ Jake Ao falar de 6 Gbps, você pode fazer uma distinção clara entre a largura de banda da interface e a taxa na qual um disco pode realmente fornecer dados.
NPE 22/02
4
Eu disse na minha pergunta que eu estava falando de um remoto no banco de dados de memória em comparação com um local no cache de disco
PM100
10

Bem, isso depende se o recurso de rede tem os dados que você está solicitando prontamente disponíveis (na memória ou similares) ou se, por sua vez, apenas os leria a partir de um disco.

Em qualquer caso, a taxa de transferência pode ser maior em alguns casos, mas acredito que a latência será maior.


fonte
Você quer dizer que o tempo de busca no disco é maior que uma solicitação de 10 Gbit / s?
Mircea Vutcovici
11
@Mircea, ele quer dizer que a rede de 10Gbit precisa obter seus dados de algum lugar, por isso será limitada à latência dessa fonte, mais a latência da rede.
22711 Chris S
O armazenamento pode ser um disco RAM. Veja: en.wikipedia.org/wiki/Solid-state_drive#DRAM-based
Mircea Vutcovici
2

IMX o disco ainda é mais rápido. A taxa de transferência teórica da rede é alta, mas na prática você não se aproxima disso.

Há cerca de dois anos, tive problemas no disco rígido do meu laptop e o DMA saiu. Isso tornou o disco rígido muito mais lento e, em particular, mais lento que a rede. Mas quando mudei para outro computador, voltei ao meu estado original de disco rígido mais rápido que a Internet.

Charles
fonte
2

Minha experiência com redes de gigabit é que, dado o servidor certo, você pode superar o desempenho local em termos de taxa de transferência e latência. Consulte Testes de rede: estamos obtendo desempenho de gigabit?

Para todos os fins práticos, eu recomendaria tratar a rede e o armazenamento local como equivalentes e usar apenas caches de memória.

A advertência padrão, como você mencionou, é verdadeira, pois não há regras gerais; e que, na maioria das vezes, deve-se trabalhar com servidores bem configurados e usar métricas para avaliar o melhor método de transferência de dados.

Se você estiver usando uma máquina low-end com um disco rígido lento, certamente será mais rápido usar uma conexão de rede gigabit com um servidor com uma matriz de armazenamento rápida.

Da mesma forma, se você estiver trabalhando com duas máquinas de hardware quase idêntico, a latência e a sobrecarga da rede tornariam o armazenamento local mais rápido; é senso comum realmente.

Richard Harrison
fonte
2

Depende. Se a sua E / S for principalmente de acesso aleatório, sua taxa de transferência plana provavelmente não será tão boa em comparação com a largura de banda da rede que poderia estar disponível. No entanto, a maior parte do tráfego de rede é gerada por processos que envolvem E / S. Se o conjunto de trabalho de qualquer processo que esteja gerando o tráfego da rede se encaixar no cache, ele não será restringido pela largura de banda do disco. Se debitar o cache, o disco se tornará um gargalo.

Eu trabalho em sistemas de data warehouse, e a consulta DW canônica é uma varredura de tabela. Se sua consulta atingir mais de alguns por cento das linhas na tabela de fatos (ou partição), uma varredura de tabela ou partição usando E / S sequencial será mais eficiente do que um plano de consulta de acesso aleatório usando pesquisas e pesquisas de índice.

O armazenamento em rede (ou seja, SANs) tende a não ter um bom desempenho nas cargas de trabalho de streaming, a menos que esteja ajustado adequadamente. Se a SAN estiver sendo usada para um ambiente de consolidação de uso geral, ela quase certamente será ajustada de maneira sub-ideal para uma carga pontiaguda de streaming, como um data warehouse. Vi um white paper de fornecedor sugerir que você precisa de cerca de 3x o número de discos para obter a mesma taxa de transferência em uma SAN que não está ajustada para E / S de fluxo contínuo e para uma que seja.

Minha experiência coincide com isso. De fato, nunca implantei um data warehouse em um ambiente de consolidação em que não consegui executar o mesmo processo ETL significativamente mais rápido no meu PC de mesa. Também tive representantes de vendas de um grande fornecedor de equipamentos SAN dizerem que muitos de seus clientes usam armazenamento de conexão direta para o sistema DW porque as SANs não são rápidas o suficiente.

O armazenamento em rede é pelo menos uma ordem de magnitude mais cara por IOPS do que o armazenamento de conexão direta para cargas de trabalho de acesso aleatório e mais próximo de duas ordens de magnitude mais caras para streaming.

ConcernedOfTunbridgeWells
fonte
1

A experiência que tenho com isso é que, quando você está em uma conexão de 1 Gbit e tenta baixar um arquivo, seu disco rígido é geralmente o gargalo. Uma coisa que você deve ter em mente é que você deve configurar uma conexão primeiro, o que também leva tempo. Portanto, o envio de grandes partes da rede de dados pode ser realmente mais rápido que o disco.

teuneboon
fonte
11
A menos que o disco também seja o gargalo do outro lado da conexão de rede ...
@ Arggote: Verdade, mas se o software do servidor foi gravado corretamente, ele armazenará em buffer a memória antes de gravar no disco.
Amphetamachine
1

Sim, em geral, as redes agora ficam mais rápidas que os discos rígidos, mas isso pode mudar com o tempo.

Penso, logo existo

Quando um aplicativo está sendo executado, significa que a máquina host está funcionando, enquanto o trabalho na rede precisa de um protocolo comum, verificando a disponibilidade dos pares, a segurança do canal ... e se os pares usam plataformas diferentes, é mais difícil conseguir o que você pode fazer em um computador. máquina única.

Prefiro olhar para isso em termos de trade-offs do que quem é o mais forte ...

Xaqron
fonte
4
Duvido, portanto posso estar.
John Gardeniers
1

Você precisa descrever um caso de uso exato para essa comparação. Os discos rígidos têm tempo de busca + taxa de transferência e cache. As redes têm latência, taxa de transferência e sobrecarga de protocolo ...

Eu acho que a sua memória cache original> memória> disco> rede ainda permanece verdadeira em geral embora

Zepplock
fonte
0

O disco está conectado à CPU via barramento SCSI, SAS ou IDE. Qual é uma rede interna executando um protocolo específico - SCSI ou ATAPI. A Ethernet foi projetada para funcionar em distâncias maiores e pode ser muito mais lenta que o SAS / SCSI / IDE. Então, qual é mais rápido, depende de quais tecnologias você está comparando. Se você comparar um HDD de laptop de 20 anos com um armazenamento de 10 Gbps de RAM, o vencedor será sempre a rede. E quando você compra um armazenamento, precisa compará-lo com o preço e a capacidade de gerenciamento.

Mircea Vutcovici
fonte
0

Bem, há o Light Peak, que visa a velocidade de rede de 100 GBps, que está chegando perto da velocidade da RAM. Obviamente, a rede só pode fornecer dados tão rapidamente quanto o remetente pode gerar os dados, ou seja, se o remetente estiver lendo os dados de um disco rígido, o receptor somente obterá os dados na mesma velocidade que o disco lido, mesmo com uma rede super rápida.

Skizz
fonte
0

Uma coisa a ter em mente é que isso depende da rede. Digamos, por exemplo, que você é responsável pelo desempenho em um site. Obviamente, este site está conectado a um servidor de banco de dados em uma rede local e também a usuários da Internet, que também são um tipo de rede.

Em muitos casos, um link dedicado pode ser configurado entre o servidor Web e o servidor de banco de dados via IPs estáticos e um cabo cruzado ou automdx para manter a latência baixa e fornecer um link dedicado para o tráfego, pois você deseja que seja muito rápido. O servidor de banco de dados realiza todos os tipos de trabalho para manter o máximo possível do banco de dados na memória e, em muitos casos, geralmente é bem-sucedido em todo o conteúdo, além de alguns índices. As consultas nesse banco de dados serão tão rápidas ou até mais rápidas que as consultas em disco.

Por outro lado, certas tecnologias da web (asp.net webstates viewstate, eu estou olhando para você) gostam de enviar muitas informações de e para o navegador da web cliente como um cache (das sortes). Se esta for uma conexão local (LAN e em defesa asp.net do webform isso é verdade maior parte do tempo) não é de todo ruim, mas na internet pública isso pode absolutamente matar desempenho, de modo que você está frequentemente muito melhor empurrando esta em um banco de dados ou disco local.

Joel Coel
fonte
0

Pessoalmente, acho que há vários fatores a serem considerados. Por exemplo, qual a velocidade da memória ou do disco que você está acessando localmente versus o que você acessaria via rede? Se os dados remotos estiverem com um SSD muito rápido e mais rápido que a rede gigabit instalada de ponta a ponta, o controle remoto poderá ser mais rápido para grandes arquivos de streaming.

No entanto, se você estivesse acessando aleatoriamente pequenas unidades de dados e a rede não tivesse falhas ou tivesse muitos saltos e mais do que você acessando, eu apostaria que um cache local é mais rápido, mesmo em uma unidade de disco mecânica quase 100 % do tempo. Mas você mencionou um ponto interessante e por quanto tempo será necessário o armazenamento local de qualquer coisa se a velocidade da rede continuar aumentando?

jim
fonte