Podemos executar o Linux em algo mais rápido que a RAM?

21

Essa talvez seja uma pergunta tola e pode ser o resultado de um mal-entendido. Estou estudando CPU agora e memória em particular. Eu estava lendo sobre o quanto a SRAM é mais rápida que a DRAM, mas mais cara. A SRAM é muito cara: comprei um pouco e encontrei uma placa SRAM alimentada por bateria com 16 MB por cerca de US $ 400.

Recentemente, um amigo mencionou que ele está executando o linux de filhote de cachorro na RAM e que é rápido. Notei, no entanto, que o linux minúsculo do núcleo pode ser ainda menor ... tão pequeno quanto 8 MB! Isso me fez pensar: podemos rodar linux na SRAM? Essa pergunta é bem formada?

Pesquisar esta questão no Google se mostrou ineficaz, mas levantou ainda mais questões. Pode-se executar o Linux no cache L3? O Intel Core i7 pode ter um cache L3 grande o suficiente para acomodar os 8 MB ... mas estou cometendo um erro de categoria? Qual é a diferença entre este e o Linux 'incorporado'?

Essa é a pergunta: podemos executar o Linux no SRAM ou no L3 Cache? Existe algo mais rápido? Quão rápido podemos linux !?

z.

Ziggy
fonte
3
Os linuxs incorporados geralmente são executados em memória ram ou memória não volátil. Linuxes embutidos são muitas vezes apenas despojado para rodar em hardware específico apenas, ou usar algumas opções de kernel menos comuns como baixa latência
Journeyman Geek
2
Gostaria de saber se existe algum uso prático para esta pergunta.
Robert Niestroj
4
+1 por usar "linux" como verbo (na última frase)!
Vorac 27/03

Respostas:

20

Linux ou qualquer outro sistema operacional não sabe como a RAM funciona. Enquanto o controlador de memória estiver configurado corretamente (por exemplo, taxas de atualização definidas para não SRAM), o sistema operacional não se importará se for executado na memória dinâmica simples (RAM simples), na RAM rápida no modo de página rápida (FP RAM, do C64-ish vezes), RAM de modo estendido de saída de dados (EDO), RAM síncrona (SDRAM), qualquer SDRAMS de taxa de dados dupla (DDR 1/2/3), qualquer que seja.

Todos eles apóiam a leitura e a escrita de lugares aleatórios. Tudo vai funcionar.

Agora, o cache é um pouco diferente. Você não precisa escrever para que o conteúdo seja alterado. Isso vai atrapalhar. Ainda assim, é um pouco utilizável. Eu sei que o coreboot usa o cache como um tipo de memória durante a inicialização, antes que o controlador de memória esteja configurado corretamente. (Para detalhes, confira os vídeos das palestras sobre coreboot durante o FOSDEM 2011).

Então, em teoria, sim, você poderia usá-lo.

MAS : Para tarefas práticas, um sistema com memória 'regular' de 'velocidade média' de 1 GB terá um desempenho muito melhor do que com apenas alguns MB de memória super rápida. O que significa que você tem três opções:

  1. Construa as coisas da maneira "barata" normal. Se você precisar de mais velocidade, adicione algumas dezenas de computadores extras (todos com memória "lenta")
  2. Ou construa um único computador com uma dúzia de vezes o preço e significativamente menos que uma dúzia de vezes o desempenho.

Exceto em casos muito raros, o último não é sensato.

Hennes
fonte
6
Muitas CPUs suportam o modo "cache como RAM" através dos registradores específicos de modelo (MSRs) da CPU. Observe também que a SRAM consome mais energia que a DRAM e isso também é um fator de design. Se o cache da CPU for grande o suficiente ou o kernel pequeno o suficiente, você poderá ativar esse modo de cache como RAM e mantê-lo executando inteiramente em SRAM na CPU. Você teria uma quantidade limitada de RAM para executar programas, etc. porque o cache normal do AFAIK como RAM e o modo normal não funcionarão simultaneamente. Eu posso estar errado sobre isso. Mesmo assim, a maior parte da velocidade de uma CPU atualmente deve-se ao cache L2, L3.
LawrenceC
@Hennes, é que o Linux se importa apenas com endereços de memória (mapeados)?
Alvin Wong
SDRAM é RAM D síncrona (dinâmica), enquanto SRAM é RAM estática. Não sei a qual você pretende se referir no primeiro parágrafo e não tenho o representante para fazer edições "triviais", mas talvez você possa consertar isso? Fora isso, boa resposta.
um CVn 25/03
Não me importo de esclarecer, mas não tenho certeza do que você deseja esclarecer. Você pode adicionar isso em um comentário e eu o editarei.
Hennes 25/03
Quando li este comentário pela primeira vez, vi: "Linux ou qualquer outro sistema operacional morre sem saber como a RAM funciona". Seu colapso é bom: acho que não tinha ilusões de que isso seria "melhor". Eu apenas me perguntei se isso poderia ser feito.
Ziggy
8

