Por que a RAM parcialmente cheia causa atraso?

Por que a RAM parcialmente cheia causa atraso?

Por que a RAM parcialmente cheia (digamos 80%) faz com que o dispositivo fique muito lento, mesmo que haja espaço disponível para armazenar mais dados? O que espero é que continue funcionando bem até 99%.

Percebo isso no celular mais do que no PC, pois tem RAM menor, por exemplo, meu celular tem 2 GB de RAM; quando tenho menos de 1 GB de RAM livre, fica muito lento! Por que isso acontece, mesmo que ainda tenha cerca de 1 GB para usar?

Responder1

Há muita coisa envolvida aqui, mas tentarei explicá-lo da maneira mais simples possível e de uma forma aplicável a praticamente qualquer sistema operacional.

Existem 2 princípios básicos aqui:

  1. A soma total de tudo o que precisa estar na RAM e das coisas que se beneficiariam por estar na RAM é quase sempre maior que o tamanho da RAM. Coisas que se beneficiariam de estar na RAM incluem conjuntos de trabalho de processos e a lista de espera. Este último contém dados e códigos que já estiveram em uso ativo, mas que desde então ficaram inativos. Muito disso será usado novamente, parte dele em breve, por isso é benéfico mantê-lo na RAM. Essa memória atua como uma espécie de cache, mas não é realmente essencial, portanto está na categoria de memória disponível. Assim como a memória livre, ela pode ser fornecida rapidamente a qualquer programa que precise dela. No interesse do desempenho, a memória em espera deve ser grande.

  2. A frequência de uso de blocos de memória está longe de ser aleatória, mas pode ser prevista com considerável precisão. A memória é dividida em blocos, geralmente de 4K bytes. Alguns blocos são acessados ​​muitas vezes por segundo, enquanto outros não são acessados ​​por muitos minutos, horas, dias ou até semanas, se o sistema estiver ativo por tempo suficiente. Existe uma ampla gama de uso entre esses dois extremos. O gerenciador de memória sabe quais blocos foram acessados ​​recentemente e quais não. É razoável supor que um bloco de memória acessado recentemente será necessário novamente em breve. A memória que não foi acessada recentemente provavelmente não será necessária tão cedo. A longa experiência provou que este é um princípio válido.

O gerenciador de memória aproveita o segundo princípio para mitigar amplamente as consequências indesejáveis ​​do primeiro. Para fazer isso, ele faz um equilíbrio entre manter os dados acessados ​​recentemente na RAM e, ao mesmo tempo, manter os dados raramente usados ​​nos arquivos originais ou no arquivo de paginação.

Quando a RAM é abundante, esse equilíbrio é fácil. Muitos dos dados não usados ​​recentemente podem ser mantidos na RAM. Esta é uma boa situação.

As coisas ficam mais complicadas quando a carga de trabalho aumenta. A soma total de dados e códigos em uso é maior, mas o tamanho da RAM permanece o mesmo. Isso significa que um subconjunto menor disso pode ser mantido na RAM. Alguns dos dados usados ​​menos recentemente não podem mais estar na RAM, mas devem ser deixados no disco. O gerenciador de memória se esforça ao máximo para manter um bom equilíbrio entre a memória em uso ativo e a memória disponível. Mas à medida que a carga de trabalho aumenta, o gerenciador de memória será forçado a fornecer mais memória disponível para os processos em execução. Esta não é uma boa situação, mas o gerenciador de memória não tem escolha.

O problema é que mover dados de e para a RAM à medida que os programas são executados leva tempo. Quando a RAM é abundante, isso não acontecerá com muita frequência e nem será notado. Mas quando o uso de RAM atinge níveis elevados, isso acontecerá com muito mais frequência. A situação pode se tornar tão ruim que é gasto mais tempo movendo dados de e para a RAM do que realmente usando-os. Isso é uma sobrecarga, algo que o gerenciador de memória tenta muito evitar, mas com uma carga de trabalho alta muitas vezes não pode ser evitado.

O gerenciador de memória está ao seu lado, sempre tentando o melhor para manter o desempenho ideal mesmo em condições adversas. Mas quando a carga de trabalho é grande e a memória disponível é escassa, ele precisa fazer coisas ruins para continuar funcionando. Na verdade, isso é o mais importante. A prioridade é primeiro manter as coisas funcionando e depois torná-las o mais rápido possível.

Responder2

