A RAM é barata e muito mais rápida que os SSDs. É apenas volátil. Então, por que os computadores não têm muita RAM e, na inicialização, carregam tudo na RAM do disco rígido / SSD e executam tudo a partir daí, assumindo que não há necessidade real de persistir algo fora da memória? Os computadores não seriam muito mais rápidos?
Obviamente, o sistema operacional atual pode não oferecer suporte a isso, mas existe algum motivo para a RAM não ser usada dessa maneira?
Respostas:
Existem alguns motivos pelos quais a RAM não é usada dessa maneira:
Dito isto: Sim, existem discos de RAM. Mesmo como placa PCI com soquetes DIMM e como dispositivos para IOps muito altas. (Usado principalmente em bancos de dados corporativos antes dos SSDs se tornarem uma opção). Essas coisas não são baratas embora.
Aqui estão dois exemplos de cartões de disco RAM low-end que entraram em produção:
Observe que há muito mais maneiras de fazer isso do que apenas criando um disco RAM na memória de trabalho comum.
Você pode:
Tenho certeza de que há muito mais a descrever, do Amiga RAD: redefina os discos de RAM sobreviventes para IOPS, use nivelamento e Gd sabe o que. No entanto, vou cortar este pequeno e listar apenas mais um item:
Preços de DDR3 (DRAM atual) versus preços de SSD:
fonte
RAM loses its contents when powered off.
Para ser exato, apenas a RAM volátil mantém, mas a RAM não volátil mantém tudo, mesmo quando desligada, como por exemplo, chips Flash . Nesse sentido, o SSD não é diferente da RAM, mas um subtipo dela.Os sistemas operacionais já fazem isso, com o cache da página :
Quando você lê uma página de um disco, seu sistema operacional carrega esses dados na memória e os deixa lá até que ele tenha um uso melhor dessa memória. Se você tiver memória suficiente, seu sistema operacional lerá cada página apenas uma vez e a utilizará da memória a partir de então. O único motivo pelo qual o sistema operacional fará E / S de disco real é se ele precisa ler uma página que ainda não está na memória ou se uma página está gravada (nesse caso, você provavelmente deseja que ela seja salva 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 precisam. necessidade. Outra vantagem é que o cache pode ser descartado sempre que o sistema operacional precisar de mais memória (é melhor que o seu próximo disco seja um pouco mais lento do que ter seus programas travados por falta de memória). Além disso, é útil que os usuários não precisem decidir manualmente o que deve estar no ramdisk ou não: o que você usa com mais frequência será automaticamente mantido na memória principal.
Se você tem muita memória, mas seus aplicativos não estão sendo executados tão rápido quanto o esperado, há uma boa chance de que sejam mais lentos porque estão sendo executados com segurança. Por exemplo, o SQLite é uma ordem de magnitude mais rápida se você pedir para não esperar a conclusão das gravações, mas seu banco de dados será completamente quebrado se você não desligar corretamente.
Além disso,
/tmp
geralmente é um ramdisk nas distros do Linux, porque tudo bem se esses dados forem perdidos. Ainda há algum debate sobre se é uma boa ideia, porque, se muitos dados forem gravados/tmp
, você poderá ficar sem memória.fonte
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 4 GB de RAM, 64 GB SSD e 1 TB HDD (disco rígido mecânico), eis os custos que vejo (em 25 de agosto de 2013):
4 GB de RAM = US $ 32 - US $ 36 => RAM = ~ US $ 8 por GB
SSD de 64 GB = US $ 69 - US $ 76 => SSD = ~ US $ 1 por GB
HDD de 1 TB = US $ 80 => HDD = US $ 0,08 por GB
Uau! Os HDDs são 100x mais baratos que a RAM! E os SSDs são 8x mais baratos que a RAM.
(Além disso, como indicado em outras respostas, a RAM é inerentemente volátil e, portanto, você precisa de alguma outra forma de armazenamento persistente.)
fonte
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. Também guardo minhas pastas de registro em diário do MongoDB lá, bem como meus compiladores e intérpretes Python e a biblioteca padrão. Este disco é salvo no desligamento e restaurado no início. O segundo disco de RAM que eu uso é de 64 megabytes e todas as pastas de cache do navegador da Internet apontam para ele; aquele se perde no desligamento e se libera quando está cheio.
Use as ferramentas certas para o trabalho que suponho que seria a resposta que lhe dou. Estou gerando dados 30-1000x mais rápido usando um disco RAM do que no meu Western Digital de 7200 rpm.
Este é o programa que estou usando: http://www.romexsoftware.com/en-us/primo-ramdisk/
... e quando 32gigs de Ram custam menos de US $ 200, não vejo por que isso não está se tornando mais comum.
fonte
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 1000x mais rápidas que as operações em disco. Portanto, a maioria dos dados é mantida na RAM e, em seguida, você define uma estratégia de duração dos dados usando a qual os dados antigos são reciclados de volta ao armazenamento a frio (ou seja, disco).
fonte
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 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 o sistema etc.), que podem diminuir a velocidade do seu inscrição. Eles podem ser direcionados para o disco RAM, mas você deve considerar que o disco RAM é excluído ao desligar e deve ser preenchido novamente na inicialização.
E a RAM não é tão barata como apresentada na pergunta. Você deve contar não apenas o custo da RAM, mas também o custo da RAM de trabalho, incluindo soquetes na placa-mãe (aqueles são limitados / raros e, portanto, mais valiosos) e o custo da perda de dados, quando a energia está diminuindo.
Por exemplo, um computador com HDD de 1 TB pode ser comprado barato e trata-se de computação doméstica, um computador com 1 TB de RAM está na faixa 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 )
fonte
Esta é uma ótima pergunta e acho as respostas fascinantes. Vou comentar sobre isso como um DBA Oracle e minhas respostas são ESPECÍFICAS para o banco de dados Oracle. Esse é um grande erro que muitas pessoas cometem ao trabalhar com a Oracle. Não tenho certeza se isso se aplica a outros aplicativos também. Isso não pretende ser fora de tópico, mas é uma resposta especializada.
Quando você ajusta o desempenho com o Oracle, está realmente procurando esclarecer 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. A Oracle possui mecanismos complexos para gerenciar a memória e apenas aumentar a memória pode realmente desacelerar as coisas se outras áreas estiverem onde está o gargalo. Deixe-me dar um exemplo que é MUITO comum.
As consultas parecem lentas. O consenso é que, se aumentarmos a RAM, devemos aumentar o tempo de resposta das consultas, pois a memória é mais rápida que o disco. Bem ... É assim que a Oracle lida com o gerenciamento de memória para dados. A Oracle possui vários locais de memória que são alocados para tarefas específicas. Então você pode aumentar essas memórias. A área usada para os dados é chamada de 'cache do buffer'. Esta é uma série de listas vinculadas (o número delas tende a aumentar a cada versão). Sempre que um bloco é encontrado no disco durante uma consulta, um algoritmo de hash é executado nele para determinar em qual lista ele deve ser inserido. O local onde colocá-lo na lista é baseado em um algoritmo de contagem de toque (explicado no site de suporte da Oracle, então você tem que pagar para obtê-lo ... não é realmente importante).
NO ENTANTO, quando você executa uma consulta, o Oracle remove uma trava na cadeia de buffers que você pesquisa no momento. Esta trava (observação: isso não é um bloqueio. O "trinco" do Google, se você não sabe a diferença) bloqueia todas as outras operações nessa cadeia durante a leitura. Portanto, ele bloqueia leituras e gravações (isso é totalmente diferente do que o Oracle alegando que os bloqueios não bloqueiam 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'. Os blocos solicitados com mais frequência são movidos para o topo e os blocos solicitados com menos frequência são deixados na parte inferior e com idade acima. Você não pode ter duas sessões lendo uma lista vinculada e movendo blocos ao redor ou você encontrará indicadores 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 complexa pode fazer dezenas de milhares ou até milhões de leituras em listas vinculadas. Cada leitura é rápida, mas o número delas leva a travas feitas e elas bloqueiam outras sessões. A Oracle chama isso de 'IO lógico' (ou buffer get ou outras coisas. Esse jargão é específico da Oracle e pode significar algo mais em outras partes da TI).
Portanto, se a lista for mais longa e você tiver um SQL realmente 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 acontece. 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 do buffer, mas precisa identificar corretamente o gargalo para saber se isso é apropriado. Não posso discutir como analisar isso neste post. Veja os fóruns do 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 DBAs do Oracle fazem ao avaliar problemas de desempenho. Geralmente é leitura padrão em programas de MBA. É muito valioso ler para profissões de TI.
https://en.wikipedia.org/wiki/Eliyahu_M._Goldratt
fonte
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): HDD Quote
E você precisará de 48 deles por 3 TB a (US $ 719) cada: RAM
Isso totalizaria US $ 34.512 vs US $ 99. Sem mencionar o preço do hardware necessário para executar 3 TB de RAM.
fonte
Na verdade, é feito em alguns cenários. Se você tiver uma pilha de sistema operacional / aplicativo pequena o suficiente, poderá executá-la inteiramente 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 popular do Linux. A página de como funciona fala sobre como executar a partir da RAM: http://puppylinux.org/wikka/howPuppyWorks
fonte
Penso que a resposta parcialmente pode ser respondida da seguinte forma:
Premissa:
Dado o número limitado de slots de memória, uma solução importante vem na forma de chips de memória mais altos com dimensões internas menores e / ou empilhamento 3D. Ambos os processos progrediram conforme o esperado nos últimos 36 meses.
Portanto, a pergunta é: " Tamanho máximo da memória DDR3 " ou semanticamente: " DDR3 por que não existem módulos de memória com mais de 16 GB "
E a resposta é:
O padrão DDR3 permite capacidades de chip de 512 megabits a 8 gigabits, permitindo efetivamente um tamanho máximo de módulo de memória de 16 gigabytes ( src )
O DDR4 mudará isso, conforme descrito neste mapa de tecnologia:
Resultado:
Algumas advertências para o post completo de Hennes:
pkr298
presume-se que todo o sistema operacional e programas sejam carregados na RAM, não que deva abolir o disco rígido / SSDfonte
Você está realmente certo Em um futuro próximo, todo o armazenamento e memória estarão no formato nano ram. A NRAM é basicamente comutadores "mecânicos" com poucos átomos de largura. Ele não precisa de corrente para manter o estado, portanto é eficiente em termos de energia e não precisa ser resfriado. Como os comutadores são tão pequenos, a densidade é muito alta e isso é bom por dois motivos, um é o acesso à memória muito rápido e você poderá ter terabytes de dados em pequenos dispositivos como o celular. se você quiser ler mais, consulte: http://www.nantero.com/mission.html e este http://en.wikipedia.org/wiki/Nano-RAM
fonte
Como outros já disseram, a RAM é volátil e algo como 10x o custo dos SSDs.
No entanto, não é um produto lá fora, que vem muito perto daquilo que você está descrevendo - infelizmente não me lembro 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, ele copia o conteúdo do cartão CF para a RAM (acredito que atenda a solicitações do cartão CF se ainda não tiverem sido carregadas.) Ao desligar, o conteúdo da RAM é copiado para o cartão CF- -a bateria é grande o suficiente para permitir que isso termine antes que se esgote.
Não é barato.
fonte