После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.11. Среди наиболее заметных изменений: поддержка журналирования в программном RAID 4/5/6, новый тип сокетов SMC-R, встроенная реализация SipHash, системный вызов statx(), поддержка протокола Opal для работы самошифруемыми накопителями, раздельные буферы с историей прокрутки для консолей.
В новую версию принято около 12 тысяч исправлений от 1500 разработчиков, размер патча — 39 Мб (изменения затронули 12479 файлов, добавлено 530154 строк кода, удалено 232358 строк). Около 48% всех представленных в 4.11 изменений связаны с драйверами устройств, примерно 20% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 14% связано с сетевым стеком, 4% — файловыми системами и 5% c внутренними подсистемами ядра.
Основные новшества:
● Дисковая подсистема, ввод/вывод и файловые системы
• В реализации RAID 4/5/6 на базе подсистемы MD появилась поддержка журналирования, защищающая от потери данных в случае пропадании питания или краха. Реализация подготовлена компанией Facebook. Журнал ведётся на отдельном носителе (SSD или NVRAM). Все данные вначале отражаются в журнале, после чего разносятся по дискам, входящим в RAID-массив. В ситуации неожиданного отключения питания, даже если RAID находился в деградированном состоянии или данные были записаны лишь на часть дисков, повреждений удастся избежать, так как вся информация о транзакции отражена в журнале;
• Для файловой системы ext4 реализована новая ioctl-команда EXT4_IOC_SHUTDOWN, которая позволяет убедиться, что раздел остановлен и нет необходимости в сбросе данных, остающихся в оперативной памяти. Возможность подготовлена по аналогии с командой XFS_IOC_GOINGDOWN;
• В файловой системе CIFS реализована поддержка шифрованного доступа к разделам с использованием протокола SMB3;
• В многоуровневой системе очередей (multiqueue), рассчитанной на организацию многопоточного доступа к данным на многоядерных системах, появилась поддержка подключения планировщиков ввода/вывода. В настоящее время для multiqueue пока портирован только планировщик deadline, ведётся портирование планировщика ввода/вывода BFQ, который ожидается в ядре 4.12;
• Добавлена возможность работы с накопителями, соответствующими спецификации Opal, которая определяет механизм шифрования хранимых данных, позволяющий не допустить утечку информации в случае попадания носителя информации не в те руки. Поддержка Opal добавлена только для поддерживающих данную технологию NVME-контроллеров. Пользователям предоставлены команды для настройки, блокирования при переходе в спящий режим и разблокирования SED-накопителей (Self-Encrypting Drives);
• В F2FS, развиваемой компанией Samsung высокопроизводительной файловой системе для Flash-накопителей, включена по умолчанию опция inline_xattr, обеспечивающеая inline-хранение в inode атрибутов xattr. Для отключения предложена опция монтирования «noinline_xattr». Добавлен отдельный поток для асинхронного выполнения команд «discard»;
• В OverlayFS обеспечена поддержка многопоточного копирования содержимого обычных файлов (ранее операции копирования выполнялись последовательно, что было узким местом в производительности);
• Отключена поддержка NFSv4 по UDP, которая была в неработоспособном виде и расходилась со спецификацией. Также по умолчанию отключены метки безопасности для NFS (для активации при экспорте следует явно указывать security_label), так как данная возможность имеет смысл только при установке на сервере и клиенте похожих правил SELinux;
● Виртуализация и безопасность
• Для использования с ядром портирован GCC-плагин structleak, разработанный проектом Grsecurity и выполняющим принудительную инициализацию структур, передаваемых в пространство пользователя для блокирования возможных утечек информации;
• В ядро встроена реализация алгоритма SipHash, предоставляющего более безопасный и быстрый метод хэширования;
• В Xen добавлена поддержка загрузки гостевых систем в режиме PVH, комбинирующем элементы режимов паравиртуализации (PV) для ввода/вывода, обработки прерываний, организации загрузки и взаимодействия с оборудованием, с применением полной виртуализации (HVM) для ограничения привилегированных инструкций, изоляции системных вызовов и виртуализации таблиц страниц памяти;
• Для KVM реализован драйвер PTP, позволяющий получить доступ из гостевой системы к часам реального времени хост-системы, что даёт возможность использовать Chrony для высокоточной синхронизации часов хоста и гостевой системы;
• Добавлен интерфейс /sys/kernel/security/lsm, через который можно узнать список активных LSM-модулей;
• Добавлена реализация алгоритма шифрвоания AES, обеспечивающая фиксированное время выполнения для защиты от атак, пытающихся определить характер данных на основе изменения времени обработки операции;
• Реализация генератора псевдослучайных чисел переведена с хэширования MD5 на использование безопасного и быстрого алгоритма поточного шифра ChaCha20 при формировании энтропии для целочисленного вывода get_random_int и get_random_long;
• Добавлен sysctl для загрузки правил AppArmor непривилегированным пользователем для нового namespace;
● Сетевая подсистема
• Реализован новый тип сокетов «SMC-R» (Shared Memory Communications over RDMA, RFC-7609), предназначенный для организации похожих на TCP каналов связи поверх транспорта RDMA (Remote Direct Memory Access). Протокол разработан компанией IBM и позволяет без внесения изменений (загрузив библиотеку через LD_PRELOAD) адаптировать уже написанные для TCP приложения для работы в сетях RoCE (RDMA over Converged Ethernet);
• Добавлен модуль «psample» для выборки сетевых пакетов, проходящих через сетевой интерфейс, для дальнейшего отсеивания фильтром-классификатором;
• В сетевой подсистеме теперь применяется SipHash вместо MD5 для генерации номеров последовательности и вместо SHA1 для syncookies;
• В TCP-стеке включён по умолчанию механизм определения потери пакетов RACK, который в отличие от штатного метода определения факта потери пакета, отталкивается от времени передачи, а не последовательности прихода пакетов. Суть работы RACK в том, что при получении ACK-подтверждения для пакета, любые неподтверждённые пакеты, отправленные как минимум на RTT (round-trip time) раньше подтверждённого пакета, считаются потерянными и потребуют повторной отправки. Новый алгоритм уже протестирован в инфраструктуре Google и предложен для утверждения в качестве стандарта IETF (draft-ietf-tcpm-rack-01);
• Для TCP-сокетов добавлена новая опция TCP_FASTOPEN_CONNECT, которую можно использовать в качестве альтернативного метода включения режима Fast Open на стороне клиента;
• Параметры tcp_max_syn_backlog, tcp_tw_recycle и tcp_max_tw_buckets теперь могут раздельно выставляться для разных пространств имён;
• Добавлен драйвер «ipvtap» для создания сетевых интерфейсов Ipvlan, для управления которыми можно применять инструменты, рассчитанные на работу с устройствами TAP;
● Память и системные сервисы
• Добавлен системный вызов statx() с реализацией более эффективного и функционального варианта stat(), возвращающего расширенную информацию о файле, включая время создания файла и специфичные для файловых систем флаги;
• Реализованы раздельные буферы прокрутки для VGA-консолей. Ранее для всех консолей применялся один общий буфер прокрутки, что приводило к очистке всей не вмещающейся на экран истории после переключения на другую консоль. После внесения изменения просмотр истории прокрутки стал похож на работу с историей в tmux и screen. По умолчанию возможность отключена, так как наблюдаются проблемы с совместимостью с утилитами (например, clear_console), завязанными на очистку буфера после каждой смены консоли. Для включения следует передать при загрузке параметр «vgacon.scrollback_persistent=1» или собрать ядро с опцией «VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT=y»;
• Проведена существенная оптимизация системы подкачки (swap), изначально рассчитанная на работу с дисковыми накопителями. Подкачка теперь адаптирована для работы с носителями SSD, отличающимися очень низким постоянным временем доступа;
• Инструментарий perf теперь может быть собран с использованием компилятора Clang;
• Добавлена реализация команды «perf ftrace», предоставляющая основанный на perf интерфейс для фреймворка отслеживания вызова функций (ftrace);
• Добавлена возможность использования технологии разгона процессоров Turbo Boost Max 3.0 на системах без поддержки HWP (Hardware P-States). Turbo Boost Max позволяюет увеличить производительность однопоточных приложений за счёт завышения тактовой частоты, при удержании допустимых границ мощности и температуры;
• Модуль для обеспечения сжатия LZ4 заменён на новую реализацию, демонстрирующей более высокую производительность;
• Из-за проблем с безопасностью удалена поддержка механизма /proc/timer_stats, предоставляющего статистику о работе таймера, которая приводит к утечке информации о процессе;
• Для устройств PCI Express добавлена поддержка дополнительных режимов энергосбережения ASPM L1, определённых в спецификции PCIe 3.1, что позволяет добиться перехода на более глубокие уровни сна;
• Реализована поддержка средств управления энергопотреблением APST (Autonomous Power State Transitions), которые позволяют на 20-30% снизить потребление энергии SSD-накопителями на базе технологии NVE. Поддержка APST пока не включена по умолчанию, так как для некоторых накопителей наблюдаются проблемы со стабильностью;
● Оборудование
• В DRM-драйвер (Direct Rendering Manager) Nouveau интегрирована начальная реализация системы регулирования энергопотребления (power budget). Переработана поддержка режима, обеспечивающего загрузку заверенных цифровой подписью блобов с прошивками NVIDIA, которые требуются для активации средств 3D-ускорения в Maxwell (GeForce-1000) и более новых GPU. Необходимы прошивки уже добавлены в набор linux-firmware, но работа пока не доведена до конца, поэтому поддержка использования подобных прошивок появится только в ядре 4.12;
• В драйвере AMDGPU появилась предварительная поддержка технологии виртуализация ввода-вывода SR-IOV (Single Root Input/Output Virtualization), поддерживаемой в профессиональных картах FirePro. Добавлены PCI-идентификаторы для чипов POLARIS12;
• В драйвер для GPU Intel добавлены PCI-идентификаторы видеоподсистемы ещё не поступившей в продажу SoC Gemini Lake (GLK), идущей на смену Apollo Lake. Включено сжатие фреймбуфера для чипов gen9 и новее. Реализована возможность загрузки HuC-прошивок, содержащих компоненты для обеспечения кодирования видео. Добавлена поддержка вывода звука через DP MST (DisplayPort Multi-Stream Transport). Добавлен интерфейс на базе подсистемы perf для сбора метрик о производительности драйвера i915. Представлены новые sysctl dev.i915.oa_max_sample_rate и dev.i915.perf_stream_paranoid. Для систем на базе Baytrail и Cherrytrail включена поддержка режима вывода звука HDMI LPE, если не определён контроллер HDaudio;
• Добавлена подсистема TinyDRM, предоставляющая компоненты для упрощения разработки драйверов для простых LCD-дисплеев, которые подключаются через медленные шины, такие как SPI и MIPI-DBI;
• Добавлена поддержка графической подсистемы и контроллера управления памятью SoC Aspeed AST2500;
• Добавлена поддержка звукового кодека Realtek ALC1220, применяемого на многих материнских платах AMD Ryzen и Intel Kaby Lake (Core-i 7xxx), а также кодеков Nuvoton NAU85L40, Allwinner SUN8I и интерфейса Intel HDMI LPE;
• Добавлена поддержка новых ARM-плат, включая Banana Pi M64, HiSilicon Kirin960/Hi3660/HiKey960, SolidRun MACCHIATOBin, Broadcom BCM958712DxXMC NorthStar2, NXP LS1012a, а также систем на баз Allwinner H2+ и V3;
• Добавлен новый звуковой драйвер и V4L2-драйвер камеры для SoC BCM2835 (используется в Raspberry Pi).
Дополнение: Латиноамериканский Фонд свободного ПО оперативно сформировал вариант полностью свободного ядра 4.11 — Linux-libre 4.11-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске очищен от блобов код для поддержки криптоакселераторов Cavium, а также драйверы для GPU Rockchip, Ethernet-контроллеров Netronome NFP 4000/6000 и сенсорных экранов Silead. В список расширений, в которых могут поставляться блобы, добавлены «.out» и «.nffw». Обновлён код чистки блобов в драйверах для GPU AMD и Intel, в загрузчике прошивок Qualcomm, кодеках Chips&Media, беспроводных драйверах Atheros ath10k, wil6210 и Intel iwlwifi, в звуковых драйверах для Intel Skylake.