Notes de version

Notes de version de HFTKernel 7.3.x.

Parcourez la série de noyaux 7.3.x du plus récent au plus ancien, avec les changements amont les plus pertinents pour une exécution CPU prévisible, un réseau stable, une gestion précise du temps, la virtualisation, le comportement mémoire et des queues de distribution de latency mesurables.

Historique public des modifications

Notes de version

Chaque entrée porte sur les changements amont qui soutiennent les objectifs principaux de HFTKernel : jitter minimal, tail latency maîtrisée, chemin de données stable, gestion précise du temps et comportement mesurable sous pression.

HFTKernel 7.3.3

Meilleur ordre des paquets, progression I/O plus fiable et polling plus léger

Dernière entrée de la série 7.3.x

Base upstream : Linux 7.3.3. Modifications cumulatives : Linux 7.3.2 et 7.3.3, par rapport à 7.3.1. Date de publication upstream : 6 novembre 2026 pour les deux versions.

Transmission ordonnée lorsque les files sont sous pression

Le scheduler réseau conserve l'ordre des paquets lorsqu'un driver renvoie NETDEV_TX_BUSY. Les paquets remis en file reviennent en tête de la liste des paquets en attente dans leur ordre initial.

Dans le test upstream à quatre flux TCP sur une paire veth avec une pfifo qdisc, le throughput est passé d'environ 40 à 76 Gbps. La modification a éliminé environ 1.3 million de segments hors ordre et 15,000 à 37,000 retransmissions par intervalle de test de 15 secondes.

Offload hardware VLAN cohérent

Avec reorder_hdr=off, les frames éligibles transmettent leur tag VLAN aux métadonnées d'insertion de la NIC tout en conservant le layout attendu à l'egress du dispositif VLAN. Cela maintient la compatibilité de l'insertion VLAN hardware avec le checksum offload et le segmentation offload, y compris dans les chemins concernés de packet-socket et d'AF_XDP en copy-mode.

NAPI busy polling tenant compte des deadlines

io_uring limite le busy polling à l'intervalle d'attente restant. Lorsqu'une deadline absolue est déjà dépassée, le budget de polling devient nul, permettant à l'attente de se terminer rapidement.

Les entrées NAPI suivies dynamiquement expirent désormais après 60 secondes d'inactivité. Les rings actifs pendant de longues périodes cessent de revisiter les identifiants de file obsolètes, ce qui maintient le polling centré sur le trafic récent.

Wakeups fiables du travail différé et progression des completions

IORING_SETUP_DEFER_TASKRUN publie l'état sleep du task en attente avant d'exposer son wakeup credit. Les producers peuvent notifier de manière fiable le consumer lorsque du nouveau task work local arrive. La boucle d'attente pilotée par BPF suit le même ordre.

Lorsque les completions en overflow en attente ne peuvent pas tenir dans la completion queue, io_uring rend le contrôle à userspace pour que l'application puisse la vider. Cela fournit un chemin explicite de progression pour les completion queues contenant des entrées de tailles différentes.

Progression plus robuste pour les consumers real-time

La task-work queue lockless protège la publication en deux étapes du producer par une courte section avec preemption désactivée. Un consumer SCHED_FIFO partageant un CPU avec un producer de priorité inférieure observe une publication achevée, sans interrompre le producer par preemption au milieu de la mise à jour.

Les attentes asynchrones sur private futex préparent le hash privé du processus avant d'enregistrer le waiter. Les wakeups restent alignés sur le hash actif lors des créations ultérieures de threads et des modifications de la configuration du hash.

Moins d'activité SQPOLL inutile

SQPOLL peut entrer en sleep lorsqu'un ring est désactivé, même si des submission entries ont été préparées. L'activation du ring réveille le thread de polling. Les applications peuvent préparer leur configuration de démarrage sans mobiliser un CPU pour vérifier à répétition du travail qui n'est pas encore activé.

Limites mieux appliquées aux workers I/O asynchrones

io_uring résout le fichier cible avant d'affecter du travail à io-wq. Les opérations forced-async sur regular files et block devices respectent les limites des bounded workers, y compris celles configurées avec IORING_REGISTER_IOWQ_MAX_WORKERS.

