Релиз ядра Linux 4.17
4 июня 2018 года
После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.17. Несмотря на то, что в процессе цикла разработки ядра 4.17 был преодолён рубеж в 6 млн объектов в Git, Линус решил сохранить интригу и не воспользовался данным поводом для увеличения номера значительной версии ядра, как это делалось для веток 3.x и 4.x. По ощущениям Линуса переходить на нумерацию 5.x ещё рано и скорее всего это произойдёт ко времени выпуска 4.20.
Среди наиболее заметных изменений в ядре 4.17: удаление 8 устаревших процессорных архитектур, добавление в XFS опции lazytime, полная реализация протокола TLS на стороне ядра, защита от уязвимостей Spectre 3a/4, оптимизация планировщика задач для мобильных и встраиваемых систем, снижение энергопотребления в состоянии простоя, поддержка архитектуры Andes Technologies NDS32, поддержка GPU AMD Vega12 и Intel Cannonlake, реализация алгоритмов блочного шифрования SM4 и Speck, стабилизация протокола SMB 3.1.1, поддержка SELinux в SCTP.
В новую версию принято 14.7 тысяч исправлений от 1400 разработчиков, размер патча - 70 Мб (изменения затронули 14170 файлов, добавлено 648108 строк кода, удалено 827247 строк). Около 38% всех представленных в 4.17 изменений связаны с драйверами устройств, примерно 22% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 11% связано с сетевым стеком, 4% - файловыми системами и 4% c внутренними подсистемами ядра.
- Виртуализация и безопасность
- Доведена до полноценного состояния реализация протокола TLS на уровне ядра (KTLS), использование которой позволяет добиться существенного повышения производительности приложений, использующих HTTPS. Реализация выполнена в виде модуля ядра, предоставляющего новый тип сокетов AF_KTLS, которые можно использовать для передачи данных по протоколам TLS 1.2 для TCP и DTLS 1.2 для UDP с применением шифра AES GCM. Добавленный ранее вариант модуля KTLS ограничивался поддержкой передающей стороны, но отныне в ядро включены и компоненты для согласования соединения на стороне получателя, т.е. в ядре теперь имеются все компоненты для полноценной поддержки TLS;
- Добавлен код для защиты от уязвимостей Spectre 3a и Spectre 4 в механизме спекулятивного выполнения инструкций CPU (нераскрытыми остаются ещё 6 проблем из группы Spectre-NG). Кроме включения исправлений на стороне ядра для обеспечения защиты также обязательно требуется обновление микрокода - защита строится на применении MSR-бита SSBD (Speculative Store Bypass Disable), поддержка которого представлена в новом микрокоде. По предварительной оценке включение защиты приводит к снижению производительности на 2-8%. Так как применение защиты от Spectre 4 не всегда оправдано, для её отключения предусмотрена опция speculative_store_bypass_disable, в SECCOMP добавлен специальный флаг и код для автоматического отключения SSB для изолированных процессов, а для приложений предложен новый интерфейс prctl, при помощи которого программы могут определять наличие защиты и выборочно отключать её для отдельных процессов;
- В ядро встроена поддержка блочного шифра Speck, разработанного Агентством национальной безопасности США. Шифр примечателен очень высокой производительностью программной реализации, которая обгоняет AES на системах без наличия средств аппаратного ускорения AES;
- Добавлена поддержка шифрования AES в режиме CFM (Cipher Feedback Mode), наличие которого определено в спецификации TPM2 (Trusted Platform Module);
- Реализована поддержка алгоритма блочного шифрования SM4 (GB/T 32907-2016), стандартизированного для учреждений Китая и применяемого в китайском стандарте Wireless LAN WAPI;
- В протоколе SCTP обеспечена полноценная поддержка SELinux;
- Добавлена возможность управления модулями AppArmor через сокет;
- Дисковая подсистема, ввод/вывод и файловые системы
- Для файловой системы XFS реализована поддержка опции монтирования lazytime, которая даёт возможность отследить время обращения к файлам, но не приводит к возникновению большого числа паразитных операций записи в ФС. Основное отличие от "atime" состоит в том, что время доступа сохраняется в inode, хранящихся в оперативной памяти, и сбрасываемых на диск только при возникновении явных условий или истечения достаточно длительного таймаута (раз в 24 часа). Таким образом для работающих программ возвращается всегда точный atime, но на диске сведения сохраняются с большой задержкой;
- В файловой системе ext4 повышена надёжность работы в условиях обработки некорректных образов ФС, специально модифицированных для вредоносных целей. При этом мэйнтейнер Ext4 по-прежнему считает плохой
идеей предоставление доступа к монтированию произвольных ext4-образов из изолированных контейнеров;
- В файловой системе Btrfs добавлена опция монтирования nossd_spread, отключающая режим оптимизации ssd_spread, при котором при размещении данных осуществляется поиск наибольшей неиспользуемой области на SSD-накопителе. Проведена работа по ускорению операции перестроения массива в режимах RAID5/RAID6. Удалены операции ioctl() с реализацией функциональности управляемых транзакций, которая оказалась невостребованной и не примется на практике;
- С реализации SMB 3.1.1 снят признак экспериментальной разработки. В CIFS добавлена поддержка представленной в спецификации SMB 3.1.1 возможности обеспечения целостности на стадии до прохождения аутентификации. Метод основан на использовании криптографических хэшей на этапе согласования сеанса связи и позволяет защититься от MITM-атак с подменой сообщений для отката на менее защищённые схемы аутентификации;
- В файловой системе F2FS добавлена поддержка помещения в каталог lost+found файлов, потерянных в результате сбоя, но выявленных утилитой fsck. Добавлена опция монтирования fsync_mode, позволяющая выбрать метод вызова fsync для сброса данных на накопитель (поддерживается два режима - posix и strict). Проведена оптимизация производительности для маломощных устройств;
- В файловой системе OverlayFS появилась опция монтирования "xino", обеспечивающая сохранения идентификатора ФС в составе номера inode, что позволяет зафиксировать имена inode и гарантировать, что они не будут меняться во времени. Предложенная опция предотвращает появление в разное время разных номеров inode для одного файла, что может приводить к проблемам в приложениях, манипулирующих данными на уровне inode;
- Память и системные сервисы
- Для более оптимальной работы в условиях нагрузок, свойственных для мобильных и встраиваемых систем, доработан код оценки нагрузки в планировщике задач, прогнозирующий сколько ресурсов CPU может израсходовать каждый работающий процесс для оптимизации выбора режимов работы CPU и распределения процессов по ядрам CPU;
- В системный вызов bpf() добавлена новая команда BPF_RAW_TRACEPOINT, позволяющая привязать BPF-обработчик к точке трассировки (tracepoint - вариант динамических printf(), выставляемых разработчиками программ для анализа поведения системы, к которым затем можно обращаться из LTTng, perf, SystemTap, ftrace). Работа осуществляется без предварительной обработки аргументов tracepoint на стадии до вызова BPF-программы, что позволяет минимизировать накладные расходы при трассировке, но усложняет написание BPF-программы;
- Переработан код для обработки состояний простоя процессора (idle loop), в котором сокращено число краткосрочных переходов на неглубокие уровни экономии энергии. Перевод процессора в состояние idle теперь осуществляется только если планировщик прогнозирует нахождение в данном состоянии достаточно долгое время.
В проведённых разработчиками тестах в состоянии простоя потребление энергии после внесения изменений снизилось на 10% и больше. Кроме того возросла производительность некоторых видов нагрузки, на которые негативно влиял переход в idle-режим;
- Проведена чистка кода подсистемы CPUFreq;
- В команде "perf script" добавлена поддержка скриптов на языке Python 3. В систему трассировки добавлен новый режим "histogram trigger", обеспечивающий формирование вывода данных трассировки в виде наглядных гистограмм;
- Для сборки ядра на системах x86 теперь необходим компилятор с поддержкой специфичного для GCC выражения "asm goto", которое присутствует начиная с GCC 4.5, но пока не поддерживается в Clang. Кроме того, сборка модулей lexer и parser теперь производится в рамках общего сборочного процесса и требует наличия flex и bison (раньше данные модули поставлялись в репозитории в готовом виде);
- Проведена массивная чистка кода от прямого обращения к реализациям системных вызовов внутри ядра. Чистка проведена с целью повышения гибкости интерфейса системных вызовов и упрощения дальнейшей работы по удалению вызовов set_fs(). Изменён и унифицирован механизм обращения к системным вызовам на оборудовании с архитектурой x86-64. Новая схема обращения к системным вызовам обеспечивает защиту от попадания в обработчик системного вызова неиспользуемых, но контролируемых атакующим, данных (например подобная техника была использована в недавней атаке на системы, неверно интерпретировавшие описание поведения инструкций MOV SS/POP SS в документации);
- В состав принята подсистема LKMM (Linux Kernel Memory Consistency Model), включающая набор утилит (размещены в каталоге tools/memory-model/) для формального описания модели связи разных областей памяти ядра. Инструментарий даёт возможность генерировать модули ядра с тестовыми проверками, позволяющими тестировать различные методы работы ядра с памятью и выявлять проблемы связанные с организацией работы блокировок при попытках одновременного доступа к памяти;
- Поведение таймера CLOCK_MONOTONIC приведено в соответствие с таймером CLOCK_BOOTTIME, т.е. таймер теперь учитывает время проведённое системой в спящем режиме без формирования разрыва. Потенциально унификация CLOCK_MONOTONIC и CLOCK_BOOTTIME может привести к нарушению поведения приложений, но проблемы, возникающие из-за пропуска времени, проведённого в спящем режиме, явно перевешивают. Для тех приложений которым действительно нужно учитывать только время в активном состоянии предложен таймер CLOCK_MONOTONIC_ACTIVE;
- Представлена новая ioctl-команда INOTIFY_IOC_SETNEXTWD, позволяющая задать номер дескриптора, который должен быть возвращён при создании следующего дескриптора (используется при заморозке состояния системы при выполнении checkpoint/restart);
- В системный вызов mmap() добавлена опция MAP_FIXED_NOREPLACE, которая пытается разместить новый регион памяти по адресу, заданному пользователем, но в отличие от MAP_FIXED без замены уже существующего маппинга по данному адресу (при пересечении будет выдана ошибка EEXIST);
- Сетевая подсистема
- Протокол RDS (Reliable Datagram Sockets), позволяющий создавать сокеты для надёжной передачи датаграмм поверх TCP-линков, расширен поддержкой режима zero-copy, позволяющего передавать данные без промежуточной буферизации;
- Реализована возможность применения BPF-скриптов для фильтрации трафика, отправленного через системные вызовы sendmsg() и sendfile();
- В системные вызовы bind() и connect() добавлен набор специфичных для cgroups точек подключения BPF-обработчиков. Присоединённые BPF-скрипты могут изменять поведение работы данных системных вызовов;
- С нарушением обратной совместимости изменено 32-разрядное ABI для RDMA. Решение о нарушении совместимости принято так как данный режим пока не используется в реальных приложениях;
- Поддержка архитектур
- Проведена одна из крупнейших чисток кодовой базы от устаревшего кода (удалено 467 тысяч строк кода), в ходе которой удалена поддержка архитектур blackfin, cris, frv, m32r, metag, mn10300, score и tile, а также специфичные для данных архитектур драйверы. Ныне данные архитектуры не используются для создания процессоров, так как производителям дешевле лицензировать более новые ядра CPU от ARM, MIPS или RISC-V. Прошивки для ранее выпущенных чипов остаются на старых версиях ядра Linux и давно не обновлялись до новых веток;
- Добавлена поддержка архитектуры CPU NDS32 (Архивная копия от 30 сентября 2020 на Wayback Machine), развиваемой (Архивная копия от 11 мая 2019 на Wayback Machine) компанией Andes Technologies, и реализованных на её основе процессорных ядер N13, N15, D15, N10 и D10. NDS32 продолжает развитие 16/32-разрядной RISC-подобной архитектуры AndeStar и воплощена в новой серии настраиваемых процессоров AndesCore, которые охватывают широкий диапазон применения во встраиваемой технике, от компактных решений для микроконтроллеров и DSP до специализированных процессоров для ускорения определённых приложений и высокопроизводительных (1 GHz+) систем общего назначения с возможностью запуска Linux;
- Добавлена поддержка появившегося в процессорах SPARC M7 механизма обеспечения целостности данных приложения (ADI, Application Data Integrity). Новая возможность позволяет приложению установить метки на адреса виртуальной памяти (метки представляют собой четырёхбитовые значения, прикреплённые к адресу). В случае последующего обращения к указанной области по адресу без метки будет сгенерировано исключение;
- Для архитектуры ARM реализована поддержка интерфейса SCMI (System Control and Management Interface), представляющего набор возможностей для управления системой и питанием;
- Для 64-разрядных систем PowerPC реализована возможность адресации до 4 ПБ ОЗУ;
- Прекращена поддержка процессоров POWER4, код для которых находился в неработоспособном виде с 2016 года и никто не обратил на это внимание, что свидетельствует об отсутствии пользователей, заинтересованных в данных CPU;
- Оборудование
- В DRM-драйвер AMDGPU добавлена полноценная поддержка GPU AMD Vega12. Для всех поддерживаемых GPU включена по умолчанию прослойка AMD DC (Display Core) с реализацией переработанного кода для управления отображением и поддержкой таких возможностей, как вывод звука через HDMI и DisplayPort, HDMI 2.0 и атомарное переключение видеорежимов. Проведена реструктуризация кода для использования технологии Powerplay. Прекращена поддержка менеджера управления видеопамятью TTM. Добавлены средства для контроля за энергопотреблением в стиле Radeon WattMan (позволяет управлять вольтажом, частотой движка и памяти, скоростью вращения кулера, получать сведения о температуре);
- В драйвере amdkfd для dGPU (дискретные GPU, такие как Fiji, Tonga, Polaris) добавлена поддержка GPUVM и обработки событий KFD, что позволяет запустить поверх ядра стек OpenCL без применения сторонних модулей;
- В DRM-драйвере Intel включен по умолчанию код для поддержки чипов Cannonlake (Gen 10). Добавлена поддержка технологии защиты HDCP (High-bandwidth Digital Content Protection) для шифрования видеосигнала, передаваемого через интерфейсы DVI, DisplayPort, HDMI, GVIF или UDI, с целью улучшения совместимости с существующим оборудованием (спецификация требует применения HDCP при передаче потоков звука в формате TrueHD). Добавлена поддержка портов AUX-F. Предоставлена возможность использования сжатого фреймбуфера для спрайтов. Реализован интерфейс Query uAPI. Обеспечено урезание кэша kmem во время простоя GPU;
- В драйвер Nouveau внесены только мелкие правки, более заметные исправления отложены до следующего выпуска из-за наличия нерешённых проблем;
- Добавлена поддержка панелей ARM Versatile, AUO G104SN02 V2,
KEO TX31D200VM0BAA и Raydium RM68200 720x1280 DSI, HDMI-ресиверов NXP TDA1997x и SoundGraph iMON, тюнеров Sony CXD2880 DVB-T2/T;
- Добавлен драйвер для гигабитных ethernet-адаптеров Microchip LAN743x;
- Добавлена поддержка защищённых процессоров ARM TrustZone CryptoCell и аппаратных генераторов случайных чисел TI Keystone NETCP SA;
- Добавлена поддержка устройств вывода звука с интерфейсом USB, соответствующих спецификации USB Audio Class 3.0;
- Добавлена поддержка новых SoC Allwinner H6, ST STM32MPU, NVIDIA Tegra Tegra194 ("Xavier"), NVIDIA P2972. Добавлена поддержка плат Libre Computer Card ROC-RK3328-CC, Orange Pi Zero+, Teres-I, Olimex som204, Banana Pi M2 Zero, а также плат на базе Nuvoton NPCM и смартфонов Samsung Galaxy S3 и Galaxy S5 на базе SoC Exynos4 и MSM8974.
Одновременно Латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 4.17 - Linux-libre 4.17-gnu (Архивная копия от 27 сентября 2020 на Wayback Machine), очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске прекращена чистка блобов для чипа обработки звука Dreamcast Yamaha AICA, прошивка для которого переведена в разряд СПО. Также прекращена чистка кода USB IrDA из-за удаления данной подсистемы из ядра. Проведена реорганизация кода загрузчика прошивок и скрипта builddeb. Обновлён код чистки блобов в драйверах i915, amdgpu, coda, s5p-mfc, wl1251 и brcmfmac.
Источники[править]
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии[править]
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.