После двух месяцев разработки Линус Торвальдс выпустил ядро Linux 3.14. Среди наиболее заметных улучшений: новый класс планирования задач Deadline, блочное устройство zRAM для хранения раздела подкачки в ОЗУ в сжатом виде, поддержка режима PVH в Xen, поддержка триггеров в системе трассировки, средства для отладки блокировок в пространстве пользователя, планировщик пакетов PIE, механизм защиты KASLR (рандомизация памяти ядра), выделение из sysfs подсистемы kernfs, из Android перенесена система распределения памяти ION.

В новую версию принято более 12 тысяч исправлений от почти 1400 разработчиков, размер патча - 39 Мб (изменения затронули 10.6 тысяч файлов, добавлено 606195 строк кода, удалено 265086 строк). Около 46% всех представленных в 3.14 изменений связаны с драйверами устройств, примерно 19% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 16% связано с сетевым стеком, 5% - файловыми системами и 3% c внутренними подсистемами ядра. 10.2% изменений внесено сотрудниками компании Intel, 7.3% - Red Hat, 4.4% - Linaro, 5% - Samsung, 3.3% - SUSE, 2.9% - IBM, 2.7% - Google, 2.4% - TI, 2.1% - NVIDIA, 2.0% - FOSS Outreach Program for Women, 1.8% - Huawei, 1.3% - Oracle.

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

  • Память и системные сервисы
    • В планировщике задач обеспечена поддержка класса SCHED_DEADLINE, реализующего алгоритм EDF (Earliest Deadline First), основанный на идее выбора задачи из очереди ожидающих процессов, наиболее близкой к истечению крайнего расчётного времени (deadline). SCHED_DEADLINE поддерживает обеспечение работы процессов, требующих выполнения операций в режиме реального времени, предоставляя для подобных задач гарантированное время выполнения, независимо от общего количества обслуживаемых процессов, и реализуя возможность резервирования пропускной способности CPU для процессов.

      Ранее доступный планировщик задач не мог обеспечить такое поведение, так как не способен гарантировать необходимое время выполнения задачи в заданном интервале времени (например, гарантировать выполнение задачи 10 мкс в интервале 100 мкс) из-за того, что переключение между задачами зависит от общего количества обслуживаемых процессов, каждый из которых может выполняться с произвольной задержкой и, таким образом, может задержать выполнение следующей задачи.

    • Снятие ярлыка экспериментальной разработки и перенос из ветки staging в основное дерево ядра подсистемы zRAM, предназначенной для хранения раздела подкачки в памяти в сжатом виде. Суть zRAM сводится к тому, что в памяти создается блочное устройство на которое производится своппинг со сжатием. В настоящее время zRAM уже активно используется в различных потребительских устройствах, в том числе в телеприставках и портативных устройствах на базе платформы Android, ChromeOS и Cyanogenmod.
    • Поддержка триггеров в подсистеме обработки событий трассировки, позволяющей отследить обращение к тем или иным функциям ядра. Триггеры дополняют ранее присутствующую возможность установки контрольных проверок (probe) средствами привязки условных команд, вызываемых при срабатывании контрольной проверки. Через данные команды можно выполнять действия, позволяющие получить дополнительные сведения, такие как включение или выключение событий трассировки или выполнение трассировки стека. Каждая команда может задаваться с использованием фильтра событий, позволяющего триггеру срабатывать только при нужных условиях. Например, выполнение "echo 'stacktrace:5 if bytes_req >= 65536' > /sys/kernel/debug/tracing/events/kmem/kmalloc/trigger" приведёт к установке триггера, выдающего трассировку стека для первых пяти запросов к kmalloc с размером больше 64 Кб.
    • В системе контрольных проверок uprobes (userspace probes), используемой для анализа поведения выполняемых в пространстве пользователя приложений, добавлена поддержка извлечения данных из стека и памяти пользовательского процесса, а также обработка таких типов аргументов, как разыменования, битовые поля, возвращаемые функцией значения и смещения в файлах. Uprobes можно использовать для определения узких мест в производительности, накапливать отладочные данные и информацию о времени выполнения разных частей приложения в полностью прозрачном режиме, никаким образом не влияя на работу отслеживаемого процесса. Запустить и остановить сбор данных можно в любой момент, без перезапуска или модификации программы.
    • Обеспечена возможность использования реализованной на уровне ядра системы lockdep для отладки функционирования блокировок в пространстве пользователя (в частности, для выявления взаимных блокировок в многопоточных программах).
    • В состав ядра принят набор патчей biovec, вносящий некоторые изменения в API блочного уровня ядра, в том числе добавляющие поддержку создания произвольных крупных запросов ввода/вывода и увеличивающих эффективность работы.
    • Добавлена возможность использования системного вызова kexec() на системах с EFI BIOS. Kexec предоставляет возможность загрузки нового экземпляра ядра из уже запущенного ядра Linux, обеспечивая вариант мягкой перезагрузки, без возвращения управления в BIOS.
    • Значительно переработано внутреннее устройство виртуальной файловой системы sysfs. В итоге, представлена новая подсистема "kernfs", на которой теперь базируется sysfs и которая может выступать в качестве основы для других виртуальных ФС. Например, планируется создать виртуальную ФС для управления cgroup.
    • Реализована инфраструктура компонентных подсистем ("componentized subsystems"), предназначенная для управления сложными устройствами, состоящих из нескольких взаимодействующих друг с другом более простых устройств.
    • В подсистему perf events добавлена поддержка механизма учёта энергопотребления "RAPL", используемого в процессорах Intel. Добавлена серия новых опций в утилиту perf.
    • В экспериментальную staging-ветку добавлен используемый в платформе Android механизм распределения памяти ION, нацеленный на эффективное решение проблем с фрагментацией памяти и поддерживающий предоставление совместного доступа к буферам при помощи DMABUF.
  • Сетевая подсистема
    • Добавлен новый планировщик пакетов PIE (Proportional Integral controller Enhanced), созданный в рамках инициативы по борьбе с негативным влиянием промежуточной буферизации пакетов (Bufferbloat) сетевым оборудованием. PIE позволяет поддерживать на заданном уровне среднюю величину задержек для пакетов в очереди. В процессе оценки эффективности работы PIE было выявлено, что алгоритм способен в обеспечить минимальную задержку и высокий уровень утилизации пропускной способности линка при возникновении различных видов перегрузки.
    • Добавлена новая дисциплина организации работы очередей пакетов "heavy-hitter filter" (HHF qdisc), пытающаяся отделять мелкие потоки от больших и помещать большие потоки в отдельную очередь с пониженным приоритетом. Использование HHF позволяет снизить влияние интенсивных передач на критичные к задержкам виды трафика.
    • Добавлена новая возможность "TCP autocorking", позволяющая задержать передачу небольших порций данных для объединения их в более большие пакеты, что позволяет снизить нагрузку на CPU и обеспечить более эффективную пропускную способность. Для управления новой возможностью представлен sysctl tcp_autocorking. По умолчанию поддержка tcp_autocorking включена.
    • Для подсистемы BPF (Berkeley Packet Filter) представлены две новые утилиты, работающие в пространстве пользователя: отладчик и простая реализация ассемблера.
    • Добавлен новый ioctl вызов SIOCGHWTSTAMP, позволяющий приложениям получить текущую конфигурацию меток времени (timestamping), без внесения в неё изменений.
    • Улучшена реализация стека Bluetooth Low Energy: расширено число протоколов, который могут использоваться в режиме низкого энергопотребления Bluetooth, добавлена поддержка эмуляции 6LoWPAN, обеспечена обработка привязанных к соединениям каналов.
  • Дисковая подсистема, ввод/вывод и файловые системы
    • Для файловой системы Btrfs расширен объём информации, предоставляемой через sysfs, в том числе теперь можно получить данные о доступных возможностях и использовании дискового пространства. Ранее указанные данные можно было получить через ioctl(), но sysfs гораздо удобнее для использования в скриптах или из командной строки.
    • В распределённую файловую систему Ceph добавлена поддержка списков контроля доступа (ACL).
  • Виртуализация и безопасность
    • Интегрированы наработки проекта KASLR (аналог ASLR для ядра) с реализацией средств рандомизации раскладки адресного пространства ядра, которые позволили увеличить стойкость ядра к некоторым видам атак, эксплуатирующих уязвимости в ядре. KASLR уже успешно используется для повышения безопасности Chrome OS.
    • Обеспечена возможность сборки ядра с включением улучшенного режима защиты от переполнения стека "-fstack-protector-strong", который появится в GCC 4.9. Сборка в режиме "-fstack-protector-strong" позволяет обеспечить защиту от переполнения стека в большем числе функций ядра, удержав при этом связанные с дополнительной проверкой накладные расходы на приемлемом уровне.
    • В гипервизор Xen добавлена поддержка режима PVH для гостевых систем, который комбинирует элементы режимов паравиртуализации (PV) и полной виртуализации (HVM). В режиме PVH с одной стороны применяется полная виртуализация на уровне ограничения привилегированных инструкций, изоляции системных вызовов и виртуализации таблиц страниц памяти, но с другой стороны используются методы паравиртуализации для ввода/вывода, обработки прерываний, организации загрузки и взаимодействия с оборудованием. Таким образом, PVH, как и режим PV, обеспечивает высокую производительность, благодаря исключению накладных расходов на симуляцию аппаратных устройств, но использует вместо PV MMU свойственные HVM механизмы аппаратной виртуализации для обеспечения более строгой изоляции виртуальных окружений.
    • При работе на системах с архитектурой ARM добавлена поддержка обеспечения защиты от модификации и выполнения блоков text и других данных в модулях ядра, помеченных только на чтение.
  • Аппаратные архитектуры
    • Добавлена поддержка семейства многопоточных многоядерных 32-разрядных процессоров interAptiv, построенных на базе архитектуры MIPS.
    • Для архитектуры m68k обеспечена поддержка системного вызова kexec().
    • В гипервизоре Xen прекращена поддержка архитектуры ia64.
    • Для архитектуры AMD64 добавлена поддержка меток перехода (jump labels) и системы распределения памяти CMA (Contiguous Memory Allocator), которая оптимизирована на выделение больших непрерывных областей памяти с использованием техники перемещения страниц памяти.
    • Поддержка платформ Intel Clovertrail (Atom Z2760), получившей распространение на планшетных ПК под управлением Windows, и Intel Merrifield MID (Atom Z3480), ориентированной на смартфоны.
    • В коде поддержки архитектуры xtensa добавлена поддержка многопроцессорных систем.
  • Оборудование
    • Поддержка переключения видеорежимов в пространстве пользователя (UMS) в DRM-драйвере Intel i915 объявлена устаревшей и будет удалена из работающих на уровне ядра компонентов драйвера через год. Доведена до стабильного состояния поддержка графической подсистемы процессоров на базе микроархитектуры Broadwell, которая придёт на смену Haswell.
    • В DRM-модуле драйвера Nouveau добавлена поддержка GPU NVIDIA серии GK110 ( GeForce GTX 780, GTX Titan) и GK208 (GeForce 630/640).
    • В DRM-модуле драйвера Radeon добавлена поддержка динамического управления питанием (DPM) для новых чипов AMD, в драйвере RadeonSI добавлена поддержка UVD-декодеров GPU.
    • В драйвере vmwgfx, позволяющем использовать 2D/3D-акселерацию в гостевых Linux-системах, работающих под управлением продуктов виртуализации VMware, обеспечена поддержка нового виртуального GPU (SVGA2 Hardware Revision 11).
    • Добавлена поддержка беспроводных адаптеров на базе чипов RealTek RTL8821AE и Marvell 8897, Ethernet-адаптеров на базе чипов Realtek RTL8153 и Intel XL710 X710 (Virtual Function Ethernet), виртуальных InfiniBand-интерфейсов Cisco (Virtual Interface InfiniBand).
    • В Video4Linux добавлена поддержка контроллеров web-камер SoC TI OMAP4, FM-приёмников из Broadcom BCM2048, Silicon Labs Si4713 FM и Thanko Raremono, DVB-S/S2 демодуляторов Montage M88DS3103, тюнеров Montage M88TS2022 и сенсоров камеры Samsung S5K5BAF.
    • Поддержка одночиповых платформ Marvell Berlin, Energy Micro EFM32, MOXA ART, Freescale i.MX50, Hisilicon Hi36xx/Hi37xx, Snapdragon 800 MSM8974, Freescale TWR-P102x PowerPC и Motorola/Emerson MVME5100.
    • Поддержка SDHCI-контроллеров Arasan.
    • Поддержка криптографических сопроцессоров AMD (CCP) и Freescale MXS DCP.


Источник: http://www.opennet.ru/opennews/art.shtml?num=39390