Примечания к релизам

Примечания к релизам HFTKernel 7.3.x.

Просмотрите линейку ядер 7.3.x от новых к старым: изменения основного проекта, наиболее важные для предсказуемого выполнения на CPU, стабильной сети, точного учёта времени, виртуализации, поведения памяти и измеримых хвостов latency.

Публичная история изменений

Примечания к релизам

Каждая запись посвящена изменениям основного проекта, поддерживающим главные цели HFTKernel: минимальный jitter, контролируемую tail latency, стабильную передачу данных, точный учёт времени и измеримое поведение под давлением.

HFTKernel 7.3.3

Лучшее сохранение порядка пакетов, более надёжное выполнение I/O и меньше лишнего polling

Последняя запись серии 7.3.x

Базовая 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 и обеспечивать чёткое владение памятью и ресурсами устройств.

HFTKernel 7.3.1

Более предсказуемый асинхронный I/O, точные RT-пробуждения и надёжная диагностика хоста

Базовая версия основного проекта: Linux 7.3.1. Изменения относительно Linux 7.3. Дата релиза основного проекта: 30 октября 2026 г.

Своевременное продолжение работы после drain-барьеров io_uring

Отдельный drain-запрос теперь сбрасывает состояние drain, когда публикуется запись о его завершении и больше нет отложенной работы. При выполнении через io-wq этот переход происходит под блокировкой кольца до того, как завершение становится видимым в userspace.

Запросы, отправленные после завершённого барьера, могут продолжить выполнение, не ожидая, пока worker освободит последнюю ссылку на свой запрос. Для связанных drain-запросов сохраняются требования к порядку выполнения.

Это делает I/O-конвейеры, управляемые завершениями, более предсказуемыми для приложений, использующих drain-барьеры.

Надёжные пробуждения poll и завершение multishot

Атомарная операция compare-and-exchange теперь согласует освобождение владения poll с параллельными уведомлениями о повторной обработке. Ожидающие пробуждения остаются видимыми, позволяя продолжить обработку без ожидания постороннего события.

Multishot poll также корректно обновляет общий счётчик ссылок при hangup. Финальный проход обработки событий может завершиться без лишних повторных циклов, улучшая управление жизненным циклом соединений в асинхронных приложениях.

Точные тайм-ауты completion queue на PREEMPT_RT

Для задач RT и deadline на PREEMPT_RT callbacks тайм-аутов completion queue io_uring выполняются в контексте hard interrupt. Доставка пробуждения больше не зависит от планирования потока таймеров с более низким приоритетом.

В upstream-тесте на Jetson Orin Nano с backport изменения на Linux 6.18.39-rt максимальное опоздание снизилось с 1,040 µs до 18 µs для 40,000 deadlines при конкурирующей нагрузке SCHED_FIFO. После изменения все пробуждения происходили с опозданием не более 100 µs.

Согласованная обработка больших provided buffers для приёма

Для операций приёма без объединения в bundle, в которых длина определяется по provided buffer, io_uring ограничивает выбранную длину передачи значением MAX_RW_COUNT.

Это сохраняет корректность длины при возврате через знаковый тип, в том числе для provided buffers размером 2 GiB и больше, с соблюдением существующего ограничения размера передачи. Обработка буферов приёма становится надёжнее для приложений, использующих большие повторно используемые области.

Более согласованное завершение асинхронных workers

Путь завершения io-wq выполняет memory barrier после публикации флага выхода. Завершение и параллельная task work по созданию workers соблюдают необходимый порядок, в том числе на архитектурах со слабым упорядочением памяти.

Это повышает надёжность штатного завершения и перезапуска сервисов, использующих пулы workers io_uring.

Отмена запросов IORING_OP_WAITID также идемпотентна: повторные попытки распознают уже установленное состояние отмены без накопления дополнительных ссылок. Это сохраняет согласованное состояние асинхронных запросов наблюдения за процессами при отмене.

Меньше лишней работы при завершении PID namespace

Во время очистки namespace процесс reaper маскирует пробуждения от уведомлений task work, пока ожидает завершения дочерних процессов и освобождения PID.

