Ères des chipsets : quand la carte mère décidait de la moitié de vos performances

Cet article vous a aidé ?

Vous pouvez acheter le CPU « correct », installer des NVMe rapides, et voir quand même votre base de données ramer comme si elle lisait depuis une disquette.
Puis vous remarquez la vérité gênante : la plateforme—chipset, câblage des lanes, uplinks, choix de firmware—décidait en silence de votre sort.

Ce n’est pas de la nostalgie. C’est un guide de terrain pour les opérateurs : comment on en est arrivé là (northbridge/southbridge, DMI, politique des lanes PCIe),
et comment prouver—rapidement—si la carte mère est votre goulot aujourd’hui.

Ce que faisait réellement un chipset (et ce qu’il fait encore)

La version romantique de l’histoire du PC dit « le CPU s’est accéléré, tout le reste a suivi ». La version ennuyeuse—celle qui explique vos
graphiques de production—est que les plateformes sont de l’ingénierie du trafic. Les chipsets étaient autrefois des agents de circulation littéraux. Aujourd’hui ce sont plutôt
des péages et des bretelles qu’on ne remarque que lorsque votre camion est en feu.

Traditionnellement, le chipset était divisé en deux gros blocs :

  • Northbridge : les éléments haute vitesse—contrôleur mémoire, front-side bus, interface graphique (AGP/PCIe précoce), et souvent le chemin vers tout ce qui comptait.
  • Southbridge : les éléments plus lents—SATA/PATA, USB, audio, PCI legacy, interfaces firmware, et la colle désordonnée qui fait une carte mère.

L’essentiel n’est pas les étiquettes ; c’est la topologie. La performance n’est pas seulement « quelle est la vitesse du CPU », c’est « combien de chemins indépendants existent,
quelle est leur largeur, et combien de contention vous avez créée en regroupant tout derrière un seul uplink ».

Les systèmes modernes ont « intégré » beaucoup de fonctions du northbridge dans le package CPU : contrôleur mémoire, root complex PCIe, parfois même le die I/O
sur un silicium séparé. Le « chipset » restant (souvent appelé PCH sur les plateformes Intel) est toujours là pour fournir plus de lanes PCIe, USB,
SATA et I/O divers—connecté au CPU par un uplink unique (DMI sur Intel ; concepts similaires ailleurs).

Cet uplink est la chute de l’histoire. Si vous accrochez trop d’appareils au chipset, vous recréez l’ancien goulot southbridge avec un meilleur packaging.

Chronologie des ères des chipsets : qui détenait le goulot

Ère 1 : La monarchie du front-side bus (années 1990 à mi‑2000s)

À l’époque du FSB, votre CPU parlait au northbridge via un front-side bus partagé. La mémoire était derrière le northbridge. L’I/O était derrière
le southbridge. Le northbridge et le southbridge communiquaient via un lien dédié qui n’était jamais aussi enthousiasmant que le marketing le prétendait.

En pratique : la latence et la bande passante mémoire étaient fortement influencées par le chipset, et un « CPU rapide » pouvait être saboté par une carte avec
un FSB lent, une implémentation de contrôleur mémoire moindre, ou une intégrité de signal médiocre forçant des timings conservateurs. Les overclockers l’ont appris
les premiers, les acheteurs d’entreprise plus tard, et les équipes ops l’ont appris à la dure quand une application « plafonnait » mystérieusement.

Le stockage dans cette ère était souvent derrière des contrôleurs southbridge avec des bus partagés (PCI, puis PCI‑X dans les serveurs), et vous pouviez voir
tout l’I/O du système fondre dans un seul domaine de contention. Si vous avez déjà vu un contrôleur RAID sur PCI 32-bit/33MHz, vous avez vu la tragédie.

Ère 2 : Contrôleur mémoire intégré (mi‑2000s à début 2010s)

AMD a poussé tôt le contrôleur mémoire intégré avec Athlon 64. Intel a suivi plus tard avec Nehalem. Cela a tout changé : le CPU
contrôlait désormais directement la mémoire, éliminant un goulot majeur du northbridge. Cela a aussi rendu le comportement mémoire plus centré sur le CPU et la socket,
introduisant le monde moderne du NUMA comme réalité opérationnelle quotidienne, pas comme sujet de recherche.

Le rôle du chipset a changé. Plutôt que d’être le chemin essentiel vers la mémoire, il est devenu un bloc d’extension I/O. C’est là que
le mythe « le chipset ne compte plus » a commencé. Il était faux alors et il est faux maintenant—juste différemment.

Ère 3 : PCIe partout, mais les lanes sont politiques (années 2010)

PCI Express a standardisé l’I/O haute vitesse. Super. Puis les vendeurs ont commencé à livrer des plateformes où le CPU avait un nombre fixe de lanes PCIe directes,
et le chipset avait des lanes supplémentaires… derrière un seul uplink. Vous pouviez donc avoir « beaucoup de slots PCIe », mais pas beaucoup de bande passante indépendante.

C’est aussi l’époque où la bifurcation des lanes, les switches PLX/PCIe, et « quel slot est câblé à quoi » sont devenus des sujets de performance. Vous pouviez
insérer une carte x16 dans un slot en forme de x16 et quand même vous retrouver avec x4 électrique. Le manuel de la carte mère est devenu un document de performance.

