Improving performance (Français)

État de la traduction:
Cet article est la version francophone de
Improving performance
. Date de la dernière traduction: 2022-03-26. Vous pouvez aider à synchroniser la traduction s'il y a eu des
changements
dans la version anglaise.
Related articles
/Boot process (Français)
Pacman (Français)/Tips and tricks (Français)#Performance
OpenSSH (Français)#Accélérer SSH
Openoffice#Speed up OpenOffice
Laptop
Preload
Cet article fournit des informations sur les diagnostics de base d'un système en matière de performances, ainsi que sur les mesures qui peuvent être prises pour réduire la consommation de ressources ou pour optimiser le système, l'objectif final étant d'améliorer les performances du système de manière ressentie ou mesurable.
Les bases
Connaissez votre système
La meilleure façon de régler un système est de cibler les goulots d'étranglement ou les sous-systèmes qui limitent la vitesse globale. Les spécifications du système peuvent aider à les identifier.
Si l'ordinateur devient lent lorsque de grosses applications (comme LibreOffice et Firefox) tournent en même temps, vérifiez si la quantité de RAM est suffisante. Utilisez la commande suivante, et vérifiez la colonne "disponible" :
$ free -h
Si le temps de démarrage est lent et que les applications prennent beaucoup de temps à se charger au premier lancement (seulement), le disque dur est probablement en cause. La vitesse d'un disque dur peut être mesurée à l'aide de la commande
hdparm
:
# hdparm -t /dev/sd
X
Note
hdparm
indique uniquement la vitesse de lecture pure d'un disque dur et ne constitue pas un point de référence valide. Une valeur supérieure à 40MB/s (en veille) est cependant acceptable sur un système moyen.
Si la charge du CPU est constamment élevée même avec suffisamment de RAM disponible, essayez de réduire l'utilisation du CPU en désactivant les
daemons
et/ou les processus en cours d'exécution. Ceci peut être contrôlé de plusieurs façons, par exemple avec
htop
,
pstree
ou tout autre outil de
surveillance système
:
$ htop
Si les applications utilisant le rendu direct sont lentes (c'est-à-dire celles qui utilisent le GPU, comme les lecteurs vidéo, les jeux, ou même un
gestionnaire de fenêtres
), l'amélioration des performances du GPU devrait aider. La première étape consiste à vérifier si le rendu direct est réellement activé. Ceci est indiqué par la commande
glxinfo
, qui fait partie du paquet
mesa-utils
, qui devrait renvoyer
direct rendering : Yes
lorsqu'elle est utilisée :
$ glxinfo | grep "direct rendering"
Lorsque vous utilisez un
environnement de bureau
, la désactivation des effets visuels de bureau (non utilisés) peut réduire l'utilisation du GPU. Utilisez un environnement plus léger ou créez un
environnement sur mesure
si l'actuel ne répond pas aux exigences matérielles et/ou personnelles.
Analyse comparative
Les effets de l'optimisation sont souvent difficiles à juger. Ils peuvent cependant être mesurés par des outils de
benchmarking
.
Périphériques de stockage
Chemins d'accès matériels multiples
Un chemin matériel interne décrit comment le périphérique de stockage est connecté à travers votre carte mère. Il existe différentes façons de se connecter à travers la carte mère, comme la carte d'interface réseau, PCIe, Firewire, carte Raid, USB, etc.  En répartissant vos périphériques de stockage sur plusieurs points de connexion, vous pouvez éviter les goulots d'étranglement. En effet, chaque "voie d'entrée" dans la carte mère est "comme un tuyau", et il y a une limite à la quantité de données qui peut passer par ce tuyau à un même moment. Ce problème peut être évité car les cartes mères ont généralement plusieurs "tuyaux".
Un exemple concret de ceci serait si vous avez deux ports USB à l'avant de votre machine, quatre ports USB à l'arrière, et quatre disques : il sera généralement plus rapide de connecter deux disques à l'avant et deux à l'arrière plutôt que trois à l'arrière et un à l'avant. En effet, la plupart du temps, les ports avant et arrière sont connectés en interne à des concentrateurs USB racine distincts, ce qui signifie que vous pouvez envoyer plus de données en même temps en utilisant les deux au lieu d'un.
Les commandes suivantes vous aideront à déterminer les différents chemins sur votre machine.
USB Device Tree
$ lsusb -t
PCI Device Tree
$ lspci -tv
Partitionnement
Assurez-vous que vos partitions sont
correctement alignées
.
Disques multiples
Si vous disposez de plusieurs disques, vous pouvez les configurer en
RAID
logiciel pour améliorer considérablement la vitesse.
La création d'un
swap
sur un disque séparé peut également être d'une grande aide, surtout si votre machine en fait fréquemment usage.
Disposition sur les disques durs
Si vous utilisez un disque dur rotatif traditionnel, la disposition de vos partitions peut influencer les performances du système. Les secteurs situés au début du disque (plus près de l'extérieur du disque) sont plus rapides que ceux situés à la fin. En outre, une partition plus petite nécessite moins de mouvements de la tête du disque, ce qui accélère les opérations du disque. Il est donc conseillé de créer une petite partition (10 Go, plus ou moins selon vos besoins) uniquement pour votre système, le plus près possible du début du disque. Les autres données (photos, vidéos) devraient être conservées sur une partition séparée, et ceci est généralement réalisé en séparant le répertoire personnel (
/home/
user
) du système (
/
).
Choix et réglage de votre système de fichiers
Le choix du meilleur système de fichiers pour un système spécifique est très important car chacun a ses propres forces. L'article
File systems
fournit un bref résumé des systèmes les plus populaires. Vous pouvez également trouver des articles pertinents dans
Category:File systems (Français)
.
Options de montage
L'option
noatime
est connue pour améliorer les performances du système de fichiers.
Les autres options de montage sont spécifiques au système de fichiers, consultez donc les articles pertinents pour les systèmes de fichiers :
Ext3
Ext4 (Français)#Améliorer les performances
JFS#Optimizations
XFS#Performance
Btrfs (Français)#Defragmentation
,
Btrfs (Français)#Compression
, et
btrfs(5)
ZFS#Tuning
Reiserfs
L'option de montage
data=writeback
améliore la vitesse, mais peut corrompre les données en cas de coupure de courant. L'option de montage
notail
augmente l'espace utilisé par le système de fichiers d'environ 5 %, mais améliore également la vitesse globale. Vous pouvez également réduire la charge du disque en plaçant le journal et les données sur des lecteurs séparés. Ceci est fait lors de la création du système de fichiers :
# mkreiserfs -j /dev/sd
a1'
/dev/sd'
b1'
Remplacez
/dev/sd
a1
par la partition réservée au journal, et
/dev/sd
b1
par la partition pour les données.  Vous pouvez en apprendre plus sur reiserfs avec
Guide du système de fichiers Funtoo
.
Réglage des paramètres du noyau
Il existe plusieurs paramètres clés affectant les performances des périphériques de bloc, consultez
Sysctl#Virtual memory
pour plus d'informations.
Ordonnancements d'entrée/sortie
Informations de base
L'ordonnanceur d'entrée/sortie (E/S) est le composant du noyau qui décide de l'ordre dans lequel les opérations d'E/S en bloc sont soumises aux périphériques de stockage. Il est utile de rappeler ici quelques spécifications des deux principaux types de disques, car l'objectif de l'ordonnanceur d'E/S est d'optimiser la façon dont ceux-ci sont capables de traiter les demandes de lecture :
Un disque dur possède des disques tournants et une tête qui se déplace physiquement à l'endroit requis. Par conséquent, la latence aléatoire est assez élevée, variant entre 3 et 12 ms (qu'il s'agisse d'un disque de serveur haut de gamme ou d'un disque d'ordinateur portable et qu'il contourne le tampon d'écriture du contrôleur de disque), tandis que l'accès séquentiel offre un débit beaucoup plus élevé. Le débit typique d'un disque dur est d'environ 200 opérations E/S par seconde (IOPS).
Un SSD n'a pas de pièces mobiles, l'accès aléatoire est aussi rapide que l'accès séquentiel, généralement moins de 0,1 ms, et il peut gérer plusieurs demandes simultanées. Le débit typique d'un SSD est supérieur à 10 000 IOPS, ce qui est plus que nécessaire dans les situations de charge de travail courantes.
Si de nombreux processus effectuent des demandes d'E/S vers différents éléments de stockage, des milliers d'IOPS peuvent être générés alors qu'un disque dur typique ne peut gérer qu'environ 200 IOPS. Il y a une file d'attente de demandes qui doivent attendre l'accès au stockage. C'est là que les ordonnanceurs d'E/S jouent un rôle d'optimisation.
Les algorithmes d'ordonnancement
Une façon d'améliorer le débit est de linéariser l'accès : en classant les demandes en attente par leur adresse logique et en regroupant les plus proches. Historiquement, il s'agissait du premier ordonnanceur d'E/S de Linux appelé
elevator
.
L'un des problèmes de l'algorithme Elevator est qu'il n'est pas optimal pour un processus effectuant un accès séquentiel : lecture d'un bloc de données, traitement pendant plusieurs microsecondes puis lecture du bloc suivant et ainsi de suite. Le planificateur de l'ascenseur ne sait pas que le processus est sur le point de lire un autre bloc à proximité et, par conséquent, se déplace vers une autre demande par un autre processus à un autre endroit. L'ordonnanceur d'E/S
anticipatory
L'ordonnanceur d'E/S surmonte le problème : il fait une pause de quelques millisecondes en anticipant une autre opération de lecture à proximité avant de traiter une autre demande.
Bien que ces ordonnanceurs tentent d'améliorer le débit total, ils peuvent laisser certaines demandes malchanceuses en attente pendant un temps très long. À titre d'exemple, imaginons que la majorité des processus effectuent des demandes au début de l'espace de stockage alors qu'un processus malchanceux effectue une demande à l'autre extrémité du stockage. Ce report potentiellement infini du processus est appelé famine. Pour améliorer l'équité, l'algorithme
deadline
a été développé. Il dispose d'une file d'attente ordonnée par adresse, comme l'ascenseur, mais si une requête reste trop longtemps dans cette file, elle est déplacée vers une file d'attente "expirée" ordonnée par le temps d'expiration. L'ordonnanceur vérifie d'abord la file d'attente expirée et traite les demandes à partir de celle-ci, puis passe à la file d'attente de l'ascenseur. Notez que cette équité a un impact négatif sur le débit global.
La
Completely Fair Queuing (CFQ)
approche le problème différemment en allouant un tranche de temps (timeslice) et un nombre de requêtes autorisées par file d'attente en fonction de la priorité du processus qui les soumet. Elle prend en charge les
cgroups
qui permet de réserver une certaine quantité d'E/S à une collection spécifique de processus. C'est particulièrement utile pour l'hébergement mutualisé et en nuage : les utilisateurs qui ont payé pour un certain nombre d'IOPS veulent obtenir leur part quand ils en ont besoin. De plus, il tourne au ralenti à la fin d'une E/S synchrone en attendant d'autres opérations proches, reprenant cette fonctionnalité de l'ordonnanceur
anticipatif
et apportant quelques améliorations. Les ordonnanceurs "anticipatif" et "élévateur" ont été retirés du noyau Linux et remplacés par les alternatives plus avancées présentées ci-dessous.
Le
Budget Fair Queuing (BFQ)
[
dead link
2024-12-15—SSL error]
est basé sur le code CFQ et apporte quelques améliorations. Il n'accorde pas le disque à chaque processus pour une tranche de temps fixe mais attribue un "budget" mesuré en nombre de secteurs au processus et utilise des heuristiques. Il s'agit d'un ordonnanceur relativement complexe, qui peut être plus adapté aux disques rotatifs et aux SSD lents, car sa surcharge élevée par opération, surtout si elle est associée à un CPU lent, peut ralentir les dispositifs rapides. L'objectif de BFQ sur les systèmes personnels est que, pour les tâches interactives, le périphérique de stockage soit pratiquement aussi réactif que s'il était inactif. Dans sa configuration par défaut, il s'efforce de fournir la latence la plus faible possible plutôt que d'atteindre le débit maximal.
Kyber
est un ordonnanceur récent inspiré des techniques de gestion active des files d'attente utilisées pour le routage réseau. L'implémentation est basée sur des "jetons" qui servent de mécanisme pour limiter les demandes. Un jeton de mise en file d'attente est nécessaire pour allouer une demande, il est utilisé pour empêcher la famine des demandes. Un jeton de répartition est également nécessaire et limite les opérations d'une certaine priorité sur un dispositif donné. Enfin, une latence de lecture cible est définie et l'ordonnanceur s'adapte pour atteindre cet objectif de latence. L'implémentation de l'algorithme est relativement simple et il est jugé efficace pour les périphériques rapides.
Les ordonnanceurs d'E/S du noyau
Bien que certains des premiers algorithmes aient été mis hors service, le noyau Linux officiel prend en charge un certain nombre d'ordonnanceurs d'E/S qui peuvent être divisés en deux catégories :
Les
ordonnanceurs multi-queues
sont disponibles par défaut avec le noyau. Le
Multi-Queueue Block I/O Queuing Mechanism (blk-mq)
fait correspondre les requêtes d'E/S à des files d'attente multiples, les tâches étant réparties entre les threads et donc les cœurs de CPU. Dans ce cadre, les ordonnanceurs suivants sont disponibles :
None
, où aucun algorithme de mise en file d'attente n'est appliqué.
mq-deadline
, l'adaptation de l'ordonnanceur deadline (voir ci-dessous) au multi-threading.
Kyber
BFQ
Les
single-queue schedulers
sont des schedulers historiques :
NOOP
est l'ordonnanceur le plus simple, il insère toutes les demandes d'E/S entrantes dans une simple file FIFO et implémente la fusion des demandes. Dans cet algorithme, il n'y a pas de réordonnancement de la demande basé sur le numéro de secteur. Il peut donc être utilisé si l'ordonnancement est traité à une autre couche, au niveau du périphérique par exemple, ou si cela n'a pas d'importance, pour les SSD par exemple.
Deadline
CFQ
Note
Les ordonnanceurs à file unique
ont été supprimés du noyau depuis Linux 5.0
.
Changement d'ordonnanceur d'E/S
Note
Le meilleur choix d'ordonnanceur dépend à la fois du périphérique et de la nature exacte de la charge de travail. De plus, le débit en Mo/s n'est pas la seule mesure des performances : les délais ou l'équité détériorent le débit global mais peuvent améliorer la réactivité du système. Le
Benchmarking
peut être utile pour indiquer les performances de chaque ordonnanceur d'E/S.
Pour lister les ordonnanceurs disponibles pour un périphérique et l'ordonnanceur actif (entre parenthèses) :
$ cat /sys/block/
sda
/queue/scheduler
mq-deadline kyber [bfq] none
Pour lister les ordonnanceurs disponibles pour tous les périphériques :
$ grep "" /sys/block/
*
/queue/scheduler
/sys/block/pktcdvd0/queue/scheduler:none
/sys/block/sda/queue/scheduler:mq-deadline kyber [bfq] none
/sys/block/sr0/queue/scheduler : [mq-deadline] kyber bfq none
Pour changer l'ordonnanceur d'E/S actif en
bfq
pour le périphérique
sda
, utilisez :
# echo
bfq
> /sys/block/
sda
/queue/scheduler
Le processus de changement de planificateur d'E/S, selon que le disque tourne ou non, peut être automatisé et persister à travers les redémarrages. Par exemple, la règle
udev
ci-dessous définit le planificateur à
none
pour
NVMe
,
mq-deadline
pour
SSD
/eMMC, et
bfq
pour les disques rotatifs :
/etc/udev/rules.d/60-ioschedulers.rules
# définir le planificateur pour NVMe
ACTION=="add|change", KERNEL=="nvme[0-9]n[0-9]", ATTR{queue/scheduler}="none"
# définir le planificateur pour SSD et eMMC
ACTION=="add|change", KERNEL=="sd[a-z]*|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"
# définir le planificateur pour les disques rotatifs
ACTION=="add|change", KERNEL=="sd[a-z]*", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"
Redémarrez ou forcez
udev (Français)#Charger de nouvelles règles
.
Réglage du planificateur d'E/S
Chaque ordonnanceur d'E/S du noyau possède ses propres paramètres de réglage, tels que le temps de latence, le délai d'expiration ou les paramètres FIFO. Ils sont utiles pour ajuster l'algorithme à une combinaison particulière de périphérique et de charge de travail. Il s'agit généralement d'obtenir un débit plus élevé ou une latence plus faible pour une utilisation donnée.
Les paramètres et leur description se trouvent dans la
kernel documentation
.
Pour lister les paramètres disponibles pour un périphérique, dans l'exemple ci-dessous
sdb
qui utilise
deadline
, utilisez :
$ ls /sys/block/
sdb
/queue/iosched
fifo_batch  front_merges  read_expire  write_expire  writes_starved
Pour améliorer le débit de
deadline
au prix de la latence, on peut augmenter
fifo_batch
avec la commande :
# echo
32
> /sys/block/
sdb
/queue/iosched/
fifo_batch
Configuration de la gestion de l'alimentation
Lorsqu'il s'agit de disques rotatifs traditionnels (HDD), vous pouvez vouloir
baisser ou désactiver complètement les fonctions d'économie d'énergie
.
Réduire les lectures/écritures sur les disques
Éviter les accès inutiles aux disques de stockage lents est bon pour les performances et augmente également la durée de vie des dispositifs, bien que sur le matériel moderne, la différence d'espérance de vie soit généralement négligeable.
Note
Un SSD de 32 Go avec un facteur d'amplification d'écriture médiocre de 10x, un cycle d'écriture/effacement standard de 10000, et
10 Go
de données
écrites par jour
, aurait une espérance de vie de
8 ans
. Cela s'améliore avec des SSD plus grands et des contrôleurs modernes avec moins d'amplification d'écriture. Consultez également
cette expérience d'endurance
[
dead link
2025-03-15—HTTP 404]
pour savoir si une stratégie particulière visant à limiter les écritures sur le disque est réellement nécessaire.
Afficher les écritures sur disque
Le paquet
iotop
permet de trier les écritures sur disque et de montrer la quantité et la fréquence d'écriture des programmes sur le disque. Consultez
iotop(8)
pour plus de détails.
Relocaliser des fichiers dans tmpfs
Déplacez des fichiers, tels que votre profil de navigateur, vers un système de fichiers
tmpfs
, pour améliorer la réponse des applications puisque tous les fichiers sont maintenant stockés en RAM :
Référez-vous à
Profile-sync-daemon
pour la synchronisation des profils de navigateurs. Certains navigateurs peuvent nécessiter une attention particulière, consultez par exemple
Firefox on RAM
.
Reportez-vous à
Anything-sync-daemon
pour synchroniser tout dossier spécifié.
Référez-vous à
Makepkg (Français)#Améliorer les temps de compilation
pour améliorer les temps de compilation en construisant les paquets dans tmpfs.
Systèmes de fichiers
Référez-vous à la page
système de fichiers
correspondante au cas où il y aurait des instructions pour améliorer les performances, par exemple
Ext4 (Français)#Améliorer les performances
et
XFS#Performance
.
Espace swap
Consultez
Swap (Français)#Performance
.
Intervalle de réécriture et taille du tampon
Consultez
Sysctl#Virtual memory
pour plus de détails.
Planification des E/S de stockage avec ionice
De nombreuses tâches telles que les sauvegardes ne dépendent pas d'un court délai d'E/S de stockage ou d'une large bande passante d'E/S de stockage pour remplir leur tâche, elles peuvent être classées comme des tâches d'arrière-plan. D'autre part, des E/S rapides sont nécessaires pour une bonne réactivité de l'interface utilisateur sur le bureau. Il est donc avantageux de réduire la quantité de bande passante de stockage disponible pour les tâches d'arrière-plan, alors que d'autres tâches ont besoin d'E/S de stockage. Cela peut être réalisé en utilisant l'ordonnanceur d'E/S CFQ de Linux, qui permet de définir différentes priorités pour les processus.
La priorité d'E/S d'un processus d'arrière-plan peut être réduite au niveau "Idle" en le démarrant avec la commande suivante
# commande ionice -c 3
Consultez
une courte introduction à ionice
et
ionice(1)
pour plus d'informations.
CPU
Overclocking
L'
overclocking
améliore les performances de calcul du CPU en augmentant sa fréquence d'horloge maximale. La capacité d'overclocking dépend de la combinaison du modèle de CPU et du modèle de carte mère. Elle s'effectue le plus souvent par le biais du BIOS. L'overclocking présente également des inconvénients et des risques. Il n'est ni recommandé ni déconseillé ici.
De nombreuses puces Intel ne communiquent pas correctement leur fréquence d'horloge à acpi_cpufreq et à la plupart des autres utilitaires. Il en résultera des messages excessifs dans
dmesg
, qui peuvent être évités en déchargeant et en mettant sur liste noire le module du noyau
acpi_cpufreq
.
Pour lire leur vitesse d'horloge, utilisez
i7z
du paquet
i7z
AUR
. Pour vérifier le bon fonctionnement d'un CPU overclocké, il est recommandé de faire des
stress testing
.
Mise à l'échelle de la fréquence
Consultez
CPU frequency scaling (Français)
.
Ordonnanceur du processeur
L'ordonnanceur du processeur par défaut dans le noyau Linux principal est
EEVDF
.
Project C
— Projet croisé visant à refactoriser BMQ en Project C, avec recréation de PDS basé sur le code source de Project C. Il s'agit donc d'une fusion des deux projets, suivie d'une mise à jour du PDS en tant que projet C. Recommandé en tant que développement plus récent.
https://cchalpha.blogspot.com/
||
linux-prjc
AUR
BORE
— L'ordonnanceur BORE privilégie la réduction de la latence dans la planification des tâches interactives au détriment d'une certaine équité. Il est basé sur CFS et n'est ajusté que pour les mises à jour du code vruntime, de sorte que les changements globaux sont assez mineurs par rapport à d'autres ordonnanceurs non officiels.
https://github.com/firelzrd/bore-scheduler
||
linux-cachyos-bore
AUR
SCX
— Permet l'injection dynamique de divers ordonnanceurs sans nécessiter de réinitialisation du système.
https://github.com/sched-ext/scx
||
scx-scheds
Noyau temps réel
Certaines applications, telles que l'exécution d'une carte tuner TV en pleine résolution HD (1080p), peuvent bénéficier de l'utilisation d'un
noyau temps réel
.
Ajustement des priorités des processus
Consultez également
nice(1)
et
renice(1)
.
Ananicy
Ananicy
est un daemon, disponible en tant que
ananicy-git
AUR
[
broken link
: package not found]
ou
ananicy-cpp
, pour ajuster automatiquement les niveaux de priorité des exécutables. Le nice level représente la priorité de l'exécutable lors de l'allocation des ressources CPU.
cgroups
Consultez
cgroups
.
Cpulimit
Cpulimit
est un programme permettant de limiter le pourcentage d'utilisation du CPU d'un processus spécifique. Après avoir installé
cpulimit
AUR
, vous pouvez limiter l'utilisation du CPU du PID d'un processus en utilisant une échelle de 0 à 100 fois le nombre de cœurs du CPU de l'ordinateur. Par exemple, avec huit cœurs de CPU, la plage de pourcentage sera de 0 à 800. Utilisation :
$ cpulimit -l 50 -p 5081
irqbalance
L'objectif de
irqbalance
est de répartir les interruptions matérielles entre les processeurs d'un système multiprocesseur afin d'augmenter les performances. Il peut être
contrôlé
par le service
irqbalance.service
fourni.
Désactiver les mesures d'atténuation des exploits du CPU
Attention
Ne pas appliquer ce paramètre sans tenir compte des vulnérabilités qu'il ouvre. Consultez
ceci
et
cela
pour plus d'informations.
La désactivation des mesures d'atténuation des exploits du CPU peut améliorer les performances. Utilisez le
paramètre du noyau
ci-dessous pour les désactiver toutes :
mitigations=off
Les explications de tous les paramètres qu'il active sont données sur
kernel.org
. Vous pouvez utiliser
spectre-meltdown-checker
AUR
pour vérifier la vulnérabilité.
Note
Lorsque vous utilisez un processeur Intel de génération 10 et plus, ou AMD Ryzen 1 et plus, l'augmentation des performances résultant de la désactivation des mesures d'atténuation n'est que de 5% au lieu de 25% pour les générations précédentes de processeurs. Consultez
la revue générale du début 2021
,
le test sur Rocket Lake
et
le test sur Alder Lake
Graphiques
Configuration d'Xorg
Les performances graphiques peuvent dépendre des paramètres dans
xorg.conf(5)
; consultez les articles
NVIDIA
,
AMDGPU
et
Intel
. Des paramètres incorrects peuvent empêcher Xorg de fonctionner, la prudence est donc de mise.
Configuration Mesa
Les performances des pilotes Mesa peuvent être configurées via
drirc
. Des outils de configuration GUI sont disponibles :
adriconf (Advanced DRI Configurator)
— Outil GUI pour configurer les pilotes Mesa en définissant des options et en les écrivant dans le fichier standard drirc.
https://gitlab.freedesktop.org/mesa/adriconf/
||
adriconf
DRIconf
— Application de configuration pour l'infrastructure de rendu direct. Elle permet de personnaliser les paramètres de performance et de qualité visuelle des pilotes OpenGL au niveau du pilote, de l'écran et/ou de l'application.
https://dri.freedesktop.org/wiki/DriConf/
||
driconf
AUR
[
broken link
: package not found]
Accélération vidéo matérielle
L'accélération vidéo matérielle
permet à la carte vidéo de décoder/encoder la vidéo.
Overclocking
Comme pour les CPU, l'overclocking peut améliorer directement les performances, mais il est généralement déconseillé. Il existe plusieurs paquets dans l'
AUR
, comme
rovclock
AUR
(cartes ATI),
rocm-smi-lib
(cartes AMD récentes),
nvclock
AUR
(anciennes NVIDIA - jusqu'à Geforce 9), et
nvidia-utils
pour les cartes NVIDIA récentes.
Consultez
AMDGPU#Overclocking
ou
NVIDIA/Tips and tricks#Enabling overclocking in nvidia-settings
.
Activation du redimensionnement du BAR du PCI
Note
Sur certains systèmes, l'activation de PCI Resizable BAR peut entraîner une perte significative de performances. Vérifiez pour votre système et assurez-vous qu'il gagne en performances.
Le
Compatibility Support Module (CSM)
doit être désactivé pour que cela fasse effet.
La spécification PCI permet d'utiliser des
Base Address Registers
plus grands pour exposer la mémoire des périphériques PCI au contrôleur PCI. Cela peut entraîner une augmentation des performances des cartes vidéo. Avoir accès à la totalité de la mémoire vidéo améliore les performances, mais permet également des optimisations dans le pilote graphique. La combinaison d'une BAR redimensionnable, d'un décodage supérieur à la 4G et de ces optimisations du pilote est ce qu'AMD appelle
AMD Smart Access Memory
[
dead link
2024-07-30—HTTP 404]
, disponible d'abord sur les cartes mères à chipset AMD Series 500, puis étendu aux AMD Series 400 et Intel Series 300 et ultérieures à travers les mises à jour UEFI. Ce paramètre peut ne pas être disponible sur toutes les cartes mères et est connu pour causer parfois des problèmes de démarrage sur certaines cartes.
Si la BAR a une taille de 256M, la fonction n'est pas activée ou n'est pas prise en charge :
# dmesg | grep BAR=
[drm] VRAM détectée RAM=8176M, BAR=256M
Pour l'activer, activez le paramètre nommé "Above 4G Decode" ou ">4GB MMIO" dans les paramètres de votre carte mère. Vérifiez que la BAR est maintenant plus grande :
# dmesg | grep BAR=
[drm] VRAM détectée RAM=8176M, BAR=8192M
RAM, swap et gestion des OOM
Fréquence d'horloge et timings
La RAM peut fonctionner à des fréquences d'horloge et des timings différents, qui peuvent être configurés dans le BIOS. Les performances de la mémoire dépendent de ces deux valeurs. La sélection du préréglage le plus élevé présenté par le BIOS améliore généralement les performances par rapport au réglage par défaut. Notez que l'augmentation de la fréquence à des valeurs non prises en charge par le vendeur de la carte mère et de la mémoire vive est un overclocking, et les mêmes risques et inconvénients s'appliquent, consultez
#Overclocking
.
Root sur un overlay en RAM
Si vous utilisez un support à écriture lente (USB, disques durs en rotation) et que les besoins en stockage sont faibles, la racine peut être exécutée sur une superposition de RAM au-dessus de la racine en lecture seule (sur le disque). Cela peut améliorer considérablement les performances au prix d'un espace limité en écriture pour la racine. Voir
liveroot
AUR
.
zram ou zswap
Le module noyau
zram
(précédemment appelé
compcache
) fournit un périphérique de bloc compressé en RAM. Si vous l'utilisez comme périphérique de swap, la RAM peut contenir beaucoup plus d'informations mais utilise plus de CPU. Néanmoins, c'est beaucoup plus rapide que le swap sur un disque dur. Si un système revient souvent à l'échange, cela peut améliorer la réactivité. L'utilisation de zram est également un bon moyen de réduire les cycles de lecture/écriture du disque dus au swap sur les SSD.
Des avantages similaires (à des coûts similaires) peuvent être obtenus en utilisant
zswap
plutôt que zram. Les deux sont généralement similaires dans leur intention mais pas dans leur fonctionnement : zswap fonctionne comme un cache RAM compressé et ne nécessite (ni ne permet) une configuration étendue de l'espace utilisateur. Consultez
zswap
pour plus de détails sur les différences entre les deux.
Astuce
Puisqu'il est activé par défaut,
désactivez zswap
lorsque vous utilisez zram pour éviter qu'il agisse comme un cache de swap devant zram. Si les deux sont activés, les statistiques de
zramctl(8)
sont incorrectes car zram reste en grande partie inutilisé ; ceci est dû au fait que zswap intercepte et compresse les pages de mémoire qui sont échangées avant d'atteindre zram.
Exemple : Pour configurer un périphérique zram compressé lz4 avec une capacité de 32 Go et une priorité supérieure à la normale (uniquement pour la session en cours) :
# modprobe zram
# echo lz4 > /sys/block/zram0/comp_algorithme
# echo 32G > /sys/block/zram0/disksize
# mkswap --label zram0 /dev/zram0
# swapon --priority 100 /dev/zram0
Pour le désactiver à nouveau, redémarrez ou exécutez
# swapoff /dev/zram0
# rmmod zram
Une explication détaillée de toutes les étapes, options et problèmes potentiels est fournie dans la
documentation officielle du module zram
.
Le paquet
zram-generator
fournit une unité
systemd-zram-setup@.service
pour initialiser automatiquement les périphériques zram sans que les utilisateurs aient à
activer/démarrer
le modèle ou ses instances. Les ressources suivantes fournissent des informations sur la façon de l'utiliser :
zram-generator(8)
(en anglais)
zram-generator.conf(5)
https://github.com/systemd/zram-generator#readme
"Le générateur sera invoqué par systemd dès le démarrage", donc l'utilisation est aussi simple que de créer le(s) fichier(s) de configuration approprié(s) et de redémarrer. Un exemple de configuration est fourni dans
/usr/share/doc/zram-generator/zram-generator.conf.example
. Vous pouvez également
check the swap status
de vos périphériques configurés
/dev/zram
N
en vérifiant le
statut de l'unité
de la ou des instances
systemd-zram-setup@zram
N
.service
.
Le paquet
zramswap
AUR
fournit un script automatisé pour configurer un swap avec une priorité plus élevée et une taille par défaut de 20% de la taille de la RAM de votre système. Pour le faire automatiquement à chaque démarrage,
activez
zramswap.service
.
Alternativement, le paquet
zramd
AUR
[
broken link
: package not found]
permet de configurer zram automatiquement en utilisant la compression zstd par défaut, sa configuration peut être modifiée dans
/etc/default/zramd
. Il peut être lancé au démarrage en activant l'unité
zramd.service
.
Swap sur zram en utilisant une règle udev
L'exemple ci-dessous décrit comment configurer l'échange sur zram automatiquement au démarrage avec une seule règle udev. Aucun paquet supplémentaire ne devrait être nécessaire pour que cela fonctionne.
Tout d'abord, activez le module :
/etc/modules-load.d/zram.conf
zram
Configurez le nombre de noeuds /dev/zram dont vous avez besoin.
/etc/modprobe.d/zram.conf
options zram num_devices=2
Créez la règle udev comme indiqué dans l'exemple.
/etc/udev/rules.d/99-zram.rules
KERNEL=="zram0", ATTR{disksize}="512M" RUN="/usr/bin/mkswap /dev/zram0", TAG+="systemd"
KERNEL=="zram1", ATTR{disksize}="512M" RUN="/usr/bin/mkswap /dev/zram1", TAG+="systemd"
Ajoutez /dev/zram à votre fstab.
/etc/fstab
/dev/zram0 none swap defaults 0 0
/dev/zram1 none swap defaults 0 0
Utilisation de la RAM de la carte graphique
Dans le cas peu probable où vous avez très peu de RAM et un surplus de mémoire vidéo, vous pouvez utiliser cette dernière comme swap. Consultez
Swap on video RAM
.
Amélioration de la réactivité du système dans des conditions de faible mémoire
Sur les systèmes GNU/Linux traditionnels, en particulier pour les stations de travail graphiques, lorsque la mémoire allouée est sur-utilisée, la réactivité globale du système peut se dégrader jusqu'à un état presque inutilisable avant de déclencher la fonction OOM-killer du noyau ou de libérer une quantité suffisante de mémoire (ce qui a peu de chances d'arriver rapidement lorsque le système ne répond pas, car vous pouvez difficilement fermer les applications gourmandes en mémoire qui peuvent continuer à allouer plus de mémoire). Le comportement dépend également de configurations et de conditions spécifiques, le retour à un état de réactivité normal peut prendre de quelques secondes à plus d'une demi-heure, ce qui peut être pénible à attendre dans un scénario sérieux, comme pendant une présentation de conférence.
Astuce
Vérifiez si
/proc/sys/vm/oom_kill_allocating_task
est 0 et envisagez de le modifier.
[1]
Bien que le comportement du noyau et de l'espace utilisateur dans des conditions de faible mémoire puisse s'améliorer à l'avenir, comme discuté sur les listes de diffusion
kernel
et
Fedora
, les utilisateurs peuvent utiliser des options plus réalisables et efficaces que la réinitialisation du système ou le réglage de
sysctl
vm.overcommit_*
:
Déclencher manuellement le kernel OOM-killer avec
Magic SysRq key
, à savoir
Alt+SysRq+f
.
Utilisez un daemon OOM en espace utilisateur pour traiter ces problèmes automatiquement (ou de manière interactive).
Attention
Déclencher le tueur OOM pour tuer les applications en cours d'exécution peut perdre vos travaux non sauvegardés.  C'est à vous de voir si vous êtes assez patient pour attendre dans l'espoir que les applications libèrent enfin la mémoire normalement, ou si vous voulez rétablir un système qui ne répond pas dès que possible.
Parfois, un utilisateur peut préférer le daemon OOM à SysRq parce qu'avec le kernel OOM-killer vous ne pouvez pas donner la priorité au processus à terminer (ou non). Pour lister quelques daemons OOM :
systemd-oomd
— Fourni par
systemd
en tant que
systemd-oomd.service
qui utilise cgroups-v2 et pressure stall information (PSI) pour surveiller et prendre des mesures sur les processus avant qu'une OOM ne se produise dans l'espace noyau.
https://github.com/systemd/systemd
,
systemd-oomd(8)
||
systemd
earlyoom
— Implémentation simple du tueur d'OOM en espace utilisateur écrite en C.
https://github.com/rfjakob/earlyoom
||
earlyoom
oomd
— Mise en oeuvre de OOM-killer basée sur
PSI
, nécessite un noyau Linux version 4.20+. La configuration est en JSON et est assez complexe. Le fonctionnement est confirmé dans l'environnement de production de Facebook.
https://github.com/facebookincubator/oomd
||
oomd
AUR
nohang
— Gestionnaire d'OOM sophistiqué écrit en Python, avec support PSI optionnel, plus configurable que earlyoom.
https://github.com/hakavlad/nohang
||
nohang-git
AUR
low-memory-monitor
— L'effort du développeur de GNOME qui vise à fournir une meilleure communication aux applications de l'espace utilisateur pour indiquer l'état de mémoire faible, en plus du fait qu'il pourrait être configuré pour déclencher le kernel OOM-killer.  Basé sur PSI, nécessite Linux 5.2+.
https://gitlab.freedesktop.org/hadess/low-memory-monitor/
||
low-memory-monitor-git
AUR
uresourced
— Un petit daemon qui active la protection des ressources basée sur le cgroup pour la session utilisateur graphique active.
https://gitlab.freedesktop.org/benzea/uresourced
||
uresourced
AUR
Réseau
Mise en réseau du noyau : consultez
Sysctl#Improving performance
NIC : consultez
Network configuration#Set device MTU and queue length
DNS : envisagez d'utiliser un résolveur DNS en cache, consultez
Domain name resolution (Français)#Serveurs DNS
Samba : consultez
Samba#Improve throughput
Watchdogs
Selon
Wikipedia:Watchdog timer
:
Un «watchdog» (chien de garde) [...] est une minuterie électronique qui est utilisée pour détecter et récupérer des dysfonctionnements de l'ordinateur. En fonctionnement normal, l'ordinateur réinitialise régulièrement le chien de garde [...]. Si, [...], l'ordinateur ne parvient pas à réinitialiser le chien de garde, la minuterie s'écoule et génère un signal de dépassement de délai [...] utilisé pour lancer des actions correctives [...] qui consistent généralement à placer le système informatique dans une configuration sûre et à rétablir son fonctionnement normal.
De nombreux utilisateurs ont besoin de cette fonction en raison du rôle critique de leur système (par exemple, les serveurs) ou de l'absence de réinitialisation de l'alimentation (par exemple, les appareils embarqués). Ainsi, cette fonction est nécessaire pour un bon fonctionnement dans certaines situations. D'autre part, les utilisateurs normaux (c'est-à-dire les ordinateurs de bureau et les ordinateurs portables) n'ont pas besoin de cette fonction et peuvent la désactiver.
Pour désactiver les watchdog (logiciels et matériels), ajoutez
nowatchdog
à vos paramètres de démarrage.
Pour vérifier la nouvelle configuration, faites :
# cat /proc/sys/kernel/watchdog
ou utilisez :
# wdctl
Après avoir désactivé les watchdogs, vous pouvez
optionnellement
éviter le chargement du module responsable du watchdog matériel, aussi. Faites-le en
mettant en liste noire
le module concerné, par exemple
iTCO_wdt
.
Note
Certains utilisateurs
[2]
ont signalé que le paramètre
nowatchdog
ne fonctionne pas comme prévu mais qu'ils ont réussi à désactiver le watchdog (au moins celui du matériel) en mettant sur liste noire le module susmentionné.
L'une ou l'autre de ces actions accélérera votre démarrage et votre arrêt, car un module de moins sera chargé. De plus, la désactivation du chien de garde augmente les performances et
baisse la consommation d'énergie
.
Consultez
[3]
,
[4]
,
[5]
, et
[6]
pour plus d'informations.
Consulter également
Guide d'optimisation des performances de Red Hat
Mesures des performances de Linux à l'aide de vmstat