Google PlusFacebookTwitter

Swift et l’optimisation système

By on Jan 16, 2015 in Devel, Linux, OpenStack | 0 comments

Share On GoogleShare On FacebookShare On Twitter

Optimiser Swift c’est bien, optimiser le système c’est mieux !

Il y a quelques mois, j’ai eu envie de m’essayer à l’optimisation de Swift. Pour ceux qui auraient besoin d’un petit rappel sur ce qu’est Swift, c’est un système distribué de stockage d’objets, extensible et redondant. Swift est aussi connu sous le doux nom d’OpenStack Object Storage.

Généralement, l’optimisation de Swift consiste à modifier le nombre de worker et de concurrency, c’est bien mais ce n’est pas suffisant.

Swift étant destiné à du stockage de fichiers redondés, il se base donc sur deux principaux composants matériels du serveur (sans compter le processeur et la mémoire):

  1. Le disque dur
  2. La carte réseau

Se sont donc ces deux composants qu’il faudra optimiser sous Linux. Pour se faire, il sera nécessaire de passer par le sysctl ainsi que par udev:

Côté matériel, il n’est pas nécessaire d’avoir un RAID dédié aux disques Swift, de simples disques en JBOD feront l’affaire. Les fichiers sont automatiquement répliqués sur les nœuds du ring! Pour ce qui est du réseau, un bonding d’au moins deux interfaces est nécessaire (plus il y en a et mieux se sera).

sysctl, udev, what else ?

Lors de mes premiers essais, j’avais choisi de rendre la persistance des options faites dans /sys/ via sysfsutils, le problème est que cette solution n’était pas facilement utilisable sur des distributions RedHat like et que le projet ne semble pas avoir évolué depuis plusieurs années. De ce fait je me suis orienté vers udev qui est au final parfait pour effectuer ce travail.

Au premier abord, la syntaxe d’udev peut rebuter mais au final, elle est assez simple à appréhender ! Voici un petit exemple présent dans le script livré plus bas:

Explications:

Pour ce qui est du sysctl, je ne vais pas expliquer son fonctionnement, il est assez intelligible à mon sens. Petite piqûre de rappel, sysctl agit directement sur les valeurs du noyau. Parce que je suis un mec super sympa (si si c’est vrai), je vais expliquer certains de mes choix.

Il va de soit que ces choix sont les miens et que certaines personnes peuvent diverger avec ces derniers, si tel est le cas, je vous invite à en débattre ! Encore une fois, je n’ai pas la science infuse (dommage…).

Sur beaucoup de sites internet, les options tcp_tw_recycle et tcp_tw_reuse sont très souvent citées comme options très « optimisantes » pour la couche TCP/IP. Ce n’est pas faux tant que vous n’êtes pas dans un réseau NATté, ces deux options activées ensemble peuvent causer des rejets de paquets. Pour éviter ces rejets il faut désactiver la vérification du timestamp des paquets TCP, d’ou l’option tcp_timestamps.

Les options nf_conntrack_max et hashsize permettre de ne pas avoir la table nf_conntrack remplie et donc d’éviter cette jolie erreur:

Les options *backlogsomaxconn, *mem augmentent la taille des files ainsi que la taille des tampons (buffers). Je pense que les autres options sont assez connues et courantes pour ne pas avoir à les détailler, si je me trompe faites le moi savoir, j’éditerai le billet.

Script

Le script est assez conséquent, il permet les choses suivantes:

  1. Afficher les valeurs qui seront modifiées grâce au dry-mode
  2. Optimiser de manière temporaire, les modifications seront perdues au prochain redémarrage
  3. Persister les optimisations, les modifications seront permanentes même après un redémarrage
  4. Restaurer les valeurs par défaut du noyau et supprimer toutes traces de l’optimisation

Utilisation:

Résultat:

Par défaut le script suppose que les disques dédiés à Swift sont formatés en XFS et qu’ils sont connectés en SCSI ou en SATA. Si ce n’est pas le cas, il suffit de modifier les deux variables suivantes (au début du script):

  1. fs_type : Le système de fichiers utilisé (XFS, ext3, ext4, etc…)
  2. dev_type : Le type de disque (SCSI/SATA, Virtuel, IDE, etc…)

Il va de soit que le script doit être exécuté sur l’ensemble du ring Swift. Et voici celui que vous attendiez tous, le grand, l’unique, le fabuleux, l’incroyable… Mince ça recommence, vite mes pilules ! Bref, le script:

Pour ceux qui n’aiment pas faire de copier/coller dégoutant, le script est disponible sur mon GitHub à l’adresse suivante: https://github.com/goldyfruit/openstack-os-tuning/blob/master/Swift/tuning.sh

J’espère ne pas vous avoir dégoûté avec toute cette volubilité et que cette lecture ne fut pas trop indigeste. Meilleurs vœux pour 2015 !

Liens

The following two tabs change content below.

Gaëtan Trellu (goldyfruit)

OpenStack Technical Cloud Consultat chez Red Hat
Autodidacte en informatique, depuis 2005 je parcours l’écosystème Unix à la recherche de nouvelles connaissances et de nouvelles rencontres.

CC BY 4.0 Swift et l’optimisation système par Gaëtan Trellu (goldyfruit) est sous Licence Creative Commons Internationale Attribution 4.0.