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


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?

Naturalmente, o sistema operacional atual pode não suportar isso, mas existe alguma razão pela qual a RAM não é usada dessa maneira?


126


origem


Você assume que a RAM é barata. Quanto custa 1TB de RAM? - Alan Shutko
O que você descreve é ​​chamado de RAMDisk e as pessoas já fazem o que você descreve. Eu carrego a maioria dos meus programas na memória usando um RAMDisk. Você também não precisa de hardware especial para usar a memória do sistema e o software para fazer isso. - Ramhound
Nós fazemos, sob as coberturas, na medida em que um determinado sistema operacional o suporta. O Windows usa RAM "não usada" para "cache de disco", e eu suponho que muitas versões do Linux também. Mas há muito disco para se encaixar na RAM. - Daniel R Hicks
"barato" é um termo relativo. Cada bit de memória é mais barato do que há alguns anos, mas é mais caro que o armazenamento em um disco rígido. E, de qualquer forma, a marcha do progresso garantirá que os programas sempre preencham toda a RAM disponível, não importa o quanto esteja disponível; se o computador de todo mundo tivesse mais RAM disponível, os desenvolvedores colocariam mais coisas em seus programas. - jhocking
Google carrega a internet para a RAM - Ari


Respostas:


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

  1. A RAM comum de desktop (DDR3) é barata, mas não tão barata assim. Especialmente se você quiser comprar DIMMs relativamente grandes.
  2. RAM perde seu conteúdo quando 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. A RAM usa mais energia (digamos 2 a 3 watts por DIMM, aproximadamente o mesmo que um SSD ocioso).
  4. Para usar muita 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, assim você precisará do tamanho normal de RAM para trabalhar (por exemplo, 18GiB, e o suficiente para armazenar os dados que você espera usar).

Dito isto: Sim, existem discos RAM. Mesmo como Placa PCI com soquetes DIMM 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 Apesar.

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

Note que há muito mais maneiras de fazer isso do que apenas criar um 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 desde que a energia de backup permaneça válida).
  3. Você pode usar RAMs estáticos em vez de DRAMS (mais simples, mais caro).
  4. Você pode usar 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, você retornará aos appliances.

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

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

  • DDR3: € 10 por GiB ou € 10.000 por TiB
  • SSDs: Significativamente menos. (Cerca de 1 / 4th a 1 / 10th.)

175



+1 por atingir dois pontos críticos: os HDs ainda são mais baratos que a RAM, e a RAM é volátil. A RAM é a sua bancada de trabalho e o seu HD é o depósito. Nuf sed. - Chad Harrison
@Hennes - Não estava sugerindo carregar a unidade inteira na memória com uma solução RAMDisk de software. Você pode carregar o Photoshop de uma unidade mecânica para um RAMDisk usando pontos de junção e o desempenho seria melhor ou tão bom quanto uma instalação SSD. - Ramhound
+1 para "RAM é barato, mas não tão barato". Uma pesquisa rápida mostra que as unidades SSD estão vendendo atualmente entre 75 centavos a um dólar, dependendo da capacidade e do fabricante. Módulos de RAM DDR3, dependendo da capacidade, são vendidos entre US $ 7-10 por GB, portanto, a taxa de RAM para SSD pode ser de até 15: 1. - KeithS
RAM loses its contents when powered off. Para ser exato, apenas RAM volátil faz, mas RAM não volátil mantém tudo mesmo quando desligado, como por exemplo Chips de Flash. Nesse sentido, o SSD não é diferente da RAM, mas um subtipo dele. - Saul
Discordo. As células flash no SSD podem não precisar de energia, mas o controlador e outros componentes eletrônicos no SSD consomem energia. Não muito poder, mas aproximadamente o mesmo que o poder desenhado por um DIMM moderno (1-3 Watt). - Hennes


Os sistemas operacionais já fazem isso, com o cache de páginas:

Na computação, um cache de páginas, muitas vezes chamado de cache de disco, é um cache "transparente" de páginas protegidas por disco armazenadas na memória principal (RAM) pelo sistema operacional para acesso mais rápido. Um cache de página é normalmente implementado em kernels com o gerenciamento de memória de paginação e é completamente transparente para os aplicativos.

