После двух месяцев разработки Линус Торвальдс представил (https://lkml.org/lkml/2017/9/3/155) релиз ядра Linux 4.13 (https://www.kernel.org/). Среди наиболее заметных изменений: встроенная реализация протокола TLS, плагин для рандомизации порядка полей в структурах данных, функциональность "lifetime hints" в VFS, поддержка буферизированного ввода/вывода в неблокирующем режиме, модуль для зонированных блочных устройств, расширение лимита на число файлов в директории ext4, поддержка привязки BPF-программ к сокетам, средства оптимизации энергопотребления через прогнозирование следующего прерывания.В новую версию принято более 12 тысяч исправлений от 1400 разработчиков, размер патча - 68 Мб (изменения затронули 10647 файлов, добавлено 824508 строк кода, удалено 228197 строк). Около 45% всех представленных в 4.13 изменений связаны с драйверами устройств, примерно 18% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 15% связано с сетевым стеком, 4% - файловыми системами и 3% c внутренними подсистемами ядра.
Основные (http://kernelnewbies.org/Linux_4.13) новшества (https://lwn.net/Articles/727852/):
-
Дисковая подсистема, ввод/вывод и файловые системы
- В виртуальную файловую систему и уровень блочных устройств добавлены признаки со сведениями о времени жизни данных ("lifetime hints"), которые могут быть привязаны к открытому файлу при помощи системного вызова fcntl(). Например, признак RWH_WRITE_LIFE_SHORT сигнализирует, что данные предназначены для хранения короткое время, а признак RWH_WRITE_LIFE_EXTREME указывает на то, что данные останутся навсегда. Устройство хранения может использовать данные признаки для оптимизации размещения данных с учётом ожидаемого времени их хранения. В настоящее время только драйвер NVMe учитывает эти сведения;
- Поддержка (https://lwn.net/Articles/724198/) буферизированного ввода/вывода на блочном уровне в неблокирующем режиме. Новая возможность позволяет улучшить поддержку асинхронного ввода/вывода в условиях, когда используется буферизированный ввод/вывод;
- Для Device Mapper реализован новый модуль dm-zoned (https://www.kernel.org/doc/Documentation/device-mapper/dm-zo... позволяющий создавать зонированные блочные устройства в которых применяются разные правила записи в различные части устройства. Например, устройства в которых одна зона может допускать только запись в последовательно идущие блоки. Модуль dm-zoned даёт возможность представить подобное зонированное устройство как обычное блочное устройство, скрывая применяемые в процессе работы ограничения записи;
- В файловой системе ext4 реализована опция "largedir", при указании которой увеличивается число файлов, которое может размещаться в одной директории. Без данной опции действует лимит на 10 млн файлов в одной директории, а при указании опции "largedir" лимит увеличивается до 2 миллиардов файлов;
- Добавлена возможность увеличения хранилища расширенных атрибутов файлов в ФС ext4 для обеспечения хранения большего числа атрибутов для одного файла. Каждый атрибут может содержать до 64 Кб информации. В ext4 также добавлена поддержка дедупликации расширенных атрибутов, позволяющая фактически хранить только одну копию атрибута, применённого к нескольким файлам;
- Добавлен механизм (https://lwn.net/Articles/724307/) для более надёжного информирования приложений в пространстве пользователя об ошибках, возникающих в процессе выполнения операций отложенной записи (writeback);
- В F2FS, развиваемой компанией Samsung высокопроизводительной файловой системе для Flash-накопителей, обеспечена поддержка дисковых квот;
- В F2FS, UBIFS и Btrfs добавлена поддержка системного вызова statx() с реализацией более эффективного и функционального варианта stat(), возвращающего расширенную информацию о файле, включая время создания файла и специфичные для файловых систем флаги;
- В XFS добавлена поддержка опций SEEK_HOLE и SEEK_DATA системного вызова lseek() для выявления пустых областей и блоков данных внутри файла;
- В файловой системе OverlayFS добавлена поддержка индекса директории , позволяющая выполняь операции копирования между слоями без повреждения жестких ссылок;
- Добавлена возможность повторного экспорта NFS-раздела поверх NFS;
-
Виртуализация и безопасность
- Добавлена реализация (https://lwn.net/Articles/666509/) протокола TLS на уровне ядра, использование которой позволяет добиться повышения производительности при обработке протоколов, подобных HTTPS;
- В состав системы сборки включен плагин к GCC (http://www.openwall.com/lists/kernel-hardening/2017/04/06/14) для рандомизации раскладки структур данных, который на этапе сборки делает непредсказуемым следование полей в структурах и затрудняет проведение атак, базирующихся на знании раскладки структур в ядре. Плагин портирован из патчей проекта grsecurity;
- В состав модуля AppArmor включен (https://lkml.org/lkml/2017/6/10/162) код обработки меток на процессы ("domain labeling"), разработанный и применяемый в Ubuntu. В будущих выпусках ожидается продолжение интеграции улучшений, разработанных командой Ubuntu для AppArmor;
-
Сетевая подсистема
- Обеспечена раздельная обработка sysctl tcp_sack, tcp_window_scaling и tcp_timestamps для каждого пространства имён сетевой подсистемы (network namespace);
- В getsockopt() добавлена поддержка новой команды SO_PEERGROUPS, возвращающей список всех групп, в которые входит сокет;
- Представлен (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin... новый тип BPF-программ - BPF_PROG_TYPE_SOCK_OPS, который позволяет организовать вызов BPF-программы на различных стадиях обработки сокетов и применяться для корректировки параметров соединения, таких как размер буферов, начального окна, SYN/SYN-ACK RTO и т.п.
-
Память и системные сервисы
- Добавлены средства (https://lwn.net/Articles/673641/) прогнозирования следующего прерывания, которые позволяют повысить эффективность принятия решений, связанных с управлением питанием;
- В утилиту perf добавлена опция "--smi-cost", позволяющая оценить затраты на обработку прерываний системного управления (SMI - System Management Interrupt, для выполнения кода в режиме SMM (https://ru.wikipedia.org/wiki/System_Management_Mode));
- Инициатива по оформлению (https://kernel.org/doc/html/latest/) документации к ядру с использованием разметки reStructuredText (https://ru.wikipedia.org/wiki/ReStructuredText) (RST) и пакета Sphinx (http://www.sphinx-doc.org/) достигла важного рубежа - все ранее доступные шаблоны 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;...
URL: https://lkml.org/lkml/2017/9/3/155
Новость: https://www.opennet.ru/opennews/art.shtml?num=47126