Линус Торвальдс представил ядро Linux 5.1 с большим количеством нововведений

habr.png
Спустя два месяца работы Линус Торвальдс представил релиз ядра Linux 5.1. Новинка получила большое количество новых функций и доработок, включая новый интерфейс для асинхронного ввода ввода/вывода io_uring, поддержку масштабируемого мониторинга очень больших ФС через fanotify, решение проблемы 2038 года и др.

По словам Торвальдса, 5.1 получил более 13 тысяч коммитов, что немало. Итоговый список изменений получился очень внушительным.
Как всегда, изменения и нововведения разделены на несколько категорий.

Дисковая подсистема, файловые системы, ввод/вывод


  • в новом релизе появился новый интерфейс для асинхронного ввода/вывода — io_uring. Он хорош тем, что поддерживает поллинг ввода/вывода, плюс может работать как с буферизацией, так и без нее. Ранее механизм асинхронного ввода/вывода не поддерживал эту возможность, плюс мог работать лишь в обход кэша и без буферизации. Из-за ожидания доступности метаданных возникали блокировки;
  • механизм отслеживания событий в ФС fanotify () получил поддержку отслеживания ситуаций изменения суперблока и структуры dirent (это специфическое событие создания, удаления и перемещения каталогов). Новые возможности позволяют решать проблемы с масштабируемостью, которые возникают при создании рекурсивных отслеживаний изменений в очень больших файловых системах при помощи механизма inotify;
  • файловая система Btrfs теперь имеет возможность настройки уровня сжатия для алгоритма zstd. Плюс в этой ФС добавлено отложенное выполнение операций сканирования поддерева для снижения нагрузки и реализация ioctl для управления отключением устройств;
  • в ядре теперь нет файловой системы Exofs, которая представляла собой один из вариантов ext2, оптимизированный для работы с хранилищами объектов OSD. Нет и SCSI-протокола для таких устройств хранения объектов;
  • также внесены исправления, которые направлены на увеличение масштабируемости и производительности файловых систем, которые работают через механизм FUSE.

Безопасность и виртуализация


  • в ядро добавлены низкоуровневые изменения, которые нужны для стековой организации загрузки модулей безопасности (возможность загрузки одного LSM-модуля поверх другого). Плюс есть возможность управлять порядком загрузки;
  • расширены возможности GCC-плагина structleak. Он позволяет блокировать потенциальные утечки содержимого памяти. Добавлена возможность инициализации любых переменных, используемых в коде через обращение по ссылке в стеке;
  • в prctl () появилась опция PR_SPEC_DISABLE_NOEXEC, которая дает возможность управлять спекулятивным выполнением инструкций для выбранного процесса.

Сетевая подсистема


  • в стек mac80211 добавлена возможность назначения одному устройству сразу нескольких MAC-адресов. Кроме того, в этот стек добавлен и учет распределения эфирного времени, с возможностью его распределения между несколькими станциями. Это дает возможность выделять меньше времени на передачу медленным беспроводным станциям при работе в качестве точки доступа;
  • в модуль cfg80211/nl80211 добавлена возможность выноса обработчика аутентификации при работе в режиме точки доступа;
  • если возникают проблемы с сетевым интерфейсом, узнать подробности можно посредством механизма devlink health. Здесь же есть и API для получения информации об устройстве, плюс добавлена команда «flash update» для обновления прошивок сетевого адаптера;
  • добавлена поддержка TLS 1.3.

Память и сервисы


  • разработчики добавили безопасную доставку сигналов, которая учитывает возможность повторного использования PID. Так, ранее при выполнении вызова kill могла возникнуть ситуация, когда после отправки сигнала целевой PID мог быть освобожден из-за завершения работы процесса. В результате сигнал передавался другому процессу;
  • также добавлена возможность использования устройств постоянной памяти в качестве ОЗУ (persistent-memory, например NVDIMM). До выхода нового ядра эти устройства поддерживались в качестве устройств хранения, но теперь их можно задействовать в качестве дополнительной оперативной памяти. Возможность была добавлена в ответ на пожелания пользователей, которым не нужна высокая производительность, но требуется штатный API управления памятью ядра Linux вместо использования имеющихся систем распределения памяти в пространстве пользователя, которые работают поверх mmap для dax-файла;
  • для решения проблемы 2038 года (переполнение 32-разрядного типа time_t) в состав ядра включены системные вызовы, которые предлагают для 32-разрядных архитектур 64-разрядные счетчики времени. Как итог, 64-разрядная структура time_t может теперь использоваться на всех архитектурах.

Железо


  • в драйвер Nouveau добавили поддержку гетерогенного управления памятью, что дает возможность обращения CPU и GPU к общим синхронизированным областям памяти;
  • в DRM-драйвере Intel для GPU и новее режим fastboot включен по умолчанию. Это исключает лишние смены режимов во время загрузки. Добавлены новые идентификаторы устройств на базе Coffelake и Ice Lake;
  • в драйвер amdgpu добавлена поддержка GPU Vega10/20 BACO;
  • добавлена поддержка большого количества новым ARM плат и платформ, включая NVIDIA Shield TV (Darcy) на базе Tegra210, Bosch Guardian, Winterland IceBoard, Inspur on5263m5, Zodiac Digital Tapping Unit, Phicomm K3, X96 Max, FriendlyElec NanoPC-T4, NanoPi M4, Radxa ROCK Pi 4, Logic PD i.MX6QD, Y Soft IOTA Draco/Hydra/Ursa, Phytec phyCORE i.MX6 UltraLite, MYIR Tech MYD-LPC4357, Chameleon96, Oxalis Evalkit V100, Elgin RV1108 R, Si-Linux CAT874, Si-Linux EK874, Raspberry Pi Model 3 A+.

Более подробно об изменениях можно прочитать здесь (англ.) и здесь (рус.).

© Habrahabr.ru