Он может спать до наступления соответствующего события жизненного цикла, не входя повторно в путь ожидания. Это уменьшает избыточную активность CPU в затронутых взаимодействиях завершения контейнеров и livepatch.

Надёжная видимость IRQ по CPU на больших хостах

/proc/interrupts теперь выводит заголовок CPU при каждом формировании первой записи, включая повторные попытки после увеличения sequence buffer.

Соответствие CPU и счётчиков сохраняется в системах с большим числом ядер. Это обеспечивает надёжный разбор IRQ, проверку размещения и мониторинг изолированных и housekeeping CPU.

Более согласованная настройка и завершение tracing

Настройка histogram теперь удаляет автоматически созданные field-variable triggers, если команда в целом завершается с ошибкой. Активный tracing соответствует принятой конфигурации, а временные средства инструментирования удаляются и не продолжают подсчитывать события.

Очистка field-variable histogram сохраняет стабильную ссылку на event file и не зависит от времени жизни другой histogram. Это повышает надёжность повторного создания, изменения и удаления диагностических сессий.

Парсер event-filter также отклоняет незавершённые логические выражения до их выполнения. Это повышает надёжность автоматической настройки tracefs и perf tracepoint.

Более полная postmortem-диагностика

Сбор core dump защищён от прерываний TIF_NOTIFY_SIGNAL при передаче данных через pipes и sockets. Уведомления от io_uring и других источников task work больше не прерывают эти пути сбора данных.

Это сохраняет диагностические данные для подробного анализа состояния приложения, mappings и незавершённого I/O.

Согласованная проверка квот DAMON

Целевые значения квот DAMOS проверяются в ядре DAMON до применения. Нулевые целевые значения отклоняются в общем пути commit, а ошибка передаётся вызывающему коду.

Для развёртываний с управлением памятью на основе DAMON это обеспечивает единообразную проверку при настройке политики квот.

Надёжные out-of-tree сборки DMA benchmark

dma_map_benchmark теперь собирается в выбранном каталоге вывода, если указан O=.

Benchmark корректно встраивается в конвейеры сборки, отделяющие деревья исходного кода от сгенерированных инструментов, и обеспечивает воспроизводимую подготовку средств диагностики DMA.

Поддерживаемые операционные системы и установка

HFTKernel поддерживает 24 целевые конфигурации ОС: Ubuntu, Debian, RHEL-совместимые платформы, AlmaLinux, Rocky Linux, CentOS Stream, Fedora, Amazon Linux, Arch Linux, совместимые с NixOS развёртывания, ALT Linux p11 / Simply Linux 11 и Astra Linux 1.8. Amazon Linux 2023 использует профиль Cloud.

Установка одной командой:

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

Установщик выбирает подходящий пакет операционной системы и профиль развёртывания, а также проверяет целостность пакетов.

Фокус релиза

База Linux 7.3.1 повышает надёжность продвижения I/O, доставки тайм-аутов реального времени, управления жизненным циклом процессов и согласованность диагностики. Эти изменения поддерживают цель HFTKernel: предсказуемый и измеримый хост для приложений, чувствительных к latency.

HFTKernel 7.3

Подготовленные чтения времени, менее затратное управление памятью и новые сетевые возможности CXL

Базовая версия основного проекта: Linux 7.3. Дата релиза основного проекта: 18 октября 2026 г.

Фокус: возможности базовой версии Linux 7.3 для развёртываний, чувствительных к latency.

Предварительное заполнение данных vDSO для предсказуемого запуска приложения

Общее отображение данных vDSO теперь может заполняться через mlockall(). Удаление флага VM_IO позволяет на этапе подготовки памяти создать соответствующие записи таблиц страниц до начала обработки, чувствительной к latency.

Для приложений с чтением времени через vDSO это переносит устранимую ошибку страницы первого обращения в подготовку при запуске. Автор изменения наблюдал примерно 20 µs на полный путь исключения ошибки страницы на тестовой машине.

Это усиливает подготовку торговых движков, потребителей временных меток и измерительных процессов, которые явно предварительно заполняют свои рабочие наборы.

