Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
iakovlev.org

Ядро 3.15

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 3.15. Отмечается, что выпуск 3.15 является одним из самых больших по размеру изменений за всю историю проекта. При этом, изменения не связаны с реализацией каких-то отдельных значительных новшеств, а обусловлены принятием большого числа мелких доработок и внутренних переделок. Среди наиболее заметных улучшений: ускорен возврат из ждущего режима, значительно улучшена подсистема управления памятью, добавлен смешанный режим EFI, поддержка меток в ipset, новый JIT-компилятор BPF, кэш отложенной записи в FUSE, Device Mapper модуль "dm-era".

В новую версию принято более 12 тысяч исправлений от 1400 разработчиков, размер патча - 57 Мб (изменения затронули 11428 файлов, добавлено 932468 строк кода, удалено 571846 строк). Около 44% всех представленных в 3.15 изменений связаны с драйверами устройств, примерно 18% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 4% - файловыми системами и 4% c внутренними подсистемами ядра.

Из наиболее интересных новшеств можно отметить:

  • Память и системные сервисы
    • Включены наработки компании Intel по ускорению процесса возврата из ждущего режима на системах с дисковыми контроллерами SATA. Благодаря организации асинхронного одновременного вывода из ждущего режима дисков и прочих устройств, время пробуждения ноутбуков удалось сократить в 7-12 раз. Например, время вывода из ждущего режима компьютера на базе Intel Core i7 3960X уменьшилось с 11.6 до 1.1 секунд (в 10.5 раз), ноутбука на базе Intel Core i7 3770 с 5.4 до 0.45 секунд (в 12 раз), а ноутбука на базе Intel Core i7 4770S с 5.4 до 0.69 секунд (в 7.8 раз). Ранее узким местом возврата из ждущего режима было ожидание готовности SATA-контроллеров после поступления питания. Теперь, драйвер дискового контроллера мгновенно возвращает управление, не дожидаясь запуска контроллера (поступающие до готовности контроллера обращения к диску приостанавливаются), что позволяет ядру во время пробуждения SATA-контроллера выполнить другие операции возврата из ждущего режима, не связанные с дисковым вводом/выводом, например, инициализировать графическую подсистему;
    • Добавлены новые патчи для улучшения сборки с использованием компилятора Clang, подготовленные в рамках проекта LLVMLinux. Пока ядро из коробки не может быть собрано при помощи Clang без дополнительных патчей, но цель уже очень близка. Недостающие патчи планируется интегрировать в ядро 3.16;
    • Реализация смешанного режима EFI (EFI mixed mode), который позволяет загрузить 64-разрядное ядро из 32-разрядной прошивки, что может потребоваться при работе загрузчиков с поддержкой протокола EFI Handover;
    • В подсистему обеспечения эффективного управления питанием (pm_qos) добавлена поддержка режима "терпимой отзывчивости" (DEV_PM_QOS_LATENCY_TOLERANCE) с реализацией механизма передачи устройству данных о требуемой отзывчивости, что может быть использовано для предотвращения ввода устройства в слишком глубокие режимы энергосбережения, если выставленное QoS-значение требует оперативного пробуждения;
    • Добавлен системный вызов renameat2, предоставляющий средства для атомарной замены имён двух файлов (первый файл переименовывается во второй, а второй в первый). Также добавлен флаг RENAME_NOREPLACE, при котором операция переименования не приводит к замене уже существующего файла;
    • Поддержка приватных для файлов POSIX-блокировок (file-private POSIX locks), предоставляющих более приемлемый для многопоточных программ API для организации блокировок доступа к файлам, комбинирующий возможности механизмов BSD- и POSIX- блокировок. Основное отличие от классических POSIX-блокировок заключается во владельце блокировки: классической POSIX-блокировкой владеет процесс, а приватная POSIX-блокировка принадлежит открытому файлу;
    • Значительно улучшена работа системы управления памятью в плане создания эвристических методов для балансировки между active/inactive списками в ситуации кратковременного вывода страниц из памяти. Включен набор патчей для оптимизации VMA-кэширования (Virtual Memory Areas) в привязке к отдельным нитям. В итоге, удалось добиться повышения производительности подсистемы управления памятью для различных типов нагрузки;
    • В блочном устройстве zRAM, применяемом для хранения раздела подкачки в ОЗУ в сжатом виде, обеспечена поддержка метода сжатия LZ4;
  • Сетевая подсистема
    • В интерфейс фильтрации пакетов ipset добавлен новый тип наборов "hash:ip,mark" для сопоставления с пакетами, на которые установлены определённые метки, добавленные при помощи высокоуровневых утилит;
    • Переписана реализация JIT-компилятора для кода BPF с задействованием нового набора инструкций BPF. Язык BPF теперь представлен в двух вариантах - "классический BPF" и "внутренний BPF", полностью скрытый от пространства пользователя (транслируется из классического BPF перед первым запуском) и быстрее компилируемый в машинный код. Во "внутреннем BPF" с двух до десяти расширено число регистров, добавлена серия инструкций соответствующих реальным процессорным инструкциям, реализованы 64-разрядные регистры, добавлена возможность обращения к ограниченным функциям ядра. В будущем планируется предоставить возможность загрузки "внутреннего BPF" из пространства пользователя (например, для использования компиляторов в BPF из Си-подобных сценариев) и реализовать средства для применения BPF в подсистемах ядра, отличных от сетевой (например, задавать в BPF правила трассировки).
  • Дисковая подсистема, ввод/вывод и файловые системы
    • В подсистему FUSE (filesystems in user space) добавлена поддержка кэширования с отложенной записью (writeback), которое позволяет поднять производительность в условиях интенсивность записи;
    • В Device Mapper добавлен новый модуль "dm-era", предназначенный для поддержания списка блоков, изменённых за определённый пользователем промежуток времени. С практической стороны, при помощи dm-era можно отслеживать изменённые блоки для систем резервного копирования или частично сбрасывать кэш для восстановления состояния после отката на снапшот;
    • Добавлен драйвер, позволяющий представить Flash в виде блочного устройства (пока только в режиме только для чтения), что позволяет использовать любую файловую систему поверх Flash-устройств в raw-режиме;
    • В реализацию системного вызова fallocate() для файловых систем ext4 и XFS добавлена поддержка операций FALLOC_FL_ZERO_RANGE и FALLOC_FL_COLLAPSE_RANGE, позволяющего предварительно выделять место под файлы с определением нулевых и неопределённых (недоступных на чтение до заполнения) диапазонов;
    • Для файловой системы XFS реализована поддержка флага O_TMPFILE, позволяющего передать файловой системе информацию о создании временного файла, не видимого в иерархии ФС. Создание временного файла без имени позволяет разработчикам приложений не задумываться о возможных уязвимостях, таких, как атака через символические ссылки;
    • Поддержка монтирования подразделов Btrfs с разными опциями ro/rw;
    • Удалена реализация /proc/device-tree со сведениями Device Tree. Вместо /proc/device-tree следует использовать область /sys/firmware/devicetree/base, символической ссылкой на которую теперь является /proc/device-tree;
  • Виртуализация и безопасность
    • Для архитектуры x86 теперь не допускается создание 16-разрядных сегментов при работе в 64-разрядном режиме. Изменение внесено так как использование 16-разрядых сегментов может привести к потенциальным проблемам с безопасностью, связанным с утечкой информации из ядра. C небольшой вероятностью данное изменение может нарушить работоспособность некоторых приложений в пространстве пользователя, в частности, перестанут работать 16-разрядные приложения, наличие которых под большим вопросом.
    • В предоставляемом ядром генераторе псевдослучайных чисел в качестве одного из дополнительных источников энтропии обеспечена поддержка данных, получаемых через инструкцию RDSEED, появившуюся в процессорах Intel Broadwell;
    • Код рандомизации адресного пространства ядра расширен поддержкой рандомизации базовых адресов загружаемых модулей;
  • Аппаратные архитектуры
    • Поддержка MIPS-систем на базе архитектуры CPS (Coherent Processing System);
    • Для архитектуры ARM добавлена поддержка системы контрольных проверок uprobes (userspace probes), используемой для анализа поведения выполняемых в пространстве пользователя приложений;
    • Для архитектуры Tile добавлена поддержка подсистемы perf events;
    • Прекращена поддержка устаревших субархитектур x86: Unisys ES7000, IBM Summit/EXA, SGI Visual Workstation, NUMAQ.
    • Поддержка новых векторных инструкций AVX-512, которые появятся в будущих выпусках Xeon Phi и других процессоров Intel;
    • Для архитектуры arm64 добавлена поддержка отладчика KGDB;
  • Оборудование
    • Поддержка процессоров Loongson 3, а также систем Marvell Armada 375, 380 и 385, Broadcom BCM470X и BCM5301X;
    • Поддержка SATA-контроллеров Allwinner A10/A20 AHCI, APM X-Gene AHCI и DaVinci DA850 AHCI;
    • В DRM-модуль драйвера Nouveau добавлена поддержка GPU NVIDIA Maxwell;
    • В DRM-модуль драйвера Radeon добавлена поддержка ускорения кодирования видео H.264 с привлечением VCE-движков современных GPU;
    • В DRM-модуле драйвера Intel i915 улучшена поддержка графической подсистемы процессоров Broadwell, обеспечена поддержка PPGTT (Per-Process Graphics Translation Tables), улучшена поддержка DisplayPort;
    • В драйвере Qualcomm MSM обеспечены средства управления питанием и поддержка вывода звука через HDMI.
    • Оставьте свой комментарий !

      Ваше имя:
      Комментарий:
      Оба поля являются обязательными

       Автор  Комментарий к данной статье