Alibaba Cloud Linux fournit deux interfaces noyau, force_copy et stats, pour optimiser les performances de JBD2 sur les systèmes de fichiers ext4. Utilisez force_copy pour réduire la latence de journalisation induite par l'état BH_Shadow, et stats afin de déterminer si JBD2 est à l'origine des problèmes de qualité de service (QoS) du système de fichiers.
Fonctionnement
ext4 est un système de fichiers journalisé très répandu. Le thread noyau JBD2 gère le journal ext4 et constitue une ressource globale pour ce système de fichiers. Lorsque JBD2 accède à une page de cache en état BH_Shadow, il doit attendre sa réécriture sur le disque. Cette attente accroît la latence des E/S et dégrade les performances globales.
L'interface force_copy copie la page de cache au lieu d'attendre la libération de l'état BH_Shadow, réduisant ainsi le temps de blocage de JBD2 lors de l'écriture sur disque.
Versions prises en charge
|
Distribution |
Version minimale du noyau |
|
Alibaba Cloud Linux 2 |
|
|
Alibaba Cloud Linux 3 |
Toutes les versions |
Référence des interfaces
force_copy
|
Propriété |
Valeur |
|
Chemin |
/proc/fs/jbd2/<device>-8/force_copy |
|
Valeur par défaut |
Désactivé ( |
|
Valeurs valides |
|
|
Fonction |
Force la copie de la page de cache pour éviter l'attente liée à BH_Shadow |
Remplacez <device> par le nom du périphérique de stockage bloc, par exemple nvme0n1.
L'activation de force_copy augmente la consommation mémoire. Vérifiez la mémoire disponible avant d'activer cette option sur des instances aux ressources mémoire limitées.
stats
|
Propriété |
Valeur |
|
Chemin |
/proc/fs/jbd2/<device>-8/stats |
|
Fonction |
Affiche les statistiques de transaction JBD2 pour diagnostiquer les problèmes de QoS du système de fichiers |
Remplacez <device> par le nom du périphérique de stockage bloc, par exemple nvme0n1.
Activer force_copy
Exécutez la commande suivante pour activer force_copy. Remplacez nvme0n1 par le nom de votre périphérique de stockage bloc.
echo 1 > /proc/fs/jbd2/nvme0n1-8/force_copy
Pour désactiver force_copy :
echo 0 > /proc/fs/jbd2/nvme0n1-8/force_copy
Lire la sortie de stats
Exécutez la commande suivante pour consulter les statistiques de transaction JBD2 :
cat /proc/fs/jbd2/nvme0n1-8/stats
Exemple de sortie :
337 336 65536 0 14837 1701504 16 0 20058 5 33082732 605 942 1000 1000
La sortie comprend 15 champs séparés par des espaces. Le tableau suivant décrit chaque champ.
|
Champ |
Position |
Description |
|
ID de transaction |
1er |
Identifiant de la transaction en cours |
|
Transactions demandées |
2e |
Nombre total de transactions sollicitées |
|
Max transactions en cache |
3e |
Nombre maximal de transactions mises en cache |
|
Temps d'attente |
4e |
Durée d'attente de la transaction avant traitement |
|
Latence de requête |
5e |
Latence associée à la demande de transaction |
|
Temps d'exécution |
6e |
Durée d'exécution effective de la transaction |
|
Temps de verrouillage |
7e |
Durée pendant laquelle la transaction est restée verrouillée |
|
Temps de vidage |
8e |
Durée nécessaire au vidage de la transaction |
|
Temps de journalisation |
9e |
Temps requis pour enregistrer la transaction dans le journal |
|
Temps moyen de validation |
10e |
Durée moyenne de validation (commit) de la transaction |
|
Handles |
11e |
Nombre de handles contenus dans la transaction |
|
Blocs |
12e |
Nombre de blocs impliqués dans la transaction |
|
Blocs journalisés |
13e |
Total des blocs consignés pour cette transaction |
|
Constante de temps (Hz) |
14e |
Constante temporelle du noyau ( |
|
Constante de temps (ms) |
15e |
Constante temporelle du noyau exprimée en millisecondes |
Les champs 14 et 15 permettent de convertir les valeurs temporelles des ticks vers l'unité souhaitée. Comparez la sortie de stats avant et après l'activation de force_copy afin d'évaluer l'amélioration de latence obtenue sur votre charge de travail.