Despejo

No servidor Couchbase, o subsistema de armazenamento Plasma usado pelo Global Secondary Index é inicializado com um valor específico a ser usado como cota de memória. O subsistema de armazenamento monitora constantemente o uso da memória e adere à cota de memória liberando a memória alocada que não é obrigatória. A liberação de memória é geralmente chamada de evicção. Neste artigo, faremos uma descrição dos algoritmos de evicção usados e dos parâmetros de configuração que podem ser ajustados para controlar efetivamente o processo de evicção.

O subsistema de armazenamento organiza os dados que gerencia em páginas de tamanho variável na memória. Ele rastreia o uso da memória e começa a despejar páginas no disco quando o uso da memória ultrapassa a cota de memória atribuída. Depois de despejar um número suficiente de páginas para que a memória usada fique abaixo da cota, o despejo é interrompido. Esse processo de acionamento do despejo quando a memória usada ultrapassa a cota de memória é chamado de "Evasão por explosão". O Burst Eviction interrompe as mutações e varreduras até que a memória usada fique abaixo da cota. Isso afeta negativamente o uso da CPU, a latência e a taxa de transferência do sistema.

Para atenuar os impactos negativos sobre a latência e a taxa de transferência causados pelo Burst Eviction, outro tipo de despejo, "Despejo periódico", também é executado junto com ele. O despejo periódico é acionado em intervalos regulares, chamados de intervalo de varredura, para verificar as páginas na memória e rastrear as páginas usadas ativamente. O subconjunto de páginas usadas ativamente por mutações ou varreduras entre o intervalo de varredura atual e o anterior é chamado de conjunto de trabalho. A remoção das páginas que não estão no conjunto de trabalho criará espaço livre no caso de um pico no uso da memória e também manterá as páginas necessárias na memória. Quando a memória usada está acima da cota ou acima de um limite mínimo predefinido, as páginas que não estão no conjunto de trabalho são removidas pelo thread do swapper. Os threads do swapper também são executados em intervalos regulares e muito mais curtos.

A cota de memória, que é aplicável a todas as instâncias do Plasma em um nó, é definida por meio do GSI. O Plasma garante que todas as instâncias cumpram essa cota de memória, tentando liberar as alocações que não são obrigatórias. Quando a memória usada ultrapassa a cota, as páginas que não estão no conjunto de trabalho são encontradas e removidas pelo thread swapper para reduzir a memória usada. Esse despejo contínuo é interrompido quando a memória usada fica abaixo da cota. Quando o despejo contínuo é executado novamente, ele precisa encontrar novamente as vítimas para despejar. Para tornar o despejo eficiente, o thread swapper usa o algoritmo de relógio para marcar e varrer as páginas a serem despejadas. Ele é executado periodicamente para marcar as páginas de vítimas a serem despejadas, facilitando para o despejo contínuo encontrar páginas de vítimas a serem despejadas.

Parâmetro de configuração

Os seguintes parâmetros de configuração são usados para controlar a eficácia do processo de despejo para manter o uso da memória abaixo da cota alocada.

evictSweepInterval: Intervalo de tempo, em segundos, no qual o despejo periódico varrerá as páginas de índice para criar o conjunto de trabalho. Por padrão, a varredura é executada a cada 600 segundos. Isso pode ser aumentado pelo cliente se ele quiser manter mais memória usada. Os comandos abaixo são exemplos para aumentar esse intervalo para 1.200 segundos.

Estatísticas

As estatísticas de armazenamento a seguir são úteis para analisar a eficácia do uso da memória de armazenamento. Com base nessas estatísticas, os parâmetros de configuração de despejo acima podem ser ajustados para obter uma configuração eficaz de uso da memória.

taxa de acerto do cache: Essa é a proporção de acessos ao cache em relação ao número total de tentativas de leitura de uma página com base na atividade dos últimos 5 segundos. Quanto maior for a taxa de acertos no cache, melhor, pois ir para o disco é caro.

taxa de acerto do cache: Semelhante à estatística cache_hit_ratio, mas apenas para varreduras

resident_ratio: Essa estatística é a fração de registros de página que já estão na memória. Isso varia de acordo com o conjunto de trabalho do índice. Se esse valor for pequeno e se o cache_hit_ratio for alto, isso significa que o conjunto de trabalho é pequeno.

Autor

Postado por Srinath Duvuru, gerente de engenharia de software, Couchbase

Gerente de desenvolvimento de software - Armazenamento

Um comentário

  1. rajib_deb@infosys.com outubro 7, 2021 em 7:30 pm

    Olá Srinath, este é um artigo muito bom para entender o GSI baseado em plasma. Tenho apenas uma pergunta. O sweepinterval é de 600 segundos ou 300. No config.go, vejo que ele está definido como 300 segundos

    "indexer.plasma.mainIndex.evictSweepInterval": ConfigValue{
    300,
    "Intervalo de tempo para varrer todas as páginas em um índice (em segundos)",
    300,
    false, // mutável
    false, // não diferencia maiúsculas de minúsculas
    },

Deixar uma resposta