6 votes

L'appel de sync/fsync ralentit l'IO après 30 minutes de fonctionnement

Après 30 minutes de fonctionnement, j'utilise Ubuntu 14.04 avec un disque dur ext4. SSD hybride Je vois de nombreux processus qui bloquent les entrées-sorties en utilisant iotop.

La cause profonde de ce ralentissement a été retracée jusqu'à l'appel système Unix sync .

Running sync à partir du terminal de façon répétée peut prendre de l'ordre de 1 à 2 secondes mais UNIQUEMENT après 30 minutes de fonctionnement.

Pour le prouver, j'ai créé un script qui affiche le temps de fonctionnement en secondes par rapport au temps d'exécution de la synchronisation, et je l'ai exécuté toutes les secondes :

while true;
do
cat /proc/uptime | awk '{printf "%f ",$1}'; /usr/bin/time -f '%e' sync;
sleep 1;
done;

J'ai exécuté le script ci-dessus, j'ai attendu environ une heure (le système est resté inactif) et j'ai tracé les résultats dans gnuplot (y = temps en secondes pour exécuter la synchronisation, x = temps de fonctionnement en secondes) :

slowdown graph

Le moment où le graphique monte en flèche se situe vers 1780 (1780/60 = environ 30 minutes).

Rien ne devrait écrire sur le disque à ce moment-là à part le script, donc il devrait y avoir presque rien dans le cache de la page après la première synchronisation ; chaque synchronisation suivante écrira exactement ce qui est écrit dans le script, ce qui sera environ 100 octets.

Quand je vérifie cat /proc/meminfo la ligne sale (données dans le cache de la page qui doivent être sauvegardées sur le disque ?) et la ligne d'écriture (tampon du disque dur ?) sont toutes à zéro. Je pensais qu'appeler sync efface ces caches de disque mais il se bloque toujours même s'il n'y a rien dans ces caches, alors fait-il autre chose ?

Ce problème persiste après les redémarrages ; par exemple - si j'attends 30 minutes pour le ralentissement puis que je redémarre, le ralentissement sera toujours là. Si j'éteins puis redémarre, le problème disparaît jusqu'à 30 minutes plus tard.

Une autre curiosité est que lorsque j'ai examiné le graphique ci-dessus et que j'ai zoomé sur une zone où le ralentissement se produit, j'ai obtenu ceci :

slowdown graph zoomed

Les pics et les creux se répètent - cela se produit à des intervalles de 10 secondes d'un creux à l'autre.

J'ai également effectué des tests hdparm ( hdparm -t /dev/sda y hdparm -T /dev/sda ) avant le ralentissement :

/dev/sda:
Timing cached reads:   23778 MB in  2.00 seconds = 11900.64 MB/sec
/dev/sda:
Timing buffered disk reads: 318 MB in  3.01 seconds = 105.63 MB/sec

et pendant le ralentissement :

/dev/sda:
 Timing cached reads:     2 MB in  2.24 seconds = 915.50 kB/sec
/dev/sda:
Timing buffered disk reads: 300 MB in  3.01 seconds =  99.54 MB/sec

En montrant que les lectures réelles du disque ne sont pas affectées mais que les lectures en cache le sont, cela pourrait signifier que le problème est lié au bus système et non au disque dur après tout ?

Voici les solutions que j'ai essayées :

  • Modifiez les paramètres d'affichage du disque dur (le disque dur est peut-être passé en mode d'économie d'énergie) :

    hdparm /dev/sda -S252 #(set it to 5 hours before spindown)
  • Changer le type de journalisation du système de fichiers en writeback plutôt qu'en ordered afin d'améliorer les performances - cela ne résout pas le problème car cela n'explique pas les 30 minutes de temps de fonctionnement sans ralentissement - quand j'ai essayé cela, il n'y avait aucun changement.

  • J'ai désactivé le CRON car il semble se produire après une trentaine de minutes.

  • L'utilisation du CPU est bonne et est complètement inactive, donc aucun processus ne peut être blâmé. Cependant, j'ai essayé d'arrêter tous les services, y compris le gestionnaire de session (lightdm), mais cela ne donne rien car je pense que le problème est de niveau inférieur.

  • L'analyse de tout nouveau processus arrivant à 30 minutes n'indique aucun changement - j'ai comparé la sortie de PS avant et après et il n'y a aucune différence.

