Se a RAM é barata, por que não carregamos tudo na RAM e rodamos a partir daí?

127

A RAM é barata e muito mais rápida que as SSDs. É apenas volátil. Então, por que os computadores não têm muita memória RAM e, ao ligá-la, carregam tudo na RAM do disco rígido / SSD e simplesmente executam tudo a partir de lá, presumindo que não há necessidade real de persistir algo fora da memória? Computadores não seriam muito mais rápidos?

É claro que o sistema operacional atual pode não suportar isso, mas existe alguma razão pela qual a RAM não seja usada dessa maneira?

    
por pkr298 27.08.2013 / 17:20

12 respostas

176

Existem algumas razões pelas quais a RAM não é usada dessa maneira:

  1. A RAM de desktop comum (DDR3) é barata, mas não tão barata assim. Especialmente se você quiser comprar DIMMs relativamente grandes.
  2. RAM perde seu conteúdo quando está desligado. Assim, você precisaria recarregar o conteúdo no momento da inicialização. Digamos que você use um disco RAM de 100 GB do tamanho de SSD, o que significa dois minutos de atraso, enquanto 100 GB são copiados do disco.
  3. RAM usa mais energia (digamos 2–3 watt por DIMM, aproximadamente o mesmo que um SSD ocioso).
  4. Para usar tanta memória RAM, sua placa-mãe precisará de muitos soquetes DIMM e os rastreamentos para eles. Geralmente isso é limitado a seis ou menos. (Mais espaço na placa significa mais custos, portanto, preços mais altos.)
  5. Por último, você também precisará da RAM para executar seus programas, portanto, você precisará do tamanho normal de RAM para trabalhar (por exemplo, 18GiB e o suficiente para armazenar os dados que espera usar).

Dito isto: Sim, discos RAM existem. Mesmo como quadro PCI com DIMM soquetes e como aparelhos para IOps muito altos. (Usado principalmente em bancos de dados corporativos antes que os SSDs se tornassem uma opção). Essas coisas são não é barato .

Aqui estão dois exemplos de placas de disco RAM de baixo custo que entraram em produção:

Observequehámuitomaismaneirasdefazerissodoqueapenascriarum disco RAM na memória de trabalho comum.

Você pode:

  1. Use uma unidade física dedicada para isso com memória volátil (dinâmica). Seja como um appliance ou com uma interface SAS, SATA ou PCI [e].
  2. Você pode fazer o mesmo com o armazenamento suportado por bateria (não é necessário copiar dados iniciais para ele, pois ele manterá seu conteúdo enquanto a energia do backup permanecer válida).
  3. Você pode usar RAMs estáticas em vez de DRAMS (mais simples, mais caras).
  4. Você pode usar o flash ou outro armazenamento permanente para manter todos os dados (Aviso: o flash geralmente tem um número limitado de ciclos de gravação). Se você usar flash como armazenamento apenas, você acabou de se mudar para SSDs. Se você armazenar tudo na memória RAM dinâmica e salvar o backup em flash ao desligar, retornará aos appliances.

Tenho certeza de que há muito mais a descrever, do Amiga RAD: redefinir discos RAM sobreviventes para IOPS, usar nivelamento e D'us sabe o quê. No entanto, vou cortar este curto e listar apenas mais um item:

Preços de DDR3 (DRAM atual) versus preços de SSD:

  • DDR3: € 10 por GiB ou € 10.000 por TiB
  • SSDs: significativamente menos. (Cerca de 1 / 4th a 1 / 10th.)
por 27.08.2013 / 17:28
70

Os sistemas operacionais já fazem isso com o cache da página :

In computing, a page cache, often called a disk cache, is a "transparent" cache of disk-backed pages kept in main memory (RAM) by the operating system for quicker access. A page cache is typically implemented in kernels with the paging memory management, and is completely transparent to applications.

Quando você lê uma página de um disco, seu sistema operacional carregará esses dados na memória e os deixará lá até que tenha uma melhor utilização para essa memória. Se você tiver memória suficiente, o sistema operacional só lerá cada página uma vez e depois a utilizará da memória a partir de então. A única razão pela qual o sistema operacional executará o E / S real do disco será se ele precisar ler uma página que ainda não esteja na memória ou se uma página for gravada (nesse caso, você presumivelmente deseja salvá-la no disco).