Ère 4 : La plateforme est un maillage de dies et de liens (fin 2010s à aujourd’hui)

Les CPU serveurs d’aujourd’hui sont des systèmes complexes : multiples canaux mémoire, parfois plusieurs dies, et multiples chemins I/O. Le « chipset » peut
être moins central, mais les décisions de plateforme sont plus nombreuses : quel NVMe va direct au CPU, lequel pend au chipset, ce qui est derrière un retimer,
où se situe le switch PCIe, et si vous satuez un uplink dont vous ignoriez l’existence.

Le profil de performance est généralement excellent—jusqu’à ce qu’il ne le soit plus. Quand ça casse, ça ressemble à des bugs applicatifs, des bugs de stockage,
ou à « le cloud est lent ». Souvent, c’est la carte mère.

Faits intéressants et points de contexte

  1. AGP est apparu surtout parce que PCI était trop lent pour le graphisme ; c’était un chemin dédié parce que les bus partagés étaient une impasse de performance.
  2. PCI (32-bit/33MHz) plafonne autour de 133MB/s théoriques—et le débit réel est pire. Un périphérique occupé pouvait dominer le bus.
  3. Athlon 64 d’AMD a intégré le contrôleur mémoire, réduisant la latence mémoire et faisant du « choix de chipset » moins une question mémoire et plus une question I/O.
  4. Nehalem d’Intel (ère Core i7) a déplacé la mémoire sur le CPU et introduit QPI, déplaçant les goulots vers la topologie d’interconnexion.
  5. DMI est devenu le point de strangulation discret : le chipset peut exposer de nombreux ports, mais ils partagent un seul uplink CPU.
  6. NVMe n’a pas juste ajouté de la vitesse ; il a supprimé des couches (AHCI, interruptions legacy), ce qui explique pourquoi il punit si efficacement un mauvais câblage PCIe.
  7. Les premiers contrôleurs SATA variaient énormément en qualité ; « SATA II » sur la boîte ne garantissait pas un bon comportement de queueing ou des pilotes matures.
  8. NUMA est le « problème de chipset » moderne déguisé : la mémoire est rapide, jusqu’à ce que vous lisiez la mémoire d’un autre nœud via un lien.
  9. Les plateformes grand public partagent souvent les lanes entre slots ; remplir un slot M.2 peut désactiver des ports SATA ou faire passer un slot GPU en x8.

Où la performance meurt : les points d’étranglement classiques

1) Uplinks partagés (southbridge alors, DMI/PCH maintenant)

Le mode de défaillance moderne le plus courant ressemble à ceci : « Nous avons ajouté des SSD plus rapides mais la latence n’a pas diminué. » Vous testez les disques et
ils vont bien—individuellement. Sous charge, ils atteignent ensemble un plafond. Ce plafond est l’uplink entre le CPU et le chipset.

Tout ce qui est derrière cet uplink se partage : contrôleurs SATA, contrôleurs USB, lanes PCIe supplémentaires fournies par le chipset, certaines cartes réseau intégrées,
parfois même le Wi‑Fi (pas votre problème de datacenter, mais toujours un indice).

Quand l’uplink se sature, vous voyez le queueing partout : latence I/O plus élevée, plus de temps CPU en iowait, et des jitter « aléatoires » qui font rater des SLOs en rafales. Ce n’est pas aléatoire. C’est de la contention.

2) Câblage des lanes et entraînement de lien : le slot x16 qui est en réalité x4

PCIe est point‑à‑point, ce qui est excellent—jusqu’à ce que quelqu’un route un slot via le chipset, partage les lanes avec un socket M.2, ou force une carte
à s’entraîner à une vitesse inférieure à cause de la qualité du signal.

Vous verrez « LnkSta: Speed 8GT/s, Width x4 » quand vous attendiez x16, ou vous trouverez un HBA derrière un switch PCIe avec un lien upstream étroit.
Sur le papier ça « marche ». En production cela signifie que votre trafic de stockage se bat contre lui‑même.

3) Canaux mémoire, règles de peuplement et réalité NUMA

À l’époque du northbridge, le chipset contrôlait la mémoire. Dans l’ère intégrée, le CPU le fait—mais la carte mère décide si vous pouvez l’utiliser correctement.
Remplir les mauvais emplacements fait perdre des canaux. Mélanger les DIMM peut réduire la vitesse. Mal placer les processus et vous passez en remote‑NUMA
et payez une latence que vous n’aviez pas budgétée.

Les piles de stockage sont sensibles à la latence. Les bases de données sont hypersensibles. « La moitié de vos performances » n’est pas une hyperbole quand vous traversez
des frontières NUMA sur un chemin chaud.

4) Réglages du firmware et gestion d’énergie

Le firmware de la carte mère peut transformer une plateforme stable en machine à jitter. Réglages ASPM, C‑states, gestion d’énergie des liens PCIe, modes « éco »
des NIC—tout cela peut ajouter des micro‑latences qui deviennent un enfer pour la latence en queue.

Le plus dur : les valeurs par défaut varient selon le fournisseur, la version du BIOS, et la catégorie marketing « serveur vs station de travail ». Vous ne pouvez pas
supposer un comportement uniforme sur une flotte sans l’appliquer.

