Релиз ядра Linux 4.11

После двух месяцев разработки Линус Торвальдс представил релиз ядра 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, но планируется портирование cfq, noop и даже планировщика ввода/вывода 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 теперь могут раздельно выставляться для разных пространств имён;
  • Память и системные сервисы
    • Добавлен системный вызов 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, предоставляющего статистику о работе таймера, которая приводит к утечке информации о процессе;
  • Оборудование
    • В DRM-драйвер (Direct Rendering Manager) Nouveau интегрирована начальная реализация системы регулирования энергопотребления (power budget). Переработана поддержка режима Secure Boot, обеспечивающего загрузку заверенных цифровой подписью блобов с прошивками NVIDIA, которые требуются для активации средств ускорения в Maxwell и более новых GPU;
    • В драйвере AMDGPU появилась предварительная поддержка технологии виртуализация ввода-вывода SR-IOV (Single Root Input/Output Virtualization), поддерживаемой в профессиональных картах FirePro. Добавлены PCI-идентификаторы для чипов POLARIS12;
    • В драйвер для GPU Intel добавлены PCI-идентификаторы видеоподсистемы ещё не поступившей в продажу SoC Gemini Lake (GLK), идущей на смену Apollo Lake. Включено сжатие фреймбуфера для чипов gen9+. Добавлена поддержка вывода звука через 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 Skylake, а также кодеков 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).

© OpenNet