Uma vantagem de fazer as coisas dessa maneira é que você não precisa carregar todo o disco rígido na memória, o que é útil se não couber, e também significa que você não perde tempo lendo arquivos que seus aplicativos não precisa. Outra vantagem é que o cache pode ser descartado sempre que o sistema operacional precisar de mais memória (é melhor que seu próximo disco lido seja um pouco mais lento do que ter seus programas travados porque estão sem memória). Além disso, é útil que os usuários não precisem decidir manualmente o que deve estar no disco virtual ou não: o que você usa com mais frequência será mantido automaticamente na memória principal.

Se você tem muita memória, mas seus aplicativos não estão sendo executados tão rápido quanto seria de esperar, há uma boa chance de eles serem mais lentos porque estão sendo executados com segurança. Por exemplo, SQLite é muito mais rápido se você disser para não esperar que as gravações sejam concluídas, mas seu banco de dados estará completamente quebrado se você não desligar corretamente.

Além disso, /tmp é geralmente um ramdisk em distros do Linux, porque não há problema em perder esses dados. Ainda há um debate sobre se isso é uma boa ideia, porque se muitos dados forem gravados em /tmp , você poderá ficar sem memória.

    
por 27.08.2013 / 19:06
42

Como Alan Shutko aponta em seu comentário sobre a questão, a RAM não é realmente barata.

Aqui estão alguns pontos de dados. Quando pesquiso no Google por 4 GB de RAM, 64 GB de SSD e 1 TB de HDD (disco rígido mecânico), aqui estão os custos que vejo (isto é para 25 de agosto de 2013):

Whoa! HDDs são 100x mais baratos que a RAM! E os SSDs são 8x mais baratos que a RAM.

(Além disso, como apontado em outras respostas, a RAM é inerentemente volátil e, portanto, você precisa de alguma outra forma de armazenamento persistente.)

    
por 27.08.2013 / 21:54
8

Eu faço todas as minhas operações imediatas de leitura / gravação para geração de conteúdo em discos RAM em minha máquina local. Eu também armazeno minhas pastas de registro no diário do MongoDB, assim como meus compiladores e intérpretes do Python e biblioteca padrão. Este disco é salvo no desligamento e restaurado no início. O segundo disco de RAM que uso é de 64 megabytes e todas as pastas de cache do meu navegador de internet apontam para lá; que se perde no desligamento e se libera quando está cheio.

Use as ferramentas certas para o trabalho, suponho, seria a resposta que lhe daria. Estou gerando dados 30-1000x mais rápido usando um disco RAM do que no meu 7200rpm Western Digital.

Este é o programa que estou usando: link

... e quando o 32gigs do Ram é menor que $ 200, não vejo por que isso não está se tornando mais comum.

    
por 28.08.2013 / 01:41
4

Sim, essa é a premissa de muitos bancos de dados em memória que estão surgindo no mercado. Um exemplo é o SAP HANA. A idéia é que a RAM é barata e, do ponto de vista do desempenho, as operações de leitura / gravação na RAM são 1000 vezes mais rápidas que as operações de disco. Assim, a maioria dos dados é mantida na RAM e, em seguida, você define uma estratégia de envelhecimento de dados usando os dados antigos que são reciclados de volta para o armazenamento frio (ou seja, disco).

    
por 27.08.2013 / 21:59
4

Explicação breve :

Na primeira vez que um aplicativo é executado, ele é transferido do disco rígido ou da rede para a RAM. Então, não se preocupe, você já faz isso.

Mas, geralmente, não há apenas um arquivo de aplicativo / processo e há algumas operações de E / S direcionadas ao disco rígido ou à rede (outros arquivos do aplicativo ou outras operações de E / S com sistema etc.), que podem Diminua a velocidade do seu aplicativo. Esses podem ser direcionados para o disco RAM, mas você deve considerar que o disco RAM é excluído no desligamento e deve ser preenchido novamente na inicialização.

E RAM não é tão barato como apresentado na pergunta. Você deve contar não apenas o custo da memória RAM, mas o custo da RAM em funcionamento, incluindo os soquetes da placa-mãe (aqueles limitados / raros e, portanto, mais valiosos) e o custo dos dados perdidos, quando a energia estiver diminuindo.

Por exemplo computador com 1TB HDD pode ser comprado por barato e é sobre computação doméstica, computador com 1TB de RAM está em intervalos de supercomputadores. (mas a Intel está trabalhando em algo de médio alcance: link )

    
por 28.08.2013 / 11:38
4

Esta é uma ótima pergunta e acho as respostas fascinantes. Eu vou comentar sobre isso como um DBA Oracle e minhas respostas são específicas para o banco de dados Oracle. Este é um grande erro que muitas pessoas cometem quando trabalham com a Oracle. Não tenho certeza se isso se aplica a outros aplicativos também. Isso não é para ser off-topic, mas significa uma resposta especializada.

