Релиз Linux-ядра 2.6.38

Линус Торвальдс анонсировал релиз Linux-ядра 2.6.38, в который вошли наработки по увеличению интерактивности выполнения десктоп-задач, значительно повышена масштабируемость VFS, в Btrfs обеспечена поддержка LZO-сжатия и создания доступных только на чтение снапшотов, интегрированы HugePage-патчи, добавлена поддержка процессоров AMD Fusion, добавлены новые драйверы и обеспечена поддержка mesh-протокола B.A.T.M.A.N.

В новую версию принято 10413 исправлений от 1349 разработчиков, размер патча - 49 Мб (добавлено 9295 тыс. строк кода, удалено - 9159 тыс. строк). Около 38% всех представленных в 2.6.38 изменений связаны с драйверами устройств, примерно 24% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 6% - файловыми системами и 4% c внутренними подсистемами ядра.

Наиболее интересные новшества ядра 2.6.38:

  • Память и системные сервисы
    • В состав ядра интегрирован патч с реализацией идеи автоматической группировки задач для повышения интерактивности на десктопе. Патч специальным образом разбивает выполняемые задачи на группы в привязке к идентификатору сессии, в дальнейшем планировщик задач оперирует данными группами как единым целым. Номер сессии изменяется при выполнении системного функции setsid(), которая, например, вызывается для каждого нового сеанса командной оболочки (тем не менее при запуска десктоп приложений идентификатор сессии не меняется, т.е. если запустить в терминале "make -j 20", влияние на десктоп-приложения будет минимально, но если выполнять какую-то ресурсоёмкую операцию в gimp, интерактивность понизится). Посмотреть распределение сессий можно командой "ps -eo session,pid,cmd". Для активации режима автоматической группировки задач в /proc/sys/kernel/sched_autogroup_enabled необходимо записать 1;
    • В ядро интегрирован патч "Transparent Huge Рages", который реализует технику увеличения базового размера адресуемых страниц памяти (без патча размер страницы составляет всегда 4096 байт, с патчем до 2 или 4 Мб), что приводит к сокращению числа используемых TLB-блоков (Translation Lookaside Buffer) и расширению возможностей по задействованию выделенной, но неиспользуемой памяти, для кэширования системных данных (например, под дисковый кэш). Теоретически реализуемый патчем подход должен привести к увеличению производительности самого ядра и активно использующих память приложений (например, патч эффективен при использовании систем виртуализации и СУБД). Тем не менее, не исключены ситуации, когда патч оказывает негативное влияние. Например, приложение может выделить через функцию mmap большой блок памяти, но записать в него всего 1 байт данных. В этом случае, с патчем будет выделена страница памяти размером 2 Мб, а не 4 Кб как в ситуации без патча. Включение режима производится через файл /sys/kernel/mm/transparent_hugepage/enabled;
    • Добавлена возможность назначать отдельные лимиты на число "грязных" страниц памяти (dirty page) для каждого контроллера памяти cgroup. Интерфейс управления напоминает ранее доступные параметры /proc/sys/vm/dirty_*: memory.dirty_ratio, memory.dirty_limit_in_bytes, memory.dirty_background_ratio, memory.dirty_background_limit_in_bytes;
    • В декомпрессор ядра, initramfs и initrd добавлена поддержка метода сжатия XZ;
  • Дисковая подсистема, ввод/вывод и файловые системы
    • Проведена большая работа по увеличению масштабируемости VFS (Virtual File System). Переписан код организации кэшировния элементов директорий (dcache) и механизмов для обеспечения определения файлового пути (path lookup). Новая реализация в полной мере использует ресурсы многоядерных CPU, а также заметно повышает производительность и на одноядерных системах, за счет удаления атомарных операций и использования механизма синхронизации RCU (Read-copy-update), позволяющего организовать одновременный доступ к данным без использования блокировок. В частности, новое ядро ускоряет выполнение "find . -size" в домашней директории Линуса примерно на 35%, однопоточный "git diff" для прокэшированного дерева ядра выполняется на 20% быстрее (при запуске 26 параллельных "git diff" пропускная способность увеличивается в 26 раз), значительно ускоряется выполнение операций, использующих вызов stat();
    • В файловой системе Btrfs реализована поддержка прозрачного сжатия данных на диске методом LZO. По сравнению с ранее поддерживаемым методом zlib скорость операций копирования при использовании LZO возросла в два раза, а скорость разархивирования tar-архива возросла на 25%. Примечательно, что за счет уменьшения операций с диском LZO-режим также обгоняет по скорости выполнение операций режим без использования сжатия. Другим новшеством Btrfs является поддержка создания снапшотов, доступных только для чтения, что может быть использовано для монтирования ФС после сбоя или в ситуации возможного наступления сбоя;
    • В dm-crypt обеспечена поддержка масштабирования на системах с многоядерными CPU;
    • В RAID1 (DM mirror), ext3 и XFS добавлена поддержка выполнения операции "discard" для SSD-накопителей. В XFS для работы с кэшем inode задействован механизм синхронизации RCU вместо блокировок;
    • В реализации файловой сетевой файловой системы CIFS добавлена поддержка опции монтирования "strictcache", включающей режим принудительного чтения данных из кэша. Кроме того, добавлена опция монтирования "cruid=" для определения uid владельца credential-кэша;
    • В файловых системах Ext2 и Ext3 ускорено выполнение операций по созданию файлов;
    • В файловой системе Squashfs реализована поддержка сжатия методом XZ, обеспечивающим более высокую степень сжатия по сравнению с ранее используемым zlib, но требует для работы больше памяти и ресурсов CPU;
  • Сетевая подсистема
    • Реализована поддержка протокола маршрутизации B.A.T.M.A.N. ("Better Approach To Mobile Adhoc Networking), разработанного для mesh-сетей в рамках проекта Open Mesh и позволяющего создавать децентрализованные сети, не требующие наличия маршрутизаторов или точек доступа. Каждый узел в такой сети связан через соседние узлы, т.е. каждый узел участвует в процессе маршрутизации и динамически перенаправляет данные к другим узлам в зависимости от текущих условий связности между элементами сети. В качестве областей применения B.A.T.M.A.N. называется возможность развертывания сетей в случае природных катаклизмов, военных конфликтов или усиления цензуры;
    • Увеличен до 10 mss, используемый по умолчанию, размер входящего TCP-окна;
    • Реализован учитывающий ECN код дефрагментации IPv4 пакетов (RFC3168);
  • Виртуализация и безопасность
    • В lguest добавлена поддержка опций "--username" и "--chroot" для сброса привилегий и выполнения перехода в chroot;
    • Расширение возможностей системы мандатного контроля доступа SMACK (включена в ядро начиная с 2.6.25 и базируется на привязке меток к задачам и блокам данных (файлы, IPC, сетевые пакеты и т.д.) на уровне ядра): решены проблемы с UNIX domain socket, добавлена поддержка атрибутов SMACK64TRANSMUTE и SMACK64EXEC, добавлена поддержка двух новых типов ключей: доверительных и шифрованных, отличающихся методом их создания;
    • Представлен программный интерфейс для доступа к Crypto API ядра с уровня пользователя;
  • Оборудование и аппаратные архитектуры
    • Добавлена поддержка процессорной архитектуры AMD Fusion, отличающейся интеграцией на одном кристалле CPU и GPU;