Sim, você pode, e é assim que já é feito, automaticamente. As partes mais usadas da RAM são copiadas no cache. Se o uso total da RAM for menor que o tamanho do cache (como você supõe), o mecanismo de cache existente terá copiado tudo na RAM.

O único momento em que o cache seria copiado novamente para a RAM normal é quando o PC entra no modo de suspensão S3. Isso é necessário porque os caches são desligados no modo S3.

MSalters
fonte
11
Nem todos podem / serão copiados. Para a estrutura de cache Intel / x86: Se eu tenho cache de 256KiB e 1024KiB, posso ler o endereço 0. Ele será armazenado no cache no local 0. Em seguida, posso ler o endereço 1 e o cache no local 1. No entanto, se eu ler o endereço de (256Kib + 1), ele também será armazenado no endereço 1 no cache. O cache usa uma SRAM extra (tag) para indicar qual dos dois está armazenado. Isso significa que a leitura de múltiplos do tamanho dos caches não funcionará bem. (Observe que isso seria algo raro e geralmente pode ser ignorado).
Hennes 25/03
Isso é perspicaz! Por que eu desajeitadamente colocaria o que eu acho importante no cache L3, quando eu permitia que um exército de gênios determinasse a melhor coisa a se fazer e programasse uma CPU para fazer a coisa ideal? Direita?
Ziggy
3

Muitas CPUs permitem que o cache seja usado como RAM. Por exemplo, a maioria das CPUs x86 mais recentes pode configurar determinadas regiões como writeback sem preenchimento nas leituras via MTRRs. Isso pode ser usado para designar uma região do espaço de endereço como - efetivamente - cache como ram.

Se isso seria benéfico é outra questão - ele trava o kernel na RAM, mas ao mesmo tempo reduz o tamanho efetivo do cache. Também pode haver efeitos colaterais (como ter que desativar o cache para o resto do sistema) que tornariam isso muito mais lento.

Marc Lehmann
fonte
2

"podemos rodar linux no cache L3?"

Não , isso não é possível porque a memória cache não é endereçada direta / linearmente.
Devido à maneira como a memória cache é projetada, o registro do CPU Program Counter (IP) não pode apontar para um local na memória cache.

Um cache da CPU possui sua própria "associatividade" e essa associatividade define a maneira como a memória "normal" é "mapeada" para a memória do cache. Esse recurso da memória cache é um dos motivos pelos quais as memórias são tão rápidas.

Máx.
fonte
1

"podemos rodar linux no cache L3?"

Não, o cache existe para um trabalho específico de manter os dados e instruções do programa prontos para quando o processador precisar deles. Você encontrará o sistema operacional no cache de qualquer maneira, porque ele está sendo constantemente usado. Carregar todo o sistema operacional no cache não é eficiente, pois você não está usando todos os caminhos de código no kernel de uma só vez.

"podemos rodar linux na SRAM?"

Certamente você pode usar SRAM com bateria como sua partição de inicialização, e pode usar o sinalizador incorporado de execução no local. Isso pode levar a tempos de inicialização mais rápidos e operações um pouco mais rápidas. No entanto, um fator importante é a largura de banda entre o cache L3 e a localização do kernel (uma unidade de inicialização ou RAM).

"Existe algo mais rápido? Quão rápido podemos linux !?"

Geralmente, os fabricantes de hardware e os desenvolvedores de sistemas operacionais estão trabalhando para tornar o processamento o mais rápido possível. No entanto, sua pergunta é muito geral: você deseja acelerar o tempo de inicialização, otimizar o acesso ao sistema de arquivos, acelerar os cálculos ou algo mais. Depois de ter uma pergunta mais específica, você certamente pode começar a encontrar o gargalo e removê-lo. Sua unidade SRAM certamente aceleraria seu processo de inicialização. Chegar a uma GUI em 3 segundos seria muito legal de se ver.

Phil Hannent
fonte
1

Nos dias de 486, costumava haver máquinas em que toda a RAM era SRAM. Isso voltou quando 8MB era muito, mas parece corresponder às suas restrições. Tenho certeza de que 8 MB de SRAM são muito mais baratos agora do que naquela época.

Portanto, você pode executar o Linux na SRAM se a máquina for feita dessa maneira. Não é teórico; já foi feito.

Mas, não no cache. O cache é conectado de maneira diferente e, mais importante, é tratado de maneira diferente. Você não pode resolver o mesmo. Os pedaços são mapeados de maneira diferente, não como um pedaço contínuo. E o conteúdo não é necessariamente o que você vê no disco - os chips Intel mais novos fazem uma espécie de "compilação" Just in time (mais de uma recodificação CISC => RISC-micro-op) onde as micro-ops são as coisas que acabam em cache. Resumindo, o que está no cache não é o seu programa, mas uma visão alterada dele; portanto, você não pode mais usá-lo como uma representação de memória do seu programa.

A questão é o porquê. Além de "porque eu posso", não há muitas razões para isso. O sistema de cache oferece a você o maior benefício de velocidade com muito menos custo. E lembre-se de que o custo não é apenas um dólar ... A SRAM leva mais transistores, o que significa mais eletricidade.

Rich Homolka
fonte