Todos os produtos
Search
Central de documentação

Alibaba Cloud Linux:Configure blk-iocost weight-based throttling

Última atualização: Jun 29, 2026

A limitação baseada em peso do blk-iocost aprimora o controle de disco do subsistema de E/S cgroup (blkcg) no Alibaba Cloud Linux. Esse recurso aloca a largura de banda de E/S de dispositivos de bloco conforme a prioridade da aplicação ou do processo. Configure os valores de peso para limitar a largura de banda de E/S por aplicação ou processo.

Nota

O kernel do Alibaba Cloud Linux suporta as interfaces cgroup v1 e v2 para blk-iocost, mas apenas uma pode estar ativa por vez. Execute stat -fc %T /sys/fs/cgroup para verificar qual versão está ativa.

  • O valor de retorno tmpfs indica a interface cgroup v1.

  • O valor de retorno cgroup2fs indica a interface cgroup v2.

Sistemas operacionais compatíveis

  • Alibaba Cloud Linux 2 com versão de kernel 4.19.81-17 ou posterior

  • Alibaba Cloud Linux 3

Usar a interface cost.qos

A interface cost.qos ativa ou desativa o blk-iocost e limita a taxa de qualidade de serviço (QoS) de E/S com base na latência e no peso. Ela existe apenas no grupo raiz blkcg, e seu nome varia entre as versões do cgroup.

  • cgroup v1: blkio.cost.qos

  • cgroup v2: io.cost.qos

Configuração

Cada linha começa com o número do dispositivo no formato MAJ:MIN (execute lsblk | grep <Cloud_Disk_Name> para encontrá-lo), seguido pelos parâmetros abaixo:

Parâmetro

Descrição

enable

Ativa ou desativa o blk-iocost.

  • 0: Padrão. Desativa o recurso blk-iocost.

  • 1: Ativa o recurso blk-iocost.

ctrl

Modo de controle.

  • auto: Detecta automaticamente o tipo de dispositivo e usa parâmetros internos.

    Importante

    Quando ctrl estiver definido como auto em uma instância ECS com dispositivo de estado sólido (SSD padrão, ESSD ou disco local NVMe SSD), defina a propriedade rotational do disco como 0 para que o blk-iocost estime corretamente o custo de E/S. Exemplo:

    sudo sh -c 'echo 0 > /sys/block/<DISK_NAME>/queue/rotational'

    Substitua <DISK_NAME> pelo nome real do disco.

  • user: Defina manualmente os seguintes parâmetros de controle:

    • rpct: percentil de latência de leitura. Valores válidos: 0 a 100.

    • rlat: limiar de latência de leitura. Unidade: microssegundos.

    • wpct: percentil de latência de escrita. Valores válidos: 0 a 100.

    • wlat: limiar de latência de escrita. Unidade: microssegundos.

    • min: porcentagem mínima de dimensionamento. Valores válidos: 1 a 10000.

    • max: porcentagem máxima de dimensionamento. Valores válidos: 1 a 10000.

Ativar o recurso blk-iocost

Este exemplo ativa o blk-iocost para o dispositivo 254:48 no modo user. O disco é considerado saturado quando 95% das latências de leitura e escrita (rlat e wlat) excedem 5000 μs (5 ms), e o kernel ajusta a taxa de despacho entre 50% e 150%.

  • Interface cgroup v1

    sudo sh -c 'echo "254:48 enable=1 ctrl=user rpct=95.00 rlat=5000 wpct=95.00 wlat=5000 min=50.00 max=150.00" > /sys/fs/cgroup/blkio/blkio.cost.qos'
  • Interface cgroup v2

    sudo sh -c 'echo "254:48 enable=1 ctrl=user rpct=95.00 rlat=5000 wpct=95.00 wlat=5000 min=50.00 max=150.00" > /sys/fs/cgroup/io.cost.qos'

Usar a interface cost.model

A interface cost.model configura o modelo de custo de E/S. Ela existe apenas no grupo raiz blkcg, e seu nome varia entre as versões do cgroup.

  • cgroup v1: blkio.cost.model

  • cgroup v2: io.cost.model

