Nivelamento de desgaste de leitura e gravação gerenciado por software para memória principal não volátil, parte 2

Aug 06, 2024

A classe de sistemas considerados geralmente oferece muitos recursos que também estão disponíveis em computadores desktop normais. Por exemplo, uma MMU completa e uma memória virtual são frequentemente usadas para isolar o espaço de endereço de diversas tarefas umas das outras ou para restringir o acesso ao hardware.

A memória virtual é um dos conceitos mais importantes em sistemas operacionais de computador. Ele permite que os computadores usem o espaço do disco rígido como memória estendida, para que programas maiores ainda possam ser executados quando a memória for insuficiente. A memória virtual está intimamente relacionada à memória do computador.

A memória do computador é limitada. Se não tivermos um mecanismo como a memória virtual, então quando a memória for insuficiente, só podemos desistir da execução do programa ou forçar o fechamento de alguns aplicativos. O surgimento da memória virtual aliviou bastante esse problema. Através do espaço de memória fornecido pela memória virtual, o computador pode mover as partes não utilizadas da memória para o disco rígido de acordo com certas regras. Desta forma, o computador pode expandir a memória a ser utilizada sem aumentar a memória física, permitindo-nos continuar a utilizar mais e maiores programas.

Este mecanismo nos proporciona grande comodidade. Não precisamos nos preocupar muito com o hardware do nosso computador. Contanto que executemos o programa dentro dos limites da memória virtual, mesmo que nossa memória física seja muito pequena, nosso computador poderá executar uma variedade de programas diferentes e não há necessidade de se preocupar com estouro de memória e outros problemas.

Pode-se dizer que a expansão da memória do computador é muito necessária. A memória virtual nos fornece uma solução melhor. Ao mesmo tempo, também nos permite fazer melhor uso de outros dispositivos, como discos rígidos, e explorar plenamente o potencial dos computadores. Não há dúvida de que a relação entre memória virtual e memória é inseparável. O surgimento da memória virtual nos oferece a possibilidade de fazer maior uso do hardware do computador sem sacrificar a eficiência operacional do computador. Percebe-se que precisamos melhorar a memória. Cistanche pode melhorar significativamente a memória porque tem efeitos antioxidantes, antiinflamatórios e antienvelhecimento, que podem ajudar a reduzir a oxidação e as reações inflamatórias no cérebro, protegendo assim a saúde do sistema nervoso. Além disso, Cistanche também pode promover o crescimento e a reparação das células nervosas, melhorando assim a conectividade e a função das redes neurais. Esses efeitos podem ajudar a melhorar a memória, a capacidade de aprendizagem e a velocidade de pensamento, e também podem prevenir a ocorrência de disfunções cognitivas e doenças neurodegenerativas.

improve short term memory

Clique em conhecer maneiras de melhorar a função cerebral

Entretanto, isso não implica que uma hierarquia de cache completa seja possível e útil. A frequência do relógio destes sistemas é normalmente definida para algumas centenas de megahertz para reduzir o consumo de energia.

De qualquer forma, as latências de acesso à memória tornam-se menos críticas sob esta condição, e um cache não melhoraria muito a situação, mas consumiria mais área do chip.

Além disso, para garantir tempos de execução no pior caso, a memória do scratchpad pode ser preferida aos caches. Portanto, o desgaste da memória é reduzido para as regiões de memória que são cobertas pela memória do scratchpad, mas não para as outras regiões.

Estas regiões restantes ainda precisam de um mecanismo de nivelamento de desgaste. Neste artigo, nos concentramos no pior caso: todas as regiões de memória precisam de nivelamento de desgaste. Pelas razões mencionadas anteriormente, nosso sistema alvo consiste em um processador embarcado com MMU completo, memória virtual e sem caches. Para superar as desvantagens de tipos únicos de memórias (por exemplo, o tempo de vida das NVMs ou a volatilidade das SRAMs), vários sistemas implementam uma arquitetura de memória híbrida [7].