Quando você lê uma página de um disco, o sistema operacional carrega esses dados na memória e os mantém lá até que eles tenham 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 fazem. necessidade. 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 se 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 está tudo bem se esses dados forem perdidos. Ainda há algum debate sobre se isso é uma boa ideia, porque se muitos dados forem gravados para /tmp, você pode ficar sem memória.


70



Ótima resposta. Os sistemas operacionais também têm recursos como o Superfetch, que carregará dados solicitados do disco para a RAM no momento da inicialização. - Matthew Lock
Boa resposta. todos os tops atacam (tente invalidar) a questão em vez de realmente respondê-la - vsync


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):

Uau! 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.)


42



A RAM é várias vezes maior que a SSD (sem o problema de desgaste de gravação), que é várias vezes maior que a ferrugem e o GLASS. E com certeza você pode usar um disco de 1 TB por US $ 80, mas tente encontrar esse armazenamento em um disco de 15k rpm com conectividade SCSI ou Fibre Channel. Você está olhando para 4 x 250Gb @ ~ $ 250 mais o custo de um controlador BBU (aprox $ 500), tornando o custo em torno do mesmo que um SSD. - symcbean
@symcbean - Isso é um pouco incerto; Tenha em mente que obter RAM em grandes denominações (como você deseja, a fim de substituir um disco ou SSD) custa mais como US $ 25 / GB. - Russell Borogove
O @symcbean comprando um SSD com características corporativas similares custará mais de $ 1000. - mikebabcock
Seria muito interessante ver essa resposta sendo revisitada a cada poucos meses e ter o preço alterado, e ver como os preços caíam constantemente. - Ofer Zelig
@OferZelig "veja como os preços caíram constantemente" Você quer dizer exceto quando eles não? - Michael Kjörling


Eu faço todas as minhas operações imediatas de leitura / gravação para geração de conteúdo em discos RAM na 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á; aquele que é perdido 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: http://www.romexsoftware.com/pt-br/primo-ramdisk/

... e quando 32gigs de Ram são menos de US $ 200, não vejo por que isso não está se tornando mais comum.

8 gig RAM diskeveryday SATA III HDD


8



Você sabe que o sistema operacional armazena as coisas para você, certo? - Potatoswatter
"quando 32gigs de Ram é menos de US $ 200" 32 GB em um HD de 1 TB começam em torno de US $ 3, mais ou menos; unidades de consumo de 1 TB hoje custam menos de US $ 100, e até discos corporativos podem ter preços semelhantes por gigabyte (a Amazon quer US $ 408 atualmente para a Seagate ST4000NM0043 de 4TB que ostenta um RRP de US $ 520,00 e isso é apenas unidades sem compras por aí). - Michael Kjörling
@Potatoswatter sim, isso acontece. Mas não armazena em cache 10.000 arquivos recém-criados. Então, eu explicitamente "cache" -los no meu disco RAM. - blakev
@ MichaelKjörling Nós não estamos tentando armazenar 1 TB na RAM. Isso é ridículo. Seja realista e escolha algumas pastas-chave que você sempre deseja ter na RAM e você pode SIGNIFICANTLY (ordens de grandeza) acelerar certas operações em seu fluxo de trabalho. Veja minhas imagens acima. - blakev
"tudo é relativo. Na minha máquina, ele carrega "tudo" da minha imagem de disco rígido de 8 GB; byte byte os 8 shows inteiros são clonados todas as vezes. Para o bem da questão, se você está procurando uma solução para realmente Faça isso se você ficar dentro de "possível" ou explodir fora de proporção para encaixar um tipo de resposta "impossível". - blakev


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).


4





Breve explicação:

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 existe 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.), o que pode diminuir sua velocidade. aplicação. 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 em sua placa-mãe (aqueles que são limitados / raros e, portanto, mais valiosos) e o custo dos dados perdidos, quando a energia está diminuindo.

