Релиз ядра Linux 4.16

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.16. Среди наиболее заметных изменений: интеграция гипервизора Jailhouse, блокирование некоторых операций копирования данных между ядром и пространством пользователя, учёт режимов энергосбережения CPU в планировщике deadline, подготовка к прекращению поддержки IPX и NCPFS, поддержка механизма AMD Secure Encrypted Virtualization в KVM.

В новую версию принято около 12 тысяч исправлений от 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) для kvm и sctp (ipv6). В настоящее время механизм активирован в режиме информирования, при котором в лог записываются предупреждения о проблемных операциях, без их фактического блокирования;
    • Продолжение реализации техник защиты от атак Meltdown и Spectre. Например, добавлен код для обеспечения защиты от первого варианта атаки Spectre (CVE-2017–5753) и для блокирования атак Meltdown и Spectre на процессорах с архитектурой ARM64 и S390. Защита от Spectre v1 реализована через использование MSR-команды IBPB (Indirect Branch Prediction Barriers) и добавление макроса array_index_nospec (), предотвращающего выполнение спекулятивных операций, которые могут вызвать обход проверки границ массива. Защита от Meltdown для ARM64 реализована через классический патч KPTI, а от Spectre v2 через возможность выборочного отключения блока предсказания переходов. На системах S390 для блокирования Spectre задействован модифицированный вариант защиты retpoline (expoline) и макрос array_index_nospec ();
    • В гипервизор KVM добавлена поддержка предоставляемого в процессорах AMD механизма Secure Encrypted Virtualization (SEV), который предоставляет средства шифрования памяти для виртуальных машин. Суть метода защиты в интеграции в архитектуру виртуализации AMD-V возможности для прозрачного шифрования памяти виртуальных машин, при которой доступ к расшифрованным данным имеет только текущая гостевая система, а остальные виртуальные машины и даже гипервизор при попытке обращения к этой памяти получают зашифрованные данные;
    • В состав включён драйвер для ускорения работы гостевых систем под управлением VirtualBox;
    • По умолчанию для архитектур 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 добавлена поддержка динамического создания точек монтирования;
  • Память и системные сервисы
    • В планировщике задач deadline, реализующего алгоритм EDF (Earliest Deadline First), основанный на идее выбора задачи из очереди ожидающих процессов, наиболее близкой к истечению крайнего расчётного времени, добавлен учёт изменения частоты CPU и параметров вольтажа, что позволяет обеспечить его оптимальную работу без отключения функций энергосбережения;
    • В планировщике 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;
  • Сетевая подсистема
    • Добавлено новое виртуальное устройство «netdevsim», которое позволяет симулировать различные hardware-offload операции без наличия фактической их поддержки в оборудоваии, что может использоваться для тестирования возможностей сетевого стека, связанных с привлечением механизмов аппаратного ускорения обработки пакетов. Например, netdevsim уже применяется для тестирования поддержки offload в BPF;
    • Реализация протоколов Netware IPX и NCPFS перемещена в промежуточную staging-ветку ядра и в одном из будущих выпусков будет удалена. Прекращение поддержки IPX и NCPFS обусловлено устаревшим кодом, отсутствием сопровождения и невостребованностью;
  • Поддержка архитектур
    • В системах на базе архитектуры ARM64 теперь поддерживается использование 52-разрядной физической адресации;
    • Для архитектуры PowerPC реализована поддержка механизма PKU (Memory Protection Keys for Userspace), который можно применять для защиты доступа к страницам памяти из пространства пользователя, без изменения таблиц страниц памяти при изменении домена защиты. Например, указанные системные вызовы можно использовать для дополнительной защиты размещения в памяти ключей шифрования, предоставив возможность чтения только для одного потока в многопоточной программе шифрования;
  • Оборудование
    • В DRM-драйвере Intel улучшена поддержка чипов Cannonlake (Gen 10) и добавлена поддержка новых прошивок для чипов Skylake и Kabylake;
    • В 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;

Одновременно Латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 4.16 — Linux-libre 4.16-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске переработана реализация reject_firmware_nowait, почищены сообщения, которые могут предлагать установку несвободного микрокода, очищен от блобов драйвер mt76×2e. Обновлён код чистки блобов в драйверах i915, nouveau, imx-sdma, iwlwifi, raydium-i2c и silead_dmi. Прекращена чистка драйвера lirc_zilog, в связи с удалением из ядра.

© OpenNet