Les écritures buffered dans un même regular file sont coordonnées par un hashing fondé sur l'inode, réduisant le nombre de workers en concurrence pour le même inode lock. L'identité du fichier est fixée lorsque la requête entre dans la work queue.

Buffers de réception fiables à plus grande échelle

La réception zero-copy calcule les offsets des buffers en arithmétique 64 bits avant le shift. Les completion entries identifient le bon buffer au-delà des premiers 4 GiB d'une zone de réception enregistrée, maintenant la consommation et le refill alignés.

Pour les provided buffers incrémentaux et les receive bundles multi-buffer, la progression partielle est finalisée avant qu'une autre requête puisse réutiliser la mémoire restante. Les applications reçoivent la longueur réellement transférée et poursuivent à partir de cette limite ; ces opérations MSG_WAITALL peuvent renvoyer un résultat court.

Clock domains corrects pour les mises à jour des timeouts absolus

Les mises à jour des timeouts absolus utilisent le clock associé au timer existant lors de la conversion du time namespace de l'appelant vers le temps de l'hôte. CLOCK_MONOTONIC, CLOCK_BOOTTIME et CLOCK_REALTIME conservent leurs sémantiques respectives.

Cela maintient la cohérence des deadlines asynchrones pour les services utilisant des time namespaces et différents clock domains de timeout.

Accounting de la mémoire plus complet

Les métadonnées task-to-ring et les personality XArrays sont imputées aux memory cgroups. Les métadonnées des buffers enregistrés et les resource nodes participent également à l'accounting memcg, maintenant la mémoire I/O du kernel représentée dans les budgets des services.

Le teardown de XArray libère les nœuds internes vides laissés par les tentatives d'insertion infructueuses. La création et le nettoyage répétés des rings libèrent ces allocations de métadonnées ainsi que les charges correspondantes.

Cycle de vie des pages HugeTLB plus robuste

Le chemin de fault HugeTLB anonyme termine les mises à jour de l'état du folio et son déverrouillage avant de libérer le page-table lock. L'initialisation reste coordonnée avec les opérations concurrentes d'unmapping et de page reclamation, renforçant les mappings privés de huge pages utilisés pour les grands buffers applicatifs.

Teardown coordonné des IRQ et des dispositifs de timing

Le nettoyage des threaded IRQ conserve irqaction jusqu'à la fin du task work de sortie en attente, maintenant la durée de vie des ressources tout au long du chemin de sortie anormale du thread.

Les opérations de contrôle du générateur PPS sont synchronisées avec l'unregister de la source. Les opérations en cours se terminent sur un état valide du driver, et les opérations suivantes reçoivent ENODEV après le retrait. Cela fournit aux logiciels de services de timing une limite claire dans le cycle de vie du dispositif.

État de l'hôte KVM plus cohérent

Sur les hôtes Intel VMX, les modifications en userspace qui rendent une vCPU runnable effacent également, si nécessaire, l'état halt suivi par le matériel. Cela maintient l'état d'exécution hardware aligné sur le virtual-machine monitor lors des opérations de reset et de redémarrage.

AMD SVM actualise la génération ASID dans les deux blocs de contrôle de nested virtualization après un changement de CPU physique. Les identifiants d'espace d'adressage restent coordonnés lorsque les vCPU nested passent d'un processeur à l'autre.

Améliorations des backends Xen ajoutées dans Linux 7.3.3

La dernière mise à jour cumulative ajoute trois améliorations pour les déploiements de backends Xen. Les lectures des statistiques du block backend sont synchronisées avec le teardown du frontend. Les statistiques du network backend restent protégées pendant le nettoyage des files. Le nettoyage de la liste multicast intervient après l'arrêt des traitements d'émission et de réception.

Ensemble, ces modifications maintiennent la coordination du monitoring, de l'état du réseau virtuel et de la libération des ressources des backends lors de la déconnexion et de la reconfiguration des dispositifs.

Systèmes d'exploitation pris en charge

Le catalogue de paquets HFTKernel couvre 24 targets de systèmes d'exploitation :

  • Ubuntu 20.04 / 22.04 / 24.04 / 26.04 LTS
  • Debian 11 / 12 / 13
  • Compatibles RHEL, AlmaLinux, Rocky Linux 8 / 9 / 10
  • CentOS Stream 9 / 10
  • Fedora Linux 44
  • Amazon Linux 2023, profil Cloud
  • ALT Linux p11 / Simply Linux 11
  • Astra Linux 1.8
  • Arch Linux base-devel
  • Base compatible NixOS.

