Linux kernel 4.19
После двух месяцев разработки Грег Кроа-Хартман представил релиз ядра Linux 4.19. Напомним, что в середине сентября Линус ненадолго отстранился от разработки ядра Linux и доведением ветки до финального вида занимался Грег Кроа-Хартман, отвечающий за поддержку стабильной ветки ядра. Среди наиболее заметных изменений в ядре 4.19: файловая система EROFS, алгоритм управления сетевыми очередями CAKE, поддержка Wi-Fi 6 (802.11ax), дополнительная защита для sticky-каталогов, контроллер задержек при вводе/выводе, повышение минимальной версии GCC с 3.2 до 4.6.

В новую версию принято 15214 исправлений от 1879 разработчиков, размер патча - 44 Мб (изменения затронули 11694 файлов, добавлено 552510 строк кода, удалено 244696 строк). Около 43% всех представленных в 4.19 изменений связаны с драйверами устройств, примерно 17% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 14% связано с сетевым стеком, 5% - файловыми системами и 3% c внутренними подсистемами ядра. 9.5% всех исправлений подготовлено разработчиками компании Intel, 7.1% - Red Hat, 4.9% - IBM, 4.1% - Linaro, 4.1% - Mellanox, 4.0% - Google, 4.0% - AMD, 3.6% - SUSE, 2.9% - Huawei, 2.0% - ARM, 1.7% - Oracle и 1.6% - Canonical.


Основные новшества:

Сетевая подсистема
Добавлена поддержка алгоритма управления сетевыми очередями CAKE (Common Applications Kept Enhanced), разработанного в рамках проекта Bufferbloat и уже используемого дистрибутиве в OpenWrt. Алгоритм спроектирован для замены и упрощения сложной иерархии дисциплин обработки очередей пакетов c целью снижения негативного влияния промежуточной буферизации пакетов на граничном сетевом оборудовании. CAKE подходит для применения на домашних и офисных маршрутизаторах и способен выжать максимально возможную пропускную способность и предоставить минимальный уровень задержек даже на самых медленных каналах связи с провайдером и при работе на маломощных устройствах. При этом, CAKE заметно компактнее HTB, в процессе работы потребляет примерно на 30% меньше ресурсов CPU и позволяет добиться более однородного потока;

Добавлена начальная поддержка стандарта беспроводных сетей Wi-Fi 6 (802.11ax). Wi-Fi 6 работает в диапазонах 2.4 и 5 ГГц, но позволяет привлечь дополнительные полосы в диапазонах между 1 и 7 ГГц и использует схему модуляции OFDMA (множественный доступ с ортогональным частотным разделением) и модуляцию 1024-QAM. Хотя номинальная интенсивность передачи данных 802.11ax лишь на 37% выше, чем IEEE 802.11ac, ожидается, что 802.11ax позволит увеличить пропускную способность до 4 раз за счёт более эффективного использования спектра. Уже продемонстрированные прототипы устройств позволили добиться пропускной способности до 11 Gbit/s;

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

Добавлена новая дисциплина обработки сетевых очередей "skbprio" (SKB Priority Queue), позволяющая планировать отправку пакетов на основании указанного для пакета приоритета. При нехватке ресурсов начинают отбрасываться пакеты с низким приоритетом, что позволяет применять "skbprio" как простой механизм для противодействия DoS-атакам;

В реализации протокола TLS на уровне ядра (KTLS) расширена поддержка аппаратного ускорения операций с использовнием специализированных чипов. При наличии необходимого оборудования ускорение теперь включается и на стороне получателя;

В nftables добавлена легковесная поддержка туннелей, позволяющая разбирать специфичные для туннелей метаданные, имеющиеся в пакетах. В том числе можно верифицировать принадлежность пакета к определённому туннелю на основе указанного идентификатора туннеля. Кроме того, в nftables появилась встроенная поддержка перенаправления в прозрачный прокси (TPROXY) и добавлен модуль для пассивного определения типа ОС;


