{"id":21034,"date":"2026-08-26T18:20:23","date_gmt":"2026-08-26T16:20:23","guid":{"rendered":"https:\/\/webhosting.de\/tcp-small-queues-linux-latency-optimization-netzwerkperformance\/"},"modified":"2026-08-26T18:20:23","modified_gmt":"2026-08-26T16:20:23","slug":"tcp-petites-files-dattente-linux-optimisation-de-la-latence-performances-reseau","status":"publish","type":"post","link":"https:\/\/webhosting.de\/fr\/tcp-small-queues-linux-latency-optimization-netzwerkperformance\/","title":{"rendered":"Petites files d'attente TCP : r\u00e9duire de mani\u00e8re cibl\u00e9e la latence sur le r\u00e9seau Linux"},"content":{"rendered":"<p>La fonctionnalit\u00e9 \u00ab TCP Small Queues \u00bb limite, pour chaque flux TCP, le nombre d'octets en attente dans la pile d'envoi Linux, ce qui r\u00e9duit ainsi <strong>Latence<\/strong> ainsi que le \u00ab bufferbloat \u00bb, de mani\u00e8re cibl\u00e9e. Je vais vous montrer comment ce m\u00e9canisme fonctionne dans le <strong>r\u00e9seaux sous Linux<\/strong> Stack montre comment d\u00e9finir des limites pertinentes et quelles interactions en d\u00e9coulent avec le pacing, les QDiscs et le contr\u00f4le de la congestion.<\/p>\n\n<h2>Points centraux<\/h2>\n\n<ul>\n  <li><strong>Limite de d\u00e9bit<\/strong>: TSQ limite le nombre d'octets en attente par socket TCP.<\/li>\n  <li><strong>Moins de \u00ab buffer bloat \u00bb<\/strong>: Des files d'attente plus courtes r\u00e9duisent le temps de r\u00e9ponse (RTT).<\/li>\n  <li><strong>Pression de retour<\/strong>: Les applications s'ex\u00e9cutent plus lentement lorsque la limite est atteinte.<\/li>\n  <li><strong>\u00c9quit\u00e9<\/strong>: Aucun flux ne monopolise \u00e0 lui seul l'int\u00e9gralit\u00e9 des files d'attente.<\/li>\n  <li><strong>Adaptatif<\/strong> Contr\u00f4le : la limite d\u00e9pend du d\u00e9bit et de la taille du segment.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/tcp-small-queues-4739.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Comment fonctionne TCP Small Queues<\/h2>\n\n<p>TSQ intervient l\u00e0 o\u00f9 les segments TCP sont <strong>QDisc<\/strong> et les pilotes. Lorsque j'\u00e9cris des donn\u00e9es dans un socket, le noyau v\u00e9rifie, avant chaque mise en file d'attente, les octets d\u00e9j\u00e0 allou\u00e9s pour ce flux. Si le flux atteint la limite, le syst\u00e8me marque le socket comme \u00ab limit\u00e9 \u00bb et interrompt toute nouvelle mise en file d'attente. Ce n\u2019est que lorsque la carte r\u00e9seau lib\u00e8re de la m\u00e9moire tampon que le socket est autoris\u00e9 \u00e0 envoyer \u00e0 nouveau et que je peux r\u00e9injecter des donn\u00e9es dans la pile. Cette contrainte stricte maintient la <strong>Files d'attente<\/strong> est plus court et rend les temps de r\u00e9ponse plus pr\u00e9visibles.<\/p>\n\n<h2>Pourquoi les longues files d'attente augmentent le temps de r\u00e9ponse<\/h2>\n\n<p>Cr\u00e9er des files d'attente de pilotes et de QDisc de grande taille <strong>Bufferbloat<\/strong>, notamment avec TSO\/GSO et des volumes de transmission \u00e9lev\u00e9s. Un t\u00e9l\u00e9chargement volumineux peut saturer les files d\u2019attente de sortie, tandis que les flux interactifs tels que SSH, les appels API ou la VoIP se retrouvent rel\u00e9gu\u00e9s en fin de file. La file d\u2019attente surcharg\u00e9e domine alors la <strong>RTT<\/strong> plut\u00f4t que le temps de liaison proprement dit. Le contr\u00f4le de congestion r\u00e9agit lentement, car les accus\u00e9s de r\u00e9ception arrivent en retard, et prend des d\u00e9cisions moins judicieuses concernant la valeur cwnd. Le TSQ limite le nombre d'octets mis en m\u00e9moire tampon par flux, afin que les petits paquets urgents puissent \u00eatre transmis rapidement sur la ligne.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/tcp_small_queues_meeting_2974.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Coup d'\u0153il sous le capot : ce que compte le noyau<\/h2>\n\n<p>En r\u00e9alit\u00e9, le noyau ne compte pas les \u201e paquets \u201c, mais les octets, ou plus pr\u00e9cis\u00e9ment les octets de m\u00e9moire d\u00e9j\u00e0 plac\u00e9s en file d'attente par le socket. Ce qui importe, c'est ce que la pile contient en termes de structures skbuff, y compris <em>truesize<\/em> a allou\u00e9 et qui n'a pas encore \u00e9t\u00e9 trait\u00e9 par le NIC. TSQ y associe un <strong>Acc\u00e9l\u00e9ration\/D\u00e9c\u00e9l\u00e9ration<\/strong>- Chemin : lorsqu\u2019un socket atteint le cr\u00e9dit, la pile active un indicateur de limitation et ne s\u2019appelle \u00e0 nouveau qu\u2019apr\u00e8s l\u2019ach\u00e8vement des transmissions (NAPI\/IRQ) <em>write_space()<\/em> afin que l'application puisse renvoyer les donn\u00e9es. Ce retour d'information est plus rapide que les signaux de contr\u00f4le de congestion bas\u00e9s uniquement sur les pertes et intervient avant le QDisc. Avec TSO\/GSO, le m\u00e9canisme reste efficace, car la limite est fix\u00e9e \u00e0 <em>avant<\/em> en fonction du budget d'octets allou\u00e9 \u00e0 la segmentation : les super-trames volumineuses ne sont admises dans le QDisc que s'il reste suffisamment de cr\u00e9dit disponible, ce qui permet de limiter les rafales.<\/p>\n\n<h2>Limites dynamiques et rythme<\/h2>\n\n<p>Je tire profit de TSQ, car la limite ne reste pas fig\u00e9e, mais s'adapte \u00e0 <strong>Taux<\/strong> et tient compte de la taille des segments. L\u2019objectif est d\u2019atteindre environ une milliseconde de donn\u00e9es sur le chemin de transmission par flux, que le d\u00e9bit soit de 100 Mbit, 1 Gbit ou 10 Gbit. Sur une ligne rapide, le cr\u00e9dit d\u2019octets autoris\u00e9 augmente ; sur une ligne lente, il diminue. Associ\u00e9 au TCP-Pacing, cela permet de limiter la taille des rafales et d\u2019acc\u00e9l\u00e9rer le retour des accus\u00e9s de r\u00e9ception. J\u2019obtiens ainsi une r\u00e9duction sensible <strong>Pics de latence<\/strong>, sans r\u00e9duire inutilement le d\u00e9bit.<\/p>\n\n<h2>Interaction par socket et par application<\/h2>\n\n<p>Le TSQ ne fonctionne correctement que si l'application per\u00e7oit \u00e9galement la contre-pression. Je tiens donc compte de param\u00e8tres tels que <strong>SO_SNDBUF<\/strong>, <strong>TCP_NOTSENT_LOWAT<\/strong> et l'autocorking. Une fen\u00eatre de tampon d'envoi trop grande peut, \u00e0 court terme, pousser un grand nombre d'octets dans la pile ; le TSQ ralentit certes, mais l'application ne s'en rend compte que lorsque <em>send()<\/em> se bloque ou renvoie EAGAIN. Avec <strong>TCP_NOTSENT_LOWAT<\/strong> je g\u00e8re la partie \u201e non envoy\u00e9e \u201c dans l'espace utilisateur et compl\u00e8te ainsi le TSQ c\u00f4t\u00e9 noyau. L'autocorking (ou explicitement <em>TCP_CORK<\/em>\/MSG_MORE) permet de regrouper les petites \u00e9critures sans g\u00e9n\u00e9rer de pics de latence. Limites de rythme par socket (par exemple via <em>SO_MAX_PACING_RATE<\/em>) s'accordent avec TSQ : le d\u00e9bit assure la r\u00e9gularisation temporelle, tandis que la limite d'octets assure la limitation spatiale. Important : <strong>TCP_NODELAY<\/strong> Cela d\u00e9sactive Nagle et peut am\u00e9liorer l'interactivit\u00e9, mais sans TSQ, le risque de \u00ab burst \u00bb augmente ; avec TSQ, je ma\u00eetrise les deux aspects.<\/p>\n\n<h2>Guide pratique : valeurs TSQ pertinentes<\/h2>\n\n<p>Je d\u00e9finis le cadre g\u00e9n\u00e9ral avec <strong>net.ipv4.tcp_limit_output_bytes<\/strong> (Sysctl). Les valeurs par d\u00e9faut habituelles se situent entre 128 et 262 Ko par flux. Pour de nombreuses charges de travail Web et API, j\u2019opte pour des valeurs plus faibles afin que les r\u00e9ponses interactives restent rapides. Pour les sauvegardes ou la r\u00e9plication, j\u2019augmente mod\u00e9r\u00e9ment cette limite, tant que le temps de transit (RTT) reste stable. Si vous souhaitez approfondir le sujet des files d\u2019attente, vous trouverez des notions de base sur <a href=\"https:\/\/webhosting.de\/fr\/server-packet-queues-reseau-stabilite-hebergement-optimisation-latence\/\">Files d'attente de paquets sur le serveur<\/a>, qui facilitent la classification.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th><strong>Sc\u00e9nario<\/strong><\/th>\n      <th><strong>Taux de liaison<\/strong><\/th>\n      <th><strong>Valeur par d\u00e9faut de tcp_limit_output_bytes<\/strong><\/th>\n      <th><strong>Objectif<\/strong><\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>API\/HTTP tr\u00e8s interactif<\/td>\n      <td>100 Mbit \u2013 1 Gbit<\/td>\n      <td>64 \u00e0 128 Ko<\/td>\n      <td>faible <strong>RTT<\/strong>, petits crampons<\/td>\n    <\/tr>\n    <tr>\n      <td>Charge mixte : Web + t\u00e9l\u00e9chargements<\/td>\n      <td>1 \u00e0 10 Gbit<\/td>\n      <td>128 \u00e0 256 Ko<\/td>\n      <td>Solde de <strong>D\u00e9bit<\/strong> et la latence<\/td>\n    <\/tr>\n    <tr>\n      <td>R\u00e9plication\/Sauvegardes<\/td>\n      <td>1 \u00e0 10 Gbit<\/td>\n      <td>256 \u00e0 512 Ko<\/td>\n      <td>d\u00e9bit massique constant, acceptable <strong>Latence<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>WAN \u00e0 RTT \u00e9lev\u00e9<\/td>\n      <td>10 \u00e0 100 Mbit<\/td>\n      <td>96 \u00e0 192 Ko<\/td>\n      <td>des rafales plus courtes, plus \u00e9quitables <strong>Queues de billard<\/strong><\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/tcp-small-queues-linux-latency-2748.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Interaction entre QDisc et le contr\u00f4le de congestion<\/h2>\n\n<p>Le TSQ fonctionne \u00e0 l'entr\u00e9e de la <strong>QDisc<\/strong>, tandis que des algorithmes tels que fq_codel g\u00e8rent la congestion sur la ligne. Ensemble, ils r\u00e9duisent les files d'attente et garantissent une r\u00e9partition \u00e9quitable. Avec <a href=\"https:\/\/webhosting.de\/fr\/tcp-bbr-controle-de-congestion-optimisation-du-serveur-web-bande-passante\/\">TCP BBR<\/a> J'en tire \u00e9galement profit, car des mesures RTT plus r\u00e9alistes permettent un meilleur rythme de transmission et un meilleur contr\u00f4le du cwnd. CUBIC r\u00e9agit \u00e9galement de mani\u00e8re plus fluide lorsque je supprime les temps de mise en file d'attente excessifs. Ainsi, le d\u00e9bit augmente de mani\u00e8re organique, tandis que le <strong>Temps de r\u00e9action<\/strong> reste sous contr\u00f4le.<\/p>\n\n<h2>Virtualisation et piles cloud<\/h2>\n\n<p>Dans les machines virtuelles, plusieurs niveaux de mise en m\u00e9moire tampon s\u2019additionnent : le QDisc invit\u00e9, les files d\u2019attente virtio\/vhost, le QDisc h\u00f4te et la carte r\u00e9seau physique. Je maintiens le TSQ actif dans l\u2019invit\u00e9 et j\u2019y d\u00e9finis une limite prudente afin qu\u2019aucun pic important ne parvienne \u00e0 l\u2019h\u00f4te. Au niveau de l\u2019hyperviseur, je veille \u00e0 ce que les cha\u00eenes de latence restent courtes gr\u00e2ce \u00e0 des QDiscs \u00e9quitables, des anneaux TX mod\u00e9r\u00e9s et un pinning d\u2019IRQ propre. Le SR-IOV peut r\u00e9duire la latence, mais transf\u00e8re la responsabilit\u00e9 aux invit\u00e9s : sans TSQ dans l\u2019invit\u00e9, on risque de voir appara\u00eetre de longues files d\u2019attente VF. Dans les conteneurs, le TSQ intervient par <em>NetNS<\/em> comme d\u2019habitude ; gr\u00e2ce au cgroup pacing et aux limites CPU, j\u2019emp\u00eache qu\u2019un voisin bruyant ne fasse indirectement grimper la latence. Il est \u00e9galement important de pr\u00eater attention au coalescing et aux offloads dans le chemin virtio : un regroupement excessif allonge les accus\u00e9s de r\u00e9ception, tandis qu\u2019un regroupement insuffisant r\u00e9duit l\u2019efficacit\u00e9 \u2013 j\u2019ajuste ces param\u00e8tres en fonction de l\u2019objectif de latence, sans dogmatisme.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/tcp-small-queues-latenz-8472.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Wi-Fi et syst\u00e8mes embarqu\u00e9s : bien g\u00e9rer les cas particuliers<\/h2>\n\n<p>Sur les liaisons Wi-Fi, ce qui compte, c'est la <strong>Agr\u00e9gation<\/strong> au niveau de la couche MAC. Si je laisse trop peu d\u2019octets dans le chemin de transmission, le pilote ne peut regrouper qu\u2019un nombre r\u00e9duit de trames, ce qui r\u00e9duit l\u2019efficacit\u00e9. Dans ce genre de configuration, j\u2019augmente prudemment la limite et je v\u00e9rifie le taux d\u2019agr\u00e9gation. Les plateformes OpenWrt et embarqu\u00e9es b\u00e9n\u00e9ficient \u00e9galement de chemins all\u00e9g\u00e9s dans les pilotes et d\u2019op\u00e9rations atomiques plus restreintes. Je teste chaque adaptation sous une charge radio r\u00e9elle avant de <strong>Profil<\/strong> d\u00e9ployer largement.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/tcp_latenz_reduzieren_2837.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Un monitoring et des m\u00e9triques qui comptent vraiment<\/h2>\n\n<p>J'observe les <strong>RTT<\/strong>\u2011Je r\u00e9partis les donn\u00e9es par socket et je surveille les valeurs aberrantes, pas seulement les moyennes. \u00c0 l\u2019aide de ss, tc et d\u2019exportateurs, je r\u00e9cup\u00e8re les longueurs de file d\u2019attente, les retransmissions ainsi que le taux de r\u00e9gulation (pacing_rate). Les programmes eBPF me signalent les \u00e9v\u00e9nements lorsque les sockets sont limit\u00e9s puis \u00e0 nouveau lib\u00e9r\u00e9s. Le \u00ab Time-to-First-Byte \u00bb et les 95e et 99e centiles indiquent si le TSQ est efficace. Sans valeurs de mesure, toute <strong>Optimisation<\/strong> un vol \u00e0 l'aveugle.<\/p>\n\n<h2>Tests A\/B et tests de charge pertinents<\/h2>\n\n<p>Je mesure les effets TSQ de mani\u00e8re reproductible : d'abord une ligne de base sans modification, puis des balayages de param\u00e8tres isol\u00e9s (par exemple 64, 96, 128, 192 Ko). Pour les charges de travail mixtes, j\u2019ex\u00e9cute des flux parall\u00e8les (transferts en masse + nombreuses requ\u00eates courtes) et je compare les 95e et 99e centiles des latences, et pas seulement la m\u00e9diane. M\u00eame si j\u2019interromps clairement les s\u00e9ries de tests (\u00e9chauffement, fen\u00eatre de mesure, refroidissement), des artefacts restent d\u00e9tectables. Je veille \u00e0 ce que les constantes restent inchang\u00e9es : m\u00eames mod\u00e8les de charge utile, m\u00eame route\/MTU, m\u00eames fr\u00e9quences de processeur serveur et client. Sur les liaisons WAN, je simule le d\u00e9lai, la gigue et les pertes \u00e0 l\u2019aide de <em>tc netem<\/em>, afin de v\u00e9rifier si les limites TSQ ne plafonnent pas trop t\u00f4t lorsque le BDP est \u00e9lev\u00e9. Ce n'est que lorsque les centiles se resserrent et que les retransmissions\/pertes restent stables que j'int\u00e8gre ces valeurs en production.<\/p>\n\n<h2>Optimisation mat\u00e9rielle et informations sur les pilotes<\/h2>\n\n<p>Je v\u00e9rifie les param\u00e8tres TSO\/GSO, le tampon circulaire de la carte r\u00e9seau et la gestion des IRQ, afin que <strong>TSQ<\/strong> fonctionne correctement. Des anneaux TX trop grands allongent la file d\u2019attente au niveau du p\u00e9riph\u00e9rique ; trop petits, ils r\u00e9duisent le taux d\u2019utilisation. Un regroupement grossier des interruptions retarde les accus\u00e9s de r\u00e9ception, tandis qu\u2019un regroupement fin augmente la charge du processeur. J\u2019adapte mon intervention en fonction de la pratique et, pour commencer, je renvoie \u00e0 <a href=\"https:\/\/webhosting.de\/fr\/interrupt-coalescing-optimisation-du-reseau-serverflux\/\">Coalescence d'interruption<\/a>. L'objectif reste d'assurer une <strong>Latence<\/strong> avec un d\u00e9bit suffisant.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/tcp_small_queues_9271.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>NUMA, RSS et affinit\u00e9 CPU<\/h2>\n\n<p>Des files d\u2019attente courtes ne servent pas \u00e0 grand-chose si les paquets traversent sans cesse les fronti\u00e8res NUMA. J\u2019associe les files d\u2019attente RX\/TX via RSS\/irqbalance aux c\u0153urs du m\u00eame domaine NUMA que celui sur lequel l\u2019application s\u2019ex\u00e9cute. Gr\u00e2ce \u00e0 XPS\/RPS, je contr\u00f4le quels processeurs prennent en charge le travail TX, \u00e9vitant ainsi les sauts entre sockets. La r\u00e9duction des \u00e9checs de cache et des conflits de verrouillage profite indirectement \u00e0 TSQ : les confirmations de fin d\u2019ex\u00e9cution reviennent plus rapidement, le socket est \u201e d\u00e9brid\u00e9 \u201c plus t\u00f4t et les pics de latence sont \u00e9vit\u00e9s. En cas de tr\u00e8s nombreux flux par h\u00f4te, je pr\u00e9vois un nombre suffisant de files d\u2019attente et j\u2019\u00e9vite que plusieurs flux \u00ab bruyants \u00bb n\u2019entrent en collision sur le m\u00eame anneau TX.<\/p>\n\n<h2>\u00c9tape par \u00e9tape : v\u00e9rifier si le TSQ est actif<\/h2>\n\n<p>Je commence par regarder <strong>Sysctl<\/strong>: La commande `sysctl net.ipv4.tcp_limit_output_bytes` affiche la limite actuelle. Ensuite, j'interroge `ss -tin` pour chaque socket, je surveille les valeurs de `send-q` et `rtt`, et je compare les phases de charge avec et sans ajustement de la limite. \u00c0 l\u2019aide d\u2019iperf3, je g\u00e9n\u00e8re une charge en arri\u00e8re-plan et je mesure en parall\u00e8le les temps de r\u00e9ponse de l\u2019API afin de mettre en \u00e9vidence les priorit\u00e9s. La commande tc -s qdisc me fournit le nombre de paquets et de paquets perdus pour la discipline de sortie. Si les 95e et 99e centiles restent proches et que la <strong>CPU<\/strong>- Charge dans le cadre, ajuste le choix de la limite.<\/p>\n\n<h2>Erreurs courantes et anti-mod\u00e8les<\/h2>\n\n<ul>\n  <li>\u201e Plus de marge = plus de performances \u201c : cela vaut pour les tests de d\u00e9bit sans objectif de latence, mais ne tient pas la route pour les services interactifs. TSQ remplace les files d'attente surdimensionn\u00e9es par un cr\u00e9dit adapt\u00e9 aux besoins de chaque flux.<\/li>\n  <li>\u201e Le TSQ r\u00e9duit le d\u00e9bit \u201c : lorsqu'il est correctement configur\u00e9, le TSQ limite les pics de trafic, et non le d\u00e9bit moyen. Pour les charges de travail en masse, j'augmente mod\u00e9r\u00e9ment cette limite et je mesure les centiles plut\u00f4t que le seul d\u00e9bit de pointe en Mbit\/s.<\/li>\n  <li>\u201e Le pacing suffit \u00e0 lui seul \u201c : le lissage temporel est important, mais sans limiteur d\u2019octets, les trames GSO volumineuses finissent tout de m\u00eame par d\u00e9border dans le QDisc. Le TSQ et le pacing sont compl\u00e9mentaires.<\/li>\n  <li>\u201e Une valeur pour tous \u201c : les charges de travail, les liaisons et les cartes r\u00e9seau diff\u00e8rent. Je travaille avec des plages de valeurs et je proc\u00e8de \u00e0 une validation pour chaque environnement.<\/li>\n  <li>\u201e Seul le TCP est concern\u00e9 \u201c : l'accent est mis sur le TCP, mais le syst\u00e8me comporte d'autres param\u00e8tres de r\u00e9glage (par exemple pour la charge UDP). J'emp\u00eache les protocoles parall\u00e8les d'engorger les m\u00eames files d'attente de mani\u00e8re incontr\u00f4l\u00e9e.<\/li>\n<\/ul>\n\n<h2>Conclusion : une ma\u00eetrise cibl\u00e9e de la latence<\/h2>\n\n<p>TSQ transf\u00e8re le contr\u00f4le des files d'attente des pilotes vers le <strong>prise<\/strong> et r\u00e9duit ainsi les encombrements directement \u00e0 la source. Je limite le nombre d\u2019octets mis en m\u00e9moire tampon par flux, ce qui garantit des accus\u00e9s de r\u00e9ception rapides, un temps de transit (RTT) r\u00e9duit et un partage \u00e9quitable des files d\u2019attente. Associ\u00e9 \u00e0 fq_codel et \u00e0 un contr\u00f4le de congestion moderne, le temps de r\u00e9ponse reste fiable m\u00eame sous charge. Je traite les cas particuliers li\u00e9s au Wi-Fi et aux syst\u00e8mes embarqu\u00e9s \u00e0 l\u2019aide de limites adapt\u00e9es et de tests en conditions r\u00e9elles. En surveillant les indicateurs cl\u00e9s et en ajustant progressivement les limites, on maintient la <strong>Latence<\/strong> constamment faible, sans perte de d\u00e9bit inutile.<\/p>","protected":false},"excerpt":{"rendered":"<p>La fonctionnalit\u00e9 \u00ab TCP Small Queues \u00bb du noyau Linux limite le nombre de paquets TCP mis en m\u00e9moire tampon par flux et constitue un outil puissant pour l'optimisation de la latence. D\u00e9couvrez comment TSQ r\u00e9duit le \u00ab bufferbloat \u00bb et am\u00e9liore les temps de r\u00e9ponse des serveurs.<\/p>","protected":false},"author":1,"featured_media":21027,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-21034","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server_vm"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"129","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"TCP Small","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"21027","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/21034","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/comments?post=21034"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/21034\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media\/21027"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media?parent=21034"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/categories?post=21034"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/tags?post=21034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}