Installation en une seule commande

curl -fsSL https://hftkernel.com/install.sh | sudo bash

L'installer détecte le système d'exploitation et le profil de déploiement, vérifie le paquet correspondant et l'installe. Un redémarrage manuel active le kernel installé.

Orientation de la version

Préserver l'ordre de transmission, maintenir la progression du travail asynchrone, éliminer le polling inutile et maintenir une ownership claire de la mémoire et des ressources des dispositifs.

HFTKernel 7.3.1

I/O asynchrones plus prévisibles, wakeups RT précis et diagnostics fiables de l'hôte

Base amont : Linux 7.3.1. Modifications depuis Linux 7.3. Date de publication amont : 30 octobre 2026.

Progression rapide après les barrières drain de io_uring

Une requête drain autonome efface désormais l'état drain lorsque sa completion est soumise à un flush et qu'aucun autre travail différé ne reste en attente. Pour l'exécution io-wq, cette transition a lieu sous le ring lock avant que la completion ne devienne visible en userspace.

Les requêtes soumises après l'achèvement de la barrière peuvent progresser sans attendre que le worker libère sa dernière référence à la requête. Les requêtes drain liées conservent leurs exigences d'ordonnancement.

Cela rend les pipelines I/O pilotés par les completions plus prévisibles pour les applications utilisant des barrières drain.

Wakeups poll fiables et completion multishot

Une opération atomique compare-and-exchange coordonne désormais la libération de l'ownership de poll avec les notifications de retry concurrentes. Les wakeups en attente restent visibles, permettant au traitement de continuer sans dépendre d'un événement sans rapport.

Le poll multishot met également à jour correctement le compteur de références partagé lors d'un hangup. Le dernier passage de traitement des événements peut s'achever sans boucles répétées inutiles, ce qui améliore la gestion du cycle de vie des connexions dans les applications asynchrones.

Timeouts précis de la completion queue sur PREEMPT_RT

Pour les tâches RT et deadline sur PREEMPT_RT, les callbacks de timeout de la completion queue de io_uring s'exécutent en contexte hard-interrupt. La transmission des wakeups ne dépend plus du scheduling du timer thread de priorité inférieure.

Dans le test amont sur Jetson Orin Nano, avec la modification appliquée par backport à Linux 6.18.39-rt, le retard maximal est passé de 1,040 µs à 18 µs sur 40,000 deadlines sous une charge SCHED_FIFO concurrente. Après la modification, tous les wakeups sont restés dans une limite de 100 µs de retard.

Traitement cohérent des grands provided buffers de réception

Pour les opérations de réception non-bundled dont la longueur provient d'un provided buffer, io_uring limite la longueur de transfert sélectionnée à MAX_RW_COUNT.

Cela maintient la validité de la longueur dans le chemin de retour utilisant une valeur signée, y compris pour les provided buffers de 2 GiB ou plus, tout en respectant la limite existante de taille de transfert. Cela renforce le traitement des buffers de réception pour les applications utilisant de grandes régions réutilisables.

Arrêt mieux coordonné des workers asynchrones

Le chemin de sortie de io-wq applique une memory barrier après la publication de son indicateur de sortie. L'arrêt et le task work concurrent de création des workers respectent l'ordre requis, y compris sur les architectures à modèle mémoire faiblement ordonné.

Cela renforce le teardown ordonné et le redémarrage des services utilisant des worker pools io_uring.

L'annulation des requêtes IORING_OP_WAITID est également idempotente : les tentatives répétées reconnaissent l'état d'annulation existant sans accumuler de références supplémentaires. Cela maintient la cohérence des requêtes asynchrones de supervision des processus pendant l'annulation.

Moins de travail inutile lors du teardown des PID namespaces

Pendant le nettoyage du namespace, le process reaper masque les wakeups des notifications task-work en attendant la fin des processus enfants et la libération des PID.

Il peut rester en sommeil jusqu'à l'événement pertinent du cycle de vie, au lieu de réintégrer à répétition son chemin d'attente. Cela réduit l'activité CPU évitable dans les interactions concernées entre l'arrêt des conteneurs et livepatch.

Visibilité fiable des IRQ par CPU sur les grands hôtes

