После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.0. Среди наиболее заметных улучшений: интеграция базовых компонентов для обновления ядра Linux без перезагрузки, поддержка нескольких слоёв на чтение в overlayfs, реализация механизма для выявления ошибок работы с памятью, поддержка энергонезависимой памяти (NVM), возможность привязки к хостам алгоритмов контроля перегрузки, возможность установки меток на сетевые пакеты в модулях Smack, добавление в ext4 опции lazytime.
Переход к номеру версии 4.0, вместо ожидаемого выпуска 3.20, осуществлён после проведения голосования, в котором приняло участие более 31 тысячи участников сообщества, из которых 56% посчитали, что настало время выпуска версии 4.0. Переход к нумерации 4.x является формальным шагом, обусловленным лишь эстетическими соображениями. Текущий выпуск ядра оказался как нельзя лучшим претендентом на смену нумерации. Репозиторий приблизился к отметке в 500 тысяч коммитов и преодолел рубеж в 4 млн объектов. При выпуске ядра 3.0 были преодолены рубежи в 250 тысяч коммитов и 2 млн объектов в Git.
В 2013 году рассматривалась идея использования смены первого номера в версии как дополнительного стабилизирующего этапа (предлагалось включить в ядро 4.0 только исправления ошибок, без функциональных изменений и новшеств), но данная идея была отвергнута. С точки зрения функциональности выпуск 4.0 не содержит кардинальных изменений или нарушений совместимости и не выделяется среди остальных выпусков, плавно продолжая развитие текущей кодовой базы. Цикл разработки 3.20/4.0 был относительно расслабленным и принёс заметно меньше существенных изменений, чем наблюдалось в прошлые выпуски (10 тыс изменений против 12.5 тысяч в ядре 3.19). Прошлая смена нумерации была произведена в 2011 году, когда в ветке 2.6.x накопилось 39 релизов, на подготовку которых было потрачено 10 лет.
В новую версию принято более 10 тысяч исправлений от 1403 разработчиков, размер патча - 34 Мб (изменения затронули 9489 файлов, добавлено 509084 строк кода, удалено 327296 строк). Около 45% всех представленных в 4.0 изменений связаны с драйверами устройств, примерно 16% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 4% - файловыми системами и 4% c внутренними подсистемами ядра. 11.6% изменений внесено сотрудниками компании Intel, 7% - Red Hat, 4.6% - SUSE, 4.0% - Linaro, 3.6% - Samsung, 2.2% - IBM, 1.6% - Freescale, 1.5% - Google, 1.4% - AMD, 1.4% - Texas Instruments, 1.4% - Oracle, 1.2% - Qualcomm, 1.2% - ARM.
Из наиболее интересных новшеств можно отметить:
- Память и системные сервисы
- Интеграция базовой инфраструктуры, предоставляющей универсальный API для горячего наложения патчей на ядро. Код подготовлен в результате сотрудничества разработчиков SUSE и Red Hat, которые согласились задействовать данный API в реализациях систем обновления ядра без перезагрузки - kPatch и kGraft. В текущем виде, добавленный в ядро код позволяет создавать простые патчи для горячего устранения некоторых типов уязвимостей, но пока не может быть использован для более сложных изменений, так как не предоставляет средств для обеспечения непротиворечивости. Подробнее об особенностях добавленной в ядро инфраструктуры и отличиях kPatch от kGraft можно прочитать в ранее опубликованном анонсе.
- Приняты патчи для поддержки энергонезависимой памяти (NVM, non-volatile memory), сочетающей производительность ОЗУ с возможностью постоянного хранения содержимого.
- В состав исходных текстов ядра включена подборка вспомогательных скриптов scripts/gdb, упрощающих отладку с использованием GDB;
- Представлен новый отладочный механизм KASan (Kernel address sanitizer), который позволяет выявлять ошибки работы с памятью и факты некорректного обращения к памяти, такие как помещение кода в области памяти, не предназначенные для подобных манипуляций. Применение KASan пока ограничено архитектурой x86_64;
- Ядро теперь может быть собрано для запуска нитей RCU grace-period-handling с использованием системы приоритетов режима реального времени, что может оказаться полезным для выскоконагруженных систем;
- Удалён ранее объявленный устаревшим системный вызов remap_file_pages(), вместо которого добавлена заглушка, симулирующая его функциональность через использование нескольких виртуальных областей памяти, что позволило сохранить работоспособность приложений, использующих данный системный вызов;
- В механизм pstore, позволяющий сохранить отладочную информацию о причине краха в области памяти, не теряемые между перезагрузками, добавлена реализация специального файла /dev/pmsg0, позволяющего помещать в хранилище информацию из пространства пользователя.
- Реализация шины I2O перемещена в директорию staging в связи с планами по исключению в будущем подсистемы I2O из состава ядра;
- Дисковая подсистема, ввод/вывод и файловые системы
- В OverlayFS добавлена возможность использования более одного слоя, доступного только на чтение;
- Для файловых систем реализована поддержка опции монтирования lazytime, которая даёт возможность отследить время обращения к файлам, но не приводит к возникновению большого числа паразитных операций записи в ФС. Основное отличие от "atime" состоит в том, что время доступа сохраняется в inode, хранящихся в оперативной памяти, и сбрасываемых на диск только при возникновении явных условий или истечения достаточно длительного таймаута (раз в 24 часа). Таким образом для работающих программ возвращается всегда точный atime, но на диске сведения сохраняются с большой задержкой. Данный режим пока доступен только для ФС ext4;
- Реализация блочного сервера pNFS, позволяющего NFS-клиентам подключаться к совместно используемым дискам с применением блочного ввода/вывода вместо операций чтения и записи NFS. Поддержка нового режима пока реализована только для файловой системы XFS;
- Поддержка в pNFS слоя Flexible File Layout, позволяющем сохранять метаданные отдельно от содержимого файлов. Например, метаданные могут отдаваться с использованием NFSv4.1, а содержимое файлов при помощи протокола, предоставляемого хранилищем;
- В файловую систему Btrfs принята часть подготовленных компанией Facebook изменений, направленных на более грамотную обработку ситуаций исчерпания свободного дискового пространства. В Btrfs также внесена порция исправлений и чисток, большинство из которых связаны с обеспечением работы RAID 5/6;
- В dm-crypt внесены оптимизации для увеличения масштабируемости, которые позволили поднять производительность на крупных нагруженных системах.
- В файловой системе ubifs, предназначенной для использования на Flash-накопителях, обеспечена поддержка блочного слоя blk-mq (multiqueue block layer) с многоуровневой моделью очередей, рассчитанного на организацию многопоточного доступа к данным на многоядерных системах и позволяющего эффективно использовать возможности современных SSD-накопителей. В ubifs также добавлена поддержка расширенных атрибутов "security.*";
- Виртуализация и безопасность
- Подсистема Open vSwitch теперь генерирует собственные идентификаторы потока ("flow IDs"), которые используются для идентификации сетевых потоков в пространстве пользователя, что может привести к увеличению производительности до 40%;
- Подсистема Virtio (Virtual I/O Device) приведена в соответствие к недавно принятому стандарту virtio 1.0;
- Модулям безопасности Smack предоставлена возможность взаимодействовать с системой netfilter через установку меток на проходящие через фильтр пакеты.
- Код механизма межпроцессного взаимодействия Binder, созданный для платформы Android, снабжён хуками для применения политик SELinux;
- Сетевая подсистема
- В подсистеме управления трафиком добавлена поддержка фильтров, написанных с использованием языка виртуальной машины eBPF;
- В сетевом стеке обеспечена поддержка применения для определённых хостов специфичных алгоритмов контроля перегрузки (congestion-control) с привязкой через таблицу маршрутизации;
- В реализации сетевого протокола TIPC (Transparent Inter-process Communication), предназначенного для организации межпроцессного взаимодействия в кластере, обеспечена поддержка изолированных пространств имён (namespace);
- Оборудование
- Прекращена поддержка запуска 32-разрядных исполняемых файлов HP-UX на архитектуре PA-RISC;
- В драйвер Radeon добавлена поддержка передачи аудиоданных через интерфейс DisplayPort и решены проблемы с производительностью GPU AMD семейства Hawaii (R9 290 и R9 290X). В состав также включены патчи для улучшения управления системой охлаждения GPU на основе GCN, которые приводят к ощутимому снижению уровня шума для GPU за счёт снижения частоты вращения вентилятора;
- Расширены возможности драйверов для видеокарт Intel, включая начальную поддержку оборудования Intel Skylake;
- В Nouveau произведено слияние с драйвером для видеоподсистем NVIDIA, используемых в SoC на базе процессоров ARM. Добавлены средства для управления частотой GPU GK20A (Tegra K1);
- В подсистему LED добавлен новый класс устройств, позволяющий использовать светодиоды в режиме "вспышки" (как в фотокамере);
- Поддержка звуковых карт Studio Evolution SE6X;
- Поддержка сетевых контроллеров Rockchip SoC RK3288 10/100/1000 Ethernet, HISILICON P04 Ethernet, TI Keystone NETCP Ethernet, Kvaser USBcan II CAN, PEAK PCAN-USB/USB Pro CAN-FD.
- Поддержка SCSI-контроллеров Qualcomm UFS PHY;
- Поддержка USB-контроллеров Rockchip USB2 PHY и NXP ISP1761;
- В Video4Linux добавлена поддержка устройств захвата видео TI AM437x VPFE, декодеров Philips RC5/RC6 и USB-камер Touptek.
- Поддержка плат Intel Quark X1000, процессоров MIPS, построенных на базе архитектуры MIPS32 R6, процессоров IBM s/390 z13, одноплатных ПК Artesyn MVME2500, Conexant Digicolor SoC, NVIDIA Tegra132 SoC, Freescale LS2085A SoC и Mediatek MT65xx & MT81xx ARMv8 SoC.
|