Configuração

Cada linha começa com o número do dispositivo no formato MAJ:MIN (execute lsblk | grep <Cloud_Disk_Name> para encontrá-lo), seguido pelos parâmetros abaixo:

Parâmetro

Descrição

ctrl

Modo de controle.

  • auto: Otimiza automaticamente o agendamento de E/S com base na carga de trabalho.

    Importante

    Quando ctrl estiver definido como auto em uma instância ECS com dispositivo de estado sólido (SSD padrão, ESSD ou disco local NVMe SSD), defina a propriedade rotational do disco como 0 para que o blk-iocost estime corretamente o custo de E/S. Exemplo:

    sudo sh -c 'echo 0 > /sys/block/<DISK_NAME>/queue/rotational'

    Substitua <DISK_NAME> pelo nome real do disco.

  • user: Especifique manualmente os parâmetros do modelo.

model

Atualmente, apenas o modelo linear é compatível. Quando model estiver definido como linear, defina os seguintes parâmetros:

  • [r|w]bps: throughput máximo de E/S sequencial. Unidade: bytes/segundo.

  • [r|w]seqiops: limite de operações de entrada e saída por segundo (IOPS) sequenciais.

  • [r|w]randiops: limite de IOPS aleatórios.

    Nota

    Use o script tools/cgroup/iocost_coef_gen.py no source do kernel para gerar esses parâmetros e gravá-los na interface cost.model.

Definir um modelo de custo

Este exemplo define um modelo de custo linear para o dispositivo 254:48 com parâmetros definidos pelo usuário.

  • Interface cgroup v1

    sudo sh -c 'echo "254:48 ctrl=user model=linear rbps=2706339840 rseqiops=89698 rrandiops=110036 wbps=1063126016 wseqiops=135560 wrandiops=130734" > /sys/fs/cgroup/blkio/blkio.cost.model'
  • Interface cgroup v2

    sudo sh -c 'echo "254:48 ctrl=user model=linear rbps=2706339840 rseqiops=89698 rrandiops=110036 wbps=1063126016 wseqiops=135560 wrandiops=130734" > /sys/fs/cgroup/io.cost.model'

Usar a interface weight/cost.weight

Esta interface controla a alocação de recursos de E/S por meio de um valor weight entre 1 e 10000. O nome da interface varia conforme a versão do cgroup e o sistema operacional. Esses arquivos existem apenas em subgrupos blkcg.

  • Alibaba Cloud Linux 3

    • cgroup v1: blkio.cost.weight

    • cgroup v2: io.weight

  • Alibaba Cloud Linux 2

    • cgroup v1: blkio.cost.weight

    • cgroup v2: io.cost.weight

Configuração

  • Para modificar o peso padrão de um blkcg, defina um valor de peso para a interface: <weight>.

  • Para modificar o peso de um blkcg em um dispositivo específico, use o seguinte formato: MAJ:MIN <weight>.

Modificar pesos

Após ativar o blk-iocost, estes exemplos criam grupos de controle (blkcg1 para cgroup v1, cg1 para cgroup v2) e definem tanto o peso padrão quanto o peso específico do dispositivo para 254:48 como 50.

  • Interface cgroup v1

    sudo mkdir /sys/fs/cgroup/blkio/blkcg1    # Create the control group blkcg1
    sudo sh -c 'echo "50" > /sys/fs/cgroup/blkio/blkcg1/blkio.cost.weight'    # Change the default weight to 50
    sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/blkio/blkcg1/blkio.cost.weight'    # Set the weight on the disk to 50
  • Interface cgroup v2

    • Alibaba Cloud Linux 3

      sudo mkdir /sys/fs/cgroup/cg1    # Create the control group cg1
      sudo sh -c 'echo "50" > /sys/fs/cgroup/cg1/io.weight'    # Change the default weight to 50
      sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/cg1/io.weight'    # Set the weight on the disk to 50
    • Alibaba Cloud Linux 2

      sudo mkdir /sys/fs/cgroup/cg1    # Create the control group cg1
      sudo sh -c 'echo "50" > /sys/fs/cgroup/cg1/io.cost.weight'    # Change the default weight to 50
      sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/cg1/io.cost.weight'    # Set the weight on the disk to 50