Меньше конкуренции за блокировку LRU при освобождении памяти

Классический LRU теперь получает стоимости баланса сканирования анонимной и файловой памяти из счётчиков vmstat. Выборка и затухание стоимости используют отдельную блокировку на lruvec вместо повторного захвата блокировки операций списков LRU. Агрегация иерархии также заменяет повторные обновления стоимости на родительских уровнях.

В тесте основного проекта на 176 ядрах и 256 GB при давлении на память суммарное ожидание блокировки LRU снизилось примерно с 4.23 секунды до 1.66 секунды за 30-секундное окно записи, то есть на 61%, при сходных скоростях сканирования и освобождения.

Для систем с классическим LRU это уменьшает конкуренцию между учётом освобождения и операциями непосредственного управления страницами.

Более надёжное удержание исполняемого кода с MGLRU

MGLRU повышает приоритет отображённых folio исполняемых файлов после первого наблюдаемого использования. И старение таблиц страниц, и проверка обращений распознают исполняемые отображения при обновлении состояния страниц.

Это лучше защищает недавно использованный код приложений и разделяемых библиотек от освобождения. Изменение поддерживает более стабильную резидентность кода сервисов с MGLRU под давлением на память.

Меньше ненужной работы по учёту давления в cgroup v2

Подсистема vmpressure пропускает путь уведомлений пользовательского пространства cgroup-v1 при работе с cgroup v2. Освобождение памяти избегает неиспользуемого учёта, блокировок, отправки в рабочие очереди и обхода родителей.

Внутриядерный путь давления сокетов TCP/SCTP остаётся активным, а пользовательский мониторинг давления cgroup-v2 продолжается через PSI. Это убирает избыточную инфраструктурную работу, сохраняя сигналы давления для сети и управления сервисами.

Более короткие критические секции рабочих очередей

Обработка рабочих очередей выбирает пробуждаемый worker под pool->lock, затем выполняет пробуждение после освобождения блокировки. Операции пробуждения планировщика больше не удлиняют общую критическую секцию пула в затронутых путях постановки и цепочек работ.

В микротесте основного проекта на NVIDIA Grace ARM64 с непривязанными рабочими очередями в пределах NUMA throughput вырос с 719,794 до 794,049 задач в секунду, а latency постановки P95 снизилась на 10.3%.

Это улучшает обработку фоновой работы с конкуренцией на служебных CPU и во вспомогательной инфраструктуре.

Более отзывчивые сервисы под управлением планировщика

Планирование cgroup класса fair переходит к единственной очереди выбора задач на CPU, сохраняя распределение весов групп. EEVDF также улучшает планирование задач с короткими квантами, а балансировка NOHZ предпочитает полностью свободные ядра.

Эти изменения важны для шлюзов, мониторинга, оркестрации и служебных сервисов под управлением планировщика. Явная CPU affinity остаётся механизмом размещения выделенных торговых потоков.

Более масштабируемый приём zero-copy io_uring

Подсистема приёма zero-copy io_uring получает динамическое выделение областей памяти и согласованные улучшения пополнения. Пополнение больших страниц масштабируется с базовым выделением, совместимые записи объединяются, а начало и конец кольца пополнения занимают отдельные строки кеша. Кеширование конца дополнительно уменьшает обращения к общему состоянию.

Изменения улучшают управление памятью приёма и снижают расходы пополнения для приложений с io_uring ZCRX, включая высокоскоростные рыночные данные и сетевую обработку.

Поддержка передачи Solarflare с CXL в базовой версии основного проекта

Linux 7.3 объединяет инфраструктуру CXL Type-2 и интеграцию драйвера Solarflare для совместимых устройств семейства SFC9100. CONFIG_SFC_CXL включает путь драйвера для CTPIO через CXL.mem при совместимых оборудовании CXL и прошивке с поддержкой CXL.

Драйвер проверяет возможности устройства CXL, создаёт область памяти CTPIO 256 MiB и отображает её с семантикой объединения записей. Это обеспечивает поддержку ядром пути передачи от сервера к NIC с использованием CXL.

