Линус Торвальдс объявил о выходе новой версии ядра Linux, содержащей небольшие усовершенствования и включающей долгожданную систему защиты AppArmor. Linux 2.6.36 является преемницей выпущенной в начале августа версии ядра 2.6.35, в которой была усовершенствована поддержка многоядерных процессоров, масштабирования сети, управления памятью и питанием, а также операциями ввода/вывода файловой системы Btrfs и были внесены другие изменения.
Впервые за многие годы действительно сокращено число строк кода ядра, пишет Торстен Леемхейс в своем, как обычно доскональном, обзоре ядра на сайте The H. Несмотря на добавление и объединение новых функций, многие разделы ядра стали компактнее. Это явилось ответом на высказываемую в последние годы новоиспеченным гражданином США Линусом Торвальдсом озабоченность по поводу его разбухания.
AppArmor и VFS
Как и ожидалось, ядро Linux 2.6.36 примечательно главным образом долго откладывавшимся включением в него механизма защиты AppArmor. Этот механизм ограничивает работу приложений, предотвращая атаки с использованием дыр в серверной программе, что позволило бы взломать всю систему.
AppArmor имеет сходство с ОС SELinux, которая уже является частью ядра Linux и поддерживается корпорацией Red Hat, но, как утверждают, проще и легче в использовании. Правда, некоторые считают, что AppArmor не является столь мощной как SELinux, особенно когда речь идет о корпоративных приложениях.
Сначала, четыре года назад, корпорация Novell пыталась включить AppArmor в ядро Linux. Но по разным причинам эта попытка успехом не увенчалась. Затем заботу об AppArmor взяла на себя компания Canonical, выпускающая дистрибутив Ubuntu. Она подготовила новую версию, которая сумела переубедить скептиков.
В Linux 2.6.36 появилась часть “заплаток”, обеспечивающих масштабирование виртуальной файловой системы (Virtual File System, VFS), о которых говорил создатель и главный опекун Linux Торвальдс, когда анонсировал версию ядра 2.6.35. Автор VFS Ник Пиггинс пишет, что “заплатки” повышают производительность VFS за счет “параллельного поиска имен с обходом общих элементов без обмена строками кэша”. Это, как утверждается, должно “значительно ускорить последовательную обработку” в дополнение к иным способам повышения производительности виртуальных машин.
Ниже перечисляются некоторые другие основные функции ядра Linux 2.6.36, сведения о которых позаимствованы с сайтов Kernelnewbies.org и The H.
- Поддержка продуктов Tilera. Семейство многоядерных MIPS/RISC-систем на кристалле Tile компании Tilera изначально ориентировано на Linux. Linux полностью поддерживается новейшей линейкой Tile-GX с технологической нормой 40 нм. В этой линейке представлены версии с 16, 36, 64 и 100 ядрами. Теперь Linux делает ответный ход, обеспечивая поддержку продуктов Tilera без дополнительных программных средств.
- KMS с интегрированным отладчиком KDB. Впервые разработчики могут активизировать отладчик ядра KDB во время использования настольной среды X.org. Данная технология, включенная уже в прежнюю версию ядра, интегрирована с драйвером задания режима на основе ядра (kernel-based mode setting, KMS) для графических карт Radeon, который был реализован в Linux 2.6.32. Драйвер KMS также усовершенствован за счет использования функции underscan и поддержки графических процессоров Fermi KMS-драйвером Nouveau, пишет Леемхейс.
- Intel IPS. Драйвер intelligent power sharing (IPS) поставляется с системами на базе процессоров Intel Core i3/i5 с интегрированной поддержкой графики. Этот драйвер динамически распределяет электропитание между основным и графическим процессорами, что обеспечивает максимальную производительность при заданном тепловыделении (TDP), сообщает сайт Kernelnewbies.org.
- Параллельное обслуживание очередей задач. Очереди задач оптимизированы для параллельного обслуживания за счет добавления менеджера пула потоков. Специализированные потоки заменены пулом потоков ядра, который при необходимости динамически увеличивается.
- Локальный кэш CIFS. Файловая система CIFS (Common Internet File System) усовершенствована благодаря появлению кэша FS-Cache, позволяющего файловым системам использовать локальную кэш-память. Впервые FS-Cache появился в версии ядра 2.6.30.
- “Убийца” OOM становится более интеллектуальным. “Убийца” исчерпавших оперативную память (Out-of-Memory, OOM) виртуальных машин прерывает процессы в случае нехватки объема ОЗУ, чтобы уберечь систему от краха. Данный модуль в значительной мере переписан заново. В частности, он, как утверждается, принимает более обоснованные решения, какими процессами следует пожертвовать в первую очередь.
- Устранение ошибки виртуальных машин. В версии ядра 2.6.36 исправлена ошибка виртуальных машин, из-за которой отдельные настольные системы переставали откликаться при выполнении таких задач, как запись на очень медленное устройство с интерфейсом USB. “Заплатка” будто бы решает проблему за счет более совершенной эвристики виртуальных машин.
- Сокращение задержек. Планировщик процессов усовершенствован за счет сокращения максимальных задержек. Он стал быстрее реагировать, когда к процессору обращаются параллельные процессы, особенно на настольных компьютерах. Как пишет Леемхейс, максимальная задержка уменьшена почти вдвое.
Описанные изменения являются лишь наиболее значительными среди многочисленных дополнений ядра, мер по повышению производительности и обновлений, а также множества новых или расширенных драйверов. Например, как пишет Леемхейс, значительно усовершенствована поддержка средств управления и приемников, использующих инфракрасный порт.
Fanotify откладывается
Все надеялись на одно нововведение, от которого в последний момент решено было отказаться. Это предварительная версия Fanotify, новой подсистемы уведомления об изменениях в файловой системе, призванная заменить Inotify.
Системные вызовы Fanotify были отключены, потому что, по словам Торвальдса, “люди все еще испытывали неуверенность по поводу интерфейсов. Лучше дать дискуссии об интерфейсе “повариться” чуть подольше, чем выпустить плохой интерфейс, который нам придется переделывать”.
Наконец, как и планировалось ранее, была ограничена роль Big Kernel Lock (BKL) как в инфраструктурном коде, так и в многочисленных драйверах. Леемхейс пишет об этом так: “Это еще на один шаг приближает разработчиков к их цели обеспечить функционирование ядра без использования этого мощного механизма блокировки, который в стандартных системах снижает масштабируемость, а следовательно, производительность системы”.