Quando você ajusta o desempenho com o Oracle, você está realmente tentando eliminar os gargalos. Embora a maioria de nós não diga isso, ela é baseada na Teoria das Restrições: link

A memória pode não ser o seu gargalo. O Oracle tem mecanismos complexos para gerenciar a memória e apenas aumentar a memória pode realmente atrasar as coisas se outras áreas estiverem onde o gargalo está. Deixe-me dar um exemplo que é muito comum.

As consultas parecem ser lentas. O consenso é que, se aumentarmos a RAM, devemos aumentar o tempo de resposta das consultas, já que a memória é mais rápida do que o disco. Bem ... É assim que o Oracle lida com gerenciamento de memória para dados. O Oracle possui uma variedade de locais de memória que são alocados para tarefas específicas. Então você pode aumentar essas memórias. A área usada para dados é chamada de 'cache de buffer'. Esta é uma série de listas vinculadas (o número delas tende a aumentar a cada versão). Toda vez que um bloco é encontrado no disco durante uma consulta, um algoritmo de hash é executado nele para determinar em qual lista inseri-lo. Onde colocá-lo na lista é baseado em um algoritmo de contagem de toques (explicado no site de suporte da Oracle, então você tem que pagar para conseguir ... não é realmente importante).

No entanto, quando você executa uma consulta, a Oracle retira uma trava na cadeia de buffers que você pesquisa no momento. Esta LATCH (nota: isso não é um bloqueio. Google "trava", se você não sabe a diferença) bloqueia todas as outras operações nessa cadeia para a duração da sua leitura. Por isso, bloqueia as leituras e gravações (isso é totalmente diferente do que o Oracle alegando que os bloqueios não bloqueiam as leituras).

Isso é necessário porque, à medida que você lê o bloco na cadeia, o Oracle o move com base na frequência com que é 'solicitado'. Blocos solicitados com mais freqüência são movidos para o topo e os blocos menos solicitados são deixados na parte inferior e envelhecidos. Você não pode ter 2 sessões lendo uma lista vinculada e movendo blocos ao redor ou você vai acertar ponteiros que apontam para locais inexistentes.

Quando você aumenta o tamanho da memória, aumenta o tamanho de cada lista vinculada. Isso aumenta o tempo necessário para ler a lista. Uma única consulta ruim ou consulta complexa pode fazer dezenas de milhares ou até milhões de leituras de listas vinculadas. Cada leitura é rápida, mas o número delas leva a travas e bloqueia outras sessões. A Oracle chama isso de 'IO lógico' (ou buffer get ou alguma outra coisa. Esse jargão é específico da Oracle e pode significar outra coisa em outras partes da TI).

Portanto, se a lista for mais longa e você tiver um SQL muito ruim, as instruções SQL manterão suas travas por mais tempo. Aumentar a memória pode ocasionalmente REDUZIR o desempenho. Na maioria das vezes, isso não acontecerá. As pessoas gastam muito dinheiro e não vêem nenhum benefício. Dito isto, há momentos em que você precisa de mais memória no cache de buffer, mas é necessário identificar apropriadamente o afunilamento para saber se isso é apropriado. Não posso discutir como analisar isso neste post. Veja os fóruns de DBA. Algumas pessoas discutem isso lá. É bastante complexo.

Alguém tem exemplos específicos com outros softwares onde isso pode acontecer? Existe um ótimo livro de negócios chamado 'The Goal' que discute o alívio de restrições em uma fábrica. Esse processo é muito semelhante ao que os Oracle DBAs fazem ao avaliar problemas de desempenho. Muitas vezes, é leitura padrão em programas de MBA. É muito valioso ler para as profissões de TI.

link

    
por 28.08.2013 / 18:06
3

A RAM pode ser barata, mas não tão barata quanto o armazenamento tradicional.

Eu tenho um disco rígido de 3 TB (US $ 99): Citação de HDD

E você precisará de 48 deles por 3TB (US $ 719) cada: RAM Quote

Isso totalizaria $ 34.512 vs $ 99. Sem mencionar o preço do hardware necessário para executar 3 TB de RAM.

    
por 28.08.2013 / 02:17
2

Na verdade, isso é feito em alguns cenários. Se você tiver um sistema operacional / pilha de aplicativos pequeno o suficiente, poderá executá-lo totalmente na RAM. Claro que tem todas as desvantagens que a resposta aceita tem. Mas é possível e acontece.

