Tous les produits
Search
Centre de documentation

Alibaba Cloud Linux:Améliorer la supervision de la limitation des E/S bloc

Dernière mise à jour :Aug 12, 2026

Alibaba Cloud Linux 2 (version du noyau 4.19.81-17.al7 et ultérieures) et Alibaba Cloud Linux 3 ajoutent cinq interfaces au sous-système de limitation blkio. La politique de limitation upstream suit uniquement les octets et le nombre d'opérations, sans fournir de métriques de latence ni de file d'attente. Ces interfaces comblent cette lacune et permettent de déterminer si la latence d'E/S observée provient de la limitation ou d'une contention au niveau du périphérique sous-jacent.

Raison d'être de ces interfaces

La limitation des E/S bloc sous Linux restreint le débit en octets par seconde (BPS) ou les opérations d'entrée/sortie par seconde (IOPS) pour les cgroups. Le sous-système de limitation upstream ne mesure ni la latence ni la profondeur de file d'attente. Vous ne pouvez donc pas distinguer la latence induite par la limitation de celle liée au périphérique, en particulier lorsque le writeback de cgroup est activé.

Les cinq interfaces d'Alibaba Cloud Linux apportent cette observabilité directement au sein du sous-système de limitation.

Interfaces disponibles

Toutes les interfaces se trouvent dans /sys/fs/cgroup/blkio/<cgroup>/, où <cgroup> correspond au groupe de contrôle cible.

Interface Description Unité
blkio.throttle.io_service_time Temps total écoulé entre la soumission et l'achèvement des requêtes d'E/S nanosecondes
blkio.throttle.io_wait_time Temps total passé par les opérations d'E/S dans les files d'attente de l'ordonnanceur nanosecondes
blkio.throttle.io_completed Nombre d'opérations d'E/S terminées ; à utiliser avec les deux interfaces temporelles pour calculer la latence moyenne
blkio.throttle.total_io_queued Nombre d'opérations d'E/S ayant subi une limitation ; comparez les relevés périodiques pour déterminer si la latence d'E/S est liée à la limitation
blkio.throttle.total_bytes_queued Volume d'octets d'E/S ayant subi une limitation octets

Calculer la latence moyenne d'écriture

Cet exemple supervise la latence des E/S en écriture pour le disque vdd (périphérique 254:48) appartenant au cgroup blkcg1, sur un intervalle de 5 secondes.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un cgroup (blkcg1) avec une limite BPS ou IOPS configurée

  • Le numéro major:minor du disque à superviser (exécutez lsblk -o NAME,MAJ:MIN pour l'obtenir)

  • Un accès root au système

Exécuter le script de mesure de latence

Exécutez le script suivant en tant que root :

#!/bin/bash

CGROUP_PATH="/sys/fs/cgroup/blkio/blkcg1"
DEVICE="254:48"
INTERVAL=5

# Collect T1 readings
write_wait_time1=$(cat "$CGROUP_PATH/blkio.throttle.io_wait_time" | grep -w "$DEVICE Write" | awk '{print $3}')
write_service_time1=$(cat "$CGROUP_PATH/blkio.throttle.io_service_time" | grep -w "$DEVICE Write" | awk '{print $3}')
write_completed1=$(cat "$CGROUP_PATH/blkio.throttle.io_completed" | grep -w "$DEVICE Write" | awk '{print $3}')

sleep "$INTERVAL"

# Collect T2 readings (T1 + 5 seconds)
write_wait_time2=$(cat "$CGROUP_PATH/blkio.throttle.io_wait_time" | grep -w "$DEVICE Write" | awk '{print $3}')
write_service_time2=$(cat "$CGROUP_PATH/blkio.throttle.io_service_time" | grep -w "$DEVICE Write" | awk '{print $3}')
write_completed2=$(cat "$CGROUP_PATH/blkio.throttle.io_completed" | grep -w "$DEVICE Write" | awk '{print $3}')

# Calculate average I/O latency over the interval
avg_delay=$(echo "((write_wait_time2 + write_service_time2) - (write_wait_time1 + write_service_time1)) / (write_completed2 - write_completed1)" | bc)

echo "Average write latency over ${INTERVAL}s: ${avg_delay} ns"

Ce script applique la formule suivante :

avg_delay = (total_io_duration_T2 - total_io_duration_T1) / (completed_ops_T2 - completed_ops_T1)

total_io_duration = io_wait_time + io_service_time.

Variable Interface Description
write_wait_time<N> blkio.throttle.io_wait_time Durée de la limitation au niveau de la couche de limitation des E/S bloc
write_service_time<N> blkio.throttle.io_service_time Temps cumulé entre la soumission et l'achèvement des requêtes d'E/S en écriture, en nanosecondes
write_completed<N> blkio.throttle.io_completed Nombre cumulé d'opérations d'E/S en écriture terminées

Exécutez ce script périodiquement, par exemple avec watch ou une tâche cron, afin de suivre l'évolution de la latence dans le temps.