# Improving performance (Français)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Related articles

- /Boot process
- Pacman/Tips and tricks#Performance
- OpenSSH#Speeding up SSH
- Openoffice#Speed up OpenOffice
- Laptop
- Preload

## Périphériques de stockage

### Ordonnanceur d'E/S

L'ordonnanceur d'entrées-sorties (I/O scheduling en anglais) permet, comme son nom l'indique, d'ordonner les entrées et sorties des périphériques.

Par défaut, Linux utilise l'ordonnanceur CFQ (Completely Fair Queuing), mais il est possible d'en utiliser un autre. Chacun a des propriétés propres à lui, donc il n'y en a pas de meilleur, tout dépend du périphérique concerné.

#### Liste des ordonnanceurs disponibles

La liste des ordonnanceurs disponibles est accessible avec la commande :

    cat /sys/block/sdX/queue/scheduler

- Noop : il fonctionne en plaçant toutes les requêtes d'E/S dans une simple file FIFO, et n'implémente que la fusion de requêtes.
- Deadline : il tente de garantir un temps de réponse à une requête.
- CFQ : il fonctionne en plaçant les requêtes synchrones soumises par les processus dans des files d'attente dédiées (une file par processus), et en allouant des tranches de temps processeur à chaque file pour accéder au disque dur.
- BFQ : il a pour but d'avoir un algorithme plus simple que CFQ. Cet ordonnanceur est disponible avec les noyaux suivants : linux-ckAUR, linux-bfqAUR[broken link: package not found], linux-bfsAUR[broken link: package not found], linux-pfAUR, linux-uksmAUR...

#### Changement d'ordonnanceur

##### Changement par le Sysfs

On peut changer temporairement d'ordonnanceur d'E/S (jusqu'au prochain redémarrage) avec la commande suivante en tant que root :

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

Ou bien avec un utilisateur standard :

    echo noop | sudo tee /sys/block/sdX/queue/scheduler

##### Changement par un paramètre noyau

De façon plus permanente, on peut changer l'ordonnanceur en passant un paramètre dans la ligne de boot du noyau. Par exemple, il faudra ajouter :

    elevator=noop

Pour utiliser l'ordonnanceur d'E/S noop par défaut.

Note: Ce paramètre s'applique à tous les périphériques de la machine.

##### Changement par une règle Udev

Si on veut des paramètres affinés et persistant, on utilisera une règle Udev.

    /etc/udev/rules.d/60-schedulers.rules

    # Définit 'noop' pour les SSD uniquement
    ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"

    # Définit 'cfq' pour les HDD uniquement
    ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"

Puis penser à recharger Udev :

    udevadm control --reload

#### Vérification des changements

Après avoir appliqué une de ces solutions, il suffit de nouveau d'utiliser la commande `cat /sys/block/sdX/queue/scheduler` pour vérifier le changement d'ordonnanceur. L'ordonnanceur actif est celui entre crochets.

Exemple pour Noop :

    [noop] deadline cfq bfq

## Gestion de la RAM, du swap et du débordement mémoire (OOM / Out Of Memory)

### zram ou zswap

zram est un «périphérique bloc» (comme une partition de disque dur) qui vit dans la RAM et où les données sont compressées avant d'être inscrites. Avec un peu d'imagination, ça permet d'augmenter la dimension de sa RAM sans acheter de barrette mémoire.

#### Démarrage rapide

    modprobe zram
    echo lz4 > /sys/block/zram0/comp_algorithm
    echo 8G > /sys/block/zram0/disksize
    mkswap --label zram0 /dev/zram0
    swapon --priority 100 /dev/zram0

Voilà, on a maintenant un disque virtuel zram utilisé comme swap. Pour l'effacer :

    swapoff /dev/zram0
    rmmod zram

#### Configuration permanente

Il est possible de rendre la configuration pérenne au moyen d'une règle udev, voir ici (en).

Si vous préférez, vous pouvez recourir au paquet zram-generator qui fournit un service dédié pour systemd. Exemple de configuration :

    /etc/systemd/zram-generator.conf

    [zram0]
    # Autant d'espace zram que de RAM. Par défaut, c'est 50%
    zram-fraction=1.0
    # Pas de limite de taille du zram. Par défaut c'est 4Go
    max-zram-size=none
    # Utiliser zstd pour la compression, plutôt que l'algo par défaut (qui change d'une machine à l'autre)
    compression-algorithm=zstd

#### Statistiques

L'utilitaire `zramctl` du paquet util-linux permet d'obtenir des statistiques utiles.

    % zramctl
    NAME       ALGORITHM DISKSIZE  DATA  COMPR  TOTAL STREAMS MOUNTPOINT
    /dev/zram0 zstd           16G  4,9G 609,1M 758,4M       4 [SWAP]

Ici, le périphérique `zram0` contient 4.9Go de données mais n'occupe que 758.4Mo de RAM. htop est également en mesure de fournir des informations similaires :

    zrm[|        602M(4.84G)/16.0G]

Note: Il est fort probable que le module `zswap` activé par défaut sur le noyau Arch Linux «interfère» avec zramctl pour un usage de zram en tant que «RAM supplémentaire». Ce module permet de compresser la donnée avant de l'inscrire en swap: cette donnée est donc incompressible pour zram. On peut désactiver zswap au démarrage en ajoutant à sa cmdline: `zswap.enable=0`

## Autres usages

Il reste tout à fait possible d'utiliser un périphérique zram pour y mettre un autre système de fichiers que swap.

    modprobe zram
    echo 8G > /sys/block/zram0/disksize
    mkfs.ext4 /dev/zram0
    mkdir /mnt/compressed_ext4
    mount /dev/zram0 /mnt/compressed_ext4

Categories:

- Hardware (Français)
- System administration (Français)

Hidden category:

- Pages with broken package links