Por exemplo computador com 1TB HDD pode ser comprado por preço baixo e é sobre computação doméstica, computador com 1TB de RAM é em gamas de supercomputadores. (mas a Intel está trabalhando em algo intermediário: http://vr-zone.com/articles/more-on-xeon-e5-terabyte-of-ram-even-at-midrange-/14366.html)


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 procurando eliminar os gargalos. Embora a maioria de nós não diga isso, é baseado na Teoria das Restrições: https://en.wikipedia.org/wiki/Theory_of_constraints

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.

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, conforme 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.

https://en.wikipedia.org/wiki/Eliyahu_M._Goldratt


4



Não shure isso é revelador para a questão, mas por outro lado interessante. - jb.
é uma razão para não adicionar apenas ram. É específico e estreito, mas acho que se aplica. - Bob
muito interessante. Traz outro ângulo para a discussão geral. - Lorenz Lo Sauer


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

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

E você precisará de 48 destes para 3TB em ($ 719) cada: RAM Quote

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


3



a resposta não é relevante para a pergunta - BlueBerry - Vignesh4303
Eu acho que no final ele está tentando dizer "RAM não é barato". - jaczjill
Também não é possível conectar 48 desses kits de 8 canais em qualquer dispositivo que eu conheça. Embora existam sistemas que aceitam 16 (ou mais) 64 GB REG ECC dimmers em um único servidor. No entanto, estes não são baratos em tudo. - drescherjm


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. Seu como funciona página fala sobre a execução de RAM: http://puppylinux.org/wikka/howPuppyWorks 


2



E, claro, em um ambiente de cluster, você pode manter a pilha de aplicativos em um sistema de arquivos distribuído / em rede, atender ao sistema operacional básico via PXE ou similar e executar os nós sem disco, se desejar. - Aesin


Eu acho que a resposta parcialmente pode ser respondida da seguinte forma:

Premissa:

  • Apenas aqueles tipos de RAM são baratos e são produzidos e vendidos em grandes quantidades
  • Os fabricantes de RAM querem vender seus produtos.
  • demanda de preços baixos vendendo grandes volumes para virar 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 as 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 questão é: "DDR3 tamanho máximo da memória"ou semanticamente:"DDR3 por que 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:

enter image description here

Resultado:

  • um mercado de memória semi-deadlocked
  • Apple Macbook Pro extravagante parando a 16GB
  • maior demanda por serviços em nuvem ou remotos (para abrigar esses bancos de dados de máquinas virtuais e InMemory, muitos desenvolvedores e engenheiros também seriam executados localmente)
  • ... ???

Algumas advertências para o post completo do Hennes'es:

  • A RAM comum de desktop (DDR3) é barata, mas não tão barata: barato o suficiente para certas pessoas comprá-lo devido ao seu plano de dados intensivo de dados
  • RAM perde seu conteúdo quando desligado: Os seres humanos têm enfrentado problemas mais difíceis do que a memória volátil. As patentes e soluções sobre "manuseio de memória volátil" desde 2010 são um testemunho disso.
  • RAM usa mais energia: desligue 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 DIMM: tecnologia de chip ainda progrediu como de costume, o que significa que a opção de chips de memória mais altos não existe apenas, mas os fabricantes de chips ficariam felizes em vendê-los para você em grande quantidade
  • você também precisará de RAM para executar seus programas em: Verdade. Mas o pkr298 presume que todo o sistema operacional e programas são carregados na memória RAM, não que deveria abolir o disco rígido / SSD

2



A desativação de bancos de memória não utilizados na DRAM é um problema. A tecnologia DRAM exige que as células sejam atualizadas. Coloque isso em um balde furado. Se eu encher com água (eletricidade), isso representa um 1, se eu esvaziá-lo, ele representa um 0. Infelizmente, o balde está vazando e fica em águas rasas. Um balde cheio irá se esvaziar lentamente até coincidir com o nível da água. Um balde vazio vai lentamente até que coincida com o nível da água. Depois de um tempo, não há como dizer qual era o estado do balde. - Hennes
Para resolver isso, alguém passa pelo balde de vez em quando. Se estiver quase cheio, o balde será completado; se estiver quase vazio, será esvaziado completamente. Isto é um refrescar. A atualização de uma célula de memória consome energia, evitando que a DRAM seja totalmente desligada enquanto mantém seu conteúdo. --- Existem maneiras de contornar isso, por exemplo A SRAM não precisa das atualizações externas e ainda pode manter seu conteúdo, mas requer mais silício (chips menores e mais caros). - Hennes


Você está realmente certo No futuro próximo, todo o armazenamento e memória estarão na forma de 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: http://www.nantero.com/mission.html e isto http://en.wikipedia.org/wiki/Nano-RAM


1