5) Routage des interruptions, IOMMU, et le coût de l’ingéniosité

MSI‑X est un cadeau. Une mauvaise affinité d’interruption est une malédiction. Mettez vos interruptions NVMe sur les mauvais cœurs et vous verrez « CPU occupé » sans
débit. Activez des fonctionnalités IOMMU sans comprendre la charge et vous pouvez ajouter un overhead exactement à l’endroit que vous détestez : le chemin I/O.

Juste une citation, parce que les gens de la fiabilité méritent le dernier mot :
L’espoir n’est pas une stratégie. —General Gordon R. Sullivan

Mode d’emploi diagnostique rapide

Vous êtes de garde. Le graphe est moche. Vous avez besoin d’une réponse rapide : CPU, mémoire, périphérique de stockage, chemin PCIe, uplink chipset, ou réseau ?
Ne commencez pas par des benchmarks. Commencez par la topologie et les compteurs.

Premier : confirmer le domaine du goulot (CPU vs I/O vs mémoire)

  • Vérifiez la saturation CPU et le iowait pour savoir si vous êtes lié par le calcul ou en attente d’I/O.
  • Vérifiez la latence disque et la profondeur de file pour savoir si la pile de stockage est le limiteur.
  • Vérifiez la charge softirq/interruption pour détecter les goulets liés aux pilotes/IRQ déguisés en « CPU occupé ».

Deuxième : vérifier la largeur/vitesse des liens PCIe et le placement des périphériques

  • Confirmez que chaque périphérique critique s’entraîne à la génération PCIe et à la largeur de lanes attendues.
  • Cartographiez chaque périphérique vers son nœud NUMA et sa socket CPU.
  • Identifiez ce qui est derrière le chipset (et donc derrière un uplink partagé).

Troisième : rechercher les symptômes de saturation d’uplink partagé

  • Plusieurs périphériques ralentissent ensemble sous une charge combinée.
  • Des pics de latence apparaissent quand une I/O « non liée » se produit (sauvegardes USB, reconstruction de mirror SATA, trafic NIC additionnel sur une lane chipset).
  • La performance s’améliore drastiquement quand vous déplacez un périphérique vers des lanes attachées au CPU ou vers une autre socket.

Quatrième : valider les réglages BIOS/firmware et noyau qui affectent la latence

  • Fonctionnalités de gestion d’énergie qui ajoutent une latence de réveil.
  • ASPM/gestion d’énergie des liens PCIe.
  • Mode IOMMU et répartition des interruptions.

Blague n°1 : Si votre carte « x16 » tourne en x4, félicitations—vous avez découvert que le plastique est plus rapide que le cuivre.

Tâches pratiques : commandes, sorties, décisions (12+)

Ce sont des vérifications de qualité production. Elles ne vous diront pas « achetez une nouvelle carte mère » automatiquement, mais elles vous diront où regarder et quoi
changer. Chaque tâche inclut une commande réaliste, une sortie d’exemple, ce que cela signifie, et la décision que vous prenez à partir de là.

Task 1: Quick CPU vs iowait triage

cr0x@server:~$ mpstat -P ALL 1 3
Linux 6.5.0 (db01)  01/09/2026  _x86_64_ (64 CPU)

12:10:31 PM  CPU   %usr  %nice  %sys  %iowait  %irq  %soft  %steal  %idle
12:10:32 PM  all  18.20   0.00  6.10   22.40   0.00  1.10    0.00  52.20
12:10:33 PM  all  17.90   0.00  5.80   24.10   0.00  1.00    0.00  51.20
12:10:34 PM  all  18.50   0.00  6.00   23.60   0.00  1.20    0.00  50.70

Ce que cela signifie : iowait est élevé et constant. Le CPU n’est pas saturé ; le système attend la fin des I/O.

Décision : Arrêtez de débattre sur les upgrades CPU. Passez immédiatement aux vérifications du chemin stockage/PCIe et aux métriques de latence.

Task 2: Identify per-disk latency and queueing

cr0x@server:~$ iostat -x 1 3
Linux 6.5.0 (db01)  01/09/2026  _x86_64_ (64 CPU)

Device            r/s   w/s  rkB/s  wkB/s  await  svctm  %util
nvme0n1         320.0  80.0  51200  12800   2.10   0.15  65.0
nvme1n1         310.0  85.0  49600  13600   8.90   0.16  92.0
sda              12.0  40.0    800   5200  45.00   1.20  55.0

Ce que cela signifie : nvme1n1 a un await élevé et est proche de la saturation. La latence de sda est terrible (probablement SSD/HDD SATA ou activité de rebuild).

Décision : Si la charge couvre ces périphériques, isolez-la. Cherchez pourquoi un NVMe est pire (largeur de lien, NUMA, IRQ, throttling thermique, ou partage derrière le chipset).

Task 3: Check PCIe link speed/width for a specific device

cr0x@server:~$ sudo lspci -s 5e:00.0 -vv | egrep -i "LnkCap|LnkSta"
LnkCap: Port #0, Speed 16GT/s, Width x16, ASPM L1, Exit Latency L1 <64us
LnkSta: Speed 8GT/s (downgraded), Width x4 (downgraded)

