Релиз ядра Linux 4.0
После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.0. Среди наиболее заметных улучшений: интеграция базовых компонентов для обновления ядра Linux без перезагрузки, поддержка нескольких слоёв на чтение в overlayfs, реализация блочного сервера pNFS, возможность привязки к хостам алгоритмов контроля перегрузки, возможность установки меток на сетевые пакеты в модулях Smack, добавление в ext4 опции lazytime. Переход к номеру версии 4.0, вместо ожидаемого выпуска 3.20, осуществлён после проведения голосования, в котором приняло участие более 31 тысячи участников сообщества, из которых 56% посчитали, что настало время выпуска версии 4.0. Переход к нумерации 4.x является формальным шагом, обусловленным лишь эстетическими соображениями. Текущий выпуск ядра оказался как нельзя лучшим претендентом на смену нумерации. Цикл разработки 3.20/4.0 был относительно расслабленным и принёс заметно меньше существенных изменений, чем наблюдалось в прошлые выпуски (10 тыс изменений против 12.5 тысяч в ядре 3.19). Кроме того, репозиторий приблизился к отметке в 500 тысяч коммитов и преодолел рубеж в 4 млн объектов. При выпуске ядра 3.0 были преодолены рубежи в 250 тысяч коммитов и 2 млн объектов в Git.
В 2013 году рассматривалась идея использования смены первого номера в версии как дополнительного стабилизирующего этапа (предлагалось включить в ядро 4.0 только исправления ошибок, без функциональных изменений и новшеств), но данная идея была отвергнута. С точки зрения функциональности выпуск 4.0 не содержит кардинальных изменений или нарушений совместимости и не выделяется среди остальных выпусков, плавно продолжая развитие текущей кодовой базы. Прошлая смена нумерации была произведена в 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 можно прочитать в ранее опубликованном анонсе. В реализации сетевого протокола TIPC (Transparent Inter-process Communication), предназначенного для организации межпроцессного взаимодействия в кластере, обеспечена поддержка изолированных пространств имён (namespace); Ядро теперь может быть собрано для запуска нитей RCU grace-period-handling с использованием системы приоритетов режима реального времени, что может оказаться полезным для выскоконагруженных систем; Удалён ранее объявленный устаревшим системный вызов remap_file_pages (), вместо которого добавлена заглушка, симулирующая его функциональность через использование нескольких виртуальных областей памяти, что позволило сохранить работоспособность приложений, использующих данный системный вызов; Дисковая подсистема, ввод/вывод и файловые системы В OverlayFS добавлена возможность использования более одного слоя, доступного только на чтение; Для файловых систем реализована поддержка опции монтирования lazytime, которая даёт возможность отследить время обращения к файлам, но не приводит к возникновению большого числа паразитных операций записи в ФС. Основное отличие от «atime» состоит в том, что время доступа сохраняется в inode, хранящихся в оперативной памяти, и сбрасываемых на диск только при возникновении явных условий или истечения достаточно длительного таймаута (раз в 24 часа). Таким образом для работающих программ возвращается всегда точный atime, но на диске сведения сохраняются с большой задержкой. Данный режим пока доступен только для ФС ext4; Реализация блочного сервера pNFS, позволяющего NFS-клиентам подключаться к совместно используемым дискам с применением блочного ввода/вывода вместо операций чтения и записи NFS. Поддержка нового режима пока реализована только для файловой системы XFS; В файловую систему Btrfs принята часть подготовленных компанией Facebook изменений, направленных на более грамотную обработку ситуаций исчерпания свободного дискового пространства; В dm-crypt внесены оптимизации для увеличения масштабируемости, которые позволили поднять производительность на крупных нагруженных системах. Виртуализация и безопасность Подсистема Open vSwitch теперь генерирует собственные идентификаторы потока («flow IDs»), которые используются для идентификации сетевых потоков в пространстве пользователя, что может привести к увеличению производительности до 40%; Подсистема Virtio (Virtual I/O Device) обновлена для соответствия недавно принятому стандарту virtio 1.0; Модулям безопасности Smack предоставлена возможность взаимодействовать с системой netfilter через установку меток на проходящие через фильтр пакеты. Сетевая подсистема В подсистеме управления трафиком добавлена поддержка фильтров, написанных с использованием языка виртуальной машины eBPF; В сетевом стеке обеспечена поддержка применения для определённых хостов специфичных алгоритмов контроля перегрузки (congestion-control) с привязкой через таблицу маршрутизации; Оборудование В драйвер Radeon добавлена поддержка передачи аудиоданных через интерфейс DisplayPort и решены проблемы с производительностью GPU AMD семейства Hawaii (R9 290 и R9 290X). В состав также включены патчи для улучшения управления системой охлаждения GPU на основе GCN, которые приводят к ощутимому снижению уровня шума для GPU за счёт снижения частоты вращения вентилятора; Расширение возможностей драйверов для видеокарт Intel, включая начальную поддержку оборудования Intel Skylake; В Nouveau произведено слияние с драйвером для видеоподсистем NVIDIA, используемых в SoC на базе процессоров ARM. Добавлены средства для управления частотой GPU GK20A (Tegra K1); Поддержка звуковых карт 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; В Video4Linux добавлена поддержка устройств захвата видео TI AM437x VPFE, декодеров Philips RC5/RC6 и USB-камер Touptek. Поддержка плат Intel Quark X1000 и процессоров MIPS, построенных на базе архитектуры MIPS32 R6.
© OpenNet