msk0: watchdog timeout – Une solution simple et crade

Je me suis rendu compte il y a quelques semaines que mon interface réseau (msk0) cessait de fonctionner après un certain temps (jours, parfois des semaines) sous une charge modérée ou importante, tout en inondant le journal système de « msk0: watchdog timeout ». Ce qui est plûtot gênant pour un serveur… Je n’ai malheureusement pas réussi à corriger le problème en désactivant le MSI via l’outil sysctl(8)

Le problème viendrait de :

  1. Une carte de mauvaise qualité (Marvell 88E8053)
  2. Un driver msk(4) peu testé et donc rempli de bugs potentiels

La seule façon de rétablir la connexion est de redémarrer la machine. Ce qui pose problème quand on a accès à la machine en question uniquement par SSH la majorité du temps…  J’ai donc réalisé un petit script (vraiment fait à la vite), faisant office de solution de secours, qui fait automatiquement redémarrer la machine si un watchdog timeout a été détécté. Cela permet de ne pas complètement bloquer l’accès via SSH.

Il suffit donc de lancer ce script en cronjob (effectué par root, bien sûr) :

#!/bin/sh

LOGFILE="/var/log/check_msk0"
DATE=`date`

CLEAN=`echo | grep zero`
LOGDATE=`date "+%b %d"`
TIMEOUTS=`cat /var/log/messages | grep "msk0: watchdog timeout" | tail | grep "$LOGDATE"`

if [ "$TIMEOUTS" = "$CLEAN" ]
then
 echo "$DATE OK, no timeouts." >> $LOGFILE
 echo OK.
else
 echo "$DATE WATCHDOG TIMEOUT, initiating reboot..." >> $LOGFILE
 echo Rebooting in 15 seconds. Press ^C to abort.
 sleep 15
 cp /var/log/messages /var/log/messages.timeout
 echo > /var/log/messages
 /sbin/reboot
fi

Inutile de préciser que j’ai commandé une nouvelle carte réseau, plus adaptée pour un serveur, et que cette solution est vraiment temporaire…

Related Posts:

This entry was posted in FreeBSD and tagged . Bookmark the permalink.

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>