Todos os sistemas operacionais modernos usam memória não utilizada para armazenar dados em cache, de modo que possam ser acessados ​​​​a partir de uma RAM rápida em vez de um armazenamento mais lento. Eles geralmente relatam isso como memória livre, já que os aplicativos podem limpar o cache e usá-lo se necessário, mas ele ainda está sendo usado. Quanto menos houver, menos dados poderão ser armazenados em cache e mais lento será o computador.

Responder3

Esta resposta foi reescrita principalmente para reorganizar a estrutura e tornar a mensagem mais clara. Também abri como uma resposta do wiki da comunidade; Sinta-se à vontade para editar.

Paginação é um esquema de gerenciamento de memória por meio do qual blocos de memória de tamanho fixo têm processos atribuídos a eles. Quando o uso da memória atinge um nível alto (ou seja, 80% da capacidade), a paginação começa a se estender da RAM para a vRAM (RAM virtual).

A vRAM está localizada no armazenamento do sistema, geralmente em um disco rígido ou em outros locais de armazenamento de tamanho considerável.

Os processos recebem parte do seu disco rígido para serem executados como memória e tratarão sua seção como RAM. Este é um processo perfeitamente normal, porém, quando o tempo gasto para transferir dados de e para a vRAM aumenta, o desempenho do sistema diminui.

Enquanto a RAM dedicada é acessada diretamente pela placa-mãe a partir da CPU, o que fornece uma conexão rápida, a RAM virtual deve atravessar o cabeamento entre a placa e o local da vRAM.

No entanto, isso causa apenas um leve impacto no desempenho. Quando a taxa de paginação para vRAM aumenta drasticamente (quando a RAM dedicada se aproxima da capacidade), ocorre o thrashing.

Thrashing é a prática de transferir páginas de memória de forma rápida e rápida para sua memória virtual. Isso prejudica muito o desempenho, pois é necessário gastar mais tempo buscando e tratando dados.

Digamos que você queira escrever um número com 30 dígitos. Você pode sentar ao lado da tela com o bloco de notas e escrevê-lo (usando a memória dedicada), ou se lembrar de pedaços de 5, correr para a próxima sala e anotar no bloco de notas (usando a memória virtual). Ambos realizam o trabalho, mas qual será mais rápido?

Saiba mais sobrebatendo aqui!

Um grande obrigado aos contribuidores desta resposta, incluindoDaniel B.,xenóideeJon Bentley.

Responder4

Lembre-se, os discos rígidos são uma ordem de grandezaMais devagardo que a RAM, e a própria RAM não é tão rápida para começar (na arquitetura geral). Em ordem de velocidade de acesso (onde cada degrau é uma ordem de grandeza mais lenta que o anterior), você tem

  1. Registros do processador- Em termos práticos, os registos estão disponíveisdentro de 1 ciclo do processador. Considerando que os processadores realizam bilhões de ciclos por segundo (3 GHz = 3 bilhões de ciclos por segundo), isso é extremamente rápido.
  2. Cache do processador- Depende do nível, mas ainda são bastante rápidos (disponibilidade de 3 a 5 ciclos para cache L1).
  3. Memória de acesso aleatório (RAM)- A parte aleatória significa que você não sabe em que estado ele se encontra ao acessá-lo. Pense em um entregador de pacotes que tem que parar, pegar o pacote, ir até a porta, tocar a campainha e esperar uma resposta. Talvez você não espere nada, ou talvez espere um ou dois minutos para a Sra. Smith se arrastar até a porta dos fundos da casa. Em termos práticos, estamos falando de 14 a 27 ciclos (dependendo do estado da RAM quando a acessamos).
  4. Drive de disco rígido- Há um processo físico aqui agora e enquanto isso acontece o mais rápido possível, você está esperando que as cabeças se movam e as trilhas se movam sob essas cabeças. Em termos práticos,um HDD de 7.200 RPM pode completar uma revolução em cerca de 4 ms, ou em algum lugar ao redor750.000 ciclos para um processador de 3 GHz. Isso é lento.

O Virtual Memory Manager é um jogador. Ele está apostando que você não precisa de toda a sua RAM o tempo todo, então ele faz uma estimativa fundamentada e joga os dados de que o seu programa de documentos (que esteve em segundo plano nos últimos 10 minutos enquanto você lê isto) não é realmente importante e empurra-o para o disco rígido.

Mas então você clica de volta para o documento! Agora o VMM precisa carregar todos os dados do HDD. Pior ainda, se você estiver com pouca RAM, agora será necessário enviar outros dados (mais jogos) para o disco rígido para liberar espaço utilizável. O Linux gosta de viver no limite aqui. Ele preencherá a grande maioria da RAM com dados usados ​​com frequência (ótimo para servidores com poucos processos).

informação relacionada