Tuning de disques

De SeRoM - Wiki
Aller à : navigation, rechercher
Draft Draft / Brouillon
Cette page/chapitre est un brouillon, pas un article ou une règle, et peut être incomplète ou non-fiable! Vous êtes invités à faire des suggestions en page de discussion.

Déport du journal sur un second disque

Pour un serveur qui sature ces disques en écriture, on peut répartire la charger en déportant le journal sur un second disque. Ainsi l'overhead d'écriture du journal n'est plus pénalisant. Et l'on conserve la fonctionalité du journal (perte de data écrite en cas de crash disque).

Pour new partition

 mkfs -t ext4 -O journal_dev -b 2048 /dev/sdb1
 mkfs -t ext4 -J device=/dev/sdb1 -b 2048 /dev/sda1 

Pour une partition existante:

 mkfs -t ext4 -O journal_dev -b 2048 /dev/sdb1
 tune2fs -O '^has_journal' /dev/sda1 
 tune2fs -j -J device=/dev/sdb1 /dev/sda1

Analyse de fragmentation

Plusieurs commandes permettent d'indiquer le niveau de fragmentation.

  • Le rapport en fin de fsck,
  • e2freefrag /dev/partition: donne une liste des blocs contigus libre et les trie par taille. Un disque peu fragmenté est un disque avec peu de petits blocs contigus libre et beaucoup de grands.
  • filefrag fileName: donne le nombre d'extend (blocs contigus) sur lequel le fichier s’étend.

Alignement FileSystem

Au mieux le FileSystème est aligné sur l'architecture disque inférieur, au meilleur en seront les performances.

Alignement sur un RAID

Pour aligner un FS sur un disque RAID, il faut connaitre le chunk du RAID, le niveau de RAID et la taille des blocs du FileSystem.

Exemple pour une création de FS sur un RAID6 de 6 disques (4actifs) avec un bloc size de 4KB et un chunk de 64KB

 mkfs -t ext4 -E stride=16,stripe-width=64 -b 4096 /dev/san/lun1

  • stripe = le chunk (64KB) / par la taille de bloc (4KB) = 16
  • stripe-width = le nombre de stride(16) * le nombre de disques de donnée(4) = 64

Alignement sur un SSD

Voir l'article sur les SSD. Il y a un chapitre sur l'alignement.

Sélection de l’algorithme de scheduling

Plusieurs schduler existe. On peut choisir le scheduler pour chaque disque. Voici les 4 scheduleur sous Linux:

  • noop: Ne procède à aucune réorganisation des requêtes. Adapté pour: des disques SAN, les disques de VM, ou des disques SSD.
  • anticipatory: Conserve une fenêtre de lecture anticipation relativement longue (read_ahead). Adapté pour: les grosses requêtes séquencielles (écriture & lecture) example serveur faisant du Dumping, ou un file server de très gros fichiers.
  • deadline: Réorganise les requête mais va favorisé celle dont le timeout a expiré. Adapté pour: les machines tournant des process interactif du type DB
  • cfq: Completely faire queuing Adapté pour: les environnement mix

Pour afficher le schduler sélectionné pour un disque.

 cat /sys/block/sda/queue/scheduler

Pour changer à chaud le scheduler:

 echo noop > /sys/block/sda/queue/scheduler

Attention

Attention

Pour changer le scheduler de façon persistante au reboot, il faudra utiliser un profile tuned et définir le scheduler dans le fichier ktune.sysconfig du profile.