| Anatomia da Memória Compartilhada do Kernel Linux |
|
|
|
| Escrito por M. Tim Jones | |
| Sex, 04 de Fevereiro de 2011 01:29 | |
|
Resumo: O Linux® , como hypervisor, inclui uma série de inovações, e uma das mudanças mais interessantes no kernel 2.6.32 é a Kernel Shared Memory (KSM). A KSM permite que o hypervisor aumente o número de máquinas virtuais simultâneas, consolidando páginas de memória idênticas. Explore as ideias por trás da KSM (como deduplicação de armazenamento), sua implementação e como gerenciá-la. A engenharia de software tende a ser um processo evolutivo. Os problemas são abordados com soluções que podem criar novos problemas e, consequentemente, novas soluções. De modo ideal, os novos problemas que são criados justificam a solução original. A tecnologia discutida aqui é uma das soluções secundárias para um problema criado pela virtualização do servidor. Antes de nos aprofundarmos na KSM, no entanto, vamos dar uma olhada rápida na solução original e como a KSM é aplicada aqui e em outros locais. A virtualização, como tecnologia, começou a aparecer por volta dos anos 1960, popularizada pelo mainframe do IBM® System/360® . Cinco décadas depois, a virtualização explodiu, tornando possível compartilhar um único servidor com vários sistemas operacionais e aplicativos. Esse uso em particular, chamado de virtualização do servidor, está transformando centro de dados, já que uma única máquina física pode ser usada para hospedar normalmente 10 ou mais máquinas virtuais (VMs), como mostrado na figura 1. Essa virtualização permite que a infraestrutura seja muito mais dinâmica, com uso eficiente de energia, e (portanto) mais econômica. Consulte a seção Recursos para obter mais informações sobre virtualização de servidor e seus benefícios.
Com apenas 10% a 15% de um servidor típico em uso em um dado momento, consolidar servidores virtuais em um único servidor físico faz muito sentido. Mas, e os recursos? Os principais recursos disponíveis incluem CPU, memória e largura da banda da rede. A CPU e a rede normalmente são subutilizadas, de modo que a questão principal se torna a memória disponível. Cada sistema operacional faz suas próprias demandas exclusivas em relação aos recursos de memória disponíveis. Mas a questão é: o quão exclusivas são essas demandas? Acontece que, se você virtualizar muito os mesmos conjuntos de sistema operacional e aplicativo, muitas páginas de memória serão idênticas. Isso faz sentido, já que o sistema operacional e o código do aplicativo e dados constantes são idênticos entre as VMs. E quando as páginas são exclusivas, elas podem ser consolidadas, o que libera memória para uso em outros aplicativos. A figura 2 ilustra o compartilhamento de memória e mostra o benefício de mais memória livre disponível quando páginas são compartilhadas entre VMs cujo conteúdo é o mesmo.
O que você descobrirá bem cedo é que, embora o compartilhamento de memória em Linux seja vantajoso em ambientes virtualizadas (a KSM foi projetada originalmente para uso com a máquina virtual baseada em kernel [KVM]); ela também é útil em ambientes não virtualizados. De fato, descobriu-se que a KSM é muito benéfico, mesmo em sistemas Linux integrados, indicando a flexibilidade da abordagem. Agora, vamos explorar a abordagem do Linux em relação ao compartilhamento de memória e como é possível usá-lo para aumentar a densidade da memória de um servidor e, portanto, aumentar sua capacidade de hospedar aplicativos ou VMs adicionais. Paralelos com outras tecnologias Um avanço recente em tecnologias de armazenamento chamado deduplicação é um precursor do compartilhamento de memória no Linux e outros hypervisores. A deduplicação é uma tecnologia na qual os dados armazenados são reduzidos removendo-se os dados redundantes ( em uma base de bloco ou em segmentos maiores de dados, como arquivos). Os segmentos comuns são mesclados (na forma copiar ao gravar [CoW]), liberando espaço para outros usos. A deduplicação de armazenamento é uma tecnologia importante que está avançando, já que otimiza a capacidade de armazenamento ao remover dados duplicados. Dessa forma, o armazenamento é mais barato, porque, no final das contas, menos armazenamento é necessário. Dada a taxa de crescimento de dados, essa funcionalidade é bastante relevante.
A KSM existe em um daemon no kernel (chamado A KSM depende de um aplicativo de nível mais alto para fornecer instruções sobre quis regiões da memória são candidatas à mesclagem. Embora seja possível para a KSM simplesmente varrer todas as páginas anônimas no sistema, isso seria desperdício da CPU e da memória (dado o espaço necessário para gerenciar o processo de mesclagem de página). Portanto, os aplicativos podem registrar as áreas virtuais que provavelmente contêm páginas duplicadas.
A interface de programação de aplicativos (API) da KSM é implementada através do chamado de sistema
Quando uma região é definida como mesclável, a KSM adiciona essa região à sua lista de memória em funcionamento. Quando a KSM é ativada, ela procura páginas idênticas, mantendo uma página na forma CoW protegida contra gravação e liberando a outra para outros usos. A KSM usa uma abordagem que é diferente da abordagem usada em deduplicação de armazenamento. Em uma deduplicação tradicional, os objetos estão em hash, e o valor do hash é usado como verificação inicial em relação à similaridade. Quando hashes são idênticos, a próxima etapa é uma comparação dos objetos reais (neste caso, uma comparação de memória) para determinar formalmente se os objetos são idênticos. A KSM usou essa abordagem em sua primeira implementação, mas uma abordagem mais direta foi desenvolvida para simplificá-la. Na KSM atual, as páginas são gerenciadas por duas árvores vermelhas e pretas, uma das quais é efêmera. A primeira árvore, chamada de árvore instável, é usada para armazenar novas páginas que ainda não são consideradas estáveis. Em outras palavras, as páginas que são candidatas à mesclagem (não modificadas por certo tempo) são armazenadas na árvore instável. As páginas na árvore instável não são protegidas contra gravação. A segunda árvore, chamada de árvore estável, armazena essas páginas que não foram consideradas estáveis e que foram mescladas pela KSM. Para identificar se uma página é volátil ou não volátil, a KSM usa uma soma de verificação simples de 32 bits. Quando uma página é varrida, sua soma de verificação é calculada e armazenada com a página. Em uma varredura subsequente, se uma soma de verificação recém-calculada for diferente da soma de verificação gerada anteriormente, a página está sofrendo mudanças e não é, portanto, uma boa candidata à mesclagem.
A primeira etapa ao lidar com uma única página usando o processo da KSM é ver se a página pode ser encontrada na árvore estável. O processo de procura da árvore é interessante no sentido de que cada página é tratada como um número muito alto (o conteúdo da página). Uma operação
Se a página candidata for localizada na árvore estável, então ela está mesclada e a página candidata liberada. Esse código por ser encontrado em ksm.c/ A primeira etapa da procura em árvore instável é recalcular a soma de verificação da página. Se for diferente da soma de verificação original, a página é descartada da procura nessa varredura (porque se ela mudar, não vale a pena controlar). Se a soma de verificação não foi modificada, a página candidata é procurada na árvore instável. O processamento da árvore instável é um pouco diferente do da árvore estável. Primeiro, se a procura não localizar a página na árvore instável, adiciona-se um novo nó na árvore instável para essa página. Mas, se a página for localizada na árvore instável, as páginas são mescladas e o nó é migrado para a árvore estável.
Quando a varredura estiver concluída (realizada através de ksm.c/ Como discutido, a KSM usa árvores vermelhas e pretas para gerenciar as páginas para uma consulta rápida. O Linux inclui, na verdade, árvores vermelhas e pretas como estrutura de dados reutilizável, e elas podem ser usadas de forma genérica. As árvores vermelhas e pretas também são usadas pelo Completely Fair Scheduler (CFS) para armazenamento de tarefas na ordem de tempo. É possível localizar a implementação de árvores vermelhas e pretas no kernel em ./lib/rbtree.c. Configuração e monitoramento da KSM O gerenciamento e monitoramento da KSM ocorrem através de sysfs (na raiz /sys/kernel/mm/ksm). Nesse subdiretório sysfs subdirectory, você encontrará uma coleção de arquivos, alguns usados para controle e outros usados para monitoramento.
O primeiro arquivo, run, é usado para ativar ou desativar a mesclagem de páginas com a KSM. Por padrão, a KSM está desativada (
Enquanto a KSM é executada, é possível controlá-la com três parâmetros (arquivos dentro do sysfs). O arquivo sleep_millisecs define quantos milissegundos
Há também cinco arquivos monitoráveis exportados através do sysfs que indica a operação e eficácia de
Os criadores da KSM definem que uma proporção alta de pages_sharing e pages_shared indica compartilhamento eficiente de páginas (considerando que o reverso é indicativo de esforço desperdiçado). O Linux não está sozinho no uso de compartilhamento de página para melhorar a eficiência da memória, mas é exclusivo em sua implementação como recurso do sistema operacional. O hypervisor do servidor EXS de VMware fornece esse recurso com o nome de Transparent Page Sharing (TPS), enquanto o XEN o chama de Memory CoW. Mas, qualquer que seja o nome ou implementação, o recurso fornece um melhor uso da memória, permitindo que o sistema operacional (ou hypervisor, no caso, KVM) comprometa bastante a memória para suportar números maiores de aplicativos ou VMs. É possível encontrar a KSM—e muitos outros recursos interessantes—no kernel Linux 2.6.32 mais recente.
Aprender
Obter produtos e tecnologias
Discutir
|
|
| Última atualização em Sex, 04 de Fevereiro de 2011 20:09 |