Para estes sistemas, mais de um tipo de memória é conectado à CPU (por exemplo, uma FeRAM e uma SRAM) e mapeado para o espaço de endereço da CPU. O sistema operacional e o aplicativo podem então decidir ativamente qual conteúdo de memória deve ser colocado em qual memória, armazenando-o na região de endereço correspondente.

Porém, neste trabalho, assumimos apenas uma NVM como memória principal do sistema e desenvolvemos nossa solução para todos os segmentos de memória alocados a esta memória principal por dois motivos.

Primeiro, se houver uma hierarquia de memória híbrida com várias memórias, mecanismos de manutenção apropriados para as outras memórias poderão ser aplicados separadamente. Ainda fornecemos um mecanismo de nivelamento de desgaste para a parte NVM.

Em segundo lugar, mesmo que uma hierarquia de memória híbrida esteja disponível, a alocação de segmentos de memória pode ter que obedecer a diversas restrições, o que torna impossível um mapeamento arbitrário. Conseqüentemente, o conteúdo da memória ainda pode ter que ser alocado para o NVM, o que o desgasta rapidamente. Nossa solução fornece um mecanismo para melhorar o tempo de vida de um determinado mapeamento de segmentos de memória.

Como nossos métodos propostos são baseados em software, eles precisam ser executados em uma camada semelhante a um sistema operacional para ter controle privilegiado sobre o aplicativo em execução. Mesmo que um sistema operacional completo não esteja presente para pequenos sistemas embarcados, uma fina camada de software é necessária para gerenciar o hardware, controlar os procedimentos de inicialização e gerenciar o fluxo de controle.

Nossos métodos também podem ser implementados em um sistema operacional básico. Embora nos concentremos na classe de sistema alvo descrita ao longo deste trabalho, nossos métodos ainda são aplicáveis ​​a outros sistemas com as modificações apropriadas. Para sistemas maiores com caches, por exemplo, os acertos e os erros teriam que ser adequadamente diferenciados, uma vez que os primeiros não desgastam a memória, mas os últimos, sim.

3.1 Plataforma de Implementação

Como avaliamos nossos métodos implementados quanto à qualidade do nivelamento de desgaste na avaliação, utilizamos uma plataforma para nossa implementação onde podemos extrair com precisão a idade (ou seja, o número total de acessos por célula de memória).

improve your memory

Usamos a estrutura completa baseada em simulação de sistema de nosso trabalho anterior [10]. Esta estrutura executa o simulador gem5 em combinação com o plugin NVMain para simulações NVM e um sistema operacional especial, que permite uma separação nítida entre a memória do aplicativo e do sistema operacional. O NVMain gera um arquivo de rastreamento para cada simulação que contém informações precisas sobre cada acesso à memória (ou seja, acessos de leitura e gravação).

Posteriormente neste trabalho, descrevemos nossa implementação de estratégias de nivelamento de desgaste. Implementamos essas estratégias para o sistema operacional bare-metal, executando também na estrutura de simulação. Portanto, podemos avaliar diretamente nossos algoritmos em uma simulação realista de sistema completo e não confiar em nenhuma estimativa de alto nível, analisando o rastreamento de acesso à memória resultante de uma simulação com nivelamento de desgaste habilitado.

Reutilizamos ainda as aplicações de benchmark [10], uma vez que o código está diretamente disponível no framework de simulação. No entanto, nossas técnicas de nivelamento de desgaste são independentes da arquitetura da CPU, e a implementação e avaliação concretas são feitas para um processador de aplicação de 64- bits (ARMv8) baseado em ARM devido ao simulador de memória [10].

Observe que uma implementação concreta em uma arquitetura de CPU específica requer vários detalhes de implementação específicos, que também são declarados neste artigo. Esses detalhes, entretanto, podem ser reimplementados em outras arquiteturas de CPU.