/proc/interrupts émet désormais son en-tête CPU à chaque rendu du premier enregistrement, y compris lors des nouvelles tentatives après l'agrandissement du sequence buffer.

La correspondance entre CPU et compteurs reste intacte sur les systèmes comportant de nombreux cœurs. Cela permet un parsing fiable des IRQ, la vérification du placement et la surveillance des CPU isolés et de housekeeping.

Configuration et teardown du tracing plus propres

La configuration des histogrammes supprime désormais les triggers field-variable créés automatiquement lorsque la commande globale échoue. Le tracing actif correspond à la configuration acceptée, et l'instrumentation temporaire est nettoyée au lieu de continuer à compter les événements.

Le nettoyage des histogrammes field-variable conserve la référence stable à l'event-file au lieu de dépendre de la durée de vie d'un autre histogramme. Cela améliore la création, la modification et la suppression répétées des sessions de diagnostic.

Le parsing des event-filters rejette également les expressions logiques incomplètes avant leur exécution. Cela renforce la configuration automatisée de tracefs et des tracepoints perf.

Diagnostics postmortem plus complets

La collecte des core dumps est protégée contre les interruptions TIF_NOTIFY_SIGNAL lors du transfert des données via des pipes et des sockets. Les notifications de io_uring et d'autres producteurs task-work n'interrompent plus ces chemins de collecte.

Cela préserve les données de diagnostic pour une analyse détaillée de l'état de l'application, des mappings et des I/O en attente.

Validation cohérente des quotas DAMON

Les objectifs de quota DAMOS sont validés dans le cœur de DAMON avant d'être appliqués. Les valeurs cibles égales à zéro sont rejetées par le chemin de commit commun, et l'erreur est propagée aux appelants.

Pour les déploiements utilisant une gestion de la mémoire fondée sur DAMON, cela fournit un point de validation cohérent pour la configuration des politiques de quota.

Builds out-of-tree fiables du benchmark DMA

dma_map_benchmark est désormais compilé dans le répertoire de sortie sélectionné lorsque O= est spécifié.

Le benchmark s'intègre aux pipelines de build qui séparent les arborescences des sources des outils générés, permettant une préparation reproductible des diagnostics DMA.

Systèmes d'exploitation pris en charge et installation

HFTKernel prend en charge 24 OS targets parmi Ubuntu, Debian, les plateformes compatibles RHEL, AlmaLinux, Rocky Linux, CentOS Stream, Fedora, Amazon Linux, Arch Linux, les déploiements compatibles NixOS, ALT Linux p11 / Simply Linux 11 et Astra Linux 1.8. Amazon Linux 2023 utilise le profil Cloud.

Installation en une seule commande :

curl -fsSL https://hftkernel.com/install.sh | sudo bash

L'installer sélectionne le paquet correspondant au système d'exploitation et le profil de déploiement, puis vérifie l'intégrité des paquets.

Orientation de la version

La base Linux 7.3.1 renforce la progression des I/O, la transmission des timeouts real-time, la gestion du cycle de vie des processus et la cohérence des diagnostics. Ces modifications soutiennent l'objectif de HFTKernel : fournir un hôte prévisible et mesurable pour les applications sensibles à la latency.

HFTKernel 7.3

Lectures temporelles préparées, gestion mémoire allégée et nouvelles fonctions réseau CXL

Base amont : Linux 7.3. Date de publication amont : 18 octobre 2026.

Objectif : capacités introduites avec la base Linux 7.3 pour les déploiements sensibles à la latency.

Données vDSO préchargées pour un démarrage applicatif prévisible

Le mappage générique des données vDSO peut désormais être peuplé par mlockall(). Le retrait de son indicateur VM_IO permet à la préparation mémoire d'établir les entrées correspondantes des tables de pages avant le début du traitement sensible à la latency.

Pour les applications lisant le temps avec vDSO, cela déplace un défaut de page évitable du premier accès vers la préparation initiale. L'auteur amont a observé environ 20 µs pour le chemin complet de l'exception de défaut de page sur la machine de test.

Cela renforce la préparation des moteurs de trading, des consommateurs d'horodatages et des processus de mesure qui préchargent explicitement leurs jeux de travail.

Moins de contention du verrou LRU pendant la récupération mémoire

