Todos os produtos
Search
Central de documentação

Alibaba Cloud Linux:O que fazer se o desempenho de gravação de buffer I/O de um sistema de arquivos Ext4 em uma instância ECS do Alibaba Cloud Linux 2 não atender às expectativas?

Última atualização: Jun 29, 2026

Se a sua instância do Elastic Compute Service (ECS) com Alibaba Cloud Linux 2 executar um sistema de arquivos Ext4 montado com as opções dioread_nolock e nodelalloc, o throughput de gravação de buffer I/O poderá ficar muito abaixo da performance nominal do block storage. Este tópico explica as configurações afetadas, a causa raiz e como corrigir o problema.

Verifique se a sua instância é afetada

A instância só será afetada se todas as três condições abaixo forem verdadeiras:

  • Versão da imagem: de aliyun-2.1903-x64-20G-alibase-20190327.vhd (inclusiva) até aliyun_2_1903_x64_20G_alibase_20220525.vhd (exclusiva).

  • Versão do kernel: de kernel-4.19.24-9.al7 (inclusiva) até kernel-4.19.91-26.al7.x86_64 (exclusiva). Execute uname -r para verificar.

  • Opções de montagem: o sistema de arquivos Ext4 está montado com dioread_nolock e nodelalloc simultaneamente.

As opções dioread_nolock e nodelalloc não são padrões de montagem. Se você não as definiu explicitamente, provavelmente sua instância não é afetada.

Para confirmar as opções de montagem, execute os comandos a seguir:

  1. Identifique a partição de disco que contém o diretório de gravação de destino. Substitua <$DIR> pelo caminho do seu diretório de destino.

    df <$DIR> | grep -v Filesystem | awk '{ print $1 }'
  2. Verifique o tipo de sistema de arquivos e as opções de montagem dessa partição. Substitua <$Partition> pelo nome da partição obtido na etapa anterior.

    mount | grep -w <$Partition> | grep ext4 | grep -w dioread_nolock | grep -w nodelalloc

    Se o comando retornar alguma saída, sua instância é afetada.

Sintomas

Quando o problema ocorre, o throughput de gravação de buffer I/O cai significativamente — geralmente para cerca de 30 MB/s — ficando muito abaixo do desempenho do block storage esperado para a instância ECS.

A saída do comando iostat -xm 1 abaixo exemplifica o estado degradado (observe a coluna wMB/s):

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00   12.77    0.00    0.00   87.23

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
vdb               0.00  7194.00    0.00   57.00     0.00    28.05  1008.00     0.02   17.81    0.00   17.81   0.39   2.20

É possível reproduzir o problema com:

  • Cópia de arquivos grandes: cp <$LargeFiles> /mnt/badfile (use arquivos maiores que 2 GiB para desencadear o problema)

  • dd sem flags de sincronização: dd if=/dev/zero of=/mnt/badfile bs=10M count=1000

Causa raiz

Quando um sistema de arquivos Ext4 é montado com dioread_nolock e nodelalloc simultaneamente, o kernel gera uma grande quantidade de páginas sujas (dirty pages) de 4 KB chamadas unwritten extents. Um defeito na lógica de processamento do sistema de arquivos Ext4 impede a mesclagem dessas páginas em páginas gigantes (huge pages) antes do writeback. A função ext4_writepages passa então a processar cada página individualmente, consumindo tempo excessivo na busca e no mapeamento das páginas sujas de 4 KB, o que resulta em um throughput de gravação extremamente baixo.

Para observar esse comportamento, use a ferramenta perf para monitorar o processo de writeback do page cache do kernel.

Soluções

Há duas soluções disponíveis. A Solução 1 tem efeito imediato e não requer reinicialização.

Solução 1: Remontar o sistema de arquivos Ext4 sem as opções problemáticas

Esta solução entra em vigor imediatamente, sem necessidade de reiniciar a instância.

  1. Remonte o sistema de arquivos Ext4 usando a opção delalloc (padrão), removendo dioread_nolock e nodelalloc. Substitua os espaços reservados pelos valores reais.

    Espaço reservado

    Descrição

    Como encontrar

    <$Device>

    Nome do dispositivo do sistema de arquivos Ext4

    Consulte a coluna NAME na saída do comando lsblk

    <$MountPoint>

    Ponto de montagem do sistema de arquivos Ext4

    Use um diretório vazio existente ou crie um com sudo mkdir -p <new-directory>

    sudo mount -o remount,delalloc <$Device> <$MountPoint>
  2. Torne a alteração persistente entre reinicializações removendo nodelalloc da entrada correspondente a este sistema de arquivos no arquivo /etc/fstab. Sem essa etapa, as opções de montagem voltarão para nodelalloc após uma reinicialização. A opção padrão delalloc não precisa ser especificada explicitamente no /etc/fstab, pois sistemas de arquivos Ext4 já a utilizam por padrão.

  3. Verifique se o desempenho de gravação foi restaurado. Execute iostat -xm 1 e confirme se o valor de wMB/s corresponde ao desempenho do block storage esperado para sua instância ECS.

Solução 2: Atualizar o kernel

Esta solução corrige o defeito subjacente permanentemente, mas exige uma reinicialização.

Aviso

Atualizações de kernel podem causar problemas de compatibilidade e estabilidade. Revise as notas de versão do Alibaba Cloud Linux 2 antes de prosseguir. Faça backup dos dados críticos da instância e agende a reinicialização para horários de menor movimento, pois ela interrompe temporariamente a instância e pode afetar serviços em execução.

  1. Atualize para a versão mais recente do kernel.

    sudo yum update kernel
  2. Reinicie a instância para que o novo kernel entre em vigor.

    sudo reboot
  3. Após a reinicialização da instância, verifique se o desempenho de gravação foi restaurado. Execute iostat -xm 1 e confirme se o valor de wMB/s corresponde ao desempenho do block storage esperado para sua instância ECS.