Ce que cela signifie : Le périphérique peut faire PCIe Gen4 x16 mais tourne en Gen3 x4. C’est un problème de plateforme : câblage du slot, bifurcation, BIOS, riser, ou intégrité du signal.

Décision : Déplacez la carte vers un slot attaché au CPU, retirez les périphériques M.2 en conflit, vérifiez les paramètres PCIe du BIOS, et validez le riser/câble.

Task 4: Map NVMe devices to PCIe paths and NUMA nodes

cr0x@server:~$ for d in /sys/class/nvme/nvme*; do echo "== $d =="; cat $d/device/numa_node; readlink $d/device; done
== /sys/class/nvme/nvme0 ==
0
../../../0000:3b:00.0
== /sys/class/nvme/nvme1 ==
1
../../../0000:86:00.0

Ce que cela signifie : nvme0 est local au nœud NUMA 0, nvme1 au nœud 1. C’est bien—si vos threads de travail et allocations mémoire sont alignés.

Décision : Épinglez les IRQs et les processus pour que chaque NVMe soit servi par des CPU locaux à ce nœud NUMA pour les charges sensibles à la latence.

Task 5: Confirm NUMA layout and CPU topology

cr0x@server:~$ lscpu | egrep -i "Socket|NUMA|CPU\(s\)|Thread|Core"
CPU(s):                               64
Thread(s) per core:                   2
Core(s) per socket:                   16
Socket(s):                            2
NUMA node(s):                         2
NUMA node0 CPU(s):                    0-31
NUMA node1 CPU(s):                    32-63

Ce que cela signifie : Deux sockets, deux nœuds NUMA. L’accès mémoire cross‑node est réel et mesurable.

Décision : Traitez le serveur comme deux machines partageant un châssis lors du réglage du stockage et des bases de données.

Task 6: Spot remote NUMA memory usage in a running process

cr0x@server:~$ sudo numastat -p 1247
Per-node process memory usage (in MBs) for PID 1247 (postgres)
Node 0          22048.5
Node 1           1024.2
Total           23072.7

Ce que cela signifie : La mémoire du processus est majoritairement sur le nœud 0. Si les interruptions de stockage les plus chaudes sont sur le nœud 1, vous payez des coûts de trafic distant.

Décision : Alignez : soit déplacez la prise en charge des IRQ vers le nœud 0, soit liez le processus au nœud 1 avec mémoire locale (ou répartissez la charge par socket).

Task 7: Detect interrupt imbalance (classic hidden limiter)

cr0x@server:~$ grep -E "nvme|mlx|eth" /proc/interrupts | head -n 8
  55:  1209931        0        0        0   PCI-MSI 524288-edge      nvme0q0
  56:  1187722        0        0        0   PCI-MSI 524289-edge      nvme0q1
  57:  1215540        0        0        0   PCI-MSI 524290-edge      nvme0q2
  58:  5401120        0        0        0   PCI-MSI 524291-edge      mlx5_comp0

Ce que cela signifie : Les interruptions tombent uniquement sur CPU0 (la première colonne explose, les autres sont à zéro). C’est un générateur de goulot.

Décision : Configurez irqbalance correctement ou épinglez manuellement les IRQs sur des cœurs locaux au nœud NUMA du périphérique.

Task 8: Check NVMe error counters and link resets

cr0x@server:~$ sudo nvme smart-log /dev/nvme1 | egrep -i "media_errors|num_err_log_entries|warning_temp_time"
media_errors                    : 0
num_err_log_entries             : 12
warning_temp_time               : 0

Ce que cela signifie : Le média est OK, mais il y a des entrées dans le journal d’erreurs—cela peut être des problèmes de lien transitoires ou des ratés de contrôleur.

Décision : Récupérez le journal d’erreurs détaillé, vérifiez dmesg pour AER PCIe, et inspectez le slot/retimer/câble. N’ignorez pas ceci : ça devient des « pics de latence aléatoires ».

Task 9: Confirm whether a device sits behind a PCIe bridge/switch (shared upstream)

cr0x@server:~$ sudo lspci -t
-[0000:00]-+-00.0  Intel Corporation Host bridge
           +-01.0-[01-3f]----00.0  PCIe switch upstream port
           |               \-02.0-[02-3f]----00.0  Non-Volatile memory controller
           \-1d.0-[40-7f]----00.0  Ethernet controller

Ce que cela signifie : Un NVMe est derrière un switch PCIe. Cela peut être acceptable—jusqu’à ce que le lien upstream soit plus étroit que la ventilation downstream.

Décision : Vérifiez la largeur/vitesse du port upstream. Si c’est x8 alimentant plusieurs x4 NVMe, attendez‑vous à de la contention sous charge parallèle.

Task 10: Identify SATA devices and controller driver path

cr0x@server:~$ lsblk -o NAME,TYPE,TRAN,MODEL,SIZE,MOUNTPOINT
NAME        TYPE TRAN MODEL            SIZE MOUNTPOINT
nvme0n1     disk nvme Samsung SSD      3.5T
nvme1n1     disk nvme Samsung SSD      3.5T
sda         disk sata ST4000NM0035      3.7T

Ce que cela signifie : Il reste du SATA dans le mix. S’il est sur le chipset, il partage la bande passante uplink avec d’autres périphériques chipset.