Виртуализация и безопасность
Добавлена дополнительная защита для каталогов с битом sticky (например, /tmp), который в общедоступных на запись каталогах допускает удаление файла только его владельцем или пользователем root. В новой версии ядра предложены две sysctl-настройки protected_fifos и protected_regular, которые дополнительно в sticky-каталогах запрещают открытие чужих FIFO-каналов или файлов с флагом O_CREAT (т.е. только владелец может пересоздать свои FIFO и файлы). Изменение основано на патче "HARDEN_FIFO", подготовленном проектом Openwall, и позволяет блокировать атаки, в которых злоумышленник создаёт в /tmp подставной fifo или файл, используемый другим процессом;

Продолжена интеграция компонентов для противодействия уязвимостям категории Spectre в механизме спекулятивного выполнения инструкций CPU:
Обеспечена защита от уязвимостей L1TF (L1 Terminal Fault) и SpectreRSB.
Добавлена поддержка расширенных инструкций IBRS (Enhanced Indirect Branch Restricted Speculation), которые появятся в будущих моделях CPU Intel и позволяют адаптивно разрешать и запрещать спекулятивное выполнение инструкций во время обработки прерываний, системных вызовов и переключений контекста. При наличии поддержки Enhanced IBRS данный метод будет применяться по умолчанию для защиты от атаки Spectre V2 вместо Retpoline, так как позволяет добиться более высокой производительности.
Для архитектуры x86-32 адаптирован механизм защиты KPTI (Kernel Page Table Isolation), обеспечивающий блокирование уязвимости Meltdown (ранее KPTI был доступен только для 64-разрядных систем).
В гипервизоре KVM проведена оптимизация производительности механизма теневых страниц (shadow paging) при использовании в ядре гостевой системы патчей KPTI.

Для систем на базе CPU POWERPC добавлена защита от атак Spectre v2 через сброс счётчика кэша в процессе переключения контекста;

Проведена чистка блоков кода, потенциально подходящих для использования в атаках Spectre, на которые указывали предупреждения компилятора.
Реализован механизм для определения правил проверки компонентов ядра по цифровой подписи, который позволяет включить выборочную или полную проверку по цифровой подписи образов ядра, прошивок и модулей ядра;

Добавлена сборочная опция RANDOM_TRUST_CPU, позволяющая на начальном этапе загрузки провести инициализацию пула энтропии для генератора псевдослучайных чисел полностью на основе данных из аппаратного генератора (RDRAND). Опция позволяет получить более качественные случайные числа в процессе загрузки, но ценой излишнего доверия к генератору, встроенному в CPU;


Дисковая подсистема, ввод/вывод и файловые системы
В состав включена экспериментальная файловая система EROFS (Extendable Read-Only File System), разработанная компанией Huawei для использования на разделах, доступных в режиме только для чтения. Структура EROFS существенно упрощена за счёт отбрасывания при реализации некоторых областей метаданных, таких как битовая карта свободных блоков. EROFS поддерживает хранение данных в сжатом виде, но использует иной подход для хранения сжатых блоков, оптимизированный для достижения высокой производительности при случайном доступе к данным. Например, новая ФС в разы обгоняет Ext4 при случайном доступе, благодаря применению блоков фиксированного размера и inline-упаковке в inоde небольших данных и расширенных атрибутов.

Снижено потребление памяти в многослойной файловой системе Overlayfs. При изменении метаданных исходного файла, файловая система также создаёт копию кэша содержимого файла для всех вышележащих слоёв. Подобное поведение приводит к существенному увеличению потребления памяти при выполнении некоторых операций, например, при рекурсивном вызове chown для всего дерева ФС. В новой версии ядра появилась возможность отложить копирование данных при обновлении метаданных для файлов в самом нижнем слое. Ядро выполнит копирование только метаданных, но продолжит использование данных из нижнего слоя ФС до тех пор, пока файл не будет открыт на запись. Таким образом после включения новой оптимизации вызов chown для всего дерева ФС теперь не приведёт к копированию всех файловых данных и контейнеры, в которых используется многослойная ФС, продолжат использование общего кэша страниц памяти. В Overlayfs также корректно реализованы некоторые файловые операции и данная ФС может работать как POSIX-совместимая ФС при включении флагов "redirect_dir=on" и "index=on";

