После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.0. Среди наиболее заметных изменений в ядре 5.0: из Android перенесён энегоэффективный планировщик задач для CPU ARM big.LITTLE, добавлен механизм шифрования файловых систем Adiantum, в драйвере AMDGPU добавлена поддержка технологии FreeSync, реализована файловая система BinderFS, появилась возможность размещения файла подкачки в Btrfs, в UDP добавлена поддержка флага MSG_ZEROCOPY и GRO (Generic Receive Offload), в seccomp реализована возможность выноса обработчиков блокировок в пространство пользователя.
Значительная смена номера версии не является индикатором особых изменений, а сформирована из эстетических соображений и лишь свидетельствует о накоплении в ветке 4.x достаточного для начала новой нумерации числа выпусков. Смена первого номера в версии ядра является формальным шагом, снимающих дискомфорт из-за накопления большого числа выпусков в серии. Напомним, что переход к версиям 3.x был осуществлён в 2011 году, когда в ветке 2.6.x накопилось 39 релизов, а ветка 4.x была создана в 2015 году после подготовки 20 выпусков 3.x. При этом смена версий 3.x и 4.x хорошо коррелировала с числом git-объектов в репозитории - ядро 3.0 было выпущено, когда в репозитории находилось примерно 2 млн объектов, а ядро 4.0 - 4 млн объектов. Выпуск 5.0 разрывает данную логическую цепочку, так как в настоящее время репозиторий включает примерно 6.5 млн git-объектов.
Основные новшества:
- Виртуализация и безопасность
- Добавлен разработанный компанией Google механизм шифрования файловых систем Adiantum, который может применяться на маломощных устройствах, на которых из-за слишком больших накладных расходов невозможно использовать алгоритм блочного шифрования AES. Реализация Adiantum базируется на применении быстрой хэш-функции NH, алгоритме аутентификации сообщений (MAC) Poly1305 и потоковом шифре XChaCha12, а также единоразовой операции на базе блочного шифра AES-256 для 16 байт в каждом блоке. Поддержка Adiantum добавлена в подсистему fscrypt, которая используется для прозрачного шифрования файлов и каталогов в ФС ext4, f2fs и ubifs. При тестировании на системах с CPU ARM Cortex-A7 алгоритм Adiantum оказался быстрее в 4 раза при шифровании и в 5 раз при расшифровке по сравнению с AES-256-XTS;
- В криптографическую подсистему добавлена хэш-функция Streebog, стандартизированная в РФ как ГОСТ 34.11-2012;
- Добавлена поддержка массивов NVM-памяти со встроенными операциями обеспечения безопасности, такими как защита данных паролем, очистка и блокировка;
- Интегрирована часть патчей для блокирования лазеек для обхода ограничений UEFI Secure Boot. На данном этапе добавлены средства для управления применением системного вызова kexec_load_file(), который может быть использован для обхода UEFI Secure Boot путём замены проверенного ядра на другое ядро, не снабжённое цифровой подписью. Добавлено новое хранилище ключей (Kernel keyring), названное ".platform", предназначенное исключительно для ключей, предоставляемых платформой, и запрещающее обновлять ключи в процессе работы системы. Ключи из данного хранилища могут применяться для проверки образов, запускаемых через kexec_load_file();
- В механизм фильтрации системных вызовов seccomp добавлен API для выноса обработчиков блокировки системных вызовов в пространство пользователя. Например, в системах управления контейнерами теперь можно организовать перехват системных вызовов mount() и finit_module();
- Осуществлена переработка организации вызова функций в некоторых подсистемах с целью минимизации применения замедляющего работу метода защиты retpoline. Для блокировки проявления атак Spectre v2 косвенные переходы заменяются на прямые, при которых не применяется механизм спекулятивного выполнения инструкций и не создаются условия, необходимые для проведения атаки. В текущем выпуске подобным способом проведена оптимизация операций с DMA и сетевой подсистемы;
- Изменена семантика системного вызова mincore() для противодействия атакам по сторонним каналам, анализирующим содержимое страничного кэша (page cache);
- В отладочный инструмент KASan (Kernel address sanitizer), обеспечивающий выявление ошибок при работе с памятью, добавлена программная реализация режима подстановки проверочных тегов (по аналогии с HWASan в Clang), которая при сравнимом с ранее доступным режимом влиянии на производительности обеспечивает заметно меньшее потребление памяти. Новый режим пока доступен только на системах с архитектурой ARM64;
- В драйвер virtio-gpu (виртуальный GPU, развиваемый в рамках проекта Virgil) добавлена поддержка симуляции метаданных EDID, что позволяет выдать в гостевой системе сведения о возможностях виртуального монитора;
- В криптостек ядра добавлена поддержка алгоритмов XChaCha12 и XChaCha20 (варианты шифров ChaCha с конструкцией XSalsa);
- Дисковая подсистема, ввод/вывод и файловые системы
- Добавлена возможность размещения раздела подкачки в файлах внутри ФС Btrfs. Файл подкачки в Btrfs должен быть полностью заполнен в режиме "nocow" без применения сжатия и размещён только на одном накопителе. В Btrfs также реализована возможность изменения идентификатора ФС (FSID, видимый пользователю UUID) без перезаписи всех блоков с метаданными;
- Реализована поддержка псевдо файловой системы BinderFS для механизма межпроцессного взаимодействия Binder. BinderFS позволяет запустить несколько экземпляров платформы Android в одном окружении благодаря присоединению разных пространств имён Binder IPC к разным точкам монтирования;
- В механизм отслеживания событий в ФС fanotify() добавлен новый тип запросов FAN_OPEN_EXEC, позволяющий получать уведомления при открытии файла с целью его дальнейшего исполнения;
- Удалён код старой подсистемы блочных устройств, на смену которой пришёл API blk-mq с многоуровневой системой очередей (multiqueue) для блочных устройств. Также удалены устаревшие планировщики ввода/вывода, включая CFQ и deadline;
- В файловой системе F2FS добавлен вызов ioctl(F2FS_IOC_SHUTDOWN) с флагом NEED_FSCK для инициирования отложенного выполнения fsck;
- Изменения в файловых системах Ext4 и XFS ограничились оптимизациями и исправлениями;
- Сетевая подсистема
- Для UDP реализована возможность отправки данных в сетевой сокет в режиме zero-copy (вызов send с флагом MSG_ZEROCOPY), позволяющем организовать передачу данных по сети без промежуточной буферизации. Поддержка zero-copy для TCP была предложена в ядре 4.14.
- В стеке UDP реализована базовая поддержка GRO (Generic Receive Offload) для ускорения обработки большого числа входящих пакетов, благодаря агрегированию нескольких пакетов в более крупные блоки, не требующие отдельной обработки каждого пакета. Для включения GRO для сокетов UDP предложена новая опция (sockopt) UDP_GRO. В тестах включение GRO позволило поднять пропускную способность с 1079 MB/s до 1466 MB/s, а интенсивность запросов к ядру снизить с 769065 до 24877 вызовов в секунду;
- Реализована поддержка обработки ошибок ICMP для UDP-туннелей;
- В ipset добавлена возможность сопоставления по целевому MAC-адресу в наборах bitmap:ipmac, hash:ipmac и hash:mac;
- Память и системные сервисы
- Реализован новый режим работы планировщика задач для асимметричных процессоров ARM на базе архитектуры big.LITTLE, комбинирующих в одном чипе мощные, но потребляющие много энергии, ядра CPU, и менее производительные, но более энергоэффективные ядра. Новый режим позволяет снизить потребление энергии благодаря пробуждению задач в первую очередь на ядрах CPU, потребляющих меньше энергии, и привлечения более мощных ядер лишь тогда, когда производительности энегоэффективных ядер недостаточно. Представленная возможность перенесена в основное ядро из варианта ядра, поставляемого для платформы Android;
- Для cgroup2 реализован контроллер ресурсов cpuset, предоставляющий механизм для ограничения размещения задач по NUMA-узлам памяти и CPU, разрешающий использование только ресурсов, определённых для группы задач через интерфейс псевдо-ФС cpuset;
- Добавлена возможность использования в гостевых окружениях KVM средств трассировки, предоставляемых в процессорах Intel;
- Для архитектуры ARM64 обеспечена поддержка системного вызова kexec_file_load(), горячего подключения памяти, 52-битной адресации виртуальной памяти для пространства пользователя, привязанных к потокам "канареечных" меток в стеке и аутентификации указателей;
- Для 32-разрядных систем реализованы 64-разрядные версии системных вызовов ppoll(), pselect6(), io_pgetevents(), recvmmsg(), futex() и rt_sigtimedwait(), которые не затрагивает проблема 2038 года;
- Для консоли добавлен более крупный шрифт Terminus (ter16x32), подходящий для использования на экранах с высокой плотностью пикселей (HiDPI);
- Для архитектуры C-SKY реализована поддержка горячей замены CPU (hotplugging), ftrace и perf;
- В подсистеме трассировки реализован новый интерфейс "dynamic events", в рамках которого унифицирована функциональность интерфейсов "kprobes", "uprobes" и "synthetic events";
- Добавлена поддержка процессорной инструкции WBNOINVD, реализованной в процессорах AMD и Intel на базе архитектуры x86_64. Указанная инструкция записывает все изменённые каналы кэша на всех уровнях ассоциаций кэша с основной памятью, при этом сохраняя в кэше прокэшированные значения;
- Добавлена поддержка группы расширении "Platform Quality of Service" (AMD QoS) для архитектуры AMD64, реализованных в следующем поколении процессоров AMD EPYC и позволяющих отслеживать использование определённых процессорных ресурсов и устанавливать ограничения по их использованию (например, распределение L3 кэша, обеспечение пропускной способности памяти и расстановка приоритетов межу кодом и данными в кэше). В процессорах Intel аналогичная функциональность реализована в расширениях Intel RDT (Intel Resource Director Technology);
- Оборудование
- В драйвер AMDGPU добавлена поддержка технологии адаптивной синхронизации FreeSync (VESA Adaptive-Sync), которая позволяет корректировать частоту обновления информации на экране монитора для обеспечения минимального времени отклика, плавности вывода и отсутствия разрывов во время игр и просмотра видео. FreeSync также позволяет снизить потребление энергии за счёт уменьшения интенсивности обновления при неизменности картинки на экране.
- Кроме того, в AMDGPU добавлена возможность сброса GPU, поддержка которого включена для дискретных GPU CI, VI и SOC15. Для чипов vega12 и polaris12 добавлена поддержка KFD (Kernel Fusion Driver для вычислений на базе OpenCL). Улучшен код для загрузки микрокода. Добавлены новые идентификаторы графических карт;
- В DRM-драйвере Intel улучшена поддержка чипов Icelake;
- В драйвере tegra для чипов Tegra186 и Tegra194 добавлена поддержка проброса звука поверх HDMI;
- В драйвере v3d (для GPU Broadcom Video Core V) включена поддержка TFU (Texture Formatting Unit);
- В драйвере Nouveau добавлена начальная поддержка GPU NVIDIA Turing TU104 и TU106 (GeForce RTX 2000), пока ограниченная средствами для управления видеорежимами (управление питанием и ускорение 2D/3D графики пока не реализовано);
- Реализована поддержка технологии DSC (Display Stream Compression), определённой в спецификации VESA DP 1.4 и предоставляющей средства для сжатия данных без потерь при обмене информацией с экранами, поддерживающими очень большое разрешение. Поддержка DSC включена для экранов Gen 10 eDP и Gen 11 eDP/DP при использовании драйвера i915;
- Добавлен драйвер для сенсорных экранов Raspberry Pi;
- Добавлена поддержка высокоточной прокрутки (события REL_WHEEL_HI_RES и REL_HWHEEL_HI_RES) для манипуляторов мышь с колесом прокрутки высокого разрежения (поддерживаются мыши Microsoft и Logitech с поддержкой протокола HID++);
- Добавлена поддержка новых ARM SoC: Qualcomm QCS404 (4x Cortex-A53), Allwinner T3 (R40) и f1c100s (armv5), NXP/Freescale i.MX7ULP (1x Cortex-A7 + 1x Cortex-M4), NXP LS1028A (2x Cortex-A72), LX2160A (16x Cortex-A72), NXP LX2160AQDS, NXP LX2160ARDB, i.MX8 (NXP, 4x Cortex-A53 + Cortex-M4), RDA Micro RDA8810PL;
- Добавлена поддержка новых ARM плат и платформ: Rockchip Gru Scarlet (RK3188 Tablet), Phicomm N1 (Amlogic S905D), Libretech S805-AC, Linksys EA6500 v2 Wi-Fi router (BCM4708), Facebook Backpack-CMM BMC, Renesas iWave G20D-Q7 (RZ/G1N), Allwinner t3-cqa3t-bv3 (T3/R40), Lichee Pi Nano (F1C100s), Allwinner Emlid Neutis N5, Mapleboard MP130, Marvell Macchiatobin Single Shot (Armada 8040), i.MX mtrion emCON-MX6, imx6ul-pico-pi, imx7d-sdb-reva, i.MX7D PICO Hobbit, BQ Edison 2 QC, OrangePi Lite2, OrangePi 2G и OrangePi i96;
Одновременно Латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 5.0 - Linux-libre 5.0-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске отключен запрос блобов в драйвере ipu3-imgu. Обновлён код чистки блобов в драйверах и подсистемах admgpu, adreno, tegra, bnx2x, iwlwifi, mt76x0, qtnfmac, и компонентах для поддержки звука в Intel SoC. Прекращена чистка блобов в драйвере Eicon DIVA ISDN, который был удалён из состава ядра. Также можно отметить инициативу libeRTy по созданию libre-варианта ядра Linux с патчами PREEMPT_RT для поддержки работы в режиме реального времени.
Ви маєте увійти під своїм обліковим записом