В соответствующей конфигурации HFTKernel Hardware интеграция сочетает CONFIG_SFC, CONFIG_CXL_BUS и CONFIG_SFC_CXL с совместимыми сервером, адаптером и прошивкой. Это создаёт специализированный вариант аппаратной оптимизации передачи, чувствительной к latency.

Расширенное управление аппаратными часами

Драйвер ZL3073x DPLL получает поддержку аппаратных часов PTP, предоставляя чтение времени, коррекцию времени, частоты и фазы через соответствующие обратные вызовы. Доступные операции зависят от текущего состояния канала, включая работу NCO и слежение за опорным сигналом.

Это расширяет возможности аппаратного времени через стандартные интерфейсы Linux и упрощает интеграцию поддерживаемых устройств времени в инфраструктуру управления часами.

Более масштабируемое управление облачной сетью

Некоторые программные сетевые драйверы, включая veth, ipvlan и туннели, получают отмену регистрации устройств в пределах сетевого пространства имён. Обновления правил маршрутизации также уходят от глобальной блокировки RTNL. Это снижает общую сериализацию при операциях жизненного цикла сети и политик маршрутизации.

Поддержка BIG TCP распространяется на UDP-туннели, такие как VXLAN и Geneve. Более крупные внутренние пакеты сегментации дают дополнительный вариант повышения эффективности массовой передачи и воспроизведения данных через поддерживаемые оверлеи, сохраняя настроенный MTU в сети.

Более полезная диагностика multicast

RTM_GETMULTICAST сообщает число пользователей каждой группы. ПО мониторинга может проверять использование multicast-групп через netlink, улучшая видимость состояния подписок на серверах с multicast-рыночными данными.

Более эффективное профилирование выделений

Профилирование выделений памяти получает бинарный интерфейс ioctl для /proc/allocinfo. Фильтры модуля, функции, файла и строки применяются до агрегации счётчиков CPU, поэтому диагностические запросы обрабатывают лишь подходящие места выделения.

В тесте основного проекта на Intel Xeon Platinum 8481C с 224 логическими CPU запрос по конкретному файлу снизил системное время CPU с 22 ms до 1 ms. Это облегчает целевые исследования памяти и делает их удобнее для автоматизированного сбора.

Новые счётчики pgrotate_anon и pgrotate_file показывают работу освобождения, которая не высвобождает страницы немедленно. Они поддерживают диагностику классического LRU и MGLRU.

Включённые инструменты измерения

HFTKernel включает cpujitter для пауз выполнения CPU и хвостов latency, memjitter для выделения, first-touch и поведения рабочего набора, а также irqjitter для анализа активности IRQ и softIRQ.

Вместе с latency приложения, сетевыми счётчиками, состоянием аппаратных часов и телеметрией памяти эти инструменты делают наблюдаемой всю инфраструктуру.

Фокус релиза

Базовая версия Linux 7.3 продвигает три приоритета HFTKernel: подготовить больше состояния до начала нагрузки, снизить конкуренцию в общих путях ядра и предоставить лучшее управление сетью, памятью и временем.

Принципы релизов

Стабильность основного проекта, политика под конкретную нагрузку и измеримые результаты

HFTKernel начинается с точного стабильного релиза Linux, фиксирует инструменты и идентификацию сборки, применяет выбранный профиль Cloud или Hardware, включает cpujitter и memjitter в рабочий комплект и проверяет результат как неизменяемый релиз.

Точная базаПроверенный стабильный исходный код Linux и закреплённая версия ядра.
Контролируемый профильПолитика CPU, памяти, сети, учёта времени и изоляции, согласованная с платформой.
Нативные пакетыКомплекты DEB, RPM или TGZ для поддерживаемой промышленной матрицы.
Поставка с измерениямиcpujitter и memjitter дают воспроизводимые свидетельства поведения хвостов распределения.

Планирование развёртывания

Оцените релиз с учётом своей топологии CPU, NIC, памяти и времени.

Выбор пакета является лишь первым шагом. Промышленный результат зависит от параметров загрузки, рабочей привязки, размещения очередей, схемы PTP/PHC, политики памяти и контролируемого плана измерений.