Ferramentas comuns de monitoramento

As ferramentas a seguir ajudam a monitorar e ajustar o desempenho de E/S com o blk-iocost.

  • iocost monitor script

    O script tools/cgroup/iocost_monitor.py usa o depurador drgn para acessar parâmetros do kernel e gerar dados de desempenho de E/S. Etapas:

    1. Instale o depurador drgn.

      sudo pip3 install drgn
    2. Baixe o script iocost_monitor.py.

      wget https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/cgroup/iocost_monitor.py
    3. Execute o script iocost_monitor.py.

      Neste exemplo, utiliza-se o disco vdd.

      sudo python3 ./iocost_monitor.p vdd

      Saída de exemplo:

      vdd RUN  per=500.0ms cur_per=3930.839:v14620.321 busy= +1 vrate=6136.22% params=hdd
                                active    weight      hweight% inflt% dbt  delay usages%
      blkcg1                       *    50/   50   9.09/  9.09   0.00   0  0*000 009:009:009
      blkcg2                       *   500/  500  90.91/ 90.91   0.00   0  0*000 089:091:092
  • blkio.cost.stat interface (cgroup v1)

    A interface blkio.cost.stat (cgroup v1) registra dados de QoS para cada dispositivo controlado:

    cat /sys/fs/cgroup/blkio/blkcg1/blkio.cost.stat

    Saída de exemplo:

    254:48 is_active=1 active=50 inuse=50 hweight_active=5957 hweight_inuse=5957 vrate=159571
  • ftrace tool

    Use o ftrace para capturar decisões do agendador blk-iocost e rastrear o tratamento de solicitações de E/S para uma análise detalhada de desempenho. Etapas:

    1. Defina o atributo enable como 1 para ativar a ferramenta ftrace.

      sudo sh -c 'echo 1 > /sys/kernel/debug/tracing/events/iocost/enable'
    2. Visualize as informações de saída.

      sudo cat /sys/kernel/debug/tracing/trace_pipe

      Saída de exemplo:

          dd-1593  [008] d...   688.565349: iocost_iocg_activate: [vdd:/blkcg1] now=689065289:57986587662878 vrate=137438 period=22->22 vtime=0->57986365150756 weight=50/50 hweight=65536/65536
          dd-1593  [008] d.s.   688.575374: iocost_ioc_vrate_adj: [vdd] vrate=137438->137438 busy=0 missed_ppm=0:0 rq_wait_pct=0 lagging=1 shortages=0 surpluses=1
      <idle>-0     [008] d.s.   688.608369: iocost_ioc_vrate_adj: [vdd] vrate=137438->137438 busy=0 missed_ppm=0:0 rq_wait_pct=0 lagging=1 shortages=0 surpluses=1
          dd-1594  [006] d...   688.620002: iocost_iocg_activate: [vdd:/blkcg2] now=689119946:57994099611644 vrate=137438 period=22->26 vtime=0->57993412421644 weight=250/250 hweight=65536/65536
      <idle>-0     [008] d.s.   688.631367: iocost_ioc_vrate_adj: [vdd] vrate=137438->137438 busy=0 missed_ppm=0:0 rq_wait_pct=0 lagging=1 shortages=0 surpluses=1
      <idle>-0     [008] d.s.   688.642368: iocost_ioc_vrate_adj: [vdd] vrate=137438->137438 busy=0 missed_ppm=0:0 rq_wait_pct=0 lagging=1 shortages=0 surpluses=1
      <idle>-0     [008] d.s.   688.653366: iocost_ioc_vrate_adj: [vdd] vrate=137438->137438 busy=0 missed_ppm=0:0 rq_wait_pct=0 lagging=1 shortages=0 surpluses=1
      <idle>-0     [008] d.s.   688.664366: iocost_ioc_vrate_adj: [vdd] vrate=137438->137438 busy=0 missed_ppm=0:0 rq_wait_pct=0 lagging=1 shortages=0 surpluses=1