HFTKernel 7.3.3
Better packet ordering, more reliable I/O progress, and leaner polling
Upstream baseline: Linux 7.3.3. Cumulative changes: Linux 7.3.2 and 7.3.3, relative to 7.3.1. Upstream release date: November 6, 2026, for both releases.
Ordered transmission under queue pressure
The networking scheduler preserves packet order when a driver returns NETDEV_TX_BUSY. Requeued packets return to the front of the pending list in their original order.
In the upstream four-stream TCP test over a veth pair with a pfifo qdisc, throughput increased from approximately 40 to 76 Gbps. The change eliminated about 1.3 million out-of-order segments and 15,000 to 37,000 retransmissions per 15-second test interval.
Consistent VLAN hardware offload
With reorder_hdr=off, eligible frames pass their VLAN tag to NIC insertion metadata while retaining the expected layout at VLAN-device egress. This keeps hardware VLAN insertion compatible with checksum and segmentation offloads, including relevant packet-socket and AF_XDP copy-mode paths.
Deadline-aware NAPI busy polling
io_uring caps busy polling to the remaining wait interval. When an absolute deadline has already passed, the polling budget becomes zero, allowing the wait to return promptly.
Dynamically tracked NAPI entries now expire after 60 seconds of inactivity. Long-running rings stop revisiting obsolete queue identifiers, keeping polling focused on recent traffic.
Reliable deferred-work wakeups and completion progress
IORING_SETUP_DEFER_TASKRUN publishes the waiting task's sleep state before exposing its wakeup credit. Producers can reliably notify the consumer when new local task work arrives. The BPF-driven wait loop follows the same ordering.
When pending overflow completions cannot fit into the completion queue, io_uring returns control to userspace so the application can drain it. This provides an explicit progress path for mixed-size completion queues.
Stronger progress for real-time consumers
The lockless task-work queue protects its two-step producer publication with a short preemption-disabled section. A SCHED_FIFO consumer sharing a CPU with a lower-priority producer observes a completed publication rather than preempting the producer halfway through the update.
Asynchronous private-futex waits prepare the process-private hash before registering the waiter. Wakeups remain aligned with the active hash across subsequent thread creation and hash configuration changes.
Less unnecessary SQPOLL activity
SQPOLL can sleep while a ring is disabled, even when submission entries have been prepared. Enabling the ring wakes the polling thread. Applications can stage their startup configuration without spending a CPU repeatedly checking work that is not yet enabled.
Better-bounded asynchronous I/O workers
io_uring resolves the target file before assigning work to io-wq. Forced-async regular-file and block-device operations follow the bounded-worker limits, including configured IORING_REGISTER_IOWQ_MAX_WORKERS limits.
Buffered writes to the same regular file are coordinated through inode-based hashing, reducing workers competing for the same inode lock. File identity is fixed when the request enters the work queue.
Reliable receive buffers at larger scales
Zero-copy receive calculates buffer offsets in 64-bit arithmetic before shifting. Completion entries identify the correct buffer beyond the first 4 GiB of a registered receive area, keeping consumption and refill aligned.
For incremental provided buffers and multi-buffer receive bundles, partial progress is completed before another request can reuse the remaining memory. Applications receive the actual transferred length and continue from that boundary; these MSG_WAITALL operations can return a short result.
Correct clock domains for absolute timeout updates
Absolute timeout updates use the clock associated with the existing timer when converting the caller's time namespace to host time. CLOCK_MONOTONIC, CLOCK_BOOTTIME, and CLOCK_REALTIME retain their respective semantics.
This keeps asynchronous deadlines consistent for services using time namespaces and different timeout clock domains.
More complete memory accounting
Task-to-ring metadata and personality XArrays are charged to memory cgroups. Registered-buffer metadata and resource nodes also participate in memcg accounting, keeping kernel-side I/O memory represented in service budgets.
XArray teardown releases empty internal nodes left by unsuccessful insertion attempts. Repeated ring creation and cleanup return those metadata allocations and their charges.
Stronger HugeTLB page lifecycle
The anonymous HugeTLB fault path completes folio state updates and unlocking before releasing the page-table lock. Initialization remains coordinated with concurrent unmapping and page reclamation, strengthening private huge-page mappings used for large application buffers.
Coordinated IRQ and timing-device teardown
Threaded-IRQ cleanup retains irqaction until pending exit task work has finished, maintaining resource lifetime through the abnormal thread-exit path.
PPS generator control operations are synchronized with source unregister. Existing operations finish against valid driver state, and subsequent operations receive ENODEV after removal. This gives timing-service software a clear device-lifecycle boundary.
More consistent KVM host state
On Intel VMX hosts, userspace changes that make a vCPU runnable also clear a hardware-tracked halt when necessary. This keeps hardware execution state aligned with the virtual-machine monitor during reset and restart workflows.
AMD SVM refreshes ASID generation in both nested-virtualization control blocks after a physical-CPU change. Address-space identifiers remain coordinated as nested vCPUs move between processors.
Xen backend improvements added in Linux 7.3.3
The final cumulative update adds three improvements for Xen backend deployments. Block-backend statistics reads are synchronized with frontend teardown. Network-backend statistics remain protected through queue cleanup. Multicast-list cleanup occurs after transmit and receive processing has stopped.
Together, these changes keep monitoring, virtual-network state, and backend resource release coordinated during device disconnect and reconfiguration.
Supported operating systems
HFTKernel's package catalogue covers 24 operating-system targets:
- Ubuntu 20.04 / 22.04 / 24.04 / 26.04 LTS
- Debian 11 / 12 / 13
- RHEL-compatible, AlmaLinux, Rocky Linux 8 / 9 / 10
- CentOS Stream 9 / 10
- Fedora Linux 44
- Amazon Linux 2023, Cloud profile
- ALT Linux p11 / Simply Linux 11
- Astra Linux 1.8
- Arch Linux base-devel
- NixOS-compatible base.
One-command installation
curl -fsSL https://hftkernel.com/install.sh | sudo bash
The installer detects the operating system and deployment profile, verifies the matching package, and installs it. A manual reboot activates the installed kernel.
Release focus
Preserve transmission order, keep asynchronous work progressing, eliminate unnecessary polling, and maintain clear ownership of memory and device resources.