Décision : Gardez le SATA pour les données froides ou les logs. Ne faites pas comme si c’était « juste un autre disque » dans un pool sensible à la latence sans l’isoler.

Task 11: Check kernel logs for PCIe errors and downtraining

cr0x@server:~$ sudo dmesg -T | egrep -i "AER|pcieport|Downstream|link.*down|corrected error" | tail -n 12
[Tue Jan  9 11:58:22 2026] pcieport 0000:00:01.0: AER: Corrected error received: id=00e0
[Tue Jan  9 11:58:22 2026] pcieport 0000:00:01.0: PCIe Bus Error: severity=Corrected, type=Physical Layer
[Tue Jan  9 11:58:22 2026] pcieport 0000:00:01.0:   device [8086:460d] error status/mask=00000001/00002000
[Tue Jan  9 11:58:22 2026] pcieport 0000:00:01.0:    [ 0] RxErr

Ce que cela signifie : Erreurs de couche physique corrigées (RxErr). Elles peuvent déclencher des retransmissions, des pics de latence, et parfois un downtraining du lien.

Décision : Traitez comme un problème matériel/plateforme : remettez en place, échangez de slot, mettez à jour BIOS/firmware, vérifiez risers/retimers, et suivez le taux d’erreur dans le temps.

Task 12: Measure PCIe throughput ceiling with a simple fio read test (sanity check)

cr0x@server:~$ sudo fio --name=readtest --filename=/dev/nvme1n1 --direct=1 --ioengine=libaio --rw=read --bs=1M --iodepth=32 --numjobs=1 --runtime=15 --time_based=1
readtest: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, ioengine=libaio, iodepth=32
fio-3.36
read: IOPS=2900, BW=2900MiB/s (3041MB/s)(43.0GiB/15101msec)

Ce que cela signifie : 2.9GiB/s est suspectement « Gen3 x4-ish » pour des lectures séquentielles, selon le disque. Un périphérique Gen4 x4 devrait souvent faire mieux dans le bon slot.

Décision : Recoupez avec lspci -vv. Si le lien est Gen3 x4, la carte mère est le limiteur, pas le SSD.

Task 13: Check link speed policy and ASPM status (latency gremlin)

cr0x@server:~$ cat /sys/module/pcie_aspm/parameters/policy
default

Ce que cela signifie : La politique ASPM est par défaut. Sur certaines plateformes c’est acceptable ; sur d’autres cela ajoute de la latence en queue sous charges en rafales.

Décision : Pour les systèmes sensibles à la latence, évaluez la désactivation d’ASPM dans le BIOS ou via des paramètres noyau—seulement après avoir mesuré l’impact puissance/thermique et validé la stabilité.

Task 14: Confirm CPU frequency behavior under load (power management vs performance)

cr0x@server:~$ grep -E "cpu MHz|model name" /proc/cpuinfo | head -n 6
model name	: Intel(R) Xeon(R) Silver 4314 CPU @ 2.40GHz
cpu MHz		: 1198.734
model name	: Intel(R) Xeon(R) Silver 4314 CPU @ 2.40GHz
cpu MHz		: 1200.112

Ce que cela signifie : Les CPU sont en basse fréquence au repos pour l’instant. Ce n’est pas un problème en soi. Mais si vous voyez une montée lente ou des fréquences constamment basses sous charge, votre politique d’énergie plateforme peut saboter la latence.

Décision : Sur les serveurs qui tiennent à la latence tail, mettez le profil firmware sur « Performance » et validez la fréquence sous charge réelle.

Task 15: Identify whether NIC is chipset-attached vs CPU-attached (common in mixed boards)

cr0x@server:~$ sudo ethtool -i eth0
driver: mlx5_core
version: 6.5.0
firmware-version: 22.38.1002
bus-info: 0000:40:00.0

Ce que cela signifie : Vous pouvez mapper 0000:40:00.0 dans lspci -t pour voir si cela passe par des ponts chipset.

Décision : Si un trafic réseau élevé et un stockage élevé partagent un uplink chipset, séparez‑les (différents slots/sockets) ou attendez‑vous à des pics de latence corrélés.

Blague n°2 : Le manuel de la carte mère est le seul roman où le rebondissement de l’intrigue est « le slot 3 désactive le slot 5 ».

Trois mini-récits d’entreprise depuis le terrain

Mini-récit 1 : L’incident causé par une mauvaise hypothèse

Une entreprise de taille moyenne a migré un magasin clé clé‑valeur sensible à la latence sur des serveurs 1U « plus récents, plus rapides ». La génération CPU était un solide pas en avant,
et la fiche d’achat affichait fièrement « dual NVMe ». Le déploiement semblait propre : même image OS, même noyau, même tuning, même gestion de configuration. Que pouvait-il mal se passer ?

La première semaine, des alarmes p99 ont commencé à flirter avec le seuil pendant les pics de trafic. Rien de dramatique—juste assez pour agacer les SRE et déclencher quelques arguments « c’est probablement l’appli ».
L’équipe applicative pointait les métriques hôte : CPU au repos, mémoire avec marge, réseau OK. Le stockage semblait étrange : les deux NVMe étaient « rapides » isolément, mais sous vraie charge ils bossaient en synchronie.