В файловой системе BTRFS разрешено выполнение операции дефрагментации (defrag) на лету для файлов, открытых в режиме только для чтения, даже если их права доступа допускают запись. В код проверки дерева ФС добавлена поддержка верификации групп блоков (block_group_item) и обнаружения недействительных и пустых основных деревьев. Удалена поддержка экстента V0;

В файловой системе XFS удалена поддержка устаревших опций монтирования barrier/nobarrier;

В EXT4 в поля суперблока добавлена поддержка 64-разрядных счётчиков времени, что позволит решить проблему с переполнением 32-разрядного счётчика в 2038 году;

В NFS добавлена поддержка асинхронного выполнения операций COPY на стороне сервера;

В модуль dm-integrity, который позволяет сохранять информацию для контроля целостности данных на уровне отдельных секторов, добавлена поддержка выноса метаданных с информацией о целостности на отдельное блочное устройство. Устройство для метаданных задаётся при помощи опции "meta_device:/dev/device";


Память и системные сервисы
Для cgroup реализован контроллер задержек при вводе/выводе blk-iolatency (Block I/O latency controller), позволяющий гарантировать минимальный уровень задержек для ввода/вывода заданной группы задач. Пока выставленные требования к задержкам удовлетворяются, контроллер никак не проявляет себя. Как только в группе начинают всплывать превышения задержек, относительно целевых значений, контроллер попытается удержать средний уровень задержек в соответствии с заданными лимитами, урезая группы с более высокими значениями лимитов. Настройка лимитов производится через cgroup-файл io.latency;

Добавлен API поллинга (определение готовности файлового дескриптора к вводу/выводу без блокировки), основанный на использовании системы асинхронного ввода/вывода (AIO);

Для процессоров Intel добавлена возможность установки псевдо-блокировок на кэш (Cache Pseudo-Locking). Процессоры Intel с поддержкой механизма CAT (Cache Allocation Technology) позволяют пользователю определить определённый объём кэша, после чего изолировать данную область кэша CPU и привязать к ней блокировку. Выделенный блок кэша с блокировкой становится доступен для пространства пользователя и может быть отражён приложением в виртуальное адресное пространство, что позволяет получить эксклюзивно прокэшированную область со сниженными задержками на чтение;

Повышены требования к версии GCC. В качестве минимального выпуска необходимого для сборки ядра отмечена ветка 4.6 (ранее в качестве минимального выпуска заявлялся GCC 3.2). Изменение обусловлено наличием проблем при сборке старыми версиями GCC ядра для некоторых архитектур.


Оборудование
В драйвере amdgpu реализован режим энергосбережения stutter, позволяющий снизить потребление энергии в условиях низкой нагрузки на DRAM, которая наблюдается при решении таких задач как работа в офисном пакете, навигация через браузер или просмотр видео. Добавлена поддержка движка VCN (Video Core Next) для обработки JPEG. В sysfs добавлена переменная для оценки нагрузки на GPU. Добавлена поддержка режима YCbCr 4:2:0 для DisplayPort. Добавлены новые идентификаторы устройств Polaris;

В драйвере amdkfd для dGPU (дискретные GPU, такие как Fiji, Tonga, Polaris) добавлена поддержка GPU Raven;

В DRM-драйвере Intel добавлена начальная поддержка платформ Whiskey Lake и Amber Lake. Для чипов Icelake добавлена поддержка DSI и включены средства управления питанием;

В драйвере Nouveau отмечаются только исправления.

В драйвер Freedreno добавлена поддержка GPU Qualcomm Adreno A6xx;

Добавлен KMS-драйвер VKMS (Virtual Kernel Mode-Setting), симулирующий простейшее виртуальное устройство вывода. Драйвер может применяться для тестирования или для организации работы X-сервера или другой графической подсистемы на компьютерах без монитора (headless), предоставляя при этом возможность использования имеющегося GPU;
Вы должны войти