HFTKernel 7.3.3
Ordine dei pacchetti migliorato, avanzamento I/O più affidabile e polling più leggero
Base upstream: Linux 7.3.3. Modifiche cumulative: Linux 7.3.2 e 7.3.3, rispetto a 7.3.1. Data di rilascio upstream: 6 novembre 2026 per entrambe le versioni.
Trasmissione ordinata con code sotto pressione
Lo scheduler di rete conserva l'ordine dei pacchetti quando un driver restituisce NETDEV_TX_BUSY. I pacchetti rimessi in coda tornano all'inizio della lista dei pacchetti in attesa nel loro ordine originale.
Nel test upstream con quattro flussi TCP su una coppia veth con una pfifo qdisc, il throughput è aumentato da circa 40 a 76 Gbps. La modifica ha eliminato circa 1.3 milioni di segmenti fuori ordine e da 15,000 a 37,000 ritrasmissioni per ogni intervallo di test di 15 secondi.
Offload hardware VLAN coerente
Con reorder_hdr=off, i frame idonei passano il proprio tag VLAN ai metadata di inserimento della NIC, mantenendo il layout previsto all'egress del dispositivo VLAN. Questo mantiene l'inserimento VLAN hardware compatibile con checksum offload e segmentation offload, inclusi i percorsi interessati di packet-socket e AF_XDP in copy-mode.
NAPI busy polling consapevole delle deadline
io_uring limita il busy polling all'intervallo di attesa rimanente. Quando una deadline assoluta è già trascorsa, il budget di polling diventa zero, consentendo all'attesa di terminare rapidamente.
Le voci NAPI tracciate dinamicamente ora scadono dopo 60 secondi di inattività. I ring attivi a lungo smettono di riesaminare identificatori di coda obsoleti, mantenendo il polling concentrato sul traffico recente.
Wakeup affidabili del lavoro differito e avanzamento delle completion
IORING_SETUP_DEFER_TASKRUN pubblica lo stato sleep del task in attesa prima di esporre il suo wakeup credit. I producer possono notificare in modo affidabile il consumer quando arriva nuovo task work locale. Il ciclo di attesa guidato da BPF segue lo stesso ordine.
Quando le completion in overflow in attesa non trovano spazio nella completion queue, io_uring restituisce il controllo a userspace affinché l'applicazione possa svuotarla. Questo fornisce un percorso esplicito di avanzamento per le completion queue con voci di dimensioni diverse.
Avanzamento più robusto per i consumer real-time
La task-work queue lockless protegge la pubblicazione in due fasi del producer con una breve sezione a preemption disabilitata. Un consumer SCHED_FIFO che condivide una CPU con un producer a priorità inferiore osserva una pubblicazione completata, senza interrompere il producer a metà dell'aggiornamento tramite preemption.
Le attese asincrone su private futex preparano l'hash privato del processo prima di registrare il waiter. I wakeup rimangono allineati con l'hash attivo durante la successiva creazione di thread e le modifiche alla configurazione dell'hash.
Meno attività SQPOLL superflua
SQPOLL può entrare in sleep mentre un ring è disabilitato, anche quando sono già state preparate submission entry. L'abilitazione del ring risveglia il thread di polling. Le applicazioni possono predisporre la configurazione iniziale senza occupare una CPU a controllare ripetutamente lavoro non ancora abilitato.
Limiti meglio applicati ai worker I/O asincroni
io_uring risolve il file di destinazione prima di assegnare lavoro a io-wq. Le operazioni forced-async su regular file e block device rispettano i limiti dei bounded worker, inclusi i limiti configurati con IORING_REGISTER_IOWQ_MAX_WORKERS.
Le scritture buffered sullo stesso regular file sono coordinate tramite hashing basato sull'inode, riducendo i worker che competono per lo stesso inode lock. L'identità del file viene fissata quando la richiesta entra nella work queue.
Buffer di ricezione affidabili su scala maggiore
La ricezione zero-copy calcola gli offset dei buffer con aritmetica a 64 bit prima dello shift. Le completion entry identificano il buffer corretto oltre i primi 4 GiB di un'area di ricezione registrata, mantenendo allineati consumo e refill.
Per i provided buffer incrementali e i receive bundle multi-buffer, l'avanzamento parziale viene completato prima che un'altra richiesta possa riutilizzare la memoria rimanente. Le applicazioni ricevono la lunghezza effettivamente trasferita e proseguono da quel limite; queste operazioni MSG_WAITALL possono restituire un risultato breve.
Clock domain corretti per gli aggiornamenti dei timeout assoluti
Gli aggiornamenti dei timeout assoluti usano il clock associato al timer esistente quando convertono il time namespace del chiamante nel tempo dell'host. CLOCK_MONOTONIC, CLOCK_BOOTTIME e CLOCK_REALTIME mantengono le rispettive semantiche.
Questo mantiene coerenti le deadline asincrone per i servizi che usano time namespace e diversi clock domain dei timeout.
Accounting della memoria più completo
I metadata task-to-ring e le personality XArrays vengono addebitati ai memory cgroup. Anche i metadata dei buffer registrati e i resource node partecipano all'accounting memcg, mantenendo rappresentata nei budget dei servizi la memoria I/O del kernel.
Il teardown di XArray libera i nodi interni vuoti lasciati dai tentativi di inserimento non riusciti. La creazione e la pulizia ripetute dei ring rilasciano queste allocazioni di metadata e i relativi addebiti.
Ciclo di vita delle pagine HugeTLB più robusto
Il percorso di fault HugeTLB anonimo completa gli aggiornamenti dello stato del folio e il suo sblocco prima di rilasciare il page-table lock. L'inizializzazione rimane coordinata con le operazioni concorrenti di unmapping e page reclamation, rafforzando i mapping privati di huge page usati per grandi buffer applicativi.
Teardown coordinato di IRQ e dispositivi di timing
La pulizia dei threaded IRQ conserva irqaction finché il task work di uscita in attesa non è terminato, mantenendo il ciclo di vita delle risorse lungo il percorso di uscita anomala del thread.
Le operazioni di controllo del generatore PPS sono sincronizzate con l'unregister della sorgente. Le operazioni già in corso terminano su uno stato valido del driver e quelle successive ricevono ENODEV dopo la rimozione. Questo fornisce al software dei servizi di timing un confine chiaro nel ciclo di vita del dispositivo.
Stato dell'host KVM più coerente
Sugli host Intel VMX, le modifiche in userspace che rendono una vCPU runnable rimuovono anche, quando necessario, lo stato halt tracciato dall'hardware. Questo mantiene lo stato di esecuzione hardware allineato con il virtual-machine monitor durante i flussi di reset e riavvio.
AMD SVM aggiorna la generazione ASID in entrambi i blocchi di controllo della nested virtualization dopo un cambio di CPU fisica. Gli identificatori dello spazio di indirizzamento rimangono coordinati quando le vCPU nested si spostano tra processori.
Miglioramenti ai backend Xen aggiunti in Linux 7.3.3
L'ultimo aggiornamento cumulativo aggiunge tre miglioramenti per le distribuzioni con backend Xen. Le letture delle statistiche del block backend sono sincronizzate con il teardown del frontend. Le statistiche del network backend rimangono protette durante la pulizia delle code. La pulizia della lista multicast avviene dopo l'arresto dell'elaborazione in trasmissione e ricezione.
Insieme, queste modifiche mantengono coordinati il monitoring, lo stato della rete virtuale e il rilascio delle risorse dei backend durante la disconnessione e la riconfigurazione dei dispositivi.
Sistemi operativi supportati
Il catalogo dei pacchetti HFTKernel copre 24 target di sistemi operativi:
- Ubuntu 20.04 / 22.04 / 24.04 / 26.04 LTS
- Debian 11 / 12 / 13
- Compatibili con RHEL, AlmaLinux, Rocky Linux 8 / 9 / 10
- CentOS Stream 9 / 10
- Fedora Linux 44
- Amazon Linux 2023, profilo Cloud
- ALT Linux p11 / Simply Linux 11
- Astra Linux 1.8
- Arch Linux base-devel
- Base compatibile con NixOS.
Installazione con un solo comando
curl -fsSL https://hftkernel.com/install.sh | sudo bash
L'installer rileva il sistema operativo e il profilo di distribuzione, verifica il pacchetto corrispondente e lo installa. Un riavvio manuale attiva il kernel installato.
Focus della versione
Preservare l'ordine di trasmissione, mantenere l'avanzamento del lavoro asincrono, eliminare il polling superfluo e mantenere chiara l'ownership della memoria e delle risorse dei dispositivi.