La mauvaise hypothèse était simple : ils ont supposé que les deux NVMe étaient attachés au CPU. Sur cette carte mère, un slot M.2 était attaché au CPU,
l’autre pendait au chipset derrière l’uplink. Pendant les périodes chargées, ce NVMe attaché au chipset entrait en concurrence avec un contrôleur 10GbE onboard lui aussi chipset‑attaché. L’uplink est devenu un point de file partagé.

La correction était peu glamour : déplacer le second NVMe sur un adaptateur PCIe dans un slot attaché au CPU et déplacer la NIC sur un autre slot câblé à l’autre CPU.
Cela a nécessité une cartographie minutieuse (et une fenêtre de maintenance), mais la latence p99 s’est stabilisée immédiatement. Le « CPU plus rapide » n’a jamais été le facteur.
C’est la topologie plateforme qui l’était.

La recommandation post‑mortem était franche : inventoriez la topologie PCIe durant l’évaluation matériel, pas après les alarmes production. Si le vendeur ne peut pas fournir une carte des lanes, traitez ce modèle comme suspect pour le stockage haute performance.

Mini-récit 2 : L’optimisation qui a mal tourné

Une autre équipe voulait plus de débit d’un nœud de stockage exécutant un système de fichiers distribué. Avec des contraintes budgétaires, ils ont acheté
des cartes orientées grand public avec beaucoup de slots M.2 et prévu de « scaler à moindre coût ». Le plan d’optimisation visait à maximaliser le nombre de périphériques par nœud
pour réduire l’empreinte rack et la charge opérationnelle.

Ça a fonctionné en test—en quelque sorte. Les benchmarks séquentiels mono‑nœud allaient bien. L’I/O aléatoire allait bien à profondeur modérée. Puis, en production multi‑nœud,
le débit s’est plafonné et la latence a grimpé. La surveillance montrait quelque chose de profondément suspect : ajouter plus de NVMe n’augmentait pas la bande passante agrégée proportionnellement.
Chaque nouveau disque apportait moins de bénéfice que le précédent.

Le véritable coupable était la topologie PCIe de la plateforme : ces slots M.2 additionnels étaient des lanes chipset derrière un seul uplink. Ils avaient construit un entonnoir.
Sous charge réelle, les périphériques se disputaient la même bande montante. Pire, certains slots partageaient des lanes avec des contrôleurs SATA et l’USB,
si bien que le trafic de maintenance en arrière‑plan créait des interférences imprévisibles.

L’optimisation a échoué car elle optimisait le mauvais métrique : le nombre de périphériques. Le bon métrique pour cette charge était des domaines de bande passante indépendants—lanes attachées au CPU, multiples sockets,
ou une carte conçue pour le stockage avec une distribution de lanes adaptée.

La solution finale a été de réduire le nombre de périphériques par nœud et d’augmenter le nombre de nœuds—plus ennuyeux, plus prévisible, et moins cher que d’essayer de « bricoler » une topologie
qui n’était jamais destinée à de l’I/O parallèle soutenue.

Mini-récit 3 : La pratique ennuyeuse mais correcte qui a sauvé la mise

Une société financière exécutait un cluster de bases de données avec des SLOs stricts de latence. Ils avaient une habitude qui paraissait excessive aux yeux des autres : chaque actualisation matériel incluait une checklist de validation plateforme.
Pas « est‑ce que ça boot », mais « est‑ce que ça s’entraîne à la bonne vitesse PCIe », « la cartographie NUMA est‑elle cohérente », et « obtenons‑nous la bande passante attendue avec plusieurs périphériques actifs ».

Pendant un lot de renouvellement, un sous‑ensemble de serveurs présentait des erreurs PCIe corrigées intermittentes dans dmesg. Les systèmes étaient « corrects » dans le sens où les applications tournaient.
La plupart des organisations les auraient mis en production et géré le problème plus tard.

Leur checklist a signalé ces nœuds avant qu’ils servent du trafic client. Ils ont corrélé les erreurs à une version BIOS spécifique et à une révision de riser particulière.
Avec le support du fournisseur, ils ont déployé un BIOS plus récent et changé les risers sur le lot affecté. Les erreurs corrigées ont disparu, ainsi que les pics de latence « mystérieux » qui seraient apparus aux fins de trimestre.

Le point n’est pas que les checklists soient magiques. C’est que les défauts au niveau plateforme sont souvent silencieux jusqu’à ce que la charge les rende bruyants, et à ce moment‑là
vous déboguez en public. La validation ennuyeuse a déplacé la douleur de « incident » vers « staging ».

La pratique qui a sauvé la mise : appliquez des invariants de plateforme comme vous appliquez des invariants de configuration. Le matériel fait partie de votre configuration.

Erreurs courantes : symptômes → cause racine → correction

Ce sont les motifs qui reviennent parce qu’ils ressemblent à des « problèmes logiciels » jusqu’à ce que vous traciez la topologie.

1) Symptom: NVMe performance is fine alone, terrible together

  • Cause racine : Plusieurs périphériques partagent un seul lien upstream (uplink chipset ou port upstream d’un switch PCIe).
  • Correction : Déplacez les périphériques les plus chauds vers des lanes attachées au CPU ; vérifiez la largeur/vitesse du lien upstream ; répartissez les périphériques sur les sockets si possible.

