Релиз ядра Linux 4.13
4 сентября 2017 года
После двух месяцев разработки Линус Торвальдс представил релиз ядра 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.
Источники править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.