La récupération LRU classique calcule désormais les coûts d'équilibrage du balayage anonyme et fichier à partir des compteurs vmstat. L'échantillonnage et la décroissance des coûts utilisent un verrou dédié par lruvec au lieu de reprendre le verrou protégeant les opérations de listes LRU. L'agrégation hiérarchique remplace aussi les mises à jour répétées des coûts parents.

Dans le test amont de pression mémoire sur 176 cœurs et 256 GB, l'attente cumulée du verrou LRU est passée d'environ 4.23 secondes à 1.66 seconde sur une fenêtre de 30 secondes, soit une réduction de 61%, avec des taux de balayage et de récupération similaires.

Pour les déploiements LRU classiques, cela réduit la contention entre le suivi de récupération et les opérations gérant réellement les pages.

Meilleure conservation du code exécutable avec MGLRU

MGLRU promeut les folios mappés de fichiers exécutables après leur première utilisation observée. Le vieillissement des tables de pages et la vérification des références reconnaissent les mappages exécutables lors de la mise à jour de l'état des pages.

Cela protège davantage le code applicatif et les bibliothèques partagées récemment utilisés contre la récupération. La résidence du code devient plus régulière pour les services utilisant MGLRU sous pression mémoire.

Moins de suivi inutile de la pression avec cgroup v2

Le sous-système vmpressure ignore le chemin de notification utilisateur cgroup-v1 lorsqu'il fonctionne sous cgroup v2. La récupération évite ainsi le suivi inutilisé, les verrous, la soumission aux files de travail et les parcours des parents.

Le chemin interne de pression des sockets TCP/SCTP reste actif, et la surveillance utilisateur cgroup-v2 continue via PSI. Cela supprime des tâches d'infrastructure redondantes tout en conservant les signaux de pression utiles au réseau et à la gestion des services.

Sections critiques plus courtes dans les files de travail

Le traitement des files de travail choisit le worker à réveiller sous pool->lock, puis le réveille après libération du verrou. Les opérations de réveil de l'ordonnanceur n'allongent plus la section critique du pool partagé dans les chemins concernés de mise en file et de tâches enchaînées.

Dans un microtest amont sur NVIDIA Grace ARM64 avec des files de travail non liées limitées à NUMA, le throughput est passé de 719,794 à 794,049 tâches par seconde, avec une latency P95 de mise en file réduite de 10.3%.

Cela améliore le traitement des tâches de fond soumises à contention sur les CPU de service et dans l'infrastructure de soutien.

Services gérés par l'ordonnanceur plus réactifs

L'ordonnancement cgroup de la classe fair passe à une seule file de sélection des tâches par CPU, tout en conservant la répartition des poids des groupes. EEVDF améliore aussi l'ordonnancement des tâches à tranches courtes, et l'équilibrage NOHZ privilégie les cœurs entièrement au repos.

Ces changements concernent les passerelles, la surveillance, l'orchestration et les services de maintenance gérés par l'ordonnanceur. La CPU affinity explicite reste le mécanisme de placement des threads de trading dédiés.

Réception zero-copy io_uring plus évolutive

Le sous-système de réception zero-copy io_uring gagne un provisionnement dynamique des zones mémoire et des améliorations coordonnées du remplissage. Le remplissage de grandes pages s'adapte à l'allocation sous-jacente, les entrées compatibles sont regroupées et la tête et la queue de l'anneau occupent des lignes de cache distinctes. La mise en cache de la queue réduit encore les accès à l'état partagé.

Ces changements améliorent la gestion de la mémoire de réception et réduisent le coût du remplissage pour les applications io_uring ZCRX, notamment les données de marché à haut débit et les traitements réseau.

Transmission Solarflare assistée par CXL dans la base amont

Linux 7.3 réunit l'infrastructure CXL Type-2 et l'intégration du pilote Solarflare pour les périphériques compatibles de la famille SFC9100. CONFIG_SFC_CXL active le chemin du pilote CTPIO sur CXL.mem, avec un matériel CXL compatible et un micrologiciel prenant en charge CXL.

Le pilote vérifie les capacités CXL du périphérique, crée une région mémoire CTPIO de 256 MiB et la mappe avec une sémantique de combinaison d'écritures. Cela fournit la prise en charge noyau d'un chemin de transmission hôte-NIC assisté par CXL.