2) Symptom: “Upgraded to Gen4 SSDs, no improvement”

  • Cause racine : Le lien s’est downtrainé en Gen3 ou la largeur a été réduite à cause du câblage du slot, des risers, des paramètres BIOS, ou d’erreurs d’intégrité physique.
  • Correction : Vérifiez LnkSta avec lspci -vv ; mettez à jour le BIOS ; remettez en place ; changez de slot/riser ; assurez‑vous qu’il n’y a pas de conflits de partage de lanes avec d’autres slots/M.2.

3) Symptom: p99 latency spikes correlate with unrelated I/O

  • Cause racine : Contention d’uplink partagé : rebuild SATA, sauvegarde USB, ou NIC chipset‑attachée saturant le même chemin que le stockage.
  • Correction : Isolez les périphériques à haut débit sur des lanes CPU ; planifiez les maintenances bruyantes ; évitez de mélanger le trafic « cold storage » sur le même domaine chipset que les NVMe chauds.

4) Symptom: High CPU usage but low throughput; iowait isn’t huge

  • Cause racine : Goulot d’interrupt/softirq ou mauvaise affinité IRQ ; un cœur gère la majorité du travail de complétion I/O.
  • Correction : Validez /proc/interrupts ; tunez irqbalance ; épinglez les vecteurs MSI‑X ; gardez le traitement I/O sur des cœurs locaux au nœud NUMA du périphérique.

5) Symptom: Performance varies between “identical” servers

  • Cause racine : Différences de version BIOS, différents risers, population de slots différente, erreurs de peuplement des canaux mémoire, ou résultats d’entraînement PCIe différents.
  • Correction : Appliquez une nomenclature matérielle standard ; standardisez les firmwares ; capturez et comparez les sorties de topologie (lspci -t, dmidecode, mapping NUMA).

6) Symptom: Database gets slower after adding RAM

  • Cause racine : Le peuplement DIMM a réduit la fréquence mémoire ou le nombre de canaux ; ou la localité NUMA s’est dégradée parce que l’allocateur a réparti la mémoire entre nœuds.
  • Correction : Vérifiez la vitesse mémoire et le peuplement des canaux ; utilisez les emplacements corrects ; définissez des politiques NUMA pour la base de données ; évitez les rangs/taille DIMM mixtes sauf validation.

7) Symptom: “Everything is fast except small writes”

  • Cause racine : Latence ajoutée par la gestion d’énergie (ASPM/C‑states), overhead IOMMU, ou un contrôleur derrière un pont supplémentaire avec une mauvaise distribution des interruptions.
  • Correction : Mesurez la latence tail ; testez les profils firmware ; validez les réglages IOMMU ; assurez‑vous que MSI‑X et la distribution IRQ sont sensés.

8) Symptom: Storage errors are rare, but latency spikes are frequent

  • Cause racine : Erreurs physiques PCIe corrigées déclenchant des retransmissions ; pas assez fatales pour planter, mais suffisantes pour nuire.
  • Correction : Surveillez les messages AER ; échangez les composants douteux ; mettez à jour le BIOS ; validez que les liens s’entraînent aux vitesses attendues après remédiation.

Listes de contrôle / plan étape par étape

Checklist d’évaluation plateforme (avant achat ou déploiement)

  1. Exigez une carte des lanes. Si vous ne pouvez pas expliquer quels périphériques sont CPU‑attachés vs chipset‑attachés, vous achetez une boîte mystère.
  2. Comptez les domaines de bande passante indépendants. Lanes CPU par socket, bande passante uplink, et tout switch PCIe.
  3. Vérifiez les règles des canaux mémoire. « Supporte 1TB » n’est pas la même chose que « supporte 1TB à pleine vitesse ».
  4. Vérifiez les interactions des slots. Quel M.2 désactive quel SATA ? Quel x16 devient x8 quand un autre slot est peuplé ?
  5. Confirmez le placement des NIC. Pour les nœuds de stockage, ne laissez pas la NIC et les NVMe se battre derrière le même uplink.

