O Alibaba Cloud Linux oferece duas interfaces de kernel, force_copy e stats, para otimizar o desempenho do JBD2 em sistemas de arquivos ext4. Use force_copy para reduzir a latência de journaling causada pelo estado BH_Shadow e stats para diagnosticar se o JBD2 é a source de problemas de qualidade de serviço (QoS) do sistema de arquivos.
Funcionamento
O ext4 é um sistema de arquivos com journaling amplamente utilizado. O JBD2 é a thread de kernel que gerencia o journal do ext4 e atua como recurso global do sistema de arquivos. Quando o JBD2 acessa uma página de cache no estado BH_Shadow, precisa aguardar a gravação da página de volta no disco. Isso aumenta a latência de E/S e degrada o desempenho geral.
A interface force_copy copia a página de cache em vez de esperar a liberação do estado BH_Shadow, o que reduz o tempo de bloqueio do JBD2 durante a gravação no disco.
Versões compatíveis
|
Distribuição |
Versão mínima do kernel |
|
Alibaba Cloud Linux 2 |
|
|
Alibaba Cloud Linux 3 |
Todas as versões |
Referência da interface
force_copy
|
Propriedade |
Valor |
|
Caminho |
/proc/fs/jbd2/<device>-8/force_copy |
|
Padrão |
Desativado ( |
|
Valores válidos |
|
|
Função |
Força a cópia da página de cache para evitar a espera pelo estado BH_Shadow |
Substitua <device> pelo nome do dispositivo de armazenamento em bloco, como nvme0n1.
Ative force_copy aumenta o consumo de memória. Verifique a memória disponível antes de ativar esse recurso em instâncias com pouca memória.
stats
|
Propriedade |
Valor |
|
Caminho |
/proc/fs/jbd2/<device>-8/stats |
|
Função |
Exibe estatísticas de transação do JBD2 para diagnosticar problemas de QoS do sistema de arquivos |
Substitua <device> pelo nome do dispositivo de armazenamento em bloco, como nvme0n1.
Ative force_copy
Execute o comando a seguir para ative force_copy. Substitua nvme0n1 pelo nome do seu dispositivo de armazenamento em bloco.
echo 1 > /proc/fs/jbd2/nvme0n1-8/force_copy
Para desativar force_copy:
echo 0 > /proc/fs/jbd2/nvme0n1-8/force_copy
Leia a saída de stats
Execute o comando a seguir para consultar as estatísticas de transação do JBD2:
cat /proc/fs/jbd2/nvme0n1-8/stats
Exemplo de saída:
337 336 65536 0 14837 1701504 16 0 20058 5 33082732 605 942 1000 1000
A saída contém 15 campos separados por espaços. A tabela a seguir descreve cada campo.
|
Campo |
Posição |
Descrição |
|
ID da transação |
1º |
ID da transação atual |
|
Transações solicitadas |
2º |
Quantidade de transações solicitadas |
|
Máximo de transações em cache |
3º |
Número máximo de transações armazenadas em cache |
|
Tempo de espera |
4º |
Tempo de espera da transação para processamento |
|
Latência da solicitação |
5º |
Latência da solicitação da transação |
|
Tempo de execução |
6º |
Duração da execução da transação |
|
Tempo de bloqueio |
7º |
Duração do bloqueio da transação |
|
Tempo de flush |
8º |
Tempo necessário para fazer o flush da transação |
|
Tempo de log |
9º |
Tempo necessário para registrar a transação no log |
|
Tempo médio de commit |
10º |
Tempo médio para confirmar a transação |
|
Handles |
11º |
Quantidade de handles na transação |
|
Blocos |
12º |
Número de blocos na transação |
|
Blocos registrados |
13º |
Quantidade de blocos gravados para a transação |
|
Constante de tempo (Hz) |
14º |
Constante de tempo do kernel ( |
|
Constante de tempo (ms) |
15º |
Constante de tempo do kernel. Unidade: milissegundos |
Use os campos 14 e 15 para converter os campos baseados em tempo de ticks para a unidade desejada. Compare a saída de stats antes e depois de ative force_copy para medir a melhoria de latência na sua carga de trabalho.