HFTKernel 7.3.3
Meilleur ordre des paquets, progression I/O plus fiable et polling plus léger
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.