HFTKernel 7.3.3
Лучшее сохранение порядка пакетов, более надёжное выполнение I/O и меньше лишнего polling
Базовая upstream-версия: Linux 7.3.3. Накопительные изменения: Linux 7.3.2 и 7.3.3 относительно 7.3.1. Дата выхода обеих upstream-версий: 6 ноября 2026 года.
Сохранение порядка передачи при нагрузке на очередь
Сетевой scheduler сохраняет порядок пакетов, когда драйвер возвращает NETDEV_TX_BUSY. Повторно поставленные в очередь пакеты возвращаются в начало списка ожидающих пакетов в исходном порядке.
В upstream-тесте с четырьмя TCP-потоками через пару veth и pfifo qdisc throughput вырос примерно с 40 до 76 Gbps. Изменение устранило около 1.3 миллиона out-of-order segments и от 15,000 до 37,000 retransmissions за каждый 15-секундный интервал теста.
Согласованная работа VLAN hardware offload
При reorder_hdr=off подходящие кадры передают свой VLAN tag в metadata для вставки тега средствами NIC, сохраняя ожидаемую структуру кадра на выходе VLAN-устройства. Это обеспечивает совместимость аппаратной вставки VLAN с checksum offload и segmentation offload, включая соответствующие пути packet-socket и AF_XDP copy-mode.
NAPI busy polling с учётом deadline
io_uring ограничивает busy polling оставшимся интервалом ожидания. Если абсолютный deadline уже прошёл, бюджет polling становится нулевым, позволяя ожиданию быстро завершиться.
Динамически отслеживаемые записи NAPI теперь удаляются после 60 секунд бездействия. Долго работающие rings перестают повторно обращаться к устаревшим идентификаторам очередей, сосредотачивая polling на недавнем трафике.
Надёжные wakeups отложенной работы и обработка completions
IORING_SETUP_DEFER_TASKRUN публикует sleep state ожидающей задачи до того, как делает доступным её wakeup credit. Producers могут надёжно уведомлять consumer о поступлении новой локальной task work. Цикл ожидания, управляемый BPF, соблюдает тот же порядок.
Когда ожидающие overflow completions не помещаются в completion queue, io_uring возвращает управление в userspace, чтобы приложение могло освободить очередь. Это обеспечивает явный путь продолжения работы для completion queues с записями разного размера.
Более надёжное выполнение для real-time consumers
Lockless task-work queue защищает двухэтапную публикацию producer коротким участком, на котором preemption отключён. Consumer с SCHED_FIFO, использующий тот же CPU, что и producer с более низким приоритетом, видит завершённую публикацию и не вытесняет producer посередине обновления.
Асинхронные ожидания private-futex подготавливают process-private hash до регистрации waiter. Wakeups остаются согласованными с активным hash при последующем создании потоков и изменении конфигурации hash.
Меньше лишней активности SQPOLL
SQPOLL может спать, пока ring отключён, даже если submission entries уже подготовлены. Включение ring пробуждает поток polling. Приложения могут заранее подготовить стартовую конфигурацию, не занимая CPU многократной проверкой ещё не разрешённой к выполнению работы.
Более точное ограничение асинхронных I/O workers
io_uring определяет целевой файл до передачи работы в io-wq. Операции forced-async с обычными файлами и блочными устройствами соблюдают ограничения bounded workers, включая настроенные лимиты IORING_REGISTER_IOWQ_MAX_WORKERS.
Buffered writes в один и тот же обычный файл координируются через hashing на основе inode, уменьшая число workers, конкурирующих за один inode lock. Идентичность файла фиксируется при поступлении запроса в work queue.
Надёжные receive buffers при увеличении масштаба
Zero-copy receive вычисляет смещения буферов в 64-битной арифметике до сдвига. Completion entries указывают правильный буфер и за пределами первых 4 GiB зарегистрированной receive area, сохраняя согласованность consumption и refill.
Для incremental provided buffers и multi-buffer receive bundles частичный прогресс завершается до того, как другой запрос сможет повторно использовать оставшуюся память. Приложения получают фактически переданную длину и продолжают с этой границы; эти операции MSG_WAITALL могут возвращать короткий результат.
Правильные clock domains при обновлении абсолютных timeout
При обновлении абсолютного timeout преобразование time namespace вызывающего процесса во время хоста использует clock, связанный с существующим таймером. CLOCK_MONOTONIC, CLOCK_BOOTTIME и CLOCK_REALTIME сохраняют свою семантику.
Это сохраняет согласованность асинхронных deadlines для сервисов, использующих time namespaces и разные clock domains для timeout.
Более полный memory accounting
Task-to-ring metadata и personality XArrays учитываются в memory cgroups. Metadata зарегистрированных буферов и resource nodes также участвуют в memcg accounting, поэтому используемая ядром память I/O отражается в бюджетах сервисов.
При teardown XArray освобождаются пустые внутренние узлы, оставшиеся после неудачных попыток вставки. Повторное создание и очистка rings возвращают выделенную под metadata память и снимают соответствующие начисления.
Более надёжный жизненный цикл страниц HugeTLB
Путь обработки anonymous HugeTLB fault завершает обновление состояния folio и снятие его блокировки до освобождения page-table lock. Инициализация остаётся согласованной с одновременными unmapping и page reclamation, повышая надёжность private huge-page mappings для больших буферов приложений.
Согласованный teardown IRQ и устройств времени
Очистка threaded IRQ сохраняет irqaction до завершения ожидающей exit task work, поддерживая время жизни ресурса на пути нештатного завершения потока.
Операции управления PPS generator синхронизированы со снятием источника с регистрации. Уже начатые операции завершаются при действительном состоянии драйвера, а последующие операции после удаления получают ENODEV. Это задаёт чёткую границу жизненного цикла устройства для ПО сервисов времени.
Более согласованное состояние KVM-хоста
На хостах Intel VMX изменения из userspace, делающие vCPU готовым к выполнению, при необходимости также сбрасывают аппаратно отслеживаемый halt. Это согласует аппаратное состояние выполнения с virtual-machine monitor при reset и restart.
AMD SVM обновляет ASID generation в обоих control blocks nested virtualization после смены физического CPU. Идентификаторы address space остаются согласованными при перемещении nested vCPUs между процессорами.
Улучшения Xen backend, добавленные в Linux 7.3.3
Финальное накопительное обновление добавляет три улучшения для развёртываний Xen backend. Чтение статистики block backend синхронизировано с teardown frontend. Статистика network backend остаётся защищённой во время очистки очереди. Очистка multicast list происходит после остановки обработки передачи и приёма.
Вместе эти изменения согласуют мониторинг, состояние виртуальной сети и освобождение ресурсов backend при отключении и перенастройке устройств.
Поддерживаемые операционные системы
Каталог пакетов HFTKernel охватывает 24 OS targets:
- Ubuntu 20.04 / 22.04 / 24.04 / 26.04 LTS
- Debian 11 / 12 / 13
- RHEL-совместимые, AlmaLinux, Rocky Linux 8 / 9 / 10
- CentOS Stream 9 / 10
- Fedora Linux 44
- Amazon Linux 2023, профиль Cloud
- ALT Linux p11 / Simply Linux 11
- Astra Linux 1.8
- Arch Linux base-devel
- NixOS-совместимая база.
Установка одной командой
curl -fsSL https://hftkernel.com/install.sh | sudo bash
Installer определяет операционную систему и профиль развёртывания, проверяет подходящий пакет и устанавливает его. Перезагрузка вручную активирует установленное ядро.
Фокус релиза
Сохранять порядок передачи, поддерживать выполнение асинхронной работы, устранять лишний polling и обеспечивать чёткое владение памятью и ресурсами устройств.