Réduisez les temps de nouvelle tentative / attente de blocage dans Ubuntu

10

Comment puis-je réduire le temps d'attente IO et les temps de nouvelle tentative afin que le système d'exploitation n'essaie pas continuellement d'écrire sur un lecteur défaillant?

J'ai un système que j'utilise pour faire des copies du contenu de démonstration qui est prêté aux clients sur des disques durs de bureau SATA ordinaires. Nous connectons plusieurs disques à la fois via SAS et copions leur contenu à l'aide d'un script.

Parce que les disques sont prêtés, certains reviennent parfois endommagés, mais je ne sais pas s'ils sont endommagés, donc la prochaine fois que ce disque sera réutilisé dans une opération de copie, il ralentit les autres disques lorsque le système réessaye les E / S sur ce disque. Parfois, cela peut prendre des heures avant de remarquer le mauvais disque et de le retirer. Une fois le lecteur retiré, les autres lecteurs commencent à écrire à vitesse normale.

Je me fiche de récupérer les mauvais disques. J'ai juste besoin de les éliminer pour qu'ils ne ralentissent pas tout le reste.

Je fais également des recherches sur les badblocks et les smartmontools et j'envisage d'écrire une pré-vérification sur les disques avant de commencer à écrire.

Système d'exploitation: Ubuntu Linux (12.04 lts)

Ryan Sorensen
la source
Quel est le problème avec la vérification des données SMART via udisks/ smartmonctl? Un problème XY classique ici, il me semble.
Deer Hunter
2
Merci, je ferai plus de recherches sur smartmonctl. D'après mon expérience, si les secteurs défectueux se sont produits lors de la dernière expédition, l'état SMART montre que le lecteur est toujours bon, et il fonctionne correctement jusqu'à une partie aléatoire pendant la copie, puis ralentit à une analyse, affectant également d'autres lecteurs jusqu'à il est supprimé.
Ryan Sorensen
La question n'a pas reçu de réponse directe, nous ne savons donc pas si c'est une chose possible sous Linux: comment puis-je réduire le temps d'attente des E / S et les temps de nouvelle tentative?
imz - Ivan Zakharyaschev
@ imz - IvanZakharyaschev unix.stackexchange.com/a/147304/25985 Cependant, le noyau enregistre ces erreurs, donc si tout ce que vous voulez faire est d'attraper un disque défaillant avant qu'il ne devienne plus problématique, vous pouvez analyser les journaux système à l'adresse intervalles réguliers.
goldilocks
@gol Et si je veux l'attraper plus vite? Sans attendre, Dieu sait combien de temps avant que l'opération d'E / S ne débloque le signalement d'une erreur? (En fait, j'essaie de sauvegarder les données d'un disque avec des erreurs, mais mon problème est similaire: courir dans ces secteurs "erronés" provoque d'énormes retards. ... Peut-être pourrais-je également suivre les conseils et inventer un moyen de alimenter les informations du test SMART pour ddrescuequ'il ne touche même pas les secteurs signalés par SMART.)
imz - Ivan Zakharyaschev

Réponses:

7

Je n'ai jamais utilisé ce paramètre auparavant, mais vous souhaitez probablement ajuster le eh_timeout (délai de traitement des erreurs) pour le lecteur en question:

[root@localhost device]# cat /sys/block/sda/device/eh_timeout
10
[root@localhost device]# 

L'illustration ci-dessus est sdaréglée sur 10 secondes. Depuis la base de connaissances de Red Hat:

Dans certaines configurations de stockage (par exemple, les configurations avec de nombreux LUN), le code de gestion des erreurs SCSI peut passer beaucoup de temps à émettre des commandes telles que TEST UNIT READY vers des périphériques de stockage qui ne répondent pas. Un nouveau paramètre sysfs, eh_timeout, a été ajouté à l'objet périphérique SCSI, qui permet de configurer la valeur de délai d'expiration pour les commandes TEST UNIT READY et REQUEST SENSE utilisées par le code de gestion des erreurs SCSI. Cela diminue le temps passé à vérifier ces appareils qui ne répondent pas. La valeur par défaut de eh_timeout est de 10 secondes, qui était la valeur de délai d'attente utilisée avant d'ajouter cette fonctionnalité.

Bratchley
la source
Je vérifie cela maintenant. Ubuntu n'a pas d'eh_timeout, mais a un fichier de timeout qui peut être la même chose. La valeur Ubuntu par défaut semble être de 30 secondes. Le réduira à 5 secondes et fera rapport.
Ryan Sorensen
1
Par curiosité, quel a été votre résultat?
Bratchley
La définition de l'indicateur de délai d'expiration sur 12.04 ne semble rien faire. Je prévois de mettre à niveau un système de test vers 14.04 ce week-end car il a eh_timeout (et aussi timeout).
Ryan Sorensen
@RyanSorensen, avez-vous donc eu la chance de voir si ce paramètre fonctionne un jour?
Nat
Je n'ai pas pu modifier eh_timeoutmais j'ai pu changer timeoutpour accomplir la tâche à accomplir.
GuitarPicker
2

Surveillez /sys/block/<dev>/statles appareils qui vous intéressent et comparez le 10e paramètre (io_ticks).

par exemple, ticks = io_ticks - prev_ticks / seconds_deltatime / 10

Il s'agit du pourcentage de temps disponible que le disque a passé à attendre le disque io.

Bien sûr, près de 100% mériteraient d'être vérifiés, sinon soyez vraiment intelligent et comparez-le à la moyenne de tous vos disques et choisissez n'importe quel disque au-dessus de la moyenne.

Voir la documentation des statistiques de la couche de blocs .

Sinon, utilisez quelque chose comme Munin et représentez-le graphiquement. Vous pouvez demander à Munin d'alerter s'il dépasse un seuil, par exemple 90% ou tout ce que votre graphique montre est un bon chiffre d'alerte.

par exemple, voir ces deux graphiques Munin montrant que / dev / sdi doit être regardé. Dans cet exemple, si / dev / sdi fait partie d'un tableau, le tableau entier en souffrirait.

Utilisation du disque par périphérique - par jour

Utilisation du disque par périphérique - par semaine

Si vous regardez le graphique de la semaine, vous verrez que / dev / sdc pourrait également être lent.

Je dois ajouter que / dev / sdi ci-dessus n'est pas cassé, c'est juste un disque lent (en fait un disque vert que quelqu'un a ajouté à un tableau de disques sata de qualité entreprise) qui a ralenti le tableau. Un véritable disque défaillant ressortirait comme un pouce endolori.

En résumé, j'irais probablement avec un script si j'avais le temps, mais Munin si je voulais juste une solution rapide et la connexion au serveur était facile.

Ian Macintosh
la source
Merci! Les informations sur les statistiques io sous Linux sont vraiment nouvelles et semblent être utiles (pour moi) dans de telles situations.
imz - Ivan Zakharyaschev