Pour une configuration HFTKernel Hardware correspondante, l'intégration associe CONFIG_SFC, CONFIG_CXL_BUS et CONFIG_SFC_CXL à un serveur, un adaptateur et un micrologiciel compatibles. Elle offre une option ciblée d'optimisation matérielle pour la transmission sensible à la latency.

Contrôle étendu des horloges matérielles

Le pilote DPLL ZL3073x prend désormais en charge une horloge matérielle PTP, exposant la lecture du temps et les ajustements temporels, de fréquence et de phase par les rappels appropriés. Les opérations disponibles suivent l'état actuel du canal, notamment le fonctionnement NCO et le suivi de référence.

Cela élargit les options temporelles matérielles disponibles via les interfaces Linux standard et facilite l'intégration des dispositifs compatibles dans l'infrastructure de gestion des horloges.

Gestion réseau cloud plus évolutive

Certains pilotes réseau logiciels, notamment veth, ipvlan et les tunnels, permettent la désinscription des périphériques par espace de noms réseau. Les mises à jour des règles de routage s'affranchissent aussi du verrou RTNL global. Ces changements réduisent la sérialisation partagée lors des opérations de cycle de vie réseau et de politique de routage.

La prise en charge BIG TCP s'étend aux tunnels UDP comme VXLAN et Geneve. Des lots de segmentation internes plus grands offrent une option supplémentaire d'efficacité pour la distribution massive et la relecture de données sur les réseaux superposés compatibles, tout en préservant le MTU configuré sur le réseau.

Diagnostics multicast plus utiles

RTM_GETMULTICAST indique un nombre d'utilisateurs par groupe. Les logiciels de surveillance peuvent examiner l'utilisation des groupes multicast via netlink, améliorant la visibilité des abonnements sur les hôtes recevant des données de marché multicast.

Profilage des allocations plus efficace

Le profilage des allocations mémoire gagne une interface ioctl binaire pour /proc/allocinfo. Des filtres de module, fonction, fichier et ligne peuvent être appliqués avant l'agrégation des compteurs par CPU, afin de traiter uniquement les sites d'allocation correspondants.

Dans le test amont sur Intel Xeon Platinum 8481C avec 224 CPU logiques, une requête ciblant un fichier a réduit le temps CPU système de 22 ms à 1 ms. Les investigations mémoire ciblées deviennent plus légères et mieux adaptées à la collecte automatisée.

Les nouveaux compteurs pgrotate_anon et pgrotate_file rendent visible le travail de récupération qui ne libère pas immédiatement des pages. Ils servent aux diagnostics LRU classique et MGLRU.

Outils de mesure inclus

HFTKernel inclut cpujitter pour les interruptions d'exécution CPU et les queues de latency, memjitter pour l'allocation, first-touch et le comportement du jeu de travail, et irqjitter pour l'analyse de l'activité IRQ et softIRQ.

Avec la latency applicative, les compteurs réseau, l'état des horloges matérielles et la télémétrie mémoire, ces outils rendent toute l'infrastructure observable.

Orientation de la version

La base Linux 7.3 fait progresser trois priorités de HFTKernel : préparer davantage d'état avant la charge, réduire la contention dans les chemins partagés du noyau et améliorer le contrôle du réseau, de la mémoire et du temps.

Principes des versions

Stabilité amont, politique adaptée à la charge et résultats mesurables

HFTKernel part d'une version stable précise de Linux, consigne la chaîne et l'identité de compilation, applique le profil Cloud ou Hardware choisi, intègre cpujitter et memjitter aux composants d'exécution et valide le résultat comme version immuable.

Base préciseCode source Linux stable vérifié et version du noyau figée.
Profil maîtriséPolitiques CPU, mémoire, réseau, temporelle et d'isolation adaptées à la plateforme.
Paquets natifsEnsembles DEB, RPM ou TGZ pour la matrice de production prise en charge.
Livraison mesuréecpujitter et memjitter fournissent des éléments reproductibles sur les queues de distribution.

Planification du déploiement

Évaluez la version selon votre topologie CPU, NIC, mémoire et temporelle.

Le choix des paquets n'est que la première étape. Le résultat en production dépend des paramètres de démarrage, de l'affinité à l'exécution, du placement des files, de la conception PTP/PHC, de la politique mémoire et d'un plan de mesure contrôlé.