Ядерный таймлайн. Обзор нововведений в последних ядрах LinuxЕвгений «j1m» Зобнин (zobnin@gmail.com) Ядро Linux развивается стремительными темпами. Все больше энтузиастов и компаний используют его как площадку для своих экспериментальных наработок, многие из которых успешно перекочевывают в официальную ветку. Современный Linux - это неисчерпаемый кладезь идей, ежегодно пополняемый десятками новых интереснейших наработок. Не стали исключением и последние два года. 2007 год. Версии 2.6.20-2.6.23Версия 2.6.20 получает базовую поддержку паравиртуализации, реализованную для процессоров семейства i386. Для версии 2.6.21 поверх этой системы добавляется реализация протокола WMI (Virtual Machine Interface), разработанного компанией VMWare и предназначенного для «общения» гостевых ОС с гипервизором. Linux теперь способен работать поверх VMWare в режиме паравиртуализации без каких-либо дополнительных патчей. В ядре 2.6.23 появляется поддержка работы поверх Xen и режим lguest (Linux внутри Linux). В 2.6.20 интегрирована новая система виртуализации KVM (Kernel-based Virtual Machine). Она представляет собой драйвер для поддержки технологий SVM/AMD-V и Intel VT. Традиционные виртуальные машины, работающие в пространстве пользователя, могут использовать этот драйвер для исполнения кода гостевых ОС на реальном процессоре. Сами разработчики предлагают скачать слегка модифицированную версию qemu для использования в связке со своей разработкой. В руках разработчиков появляется новая система Fault injection, гененерирующая разнообразные фиктивные ошибки в подсистемах ядра. Новинку можно использовать, чтобы тестировать поведение кода в непредсказуемых ситуациях. SGI разрабатывает и дарит мантейнерам Linux новый Slab allocator SLUB, оптимизированный для SMP-систем с очень большим количеством узлов. Slab allocator – очень важный компонент ядра, занимающийся выделением, кешированием и освобождением памяти для разнообразных объектов ядра. Его новая реализация становится стандартной в 2.6.23. Дальше - больше. В ядро принимают патчи с реализацией нового беспроводного стека, разработанного компанией Devicescape, специализирующейся на WiFi-технологиях. Более гибкий, удобный в управлении, поддерживающий софтверную реализацию MAC, WEP, WPA, QoS, 802.11g и мосты канального уровня, он без лишних обсуждений заменяет прежнюю реализацию. Замене подвергается и FireWire-стек. Свежеиспеченный вариант становится намного проще, удобнее в использовании, но сохраняет обратную совместимость. 2.6.24 - 25 январяОбъявляется механизм Control Groups и привязанная к нему файловая система cgroups. В совокупности они позволяют управлять процессами, памятью и другими ресурсами как обособленными объектами, не следующими общей семантике поведения операционной системы. Это первая ласточка нового механизма управления изолированными окружениями, и вокруг нее будет построена целая система виртуализации. Также приняты патчи, уменьшающие фрагментацию при распределении страниц памяти (работы в этой области велись три года), и поддержка системы Task Control Groups, которая позволяет группировать процессы - этот подход используется планировщиком CFS и механизмом Cpusets (привязка группы процессов к конкретному процессорному ядру). Разработчики продолжают пилить планировщик CFS. Он становится на 10% производительней и обзаводится специальным режимом Fair Group Scheduling, который позволяет оперировать группами задач вместо отдельных процессов. Открывается возможность лимитировать использование процессора для конкретного юзера или группы приложений (например, multimedia, net). Как этим пользоваться, описано в Documentation/sched-design-CFS.txt. Появляется режим работы Tickless для архитектур x86-64, PPC, ARM, MIPS и UML (User Mode Linux). Теперь ядро может отключить таймер прерываний, что благоприятно сказывается на производительности и энергозатратах. Подсистема MMC существенно переработана и теперь поддерживает механизм SDIO (Secure Digital I/O) и шину SPI. Благодаря этим нововведениям, девайсы, поддерживающие SDIO (КПК, смартфоны), могут использовать небольшие устройства, выполненные в форм-факторе SD (модемы, GPS-приемники, ТВ-тюнеры и т.п.). Порог сбрасывания грязных буферов стал отдельным для каждого блочного устройства и высчитывается на основе скорости записи. Нововведение существенно повысит производительность в системах с очень медленными или очень быстрыми устройствами хранения. Появляется поддержка Large Receive Offload (LRO). Серия TCP-пакетов объединяется в один, за счет чего производительность также растет. 2.6.25 - 17 апреляНовый механизм Memory Resource Controller позволяет использовать независимые методики управления памятью для заданных групп процессов (Task Control Groups). Применять это можно для изолирования отдельных приложений в небольшую область памяти, размер которой они не смогут превысить. Патчи написаны разработчиками OpenVZ и задействованы в их решениях виртуализации. В планировщик задач добавляют возможность планировки групп задач в реальном режиме. Теперь все процессы, требующие работы в реальном времени, могут быть помещены в отдельную группу или просто запущены от имени специального пользователя. За каждым процессом в виртуальной файловой системе proc теперь закреплен специальный файл pagemaps, который в бинарном формате содержит позиции всех страниц памяти, используемых процессом. В ядро включена новая система мандатного контроля доступа SMACK, выполненная в виде LSM-модуля. SMACK реализован через закрепление меток к процессам и сущностям (файлы, пакеты, сокеты и т.д.), – в реализации и конфигурировании он проще, чем SELinux. Приняты патчи, реализующие поддержку утилиты LatencyTOP (www.latencytop.org) на уровне ядра. Благодаря LatencyTOP, разработчик может выявить в своей программе все узкие места и устранить их. Ядро обзаводится более высоким уровнем защиты для приложений – за что скажем «спасибо» интеграции некоторых патчей, разработанных в рамках проекта Exec Shield (people.redhat.com/mingo/exec-shield)! Адресное пространство после системного вызова brk() теперь рандомизируется, что существенно усложняет некоторые типы атак. Компания Volkswagen дарит код с реализацией стека протоколов CAN (Controller area network) – они используются во встраиваемой технике и предназначены для связывания в сеть различных устройств и датчиков. Разработчики допиливают подсистему ACPI, в которой появился API для автоматического управления температурой (устройство программируется так, чтобы включить кулер или понизить частоту при достижении заданной температуры). Ext4 продолжает стремительное развитие и обзаводится такими новшествами, как:
В списке поддерживаемых архитектур теперь значится MN10300/AM33, применяемая в cерверах NAS и одноплатных платформах Orion. 2.6.26 - 14 июляЧасти файловых систем, монтируемых с помощью команды «mount --bind», с 14 июля можно сделать незаписываемыми. Такая особенность используеться для создания изолированных окружений, владелец которых имеет root-доступ, но не может изменить определенные каталоги. Модуль KVM, предназначенный для создания виртуализированных окружений, отныне поддерживает архитектуры IA64, PPC и S390 – и обладает поддержкой паравиртуализации. Новый стек беспроводных протоколов, интегрированный еще в 2.6.22, теперь поддерживает черновую версию стандарта 802.11s, разработанную проектом Open80211s (www.open80211s.org). Новая технология под названием «Per-process securebits» позволяет привязать повышение привилегий с помощью setuid-бита только для конкретного процесса, игнорируя всех его потомков (в обычной ситуации они тоже бы получили повышенные права). Контейнеры cgroups (Control Groups) могут быть ограничены в возможностях обращения к оборудованию через списки разрешенных устройств. В ядре появляется собственный тестер памяти на ошибки, созданный по образу и подобию программы memtest (www.memtest.org), но более простой и не такой эффективный. Для тестирования памяти достаточно указать параметр memtest при загрузке. Параметры порога сбрасывания грязных буферов на диск теперь можно настроить через /sys/class/bdi, а информация о точках монтирования доступна отдельно для каждого процесса в файле /proc/$PID/mountinfo. Для устройств PCI Express добавлена поддержка технологии ASPM (Active State Power Management). С ней можно более эффективно управлять потреблением энергии через частичное обесточивание устройства во время бездействия. Наконец, Линус Торвальдс нисходит с небес к обычному люду и позволяет включить в ядро отладчик KGDB, требующий отдельную машину для трассировки происходящих событий. Этого события многие ждали с момента выхода первой версии ядра! 2.6.27 - 9 октябряLinux обзаводится поддержкой файловой системы UBIFS, разработанной компанией Nokia и предназначенной для работы на flash-накопителях с ограниченным числом записи данных. UBIFS не требует эмуляции блочного устройства со стороны накопителя и превосходит JFFS2 по скорости монтирования, наличию журнала транзакций, поддержке отложенной записи и прозрачной компрессии данных. Кроме UBIFS, ядро получает реализацию файловой системы OMFS (Sonicblue Optimized MPEG File System support), созданной специально для хранения MPEG-файлов и используемой в некоторых мультимедиа-плеерах. Появляется поддержка Multiqueue networking, позволяющая создать несколько независимых очередей пакетов для одного устройства. Предполагается, что механизм будет работать в связке с технологией Wireless Multimedia Extension, поддерживаемой некоторыми беспроводными картами для параллельной передачи видео, голоса и данных. Системные вызовы, оперирующие с файловыми дескрипторами, получают специальный флаг «close-on-exec». Файловый дескриптор будет закрыт во время вызова fork(). Это сведет на нет атаки, основанные на использовании дескрипторов, открытых родительским процессом. Ядро получает новый механизм засыпания, основанный на системных вызовах kdump и kexec. Первый позволяет сделать «мгновенный снимок» состояния ядра, а второй - загрузить новое ядро в память и передать на него управление без перезагрузки. Перед выключением питания kdump сбрасывает снимок на диск, а после включения kexec восстанавливает его. Этот подход отнюдь не призван заменить традиционный, но может быть полезен в системах без поддержки ACPI. Подсистема блочных устройств теперь умеет использовать такие нововведения SCSI- и SATA-протоколов, как «SBC Data Integrity Field» и «External Path Protection» для добавления контрольных сумм к записываемым данным. Разработчики получают в распоряжение механизм mmiotrace, созданный для трассировки операций ввода/вывода, отраженных в память. Его можно использовать, например, для исследования и реверс инжиниринга бинарных драйверов. Бинарные блоки firmware отныне не являются частью ядра или модулей. Вместо этого они копируются в каталог /lib/firmware во время исполнения команды «make modules_install» и загружаются драйверами по мере необходимости. В Ext4 теперь есть механизм отложенного распределения информации. После системного вызова write() файловая система откладывает запись на диск не только самих данных, но и необходимых для их хранения структур (в основном, различные изменения в суперблоке). Это позволяет повысить производительность файловых операций и снизить фрагментацию данных. Похожим образом ведут себя ZFS, XFS, Btrfs и Reiser4. В ядро принимаются патчи gprca (mxhaard.free.fr/download.html) с реализацией драйверов для более чем 230 USB-вебкамер. В списке поддерживаемых аппаратных платформ появляется строчка: одночиповые ПК Marvell Loki. 2.6.28 - 25 декабряExt4 перестает быть экспериментальной разработкой. Фаза всестороннего тестирования завершена, и новая файловая система получает статус стабильной и рекомендованной для использования всем желающим. Добавлена новая подсистема GEM (Graphics Execution Manager), предназначенная для низкоуровнего доступа к памяти видеоадаптера. GEM разработан компанией Intel и по задумке должен стать универсальной точкой доступа к видеопамяти для всех драйверов. А также – принести такие вкусности, как переключение видеорежима на уровне ядра (то есть, никаких скачков во время переключения из «иксов» в консоль и обратно!) и совместный доступ нескольких приложений к видеокарте. Пока GEM работает только с драйвером i915, но уже показывает увеличение производительности 3D-приложений примерно на 50%. Стек Wireless USB теперь работает благодаря интеграции в ядро поддержки технологии передачи данных UWB (Ultra Wide Band), использующей широкий спектр радио-частот (3.1-10.6 ГГц) и предназначенной для применения в домашних условиях (дальность до 10 метров). Кроме того, ядро теперь включает несколько драйверов для UWB-радиоконтроллеров, следующих спецификации Wireless USB 1.0. Алгоритм замещения страниц оптимизирован для систем с очень большим объемом ОЗУ. Поиск кандидатов на место в своп-области производится не по всем страницам памяти (может отнять слишком много времени), а по специальному списку, учитывающему только страницы загруженных в память файлов и анонимные страницы (например, выделенные с помощью malloc()). Контейнеры cgroup теперь могут быть «заморожены», – это можно использовать для решений виртуализации. Появляется возможность экстренной парковки головок дисков. Некоторые ноутбуки снабжены специальной технологией, работающей в паре с акселерометром. Она способна определить момент падения ноутбука и предупредить операционную систему о приближающемся конце своей жизни. Linux теперь в силах спасти жесткий диск от повреждений! В netfilter появляется возможность прозрачного проксирования через указание цели TPROXY в iptables. Механизм Multiqueue networking стал способен помещать пакеты в очередь в соответствии с заданным приоритетом. ИтогиСжатая картина развития ядра Linux, обрисованная на четырех полосах, конечно, не может дать полного представления о гигантских изменениях, происходящих в ядерной кухне, но выводы позволяет сделать вполне конкретные:
|