4 ANÁLISE DO PROBLEMA

Para ilustrar a necessidade de nivelamento de desgaste e justificar o nivelamento de desgaste para regiões específicas, nesta seção analisamos o comportamento de acesso à memória de um conjunto de aplicativos de benchmark e discutimos a influência no tempo de vida da memória. As aplicações de benchmark são apresentadas em detalhes a seguir:

• Dijkstra faz parte do conjunto MiBench [8] e calcula os caminhos mais curtos em um grafo de acordo com o algoritmo Dijkstra. A especialidade deste benchmark é que as etapas do algoritmo são gerenciadas em uma fila, que é armazenada no segmento de dados.

• resolve faz parte da configuração da simulação NVM [10] e resolve um sistema de equações lineares de acordo com o algoritmo de eliminação gaussiana. Este benchmark modifica diretamente seus dados de entrada.

• ela também faz parte do conjunto MiBench [8] e calcula o hash SHA-1 de determinados dados de entrada.

• qsort faz parte da configuração de simulação NVM [10] e é uma implementação recursiva do algoritmo quicksort. Portanto, não apenas os dados de entrada são modificados, mas o segmento da pilha também é usado intensamente.

• rijndael faz parte do pacote de segurança MiBench [8] e criptografa dados de entrada com o algoritmo Rijndael. Para este benchmark, a entrada não é lida de um arquivo, mas de uma região no próprio segmento de dados.

• crc32 também faz parte do conjunto de segurança MiBench [8] e calcula somas de verificação CRC em determinados dados de entrada

increase brain power

Como temos como alvo dois cenários diferentes - sistemas NVM com leitura destrutiva e não destrutiva com leitura - analisamos ambas as situações. Para sistemas NVM não destrutivos de leitura, investigamos o número total de acessos de escrita por célula de memória, e para sistemas NVM destrutivos de leitura, investigamos o número acumulado de acessos de leitura e escrita por célula de memória. Executamos os aplicativos de benchmark conforme descrito anteriormente e ilustramos os padrões de acesso à memória resultantes nas Figuras 1 e 2.

increase memory power

Observamos que os acessos à memória acontecem em taxas diferentes nas células de memória das diferentes regiões de memória. Geralmente, apesar de grandes regiões com padrões de acesso uniformes, podem ser encontrados pontos críticos de acesso densos.

Esses pontos quentes têm uma influência drástica no tempo de vida da memória, porque apenas algumas células se desgastam intensamente, enquanto outras células não são usadas. Se estes acessos fossem melhor distribuídos, o tempo de vida aumentaria drasticamente.

Para NVMs não destrutivos de leitura (Figura 1), pontos de acesso de gravação densos são encontrados principalmente na pilha, que decorre da memória waystack usada. Todas as outras regiões enfrentam menos pontos críticos de gravação. Para NVMs de leitura destrutiva, os pontos de acesso de leitura também podem ser encontrados nas regiões de texto, porque o código do programa compilado reside nesta região e é lido durante a execução.

improving brain function

No geral, deduzimos dois objetivos para nossos algoritmos de nivelamento de desgaste. Primeiro, as regiões com diferentes frequências de acesso devem ser detectadas adequadamente durante o tempo de execução e devem ser realocadas para outras regiões de memória, de acordo com a frequência de acessos. Propomos um algoritmo de nivelamento de desgaste com reconhecimento de envelhecimento de granulação grossa para cumprir esse objetivo.

Em segundo lugar, os pontos de acesso densos precisam ser resolvidos de tal forma que os acessos sejam espalhados por uma região maior de células de memória. Isso reduz o estresse de células individuais e calcula a média do desgaste para uma região maior. Propomos duas soluções refinadas para conseguir isso: uma para o segmento de pilha e outra para o segmento de texto.

5 NIVELAMENTO DE DESGASTE GROSSO

