Релиз ядра Linux 4.16
2 апреля 2018 года
После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.16. Среди наиболее заметных изменений: интеграция гипервизора Jailhouse, блокирование некоторых операций копирования данных между ядром и пространством пользователя, учёт режимов энергосбережения CPU в планировщике deadline, подготовка к прекращению поддержки IPX и NCPFS, поддержка механизма AMD Secure Encrypted Virtualization в KVM.
В новую версию принято около 13 тысяч исправлений от 1500 разработчиков, размер патча - 48 Мб (изменения затронули 11986 файлов, добавлено 508425 строк кода, удалено 314376 строк). Около 49% всех представленных в 4.16 изменений связаны с драйверами устройств, примерно 19% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 4% - файловыми системами и 3% c внутренними подсистемами ядра.
- Виртуализация и безопасность
- Обеспечена начальная поддержка гипервизора Jailhouse, развиваемого компанией Siemens и поддерживающего работу на системах x86_64 с расширениями VMX+EPT или AMD-V/SVM+NPT (поддержка ARMv7 и ARMv8, а также компоненты для корневого окружения, пока не приняты в основное ядро). Отличительными особенностями Jailhouse являются легковесная реализация и ориентация на привязку виртуальных машин к фиксированному CPU, области ОЗУ и аппаратным устройствам. Т.е. на одном физическом многопроцессорном сервере обеспечивается работа нескольких независимых виртуальных окружений, каждое из которых закреплено за своим процессорным ядром. Такой подход позволяет свести к минимуму накладные расходы от работы гипервизора и обеспечить гарантированный доступ к ресурсам и предсказуемую производительность, подходящие для виртуализации задач режима реального времени;
- Добавлена реализация механизма защиты копирования данных между ядром и пространством пользователя, блокирующего использование вызова usercopy при проведении некоторых видов атак. Суть предложенного метода в запрете применения usercopy для прямого копирования между пространством пользователя и некоторыми областями ядра с введением белого списка допустимых для использования областей памяти. Так как подобный подход потенциально может нарушить работу приложений, использующих usercopy, предусмотрен fallback-режим (HARDENED_USERCOPY_FALLBACK или slab_common.usercopy_fallback). В настоящее время механизм активирован в режиме информирования, при котором в лог записываются предупреждения о проблемных операциях, без их фактического блокирования;
- Продолжена реализация техник защиты от атак Meltdown и Spectre. Например, проведены оптимизации для снижения накладных расходов от PTI, добавлен код для обеспечения защиты от первого варианта атаки Spectre (CVE-2017-5753) и для блокирования атак Meltdown и Spectre на процессорах с архитектурой ARM64 и S390. Защита от Spectre v1 реализована через добавление макроса array_index_nospec(), предотвращающего выполнение спекулятивных операций, которые могут вызвать обход проверки границ массива. В код для защиты от Spectre v2 добавлена возможность использование MSR-команды IBPB (Indirect Branch Prediction Barriers), представленной в обновлении микрокода. Защита от Meltdown для ARM64 реализована через классический патч PTI, а от Spectre v2 через возможность выборочного отключения блока предсказания переходов. На системах S390 для блокирования Spectre задействован модифицированный вариант защиты retpoline (expoline) и макрос array_index_nospec();
- В гипервизор KVM добавлена поддержка доступного в процессорах AMD механизма Secure Encrypted Virtualization (SEV), который предоставляет средства шифрования памяти для виртуальных машин. Суть метода защиты в интеграции в архитектуру виртуализации AMD-V возможности для прозрачного шифрования памяти виртуальных машин, при которой доступ к расшифрованным данным имеет только текущая гостевая система, а остальные виртуальные машины и даже гипервизор при попытке обращения к этой памяти получают зашифрованные данные;
- В состав включены драйверы для ускорения работы гостевых систем под управлением VirtualBox: Vboxvideo для обеспечения доступа к GPU и Vboxguest с поддержкой средств для переноса данных между гостевой системой и хостом, а также с возможностью проброса команд OpenGL. Не перенесённым в основной состав пока остаётся только драйвер
Vboxsf, предоставляющий функции проброса каталогов;
- По умолчанию для архитектур x86/x86_64 и ARM64 включена опция CONFIG_STRICT_DEVMEM, ограничивающая доступ к /dev/mem из пространства пользователя. Без выключения данной опции root может получить доступ ко всем областям памяти ядра и приложений, а при включении доступ ограничивается только областями отражённой памяти периферийных устройств;
- Дисковая подсистема, ввод/вывод и файловые системы
- Подсистема MultiMediaCard, отвечающая за обработку таких устройств хранения, как SD-карты, переведена на многоуровневую систему очередей (multiqueue), позволяющую организовать многопоточный доступ к данным на многоядерных системах;
- В планировщиках ввода/вывода обеспечена поддержка заблокированных зон на блочных устройствах, что позволяет исключить выполнение перегруппировки операций записи на зонированных устройствах, операции записи на которых должны выполняться последовательно;
- В файловой системе XFS снят флаг экспериментальной разработки с механизма обратного маппинга (rmap, reverse-mapping), позволяющего файловой системе определить владельца любого блока на устройстве хранения. Reverse-mapping может быть использован как основа для реализации таких возможностей, как reflink(), режим copy-on-write для данных, дедупликация, расширенные средства информирования о bad-блоках и дополнительные средства восстановления повреждений;
- В файловую систему CIFS добавлена поддержка режима SMB Direct, который позволяет использовать сетевые адаптеры с функцией удаленного доступа к памяти (RDMA) для увеличения скорости передачи SMB-пакетов;
- В файловой системе Btrfs улучшен код перестроения повреждённых массивов RAID5/6 и реализована поддержка управления резервированием пустых областей через вызов fallocate() в режиме FALLOCATE_FL_ZERO_RANGE;
- В NFS-клиенте изменён метод вызова statx() для исключения обращения к внешнему серверу, если необходимая информация доступна локально.
- Добавлена поддержка экспорта Overlayfs через NFS;
- В системный вызов pwritev2() добавлен флаг RWF_APPEND, при котором данные прикрепляются к хвосту файла, независимо от текущего смещения;
- В AFS добавлена поддержка динамического создания точек монтирования;
- Переработан код обновления поля i_version в inode, которое раньше инкрементировалось при каждом обновлении связанных с inode данных или метаданных, что не востребовано на практике (обычно осуществляется проверка времени изменения, а не версии inode). В новом выпуске сокращено число ситуаций, при которых выполняется обновление i_version, что позволило ускорить операции ввода/вывода небольшого размера. Например, при тестировании утилитой fio конфигурации с XFS поверх DAX и размером записываемого блока 4K пропускная способность чтения/записи увеличилась на 244%;
- Память и системные сервисы
- В планировщике задач deadline, реализующем алгоритм EDF (Earliest Deadline First), основанный на идее выбора задачи из очереди ожидающих процессов, наиболее близкой к истечению крайнего расчётного времени, добавлен учёт изменения частоты CPU и параметров вольтажа, что позволяет обеспечить его оптимальную работу без отключения функций энергосбережения;
- В планировщике CFS (Fair) ограничена автоматическая миграция задач между ядрами CPU - в процессе выполнения прерывания задача теперь может быть перемещена на другое ядро только если новое и старое ядра используют общий кэш;
- В виртуальную машину BPF (Berkeley Packet Filter) добавлена возможность определения и вызова функций в BPF-программах;
- В системный вызов membarrier(), обеспечивающий установку барьеров на память для всех работающих в системе потоков, добавлена новая реализация режима MEMBARRIER_CMD_SHARED_EXPEDITED, позволяющего значительно ускорить выполнение вызова, ценой применения IPI (inter-processor interrupt). В новой реализации проведена работа по предоставлению возможности исключение процессов, для которых отсутствует необходимость в обработке барьеров. Кроме того, процесс теперь должен явно заявить о намерении участия в операциях с глобальными барьерами (MEMBARRIER_CMD_GLOBAL_EXPEDITED) при помощи вызова membarrier() с командой MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED;
- Добавлена новая опция командой строи console_msg_format, которую можно использовать для определения формата в printk(), используемого при выводе записей в syslog;
- Добавлена возможность партицирования L2-кэша CPU для процессоров Intel с поддержкой технологии RDT L2 CDP (Resource Director Technology L2 Code and Data Prioritization), позволяющей управлять размещением кода и данных в L2-кэше. Появление данного режима ожидается в будущих моделях процессоров Intel Atom;
- Flex и Bison добавлены в число зависимостей, необходимых для сборки ядра;
- Сетевая подсистема
- Добавлено новое виртуальное устройство "netdevsim", которое позволяет симулировать различные hardware-offload операции без наличия фактической их поддержки в оборудовании, что может использоваться для тестирования возможностей сетевого стека, связанных с привлечением механизмов аппаратного ускорения обработки пакетов. Например, netdevsim уже применяется для тестирования поддержки offload в BPF;
- Реализация протоколов Netware IPX и NCPFS перемещена в промежуточную staging-ветку ядра и в одном из будущих выпусков будет удалена. Прекращение поддержки IPX и NCPFS обусловлено устаревшим кодом, отсутствием сопровождения и невостребованностью;
- Заметно сокращён размер некоторых структур, используемых для хранения данных маршрутизации. Например, размер записи в структурах rtable и dst_entry сокращён на 48 байт, а в rt6_info на 64 байта;
- Добавлен второй хэш для слушающих TCP-сокетов (listener);
- Избавлен от блокировок код планировщика qdisc (queuing discipline);
- Поддержка архитектур
- В системах на базе архитектуры ARM64 теперь поддерживается использование 52-разрядной физической адресации;
- Для архитектуры PowerPC реализована поддержка механизма PKU ( Memory Protection Keys for Userspace), который можно применять для защиты доступа к страницам памяти из пространства пользователя, без изменения таблиц страниц памяти при изменении домена защиты. Например, указанные системные вызовы можно использовать для дополнительной защиты размещения в памяти ключей шифрования, предоставив возможность чтения только для одного потока в многопоточной программе шифрования;
- Оборудование
- В DRM-драйвере Intel улучшена поддержка чипов Cannonlake (Gen 10), добавлена поддержка новых прошивок для чипов Skylake и Kabylake и улучшены средства виртуализации GPU ( GVT-g);
- В DRM-драйвере Nouveau добавлена поддержка GPU GP108, применяемого в видеокартах серии GeForce GT 1030;
- В DRM-драйвере AMDGPU улучшена поддержка GPU Vega и Raven, в прослойку AMD DC (Display Core) добавлен код для синхронизации между несколькими экранами;
- Добавлена поддержка звуковых подсистем SoC Allwinner A83T, Maxim MAX89373, SocioNext UiniPhier, EVEA Tempo Semiconductor TSCS42xx, TI PCM816x, TAS5722 и TAS6424;
- Для SoC Tegra TX2 реализована поддержка HDMI и I2C;
- Добавлена поддержка новых ARM-устройств, включая Orange Pi R1, D-Link DNS-313 NAS, Actions S700 SoC, Libre Computer Board ALL-H3-CC H3, FreeScale Hummingboard2, Variscite DART-MX6, TS-4600, TS-7970 и Toradex Colibri;
- Удалены старые драйверы для инфракрасных портов LIRC, которые уже давно были объявлены устаревшими.
- Добавлена настройка CONFIG_SATA_MOBILE_LPM_POLICY, позволяющая продлить время автономной работы ноутбуков на базе чипов Intel за счёт использовании более агрессивных настроек ALPM (ATA Link Power Management). При помощи данной опции можно добиться снижения энергопотребления в режиме простоя примерно на 1 Вт;
- Добавлена настройка BT_HCIBTUSB_AUTOSUSPEND, позволяющая включить
автоматический перевод в спящий режим устройств Bluetooth, подключенных через USB, что позволяет снизить энергопотребление примерно на 0.4 Вт;
Одновременно Латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 4.16 - Linux-libre 4.16-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске переработана реализация reject_firmware_nowait, почищены сообщения, которые могут предлагать установку несвободного микрокода, очищен от блобов драйвер mt76x2e. Обновлён код чистки блобов в драйверах i915, nouveau, imx-sdma, iwlwifi, raydium-i2c и silead_dmi. Прекращена чистка драйвера lirc_zilog, в связи с удалением из ядра.
Источники править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.