Je montre comment Performance du noyau Linux affecte directement les temps de chargement, le débit et la latence dans les environnements d'hébergement, avec par exemple jusqu'à 38 % de vitesse WAN et 30 % de vitesse LAN en plus dans les versions 6.x actuelles par rapport à la version 5.15. Je traduis les nouveautés du noyau telles que HW GRO, BIG TCP et les planificateurs modernes en mesures claires pour que je puisse sensiblement améliorer les serveurs. accélère et plus fiable sous charge.
Points centraux
Pour m'orienter, je résume brièvement les principales affirmations et j'indique les leviers que j'examine en premier.
- Noyau 6.x: Réseau nettement plus rapide grâce à BIG TCP, GRO et meilleurs offloads.
- Ordonnanceur CPU: Une synchronisation plus fine des threads réduit les latences pour PHP, Python et les bases de données.
- Ressources: NUMA, planificateur d'E/S et files d'attente de sockets évitent les goulots d'étranglement.
- Tuning: Sysctl, l'affinité IRQ et la mise en cache fournissent des gains mesurables.
- TestsLes victoires et les P95/P99 assurent des progrès réels.
Je mise d'abord sur Réseau, car c'est là que se trouvent les plus gros gains. Ensuite, je règle l'allocation du CPU et de la mémoire de manière à ce que les threads attendent le moins possible et que le noyau attende moins longtemps. Changement de contexte est créé. Pour le stockage, je choisis le planificateur approprié et je vérifie les profondeurs de file d'attente et les options du système de fichiers. Je constate le succès avec des tests de charge que je répète dès que je modifie le noyau ou la configuration. J'évite ainsi de faire marche arrière et je reste fidèle à chaque adaptation. ciblé.
Pourquoi les versions du noyau poussent les performances de l'hébergement
Le noyau contrôle Matériel informatique, La version détermine donc directement la vitesse et la réactivité. Les anciens cœurs 5.x restent éprouvés, mais ils exploitent souvent moins les cartes réseau, les CPU et les piles NVMe modernes. Les versions 6.8 et 6.11 ont apporté des optimisations telles que Receiver HW GRO et BIG TCP, qui améliorent sensiblement le débit des flux uniques. soulever. Les tests ont montré des gains allant jusqu'à 38 % sur le WAN et 30 % sur le LAN, en fonction de la MTU et de la carte réseau. Pour les sites web dynamiques avec PHP, Python et Node, cela réduit le temps par requête et diminue l'encombrement de la file d'attente du serveur web.
J'en profite particulièrement lorsque les applications envoient de nombreuses petites réponses ou que la terminaison TLS est très importante. CPU coûte. Le nouvel ordonnanceur répartit plus finement les charges de travail sur les noyaux et améliore l'interactivité des tâches courtes. Parallèlement, des chemins réseau optimisés réduisent les frais généraux par paquet. Il en résulte des temps de latence P95 et P99 plus stables, ce qui est apprécié par les moteurs de recherche. En respectant les objectifs SLA, on économise non seulement ses nerfs, mais aussi de l'argent. Argent, Les coûts sont plus faibles parce qu'il y a moins de surprovisionnement.
Configuration du noyau : préemption, ticks et isolation
Outre la version, le Profil de build. Avec PREEMPT_DYNAMIC, j'utilise sur les systèmes 6.x un bon équilibre entre débit et latence. Pour les tâches vraiment critiques en termes de latence (par ex. proxy TLS ou passerelles API), on peut utiliser PREEMPT apporter plus de réactivité, tandis que PREEMPT_NONE accélère les gros travaux par lots. Je vérifie également NO_HZ_FULL et j'isole des noyaux individuels (isolcpus, rcu_nocbs) sur lesquels ne tournent que des travailleurs sélectionnés. Je réduis ainsi les perturbations dues aux tics de l'ordonnanceur et aux appels du RCU. Je combine cette isolation avec Affinité IRQ, Les interruptions de la carte réseau et les travailleurs correspondants restent ensemble à proximité de l'unité centrale.
Sur les systèmes à forte charge d'interruption, j'augmente modérément la valeur du budget NAPI et j'observe si ksoftirqd noyaux sont occupés. Si le thread consomme trop de temps, je distribue des files d'attente par RPS/XPS et j'adapte le coalesçage des IRQ. L'objectif est de garder les Softirqs sous contrôle afin que les threads d'application ne soient pas en concurrence pour le temps de CPU.
Comparaison des performances : anciennes vs. nouvelles versions du noyau
Je résume les principales différences de manière compacte dans une Tableau et complète la recommandation d'utilisation. Les indications s'orientent sur des mesures avec 1500B et 9K MTU, qui représentent de grands flux et des liens de centres de données. Cela m'aide à choisir la bonne version en fonction du profil de l'hôte. En outre, je vérifie si le pilote de la carte réseau prend entièrement en charge les fonctionnalités telles que GRO, TSO et RFS. Sans cette prise en charge, les améliorations du noyau se perdent parfois dans les surcharges du pilote, ce qui entraîne une perte de temps précieuse. Cycles mange.
| Version du noyau | Amélioration du WAN | Amélioration du réseau local | Caractéristiques particulières | Convient pour |
|---|---|---|---|---|
| 5.15 | Ligne de base | Ligne de base | Des pilotes qui ont fait leurs preuves | Hébergement patrimonial |
| 6.8 | +38 % | +30 % | HW GRO, BIG TCP | Trafic élevé |
| 6.11 | +33-60 % | +5-160 % | Optimisations du récepteur | Intense réseau |
Ceux qui utilisent BIG TCP vérifient le nombre maximal de SKB_FRAGS et le MTU, afin que la carte traite efficacement les grands segments. Sur les hôtes AMD, le flux unique est parfois passé de 40 à 53 Gbps, et même plus sur Intel, selon la taille des paquets. J'évite ici de voler à l'aveuglette et je teste avec des cartes réseau configurées de manière identique, une MTU identique et une configuration TLS identique. Ce n'est qu'ensuite que j'évalue les gains réels par charge de travail. Je choisis ainsi la version qui correspond le mieux à mon profil d'hôte dans la pratique. sert.
Ordonnancement du CPU et NUMA : un véritable impact en charge
L'allocation du CPU détermine si les threads sont fluides ou non. courir ou attendre en permanence. Les cœurs 6.x modernes donnent une meilleure priorité aux tâches courtes et réduisent les pics de latence des serveurs web et des proxys. Sur les hôtes avec plusieurs sockets CPU, l'équilibrage NUMA compte, sinon les accès mémoire atterrissent trop souvent sur des nœuds étrangers. J'épingle les IRQ et les travailleurs importants sur les noyaux appropriés afin de conserver la localité du cache. Pour une introduction plus approfondie, je vous renvoie au compact Article de la NUMA, J'ai également utilisé un logiciel qui me facilite le mappage du CPU, de la RAM et de la charge de travail.
Sous haute Dernier vaut la peine d'utiliser cgroups v2 pour piéger les voisins bruyants et garantir des temps de CPU équitables. En outre, je vérifie les paramètres d'irqbalance et, si nécessaire, je définis manuellement les affinités. Les bases de données bénéficient du fait que l'ordonnanceur ne laisse pas les longues transactions entrer en concurrence avec les courtes requêtes web. Je surveille le nombre de changements de contexte et je le réduis grâce au pooling de threads et à la réduction du nombre de travailleurs. De telles mesures stabilisent les temps de latence P95 sans que je doive recourir à du matériel. augmentation.
Gestion de la puissance : Turbo, C-States et Governor
Performance et Modes d'économie d'énergie influencent fortement la latence. Sur les chemins de latence, je choisis généralement le gouverneur „performance“ ou j'active un paramètre agressif dans intel_pstate/amd-pstate. energy_performance_preference. Les C-States bas limitent certes la consommation, mais provoquent une gigue au réveil. Pour les travailleurs frontaux, je limite les C-States, alors que les jobs par lots peuvent continuer à économiser. Il est important que je mesure ce choix : de meilleures valeurs P95 justifient souvent une consommation d'énergie légèrement plus élevée.
J'utilise le turbo-boost de manière ciblée, mais je surveille les limites de température et de puissance. Lorsque le throttling intervient, la cadence diminue précisément lors des pics de charge. J'ajuste le refroidissement et les limites de puissance de manière à ce que l'hôte dispose de son temps de boost là où il est utile à mon application.
Pile réseau : BIG TCP, GRO et contrôle des congestions
Le réseau offre le plus grand levier pour des résultats tangibles plus rapide Pages . BIG TCP augmente la taille des segments, GRO regroupe les paquets et réduit l'overhead des interruptions. RFS/XPS répartit judicieusement les flux sur les noyaux afin d'augmenter les occurrences de cache. Dans les scénarios de trafic étendu, je décide consciemment du contrôle de congestion, typiquement CUBIC ou BBR. Ceux qui veulent comprendre les différences trouveront des détails dans cet aperçu de Contrôle de la congestion TCP, qui résume bien les effets de la latence.
Je commence avec des sysctl-valeurs : net.core.rmem_max, net.core.wmem_max, net.core.netdev_max_backlog et tcp_rmem/tcp_wmem. Ensuite, je teste avec une MTU identique et le même jeu de chiffrement TLS pour comparer les apples avec les apples. Sur les cartes multiports, je vérifie le RSS et le nombre de files d'attente pour que tous les cœurs participent. Si des offloads comme TSO/GSO entraînent des drops, je les désactive de manière ciblée par interface. Ce n'est que lorsque je vois des courbes de mesure propres que je déploie la configuration sur d'autres Hôtes de.
Coalescence IRQ, Softirqs et détails du pilote
Avec un taux modéré de Coalescence de l'IRQ je lisse la latence et réduis les tempêtes d'interruptions. Je commence de manière conservatrice et augmente progressivement les seuils de microsecondes et de paquets jusqu'à ce que les drops diminuent, mais que P95 ne souffre pas. Pour les très petits paquets (par ex. gRPC/HTTP/2), trop de coalescence freine, je donne alors la priorité au temps de réaction. Je surveille softirq-les temps de réponse, les paquets de données et les netdev-backlogs. Si ksoftirqd consomme en permanence du CPU, l'équilibre entre les queues RSS, RPS/XPS et le coalescing n'est souvent pas correct. Dans ce cas, je répartis les flux par XPS de manière plus précise sur les cœurs qui portent également les workers correspondants.
Je vérifie les fonctions du pilote comme TSO/GSO/GRO et le checksum-offload par carte réseau. Certaines cartes fournissent des gains énormes avec HW-GRO, d'autres profitent davantage des chemins logiciels. Important : je garde MTU cohérent sur l'ensemble du chemin. Une grande MTU sur le serveur ne sert pas à grand-chose si les commutateurs ou les pairs la réduisent.
Stockage et chemins d'E/S : du planificateur au système de fichiers
De nombreuses pages perdent de la vitesse à E/S, pas sur le réseau. NVMe a besoin d'un planificateur d'E/S adapté, sinon l'hôte perd du débit et augmente les pics de latence. Pour les configurations HDD/hybrides, BFQ fournit souvent une meilleure interactivité, tandis que mq-deadline apporte des temps plus constants avec NVMe. Je teste les profondeurs de file d'attente, readahead et les options de système de fichiers comme noatime ou les réglages de barrière. Si vous cherchez des informations de fond, consultez ce guide compact sur le Planificateur d'E/S, Le rapport de la Commission européenne sur l'impact de l'UE sur l'environnement est un document de référence qui classe les effets de manière pratique.
Je place les sauvegardes et les tâches Cron dans des fichiers silencieux Créneaux horaires, pour que la charge de production n'entre pas en conflit. J'isole également les journaux de base de données sur mes propres périphériques, si possible. Pour ext4 et XFS, je teste les options de montage et vérifie les modes de journalisation. Avec iostat, blkstat et perf, je détecte rapidement les hotspots. Il en résulte des temps de réponse plus courts, car le noyau bloque moins et l'application fonctionne en continu. travaille.
io_uring, contrôle de la copie zéro et du writeback
Sur les noyaux modernes, je mise io_uring pour les charges de travail E/S asynchrones. Les serveurs web, les proxys et les pipelines de données en profitent, car les appels système sont regroupés et les changements de contexte diminuent. Lors de l'envoi de fichiers volumineux, j'utilise des chemins de copie zéro (sendfile/splice ou SO_ZEROCOPY), dès qu'ils interagissent avec la stratégie TLS et les décharges. Je mesure si la charge CPU diminue et si les latences restent stables avec une concourance élevée.
Je contrôle le writeback et le cache de page via les paramètres vm.dirty_*. Une file sale trop grande rend les phases de burst rapides et retarde les flushs ; des valeurs trop petites génèrent au contraire des syncs fréquents et ralentissent. Je sonde une fenêtre qui correspond à ma configuration SSD/RAID et vérifie les latences P95 pendant les phases d'écriture intensive.
Server Tuning : paramètres concrets du noyau
Après la mise à niveau, j'ajuste un petit nombre d'éléments efficaces. Interrupteur. Sur le réseau, je commence avec net.core.somaxconn, tcp_fastopen, tcp_timestamps et net.ipv4.ip_local_port_range. Pour de nombreuses connexions, un net.core.somaxconn plus élevé et une file d'attente de backlog appropriée dans le serveur web aident. En mémoire, une vm.swappiness modérée diminue les évictions inappropriées, les hugepages ont besoin de tests clairs par application. Avec htop, psrecord, perf et les outils eBPF, je vois les goulots d'étranglement avant que les clients ne les voient. retenir.
Pour les mesures, j'utilise sysbench pour le CPU, la mémoire et les E/S et je compare 5.15 vs. 6.x avec une configuration identique. Configuration. Apache Bench et Siege fournissent des vérifications rapides : ab -n 100 -c 10, siege -c50 -b. Il est important d'avoir des conditions reproductibles, c'est-à-dire le même handshake TLS, les mêmes charges utiles, le même statut de cache. J'augmente progressivement la durée du test et la concourance jusqu'à ce que je trouve les points de rupture. Ensuite, je sécurise le gain en documentant toutes les modifications et en créant des chemins de retour. se tenir prêt.
TLS, crypto-décharge et kTLS
Une grande partie du temps de l'unité centrale est consacrée à l'utilisation de l'ordinateur. TLS. Je vérifie si mes processeurs supportent la cryptographie AES-NI/ARMv8 et si les fournisseurs OpenSSL l'utilisent. En cas de concourance élevée, la résumation de session et l'étalement OCSP apportent un soulagement sensible. kTLS réduit l'overhead de copie dans le chemin du noyau ; je teste si mon serveur web/proxy en profite et si la copie zéro fonctionne de manière fiable avec TLS. Important : garder des ensembles de chiffrement cohérents pour que les benchmarks soient comparables.
Observabilité : eBPF/Perf-Minimum pour la vie quotidienne
Je travaille avec une petite, répétable Kit de mesure: perf stat/record pour le profilage du CPU, tcp- et biolatency-Outils eBPF pour la répartition réseau/stockage, ainsi que des heatmaps pour les longueurs de file d'attente d'exécution. Cela me permet de voir rapidement si les softirqs, les syscalls, les locks ou les accès mémoire dominent. Lorsque je résous des goulots d'étranglement, je répète le même ensemble pour détecter les effets latéraux. Ce n'est que lorsque les courbes CPU, NET et IO semblent propres que je mets la configuration à l'échelle.
Évaluer correctement les tests de charge
Je ne vérifie pas seulement les moyennes, mais surtout P95 et P99. Ces indicateurs montrent à quelle fréquence les utilisateurs subissent des temps d'attente sensibles. Un taux d'erreur croissant indique une exclusion de threads ou de sockets. Pour le Load Average, je remarque qu'il représente des files d'attente et non pas des pourcentages de CPU. Les attentes d'Aio ou de la base de données font également augmenter la valeur. en haut.
Un test réaliste utilise la même stratégie de mise en cache que la production. Je démarre à froid, je mesure à chaud et j'enregistre ensuite des phases plus longues. Le RPS seul ne me suffit pas ; je le relie à la latence et à l'état des ressources. Seule l'image globale montre à quel point le noyau et les paramètres de réglage interagissent. Je m'assure ainsi que les améliorations ne se limitent pas à des benchmarks synthétiques. briller.
Virtualisation : Steal Time et Overhead
Sur les hôtes partagés, freine Voler Time éteint doucement la puissance. J'observe la valeur par vCPU et je planifie ensuite la concordance de mes services. Si le temps de vol est élevé, je passe à des instances dédiées ou j'augmente la priorité de l'invité. Dans l'hyperviseur, je répartis les vCPU de manière cohérente sur les nœuds NUMA et je fixe les IRQ des cartes réseau importantes. Je ne réduis pas les conteneurs à l'aveuglette, mais j'optimise les limites afin que le noyau puisse prendre les décisions CFS de manière propre. rencontre peut.
Les NIC virtuelles comme virtio-net bénéficient de technologies plus modernes. Pilotes et des files d'attente suffisantes. Je mesure également si vhost-net est actif et si la MTU est toujours adaptée. Côté stockage, je vérifie les options paravirt et la profondeur des files d'attente. En cas de densité élevée, j'augmente les fréquences de surveillance pour que les pics soient détectés plus rapidement. Tout cela empêche que de bonnes fonctions du noyau soient noyées dans la surcharge de la virtualisation. ensabler.
Les charges de travail en conteneurs : Bien utiliser Cgroup v2
Pour les microservices, je mise sur cgroup v2-Contrôleurs : cpu.max/cpu.weight contrôlent l'équité, memory.high protège l'hôte des tempêtes d'éviction et io.max limite les écritures parasites. Avec cpuset.cpus et cpuset.mems, je garde les chemins de latence proches de la NUMA. Je documente les limites par classe de service (web, DB, cache) et je garde le headroom libre afin d'éviter les effets de cascade lorsqu'un service a besoin de plus pendant une courte période.
Choix de distro : cadence du noyau et support
La distribution détermine la rapidité Noyau-et le délai de mise à disposition des corrections. Debian et Rocky/Alma fournissent des paquets maintenus depuis longtemps, ce qui est idéal pour des configurations calmes avec des changements prévisibles. Ubuntu HWE apporte des noyaux plus jeunes, ce qui permet d'utiliser plus tôt les pilotes et les fonctionnalités. Gentoo permet un réglage fin jusqu'au jeu d'instructions, ce qui peut présenter des avantages pour les hôtes spéciaux. Je décide en fonction du profil de la charge de travail, des fenêtres de mise à jour et des exigences de mes clients. Clients.
Une mise à niveau prudente commence sur des hôtes de staging avec un matériel identique. Je vérifie les sources de paquets, le démarrage sécurisé et les modules DKMS comme ZFS ou les pilotes NIC spéciaux. Ensuite, je fixe les versions du noyau par épinglage afin d'éviter les sauts inattendus. Pour les systèmes de production, je planifie des fenêtres de maintenance et des rollbacks clairs. Je combine ainsi les nouvelles fonctionnalités avec un haut niveau de sécurité. Planification.
Aspects de sécurité et de maintenance sans perte de vitesse
Les patchs de sécurité ne doivent pas Performance n'exercent pas de pression durable. J'utilise le livepatching là où il est disponible et je teste l'influence de mitigations comme spectre_v2 ou retpoline. Certains hôtes gagnent sensiblement à ce que je désactive de manière sélective des fonctionnalités qui n'apportent aucune valeur ajoutée dans le contexte concret. La sécurité reste néanmoins un devoir, c'est pourquoi je décide en connaissance de cause et je documente les exceptions. Chaque profil d'hôte a besoin d'une ligne claire entre le risque et la sécurité. Tempo.
Je termine les mises à jour régulières du noyau par des tests de régression. J'enregistre les profils perf avant et après la mise à jour et je compare les zones sensibles. En cas d'anomalies, je fais marche arrière ou j'utilise des versions mineures alternatives de la même série. Je garde la journalisation légère afin qu'elle ne devienne pas elle-même un goulot d'étranglement sous la charge. Ainsi, la disponibilité, la sécurité et la performance restent propres. Équilibre.
Résumé succinct et plan d'action
Récupérer les noyaux 6.x actuels Réseau Mes premières étapes sont BIG TCP, GRO, RFS/XPS et des valeurs sysctl propres. Ensuite, je m'assure de la proximité du CPU par affinité IRQ et mappage NUMA et je choisis le planificateur d'E/S approprié pour le stockage. À l'aide de ab, Siege et sysbench, je vérifie le gain en comparant RPS avec P95/P99. Si la courbe est bonne, j'applique la configuration et la version du noyau de manière contrôlée. Cela me permet de réduire la latence, d'augmenter le débit et de maintenir les temps de réponse en dessous de trois minutes. secondes.
Mon plan pratique est le suivant : 1) Mise à niveau vers la version 6.8+ ou 6.11 avec les pilotes appropriés. 2) Ajuster la pile réseau et choisir le contrôle de congestion approprié. 3) Organiser le CPU/NUMA et les IRQ, puis tester les files d'attente de stockage et les options du système de fichiers. 4) Répéter les tests de charge avec des paramètres identiques, versionner les modifications et les documenter. Celui qui procède ainsi utilise Linux Il tire un parti surprenant du matériel existant.


