Tous les produits
Search
Centre de documentation

Alibaba Cloud Linux:Configurer la limitation basée sur le poids blk-iocost

Dernière mise à jour :Aug 12, 2026

La limitation basée sur le poids blk-iocost améliore le contrôle des E/S disque du sous-système cgroup (blkcg) dans Alibaba Cloud Linux. Elle répartit la bande passante d'E/S des périphériques blocs selon la priorité des applications ou des processus. Configurez les valeurs de poids pour limiter la bande passante d'E/S par application ou par processus.

Remarque

Le noyau Alibaba Cloud Linux prend en charge les interfaces cgroup v1 et v2 pour blk-iocost, mais une seule est active à la fois. Exécutez stat -fc %T /sys/fs/cgroup pour vérifier la version active.

  • La valeur de retour tmpfs indique l'interface cgroup v1.

  • La valeur de retour cgroup2fs indique l'interface cgroup v2.

Systèmes d'exploitation pris en charge

  • Alibaba Cloud Linux 2 avec une version de noyau 4.19.81-17 ou ultérieure

  • Alibaba Cloud Linux 3

Utiliser l'interface cost.qos

L'interface cost.qos active ou désactive blk-iocost et limite la qualité de service (QoS) des E/S en fonction de la latence et du poids. Elle n'existe que dans le groupe blkcg racine et son nom varie selon les versions de cgroup.

  • cgroup v1 : blkio.cost.qos

  • cgroup v2 : io.cost.qos

Configuration

Chaque ligne commence par le numéro de périphérique au format MAJ:MIN (exécutez lsblk | grep <Cloud_Disk_Name> pour l'obtenir), suivi des paramètres suivants :

Paramètre

Description

enable

Active ou désactive blk-iocost.

  • 0 : valeur par défaut. Désactive la fonctionnalité blk-iocost.

  • 1 : active la fonctionnalité blk-iocost.

ctrl

Mode de contrôle.

  • auto : détecte automatiquement le type de périphérique et utilise les paramètres intégrés.

    Important

    Si ctrl est défini sur auto sur une instance ECS dotée d'un périphérique SSD (SSD standard, ESSD ou disque local NVMe SSD), définissez la propriété rotational du disque sur 0 afin que blk-iocost estime précisément le coût des E/S. Exemple :

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

    Remplacez <DISK_NAME> par le nom réel du disque.

  • user : définissez manuellement les paramètres de contrôle suivants :

    • rpct : centile de latence de lecture. Valeurs valides : 0 à 100.

    • rlat : seuil de latence de lecture. Unité : microsecondes.

    • wpct : centile de latence d'écriture. Valeurs valides : 0 à 100.

    • wlat : seuil de latence d'écriture. Unité : microsecondes.

    • min : pourcentage minimal de mise à l'échelle. Valeurs valides : 1 à 10000.

    • max : pourcentage maximal de mise à l'échelle. Valeurs valides : 1 à 10000.

Activer la fonctionnalité blk-iocost

Cet exemple active blk-iocost pour le périphérique 254:48 en mode user. Le disque est considéré comme saturé lorsque 95 % des latences de lecture et d'écriture (rlat et wlat) dépassent 5000 μs (5 ms). Le noyau ajuste alors le taux de distribution entre 50 % et 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'

Utiliser l'interface cost.model

L'interface cost.model configure le modèle de coût des E/S. Elle n'existe que dans le groupe blkcg racine et son nom varie selon les versions de cgroup.

  • cgroup v1 : blkio.cost.model

  • cgroup v2 : io.cost.model

Configuration

Chaque ligne commence par le numéro de périphérique au format MAJ:MIN (exécutez lsblk | grep <Cloud_Disk_Name> pour l'obtenir), suivi des paramètres suivants :

Paramètre

Description

ctrl

Mode de contrôle.

  • auto : optimise automatiquement la planification des E/S en fonction de la charge de travail.

    Important

    Si ctrl est défini sur auto sur une instance ECS dotée d'un périphérique SSD (SSD standard, ESSD ou disque local NVMe SSD), définissez la propriété rotational du disque sur 0 afin que blk-iocost estime précisément le coût des E/S. Exemple :

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

    Remplacez <DISK_NAME> par le nom réel du disque.

  • user : spécifiez manuellement les paramètres du modèle.

model

Seul le modèle linear est actuellement pris en charge. Si model est défini sur linear, définissez les paramètres suivants :

  • [r|w]bps : débit maximal d'E/S séquentielles. Unité : octets/seconde.

  • [r|w]seqiops : limite d'opérations d'entrée/sortie par seconde (IOPS) séquentielles.

  • [r|w]randiops : limite d'IOPS aléatoires.

    Remarque

    Utilisez le script tools/cgroup/iocost_coef_gen.py du code source du noyau pour générer ces paramètres et les écrire dans l'interface cost.model.

Définir un modèle de coût

Cet exemple définit un modèle de coût linear pour le périphérique 254:48 avec des paramètres personnalisés.

  • 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'

Utiliser l'interface weight/cost.weight

Cette interface contrôle l'allocation des ressources d'E/S via une valeur weight comprise entre 1 et 10000. Son nom varie selon la version de cgroup et le système d'exploitation. Ces fichiers n'existent que dans les sous-groupes 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

Configuration

  • Pour modifier le poids par défaut d'un groupe blkcg, définissez une valeur de poids pour l'interface : <weight>.

  • Pour modifier le poids d'un groupe blkcg sur un périphérique spécifique, utilisez le format suivant : MAJ:MIN <weight>.

Modifier les poids

Une fois blk-iocost activé, ces exemples créent des groupes de contrôle (blkcg1 pour cgroup v1, cg1 pour cgroup v2) et définissent le poids par défaut ainsi que le poids spécifique au périphérique 254:48 sur 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

Outils de surveillance courants

Les outils suivants permettent de surveiller et d'ajuster les performances d'E/S sous blk-iocost.

  • Script de surveillance iocost

    Le script tools/cgroup/iocost_monitor.py utilise le débogueur drgn pour accéder aux paramètres du noyau et afficher les données de performance des E/S. Procédure :

    1. Installez le débogueur drgn.

      sudo pip3 install drgn
    2. Téléchargez le script iocost_monitor.py.

      wget https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/cgroup/iocost_monitor.py
    3. Exécutez le script iocost_monitor.py.

      Cet exemple utilise le disque vdd.

      sudo python3 ./iocost_monitor.p vdd

      Exemple de sortie :

      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
  • Interface blkio.cost.stat (cgroup v1)

    L'interface blkio.cost.stat (cgroup v1) enregistre les données QoS pour chaque périphérique contrôlé :

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

    Exemple de sortie :

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

    Utilisez ftrace pour capturer les décisions du planificateur blk-iocost et tracer le traitement des requêtes d'E/S afin d'analyser les performances en détail. Procédure :

    1. Définissez l'attribut enable sur 1 pour activer l'outil ftrace.

      sudo sh -c 'echo 1 > /sys/kernel/debug/tracing/events/iocost/enable'
    2. Consultez la sortie.

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

      Exemple de sortie :

          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