Linux Kernel

После двух месяцев разработки Линус Торвальдс представил релиз ядра 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-контроллера.
    • Добавлены подготовленные в рамках проекта LLVMLinux новые патчи для улучшения сборки с использованием компилятора Clang. Пока цель проекта ещё не достигнута и ядро из коробки не может быть собрано без дополнительных патчей при помощи 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;
  • Дисковая подсистема, ввод/вывод и файловые системы
    • В подсистему FUSE (filesystems in user space) добавлена поддержка кэширования с отложенной записью (writeback), которое позволяет поднять производительность в условиях интенсивность записи;
    • В Device Mapper добавлен новый модуль "dm-era", предназначенный для поддержания списка блоков, изменённых за определённый пользователем промежуток времени. С практической стороны, при помощи dm-era можно отслеживать изменённые блоки для систем резервного копирования или частично сбрасывать кэш для восстановления состояния после отката на снапшот;
    • Добавлен драйвер, позволяющий представить Flash-накопитель в виде блочного устройства (пока только в режиме только для чтения), что позволяет использовать любую файловую систему поверх raw Flash-устройства;
    • В файловые системы ext4 и XFS в системный вызов fallocate() добавлена поддержка операций 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;