2010 September Skip to content

Linux Attitude

Le libre est un état d'esprit

Archive

Archive for September, 2010

Niveau :      
Résumé : quelques ordre de grandeur

Voici quelques ordre de grandeur qui vous permettront d'avoir les idées un peu plus claires sur les performances de votre système. Imaginez que le swap est 100 000 fois plus lent que la mémoire du processus ! Qu'un algorithme de création d'arbre peut être plus lent qu'un algorithme linéaire si chaque nœud de l'arbre se retrouve sur une page différente (pensez à vos centaines de malloc pour remplir un arbre) !

Valable en 2010
ObjetLatenceDébit
Internet80 ms2 Mo/s
Accès au swap8 ms50 Mo/s
Disque10krpm3 ms50 Mo/s
Ethernet gigabit1 ms100 Mo/s
Disque SSD0.5 ms100 Mo/s
fork0.1 ms
context switch3 µs
gettimeofday1 µs
Interface pci0.1 µs133 Mo/s
malloc/mmap0.1 µs
RAM30 ns8 Go/s
Interface pci-express 16x10 ns8 Go/s
Cache L25 ns
Cache L11 ns
Registre processeur0.3 ns40 Go/s

Notez que l'important ce sont les ordres de grandeur, vous pouvez facilement trouver des éléments qui font le double ou la moitié de ces performances.

Interprétations

Sérieusement, pas besoin de giga de swap sur votre serveur. Mettez un tout petit peu et vous monitorez dès que ca dépasse, imaginez la division par un nombre à 5 chiffres du nombre de pages vues sur votre serveur ! Pour ma part je préfère répondre à moins de requêtes par seconde et garder un serveur utilisable.

Mais sur votre station de travail vous faites ce que vous voulez, on est en général plus patient :-)

Pas de gettime à gogo dans votre code pour mesurer les perf, ça tue les perfs ...

Le réseau fait a peu près aussi bien que votre disque.

Pas de malloc à gogo pour des structures morcelées et très utilisées. faites une structure unique si vous devez en avoir beaucoup.

Le SSD c'est bien mais ca vaut pas l'accès direct au flash.

Étant donné la vitesse de compression un swap compressé peut vraiment valoir le coup.

Le cache processeur sert vraiment à quelque chose ... si on sait coder pour qu'il soit utilisé (ou laisser le compilateur faire).

Le fork c'est un peu lent, prévoyez un prefork correct sur vos applications fréquemment appelées.

Avoir beaucoup de processus n'est pas si coûteux en soi (context switch).


PS : Si vous avez des données pour compléter ce tableau, n'hésitez pas à me laisser des commentaires.

Niveau :      
Résumé :

HA Cékoikece

Qu'est-ce que la haute disponibilité ? Déjà on ne dit pas HD mais HA (high availability) ;-).

Il s'agit de fournir un taux de disponibilité très important. En général la disponibilité se mesure en 9, deux 9, trois 9 ... Cela indique le pourcentage de disponibilité. Deux 9 c'est 99%, sur un an ça correspond à 88h de non disponibilité. C'est assez faible.

Mais faible ou élevé, tout dépend de ce dont on parle. Si on parle d'un site web, 99% c'est faible mais suffisant, si on parle d'un service financier on préfèrera 99.999%

Les pannes

Les causes des indisponibilités peuvent être multiple :

  • bug
  • erreur humaine
  • coupure de courant
  • chalutier qui coupe un câble
  • bombe H sur batiment
  • ...

Les éléments pouvant être coupés sont nombreux :

  • électricité
  • salle d'hébergement
  • électronique
  • disques
  • réseau
  • système d'exploitation
  • logiciel

continue reading...

Niveau :      
Résumé : grub-reboot; grep . *; ssh-keygen -R; ${FUNCNAME[*]}; man -LC

Rebooter une seule fois sure une entrée donnée avec grub2 (le reboot suivant, s'il y a lieu, se fera sur l'ancienne entrée).

# attention, grub doit avoir default="${saved_entry}" dans /boot/grub/grub.cfg
# GRUB_DEFAULT=saved dans /etc/default/grub sous debian
$ grub-reboot 1
$ reboot

Afficher les paramètres de /proc/sys/net/ipv4 (ou tout autre répertoire similaire avec des fichiers d'une ou 2 lignes) :

$ cd /proc/sys/net/ipv4
$ grep . *

Supprimer un host de ~/.ssh/known_hosts (pratique surtout s'il est hashé) :

# le hostname à utiliser est indiqué par le client ssh en cas d'erreur
$ ssh-keygen -R hostname

Imprimer une stack trace en bash :

# peut s'améliorer avec une boucle while et les variables $BASH_LINENO et $BASH_SOURCE
$ echo ${FUNCNAME[*]}

Toujours avoir les man en VO (up to date et pas d'erreurs subtiles) :

$ alias man='man -LC'