Cela a commencé à se produire il y a environ 2 semaines, rien n'a été installé et aucune mise à jour n'a été effectuée à cette époque. Je pense que ce problème est d'un niveau beaucoup plus bas et j'apprécierais vraiment un peu d'aide ici car je suis désemparé, même en m'indiquant la bonne direction serait utile.

La mise en cache en écriture est activée sur le disque en question, j'ai également essayé de désactiver les barrières d'écriture. Les données SMART sur le disque dur n'indiquent aucun problème avec le disque dur lui-même, mais je soupçonne le disque dur de faire quelque chose de mystérieux car le problème persiste après les redémarrages.

1 votes

+1 pour avoir posé une bonne question. Que montre la commande free pendant ces périodes ? Pensez également à la mise en cache des fichiers en mémoire. Linux aime utiliser la RAM disponible pour les disques. À titre d'information, si vous disposez d'une grande quantité de cache, chaque invocation de la synchronisation doit rechercher les pages sales qui s'y trouvent. Ce qui, s'il s'agit de plusieurs Go, peut prendre du temps.

0 votes

Merci pour vos conseils, free me donne 800mb de mémoire cache sans le problème et 1.6gb avec le problème mais l'augmentation peut être une coïncidence car j'ai peut-être ouvert plus de programmes à ce moment là. Je vais essayer avec un système inactif. Le problème, c'est qu'on pourrait penser que l'algorithme de calcul des pages sales n'a pas besoin d'IO et qu'il devrait donc être assez rapide à calculer puisqu'il provient directement de la RAM, mais je ne suis pas très familier avec tout ça donc je peux me tromper.

0 votes

Vous devez vous assurer qu'il n'y a pas d'IO, vous pouvez utiliser iostat pour vérifier cela et voir s'il y a des écritures sur le disque.

3voto

alex.p Points 141

Cela a été causé par Données SMART étant activé pour le lecteur en question.

La désactivation des données SMART a résolu le problème :

sudo smartctl --smart=off /dev/sda

Il est intéressant de noter que la réactivation des données SMART pour le disque n'a pas fait revenir le problème, ce qui me suggère que SMART était dans un état incohérent (un crash possible pendant que les auto-tests étaient en cours d'exécution) et que le fait de le désactiver puis de le réactiver a réinitialisé cet état.

Il a probablement continué à exécuter une sorte d'auto-test interne 30 minutes après la mise en route du disque et s'est retrouvé dans une boucle ; comme cela se passait au niveau de la couche matérielle, le reste de l'ordinateur n'était pas au courant de ce qui se passait ; je n'ai donc vu aucun processus en particulier responsable du blocage des E/S et aucun processus accaparant les ressources.

J'ai lancé les autotests SMART en essayant de trouver ce qui n'allait pas, mais même cela n'a pas permis de réinitialiser l'état - il fallait l'éteindre puis le rallumer explicitement.

1 votes

Il s'agit bien d'un "problème de firmware", je vous conseille de le signaler au fabricant. J'espère qu'il le prendra au sérieux !

2voto

MikeyB Points 38317

Ce problème persiste après les redémarrages ; par exemple, si j'attends 30 minutes pour le ralentissement puis que je redémarre, le ralentissement sera toujours là. Si j'éteins puis redémarre, le problème disparaît jusqu'à 30 minutes plus tard.

Cela indique qu'il y a un bug de firmware dans le SSD lui-même qui apparaît après 30 minutes d'alimentation.

0 votes

Je suis d'accord si le problème se produit comme une horloge. Le redémarrage n'efface pas la mémoire du contrôleur SSD.

0 votes

J'ai pensé la même chose, malheureusement il n'y a pas de mise à jour de firmware de Seagate à ce sujet et je n'ai trouvé personne se plaignant de quelque chose de similaire dans les commentaires sur ce SSD ou en cherchant sur Google. J'ai fait une mise à jour de la question concernant les lectures sur disque, il semble que les lectures directes sur disque ne soient pas affectées ; 100 mb/s en permanence mais les lectures en cache à partir de la mémoire sont à 12000 mb/s et chutent ensuite à 900 kb/s à 2000 mb/s avec le ralentissement.

0 votes

Cela signifie-t-il maintenant qu'un échange de périphérique SSD est nécessaire ? Il me semble que oui.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X