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

В новую версию принято более 14 тысяч исправлений от 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 учитывает эти сведения;
    • Поддержка буферизированного ввода/вывода на блочном уровне в неблокирующем режиме. Новая возможность позволяет улучшить поддержку асинхронного доступа в условиях, когда используется буферизированный ввод/вывод, и снижает риск возникновения задержки возврата управления из ядра при выполнении асинхронных операций (AIO) при помощи интерфейса Direct I/O;
    • Для Device Mapper реализован новый модуль dm-zoned, позволяющий создавать зонированные блочные устройства в которых применяются разные правила записи в различные части устройства. Например, зонирование записи применяется в устройствах c черепичной магнитной записью (Shingled Magnetic Recording, SMR), в которых запись производится с частичным перекрытием соседней дорожки и, как следствие, в рамках группы допускается лишь последовательное добавление данных, а любая перезапись приводит к необходимости перезаписи всей группы дорожек. Модуль dm-zoned даёт возможность представить подобное зонированное устройство как обычное блочное устройство, скрывая применяемые в процессе работы ограничения записи;
    • В файловой системе ext4 реализована опция "largedir", при указании которой увеличивается число файлов, которое может размещаться в одной директории. Без данной опции действует лимит на 10 млн файлов в одной директории, а при указании опции "largedir" лимит увеличивается до 2 миллиардов файлов. Опция подготовлена разработчиками кластерной файловой системы Lustre;
    • В ext4 добавлена возможность хранения расширенных атрибутов файлов (Xattr) в отдельных inode, что позволяет добиться хранения большего числа атрибутов для одного файла. Каждый атрибут теперь может содержать до 64 Кб информации. При выносе Xattr в отдельный inode также наблюдается увеличение эффективности кэширования. Дополнительно, в ext4 добавлена поддержка дедупликации расширенных атрибутов, позволяющая фактически хранить только одну копию атрибута, применённого к нескольким файлам;
    • В ext4 обеспечена возможность параллельного выполнения операций discard при монтировании с опцией '-o discard';
    • Добавлен механизм для более надёжного информирования приложений в пространстве пользователя об ошибках, возникающих в процессе выполнения операций отложенной записи (writeback);
    • В F2FS, развиваемой компанией Samsung высокопроизводительной файловой системе для Flash-накопителей, обеспечена поддержка дисковых квот;
    • В F2FS, UBIFS и Btrfs добавлена поддержка системного вызова statx() с реализацией более эффективного и функционального варианта stat(), возвращающего расширенную информацию о файле, включая время создания файла и специфичные для файловых систем флаги;
    • В XFS добавлена поддержка опций SEEK_HOLE и SEEK_DATA системного вызова lseek() для выявления пустых областей и блоков данных внутри файла;
    • В файловой системе OverlayFS добавлена поддержка индекса директории, позволяющая выполнять операции копирования между слоями без повреждения жестких ссылок. Подготовлена инфраструктура для экспорта OverlayFS через NFS;
    • Добавлена возможность повторного экспорта NFS-раздела поверх NFS;
    • Обеспечено использование по умолчанию протокола SMB 3 (Server Message Block) при обращении к файлам на серверах Samba и Windows при помощи CIFS;
  • Виртуализация и безопасность
    • Добавлена реализация протокола TLS на уровне ядра (KTLS), использование которой позволяет добиться существенного повышения производительности приложений, использующих HTTPS. Реализация выполнена в виде модуля ядра, предоставляющего новый тип сокетов AF_KTLS, которые можно использовать для передачи данных по протоколам TLS 1.2 для TCP и DTLS 1.2 для UDP с применением шифра AES GCM. Поддерживается прямая отправка файлов через установленное TLS-соединение при помощи вызова sendfile(). На графике ниже отражено проведённое инженерами Facebook сравнение задержек при использовании обработчика HTTPS на базе KTLS в ядре и библиотеки OpenSSL:
    • В состав системы сборки включен плагин к GCC для рандомизации раскладки структур данных, который на этапе сборки делает непредсказуемым следование полей в структурах и затрудняет проведение атак, базирующихся на знании раскладки структур в ядре. Плагин портирован из патчей проекта grsecurity;
    • В состав модуля AppArmor включен код обработки меток на процессы ("domain labeling"), разработанный и применяемый в Ubuntu. В будущих выпусках ожидается продолжение интеграции улучшений, разработанных командой Ubuntu для AppArmor и применяемых в проекте Snapd;
    • В подсистему SCSI добавлена поддержка cамошифруемых накопителей SSD (Self-Encrypting SSD), в которых устройство аппаратного шифрования встроено непосредственно в контроллер в соответствии со спецификацией Opal;
    • Добавлены дополнительные меры для определения во время компиляции и перехвата во время работы возможных переполнений буфера при выполнении строковых функций, определённых в заголовочном файле string.h. Реализация идентична режиму FORTIFY_SOURCE=1 в glibc, но также предоставляет средства и для контроля за размером буфера при операциях чтения, а не только при записи;
    • Реализована поддержка уровней безопасности хост-контроллера Thunderbolt, позволяющих задавать права доступа для подключаемых через данный интерфейс устройств (например, можно запретить прямой доступ к памяти через DMA или ограничить доступ только работой через Display Port и туннель USB);
    • Добавлены вызовы wait_for_random_bytes() и get_random_*_wait(), позволяющие убедиться, что генератор псевдослучайных чисел корректно инициализирован и получил достаточный объём энтропии;
    • В fscrypt добавлена поддержка алгоритма AES-128-CBC для шифрования содержимого файлов и AES-128-CBC-CTS для имён файлов (ранее поддерживались только AES-256-XTS и AES-256-CBC-CTS);
    • На 64-разрядных системах изменён метод генерации "канареечного слова" - технология защиты от переполнения стека, основанной на применении случайной последовательности, устанавливаемой в стек непосредственно перед адресом возврата. Младшие 8 бит канареечного слова теперь обнуляются. С одной стороны это на 8 бит снижает случайную энтропию, но с другой стороны позволяет защититься от получения значения канареечного слова, манипулируя переполнением Си-строк, для ограничения которых используется нулевой символ;
  • Сетевая подсистема
    • Обеспечена раздельная обработка 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%. В будущих ядрах разбиение больших страниц планируется отложить до момента фактической записи в раздел подкачки или чтения из него;
    • В файле /proc/cpuinfo в строке "cpu MHz" теперь выводится номинальная частота процессора, а не вычисленная текущая частота, которая может меняться при каждом запросе. Для оценки изменения текущей частоты рекомендуется использовать программы turbostat и cpupower, поставляемые в составе исходных текстов ядра;
  • Оборудование
    • Представлена новая подсистема драйверов "mux", позволяющая обеспечить поддержку контроллеров с мультиплексированием, управляющих работой сразу нескольких устройств;
    • Для архитектуры s390 реализованы пятиуровневые таблицы страниц памяти, которые позволяют адресовать до 16 эксабайт ОЗУ;
    • В DRM-драйвере (Direct Rendering Manager) Nouveau обеспечена поддержка средств стереоскопического и 3D вывода через HDMI и DisplayPort для карт NV50+ (G80+);
    • В DRM-драйвере AMDGPU добавлена ограниченная начальная поддержка GPU AMD Raven Ridge и внесена большая порция исправлений для поддержки GPU Radeon RX Vega. При этом, для указанных GPU пока не реализована поддержка DC (Display Core), т.е. отсутствуют компоненты для вывода на экран;
    • В DRM-драйвер для GPU Intel добавлена начальная поддержка грядущих процессоров на базе микроархитектур Intel Cannonlake и Intel Coffeelake. Улучшен процесс сброса GPU g4x и g33;
    • Добавлен драйвер vboxvideo для виртуального GPU VirtualBox, драйвер для которого раньше поставлялся в наборе VirtualBox Guest Additions, а теперь перенесён в основное ядро;
    • Добавлена поддержка звуковых кодеков Realtek ALC215, ALC285 и ALC289, Everest Semi ES8316, ZTE ZX AUD96P22;
    • Добавлена поддержка новых ARM-плат и SoC, включая Orange Pi Win, Orange Pi Zero Plus 2, Nano Pi NEO2, Orange Pi Prime, BeagleBone Blue, LeMaker Guitar Board, Linksys WRT3200ACM, Action Semi S500, Rockchip RV1108 и 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.

Источник: http://www.opennet.ru/opennews/art.shtml?num=47126