Релиз ядра Linux 4.13

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.13. Среди наиболее заметных изменений: встроенная реализация протокола TLS, плагин для рандомизации порядка полей в структурах данных, функциональность «lifetime hints» в VFS, поддержка буферизированного ввода/вывода в неблокирующем режиме, модуль для зонированных блочных устройств, расширение лимита на число файлов в директории ext4, поддержка привязки BPF-программ к сокетам, средства оптимизации энергопотребления через прогнозирование следующего прерывания.

В новую версию принято более 12 тысяч исправлений от 1400 разработчиков, размер патча — 68 Мб (изменения затронули 10647 файлов, добавлено 824508 строк кода, удалено 228197 строк). Около 45% всех представленных в 4.13 изменений связаны с драйверами устройств, примерно 18% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 15% связано с сетевым стеком, 4% — файловыми системами и 3% c внутренними подсистемами ядра.

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

  • Дисковая подсистема, ввод/вывод и файловые системы
    • В виртуальную файловую систему и уровень блочных устройств добавлены признаки со сведениями о времени жизни данных («lifetime hints»), которые могут быть привязаны к открытому файлу при помощи системного вызова fcntl (). Например, признак RWH_WRITE_LIFE_SHORT сигнализирует, что данные предназначены для хранения короткое время, а признак RWH_WRITE_LIFE_EXTREME указывает на то, что данные останутся навсегда. Устройство хранения может использовать данные признаки для оптимизации размещения данных с учётом ожидаемого времени их хранения. В настоящее время только драйвер NVMe учитывает эти сведения;
    • Поддержка буферизированного ввода/вывода на блочном уровне в неблокирующем режиме. Новая возможность позволяет улучшить поддержку асинхронного доступа в условиях, когда используется буферизированный ввод/вывод;
    • Для Device Mapper реализован новый модуль dm-zoned, позволяющий создавать зонированные блочные устройства в которых применяются разные правила записи в различные части устройства. Например, устройства в которых определённая зона может допускать только запись в последовательно идущие блоки. Модуль dm-zoned даёт возможность представить подобное зонированное устройство как обычное блочное устройство, скрывая применяемые в процессе работы ограничения записи;
    • В файловой системе ext4 реализована опция «largedir», при указании которой увеличивается число файлов, которое может размещаться в одной директории. Без данной опции действует лимит на 10 млн файлов в одной директории, а при указании опции «largedir» лимит увеличивается до 2 миллиардов файлов;
    • Добавлена возможность увеличения хранилища расширенных атрибутов файлов в ФС ext4 для обеспечения хранения большего числа атрибутов для одного файла. Каждый атрибут может содержать до 64 Кб информации. В ext4 также добавлена поддержка дедупликации расширенных атрибутов, позволяющая фактически хранить только одну копию атрибута, применённого к нескольким файлам;
    • Добавлен механизм для более надёжного информирования приложений в пространстве пользователя об ошибках, возникающих в процессе выполнения операций отложенной записи (writeback);
    • В F2FS, развиваемой компанией Samsung высокопроизводительной файловой системе для Flash-накопителей, обеспечена поддержка дисковых квот;
    • В F2FS, UBIFS и Btrfs добавлена поддержка системного вызова statx () с реализацией более эффективного и функционального варианта stat (), возвращающего расширенную информацию о файле, включая время создания файла и специфичные для файловых систем флаги;
    • В XFS добавлена поддержка опций SEEK_HOLE и SEEK_DATA системного вызова lseek () для выявления пустых областей и блоков данных внутри файла;
    • В файловой системе OverlayFS добавлена поддержка индекса директории , позволяющая выполняь операции копирования между слоями без повреждения жестких ссылок;
    • Добавлена возможность повторного экспорта NFS-раздела поверх NFS;
  • Виртуализация и безопасность
    • Добавлена реализация протокола TLS на уровне ядра, использование которой позволяет добиться повышения производительности при обработке протоколов, подобных HTTPS;
    • В состав системы сборки включен плагин к GCC для рандомизации раскладки структур данных, который на этапе сборки делает непредсказуемым следование полей в структурах и затрудняет проведение атак, базирующихся на знании раскладки структур в ядре. Плагин портирован из патчей проекта grsecurity;
    • В состав модуля AppArmor включен код обработки меток на процессы («domain labeling»), разработанный и применяемый в Ubuntu. В будущих выпусках ожидается продолжение интеграции улучшений, разработанных командой Ubuntu для AppArmor;
  • Сетевая подсистема
    • Обеспечена раздельная обработка sysctl tcp_sack, tcp_window_scaling и tcp_timestamps для каждого пространства имён сетевой подсистемы (network namespace);
    • В getsockopt () добавлена поддержка новой команды SO_PEERGROUPS, возвращающей список всех групп, в которые входит сокет;
    • Представлен новый тип BPF-программ — BPF_PROG_TYPE_SOCK_OPS, который позволяет организовать вызов BPF-программы на различных стадиях обработки сокетов и применяться для корректировки параметров соединения, таких как размер буферов, начального окна, SYN/SYN-ACK RTO и т.п.
  • Память и системные сервисы
    • Добавлены средства прогнозирования следующего прерывания, которые позволяют повысить эффективность принятия решений, связанных с управлением питанием;
    • В утилиту perf добавлена опция »--smi-cost», позволяющая оценить затраты на обработку прерываний системного управления (SMI — System Management Interrupt, для выполнения кода в режиме SMM);
    • Инициатива по оформлению документации к ядру с использованием разметки reStructuredText (RST) и пакета Sphinx достигла важного рубежа — все ранее доступные шаблоны DocBook преобразованы в reStructuredText. Компоненты для поддержки DocBook удалены;
    • Для каждой BPF-программы теперь генерируется и назначается уникальный идентификатор, который может использоваться для получения файловых дескрипторов к объектам BPF из пространства пользователя;
    • Реализована первая стадия оптимизации процесса вытеснения в раздел подкачки больших страниц памяти (Transparent Huge-Pages). Если до сих пор первым этапом вытеснения в раздел подкачки было разбиение больших страниц не маленькие, то в ядре 4.13 подобное разбиение откладывается до момента распределения места в разделе подкачки и учёта кэша подкачки. Подобное изменение уменьшает конфликт блокировок, что отражается в росте производительности примерно на 15%. В будущих ядрах разбиение больших страниц планируется отложить до момента фактической записи в раздел подкачки или чтения из него;
  • Оборудование
    • Для архитектуры s390 реализованы пятиуровневые таблицы страниц памяти, которые позволяют адресовать до 16 эксабайт ОЗУ;
    • В DRM-драйвере (Direct Rendering Manager) Nouveau обеспечена поддержка средств HDMI для стереоскопического и 3D вывода;
    • В DRM-драйвере AMDGPU добавлена ограниченная начальная поддержка GPU AMD Raven Ridge;
    • В DRM-драйвер для GPU Intel добавлена начальная поддержка грядущих процессоров на базе микроархитектур Intel Cannonlake и Intel Coffeelake. Улучшен процесс сброса GPU g4x и g33;
    • Поддержка звуковых кодеков Realtek ALC215, ALC285 и ALC289, Everest Semi ES8316, ZTE ZX AUD96P22;
    • Добавлена поддержка новых ARM-плат, включая BeagleBone Blue, LeMaker Guitar Board и Bubblegum 96.

Одновременно Латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 4.13 — Linux-libre 4.13-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске очищен от блобов код для поддержки криптоакселераторов Cavium Nitrox CNN55XX и Inside Secure SafeXcel, кодировщики и декодировщики Qualcomm Venus V4L2, а также драйверы для Mellanox Technologies Spectrum, Quantenna QSR10g, Qualcomm ADSP и WCNSS. Обновлён код чистки блобов в драйверах для GPU AMDGPU, Adreno A5xx и Intel i915 CSR, беспроводных чипов Atheros 802.11ac ath10k, Broadcom IEEE802.11n embedded FullMAC WLAN, Intel DVM /MVM, Redpine Signals WLAN и Wilocity 60g WiFi, а также драйверов сенсорных экранов Silead Tablet.

© OpenNet