Checklist de validation en staging (par modèle de serveur)

  1. Capturez la topologie PCIe : lspci -t, plus lspci -vv pour les périphériques critiques.
  2. Capturez le mapping NUMA pour les périphériques : /sys/class/nvme/*/device/numa_node et NIC bus-info.
  3. Exécutez un test fio mono‑périphérique de sanity et un test fio multi‑périphérique concurrent pour révéler les plafonds d’uplink partagé.
  4. Vérifiez dmesg pour AER après stress. Les erreurs corrigées comptent comme défauts jusqu’à preuve du contraire.
  5. Basez une répartition des interruptions. Assurez‑vous de ne pas construire une file de complétion sur un seul cœur.

Plan de déploiement production (ennuyeux, répétable, efficace)

  1. Standardisez les versions BIOS et firmware sur la flotte avant de comparer les performances.
  2. Verrouillez la population des slots sur un schéma connu‑bon et documentez‑le comme un contrat d’API.
  3. Appliquez le tuning OS pour la distribution IRQ et les politiques NUMA seulement après mesure ; ne faites pas du cargo‑cult des paramètres noyau.
  4. Alertez sur les erreurs PCIe corrigées et les signes de downtraining ; traitez‑les comme des signaux d’alerte précoce.
  5. Conservez des snapshots de topologie pour que « hôte identique » signifie réellement identique.

FAQ

1) Le chipset compte‑t‑il encore si le CPU a le contrôleur mémoire ?

Oui. Le chipset agrège encore beaucoup d’I/O derrière un seul uplink. Si vos périphériques chauds sont derrière lui, vous pouvez saturer ce chemin et créer un jitter de latence qui ressemble à un problème applicatif.

2) Comment savoir si un NVMe est chipset‑attaché ou CPU‑attaché ?

Commencez par lspci -t et localisez le contrôleur NVMe. S’il passe par des ponts chipset (et la documentation de la carte le confirme),
supposez qu’il partage la bande passante uplink. Vérifiez aussi le placement du nœud NUMA ; les périphériques CPU‑attachés se mappent souvent proprement au nœud d’une socket.

3) Pourquoi la largeur/vitesse du lien PCIe downtraîne ?

Causes communes : limitations de câblage du slot, conflits de partage/bifurcation des lanes, qualité du riser, retimers, réglages BIOS, et erreurs de couche physique.
Le downtraining est souvent une décision de stabilité prise par la plateforme. Il peut être « fonctionner comme conçu » tout en ruinant votre débit.

4) Un switch PCIe est‑il toujours mauvais ?

Non. Les switches PCIe sont standard dans les serveurs de stockage. La question est le lien upstream : si le switch distribue beaucoup de périphériques derrière un uplink étroit,
vous avez construit de la contention. Si l’upstream est suffisamment large, cela peut très bien marcher.

5) Quel est l’équivalent moderne du goulot northbridge ?

NUMA et uplinks partagés. La mémoire est rapide, mais la mémoire distante ne l’est pas. Et les uplinks chipset sont le nouveau « tout le monde partage ce bus », avec un meilleur marketing.

6) Je vois des erreurs PCIe corrigées. Si elles sont corrigées, pourquoi s’en préoccuper ?

Parce que « corrigé » signifie souvent « retransmis ». Les retransmissions ajoutent latence et jitter. Dans les systèmes de stockage et à faible latence, le jitter est un bug produit.
Les erreurs corrigées sont aussi un indicateur précoce d’un lien qui peut se dégrader davantage.

7) Dois‑je désactiver ASPM et les C‑states profonds sur les serveurs ?

Pour les systèmes batch à fort débit, peut‑être pas. Pour les systèmes stricts sur la latence tail, souvent oui—mais seulement après tests. Désactiver aveuglément peut échanger du jitter contre des problèmes
puissance/thermique ou réduire la marge turbo.

8) Des mises à jour BIOS peuvent‑elles vraiment changer les performances ?

Oui. Le BIOS peut affecter l’entraînement PCIe, les timings mémoire, la gestion d’énergie, et la compatibilité des périphériques. Il peut corriger des tempêtes d’erreurs corrigées, améliorer la stabilité aux générations PCIe supérieures,
ou—parfois—introduire des régressions. Validez, puis standardisez.

9) Pourquoi des serveurs « identiques » se comportent-ils différemment sous charge ?

Parce qu’ils ne sont pas identiques sur les aspects importants : résultats d’entraînement PCIe, peuplement DIMM, versions firmware, et population de slots peuvent tous différer.
La dérive de topologie est réelle. Capturez et comparez vos données de topologie.

10) Quand devrais‑je choisir une plateforme serveur plutôt qu’une carte de type workstation ?

Quand vous tenez à une I/O prévisible sous charge parallèle, des cartes de lanes validées, un comportement firmware stable, et de la gestion à distance. Les cartes workstation peuvent être rapides,
mais elles cachent souvent le partage de lanes et des hypothèses d’uplink chipset qui vieillissent mal en production.

Conclusion : prochaines étapes concrètes

Si vous ne retenez qu’une chose, que ce soit celle‑ci : la performance, c’est la topologie. Les ères des chipsets ont déplacé l’emplacement du goulot, pas l’existence des goulots.
La carte mère décidait autrefois de la moitié de vos performances en contrôlant la mémoire et les bus partagés. Aujourd’hui elle décide de la moitié de vos performances en déterminant
quels périphériques partagent les uplinks, comment les lanes sont câblées, et si vos interruptions et la localité NUMA travaillent pour vous ou contre vous.

Prochaines étapes pratiques :

  1. Inventoriez la topologie sur vos hôtes les plus chargés : capturez lspci -t, lspci -vv critique, mapping NUMA, et distribution des interruptions.
  2. Choisissez une charge et prouvez la localité : alignez les interruptions de stockage, l’affinité CPU des processus, et la localité mémoire sur le même nœud NUMA.
  3. Exécutez un test I/O concurrent en staging pour révéler les plafonds d’uplink partagé avant que la production ne le fasse pour vous.
  4. Standardisez les firmwares et alertez sur les erreurs PCIe corrigées et le downtraining des liens.
  5. Lors de la sélection du matériel, traitez les cartes des lanes et la bande passante uplink comme vous traitez les cœurs CPU et la RAM : des entrées de capacity planning de première classe.
← Précédent
Tuning des expanders SAS pour ZFS : éviter la saturation et les goulets d’étranglement de lien
Suivant →
Proxmox « impossible d’écrire /etc/pve/* » : disque, pmxcfs ou permissions — comment trancher

Laisser un commentaire