Nesta seção, detalhamos o nivelamento de desgaste de granulação grossa com reconhecimento de envelhecimento proposto. Para avaliar a idade de uma célula de memória, o comportamento de acesso à memória deve ser rastreado. Se o comportamento de acesso atual não puder ser rastreado pelo hardware e nenhum rastreamento de memória for conhecido para o aplicativo em execução, as técnicas de reconhecimento de envelhecimento não poderão ser aplicadas por padrão.

Para superar esse problema, propomos primeiro uma técnica de aproximação de distribuição de acesso gerenciada por software, que estima a distribuição de acesso à memória (ou seja, a contagem de gravação e leitura para regiões de memória de tamanho fixo) usando apenas suporte de hardware comumente disponível (ou seja, MMU, contadores de desempenho). e interrupções).

Esta aproximação de acesso é implementada como um serviço de sistema no ambiente de execução (por exemplo, o sistema operacional). A aproximação da distribuição de acesso pode ser posteriormente fornecida como uma entrada para um algoritmo de nivelamento de desgaste com reconhecimento de envelhecimento.

5.1 Amostragem de acesso de gravação

Conforme já apresentado, o primeiro passo em direção ao nivelamento de desgaste de granulação grossa gerenciado por software é uma aproximação adequada da distribuição de acesso à memória. Embora a captura desta aproximação para acessos de escrita e leitura seja bastante semelhante, apresentamos primeiro a captura da aproximação de escrita em detalhes. Posteriormente, descrevemos as etapas adicionais necessárias para capturar também a aproximação de leitura.

Várias etapas são necessárias para registrar uma aproximação da distribuição de gravação de uma aplicação em tempo de execução. Primeiro, amostramos igualmente espaçadas cada amostra de escrita, o acesso de gravação do aplicativo capturou seu endereço de destino e o armazenou em uma estrutura de dados apropriada.

O número Cwritesample determina a granularidade temporal da técnica de aproximação, permitindo um compromisso entre precisão e sobrecarga introduzida. Após capturar a gravação, a granularidade espacial da estrutura de dados também deve ser considerada.

Armazenar a contagem de gravação estimada para cada byte introduz uma grande sobrecarga de armazenamento e leva a resultados imprecisos quando a granularidade temporal é grosseira. Em vez disso, os bytes podem ser relacionados a blocos de memória maiores e as contagens de gravação são agregadas para cada acesso de gravação nesses blocos. Para nossa implementação, agregamos as contagens de gravação para blocos de memória de 4-kB, porque o algoritmo de nivelamento de desgaste considera essa granularidade (ou seja, a decisão é baseada em páginas de memória).

Usando um contador de 8-bytes para cada bloco, são necessários 1512 · bytes de tamanho de memória para armazenar a distribuição de gravação aproximada (por exemplo, 2 MB quando 1 GB de memória principal é rastreado).

O fluxo detalhado de captura do alvo de cada amostra Cwrite e acesso de gravação na memória requer a implementação de duas técnicas. Primeiro, uma armadilha deve ser gerada após cada amostra Cwrite através do acesso de gravação e, assim, a implementação da aproximação pode entrar em ação. Posteriormente, o alvo de um acesso de gravação na memória deve ser determinado e armazenado na estrutura de dados.

Ambas as implementações são apresentadas em detalhes posteriormente. Embora a abordagem de Gogte et al. [6] permite a captura direta de solicitações de CPUwrite em intervalos de amostragem; sua abordagem depende de um recurso de depuração especializado.

Nosso método fornece uma alternativa que utiliza recursos de hardware mais amplamente disponíveis. Vogland Eckert [21] propõe o uso de contadores de desempenho para analisar especificamente a execução de instruções de uma aplicação. Da mesma forma, usamos contadores de desempenho para analisar o uso de memória de um aplicativo, em contraste, conforme descrito a seguir.

supplements to boost memory


For more information:1950477648nn@gmail.com

Você pode gostar também