Dê uma olhada no Puppy Linux, uma distribuição Linux popular. A forma como funciona página fala sobre a execução de RAM: link

    
por 28.08.2013 / 16:07
2

Acho que a resposta parcialmente pode ser respondida da seguinte forma:

Premissa:

  • Apenas esses tipos de RAM são baratos, produzidos e vendidos em grandes quantidades
  • Os fabricantes de RAM querem vender seus produtos.
  • preços baixos exigem vender grandes volumes para gerar lucro
  • uma grande base de usuários usa uma tecnologia de memória estabelecida
  • nova tecnologia de memória leva anos para ser amplamente adotada
  • slots de memória são altamente limitados nos dispositivos cada vez menores da referida base de usuários
  • a tecnologia móvel está aumentando
  • pelo menos 0,1% de 1Bil. Usuários de PC podem optar por 128 GB de RAM ou mais (adivinhação)
  • atualizações de tecnologia que estão em alta demanda geram um lucro maior do que novas gerações de tecnologia

Dado o número limitado de slots de memória, uma solução importante vem em forma de chips de memória maiores com dimensões internas menores e / ou empilhamento 3D. Ambos os processos progrediram conforme o esperado nos últimos 36 meses.

Então a pergunta é: " DDR3 tamanho máximo de memória " ou semanticamente: " DDR3 porque não há módulos de memória maiores que 16GB "

E a resposta é:

O padrão DDR3 permite capacidades de chip de 512 megabits a 8 gigabits, permitindo efetivamente um tamanho máximo do módulo de memória de 16 gigabytes ( src )

O DDR4 mudará isso, conforme descrito neste mapa de tecnologia:

Resultado:

  • ummercadodememóriasemi-deadlock
  • extravagânciadoAppleMacbookProcom16GB
  • maiordemandaporserviçosremotosounanuvem(paraabrigaressesbancosdedadosdemáquinasvirtuaiseInMemory,muitosdesenvolvedoreseengenheirostambémexecutariamlocalmentecomalegria)
  • ...

AlgumasadvertênciasaopostcompletodoHennes'es:

  • RAMdeáreadetrabalhocomum(DDR3)ébarata,masnãotãobarata:barataosuficienteparaalgumaspessoascompraremdevidoaoseuplanodefundocommuitosdados
  • RAMperdeseuconteúdoquandoestádesligado:Ossereshumanostêmenfrentadoproblemasmaisdifíceisdoqueamemóriavolátil.Aspatentesesoluçõessobre"manuseio de memória volátil" desde 2010 são um testemunho disso.
  • RAM usa mais energia : desativar seletivamente a memória não utilizada (bancos) em dispositivos móveis. Também 1W a 2W empalidece em comparação com GPUs de 800W
  • você precisará de muitos soquetes de DIMM : a tecnologia de chip ainda progride como de costume, ou seja, a opção de chips de memória mais altos não existe, mas os fabricantes de chips os venderiam em alta quantidade
  • você também precisará da RAM para rodar seus programas em : True. Mas o pkr298 presume que todo o sistema operacional e programas são carregados na memória RAM, não que deva abolir o disco rígido / SSD
por 29.08.2013 / 22:58
1

Você está realmente certo Em um futuro próximo, todo o armazenamento e memória estarão no formato nano ram. O NRAM é basicamente comutadores "mecânicos" com poucos átomos de largura. Não precisa de corrente para manter o estado, portanto é energeticamente eficiente e não precisa ser resfriado e, como os comutadores são tão pequenos, a densidade é muito alta e Isso é bom por duas razões, uma é o acesso à memória é muito rápido e você poderá ter terabytes de dados em pequenos dispositivos como o celular. Se você gosta de ler mais veja isto: link e este link

    
por 28.08.2013 / 20:13
0

Como outros já disseram, a RAM é volátil e algo como 10x o custo de SSDs.

No entanto, existe IS um produto que está bem próximo do que você está descrevendo - infelizmente não consigo lembrar o nome.

O que é uma unidade baseada em RAM (IIRC max 64gb) acoplada a um cartão CF e uma bateria. Quando você liga o sistema copia o conteúdo do cartão CF para a memória RAM (acredito servir solicitações do cartão CF, se eles ainda não foram carregados.) No desligamento do conteúdo da memória RAM são copiados para o cartão CF- -a bateria é grande o suficiente para permitir que isso termine antes de acabar.

Não é barato.

    
por 30.08.2013 / 00:52

Tags