Знакомство с версиями 3.3 и 3.4 ядра Linux

Обзор последней версии ядра Linux и его функциональности для Google Android и Open vSwitch, а также новых возможностей работы в сети.

В марте 2012 года была выпущена версия 3.3 ядра Linux, за которой в мае этого же года последовала версия 3.4. Кроме множества мелких улучшений и исправленных ошибок в этих версиях ядра были представлены и несколько важных изменений, включая слияние с проектами Google Android и Open vSwitch; новые возможности работы в сетях (включая объединение в команду (teaming) сетевых устройств); множество обновлений файловой системы, управления памятью и виртуализации. Эта статья знакомит со многими важными изменениями, появившимися в версиях 3.3 и 3.4, и предоставляет предварительный обзор возможностей, появление которых ожидается в версии 3.5

M. Тим Джонс, инженер-консультант, Emulex Corp.

М. Тим ДжонсМ. Тим Джонс - архитектор встроенного ПО и, кроме того, автор книг Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming (выдержавшей на данный момент второе издание), AI Application Programming (второе издание) и BSD Sockets Programming from a Multilanguage Perspective. Он имеет обширный опыт разработки ПО в самых разных предметных областях - от ядер специальных ОС для геосинхронных космических аппаратов до архитектур встраиваемых систем и сетевых протоколов. Тим - инженер-консультант Emulex Corp., Лонгмонт, Колорадо.



11.12.2012

Связаться с Тимом

Тим один из наиболее популярных и активных авторов портала developerWorks. Познакомьтесь с другими статьями Тима, опубликованными на нашем портале. Посетите его персональную страницу, свяжитесь с ним и другими авторами и присоединяйтесь к сообществу разработчиков developerWorks.

В версиях 3.3 и 3.4 ядра Linux® реализован впечатляющий набор возможностей, но есть ещё один важный момент. Версия 3.3 – это первая версия Linux, в которой более 15 миллионов строк (правда, это очень грубая оценка). Если вычесть из ядра Linux различные фрагменты (например, драйверы; код, привязанный к конкретной архитектуре, и различные инструменты), то объём кода уменьшится до 4 миллионов строк, что, конечно, тоже очень много.

WЭта веха не только демонстрирует скорость роста объём ядра Linux (на 50% с 2008 года), но и заставляет задуматься о том, что это разрастание ядра может негативно сказаться на его эффективности как с точки зрения энергопотребления, так и производительности. Эти два параметра не измеряются для разных версий ядра, так что их ухудшение не всегда можно сразу выявить. Например, ошибка функции управления состоянием питания PCIe-устройств (PCI Express Active State Power Management) только через год после выхода этой функции была исправлена в версии 3.3 ядра.

Нумерация версий ядра Linux

Номер версии ядра состоит из версии ядра, за которой следуют номера основной (major) и дополнительной (minor) ревизии (например, 3.3.4). Предварительные версии (release candidate) ядра включают суффикс rc#, в конце которого находится число, указывающее номер данной версии (например, текущей версией является 3.5rc1).

Меньше чем за 21 год объём ядра Linux вырос от 10000 строк кода до 15 миллионов. Хотя большая часть кода - это драйверы, сложность ядра растёт вместе с его объёмом. Возможно, вскоре, это развитие приведёт к появлению изменений в ядре, которые будут призваны устранить сложность и упростить его поддержку.

Как показано на рисунке 1, ядро Linux начало быстро расти, начиная с версии 2.4, выпущенной в 2001 году (от 3 377 902 строк до 14 998 651 строк в 2012). В течение этого периода каждый год в ядро добавлялось порядка миллиона строк нового кода. Этот ошеломляющие темпы роста могут повергнуть в ужас любого программиста.

Рисунок 1. Увеличение размера ядра Linux c версии 2.2 (2001) до версии 3.3 (2012)
Рисунок 1. Увеличение размера ядра Linux c версии 2.2 (2001) до версии 3.3 (2012)

Сам Торвальдс (создатель Linux) выразил обеспокоенность возможным усложнением поддержки ядра в будущем из-за его увеличения. Когда само ядро состоит из около 4 миллионов строк кода, то традиционный подход к управлению ядром неэффективен и требует усовершенствования.

Интеграция с Android

Главной новостью, связанной с ядром 3.3, была интеграция Google Android в основную часть ядра. Процесс интеграции будет продолжен в версии 3.4, но уже сейчас в ядре достаточно возможностей Android, чтобы загрузить пространство пользователей Android, как показано на рисунке 2. Ядро Android – это "отросток" от ядра Linux с дополнительными возможностями, необходимыми для эффективного управления питанием и ресурсами (так как это требуется для мобильных устройств, которые обычно работают от своего аккумулятора). Хотя основным направлением Android считается архитектура ARM, но также присутствует и поддержка архитектуры x86, которая, например, используется в проекте Google TV.

Рисунок 2. Загрузка пространства пользователя Android на компьютере x86 с помощью платформы виртуализации Oracle VM VirtualBox
Рисунок 2. Загрузка пространства пользователя Android на компьютере x86 с помощью платформы виртуализации Oracle VM VirtualBox

Из-за проблем координации работы группы, отвечающей за поддержку Linux, и Google, привели к тому, что в течение нескольких лет платформа Android развивалась самостоятельно. В начале 2012 года был запущен проект Android Mainlining, задачей которого стала интеграция драйверов и возможностей Android в основное ядро Linux. Результаты этой работы были представлены в версии 3.3, но интеграция будет продолжена в версии 3.5.

Android также представил несколько улучшений для Linux, которые усилят позиции Linux на рынке мобильных платформ. В качестве примеров можно упомянуть быстрое межпроцессное взаимодействие (IPC), улучшенное управление памятью приложений, и решение для проблемы, связанной с управлением большими непрерывными фрагментами памяти.

Драйвер, названный Binder – это реализация IPC для Android. Разработчики приложений для ОС Android могут с легкостью использовать существующие решения, но Binder включает уникальные возможности, которых нет больше нигде (например, передача zero-copy сообщений и передача параметров учетных записей (credentials)). Приложения, работающие на платформе Anroid, фактически никогда не закрываются, так что их выполнение продолжается до тех пор, пока ядро не удалит их. Функция shrinker используется для оптимизации использования памяти по мере ее загруженности. Приложение регистрирует функцию, которая будет использоваться для минимизации объёма задействованной памяти, и когда свободной памяти не хватает, то ядро вызывает эту функцию. Еще одной новинкой Android является функция Pmem, которая позволяет при необходимости выделять большие и монолитные буферы памяти (такая возможность требуется для функции фотокамеры). Pmem экспортирует в пространство пользователя драйвер для данного типа выделения памяти. Кроме того, в ядро Linux были интегрированы и другие возможности, специфичные для мобильных платформ.

Определенные функции еще не попали в ядро, например, wakelock - функция управления питанием, которая позволяет компоненту запретить системе переходить в режим пониженного энергопотребления (например, когда происходит обновление ПО устройства). Отсутствие wakelock не помешает загрузке Android-системы, но в таком случае время работы батарея разрядится быстрее.

То, что Android удалось вернуть обратно в ядро Linux, это ещё один пример гибкости ядра Linux (от встраиваемых систем и мобильных устройств до крупнейших мэйнфреймов и суперкомпьютеров). Вместе с более чем 300 миллионами Android-устройств, используемых прямо сейчас, Linux продолжает развиваться как универсальная платформа.


Open vSwitch

Linux также продолжает оставаться предпочтительной платформой для виртуализации – он не только великолепная операционная система, но и первоклассный гипервизор (hypervisor). Интеграция ядра с Open vSwitch укрепила этот статус, предоставив готовые решения для виртуализации и IaaS (Infrastructe as a Service – инфраструктура как сервис).

Виртуальный коммутатор – это нечто большее, нежели просто программная версия аппаратного коммутатора. Напомню, что виртуализация платформ (например реализованная на основе KVM (Kernel-based Virtual Machine) или Xen) позволяет запускать несколько экземпляров операционных систем (или виртуальных машин) на гипервизоре, который разделяет аппаратную платформу на несколько виртуальных. Появление виртуального коммутатора развило эту абстракцию, реализовав реализацию сетевой инфраструктуры в виртуальной форме. Виртуальный коммутатор обеспечивает виртуальные машины эффективными средствами для взаимодействия между собой с помощью виртуальной сети. Проект Open vSwitch распространяет эту абстракцию между виртуальными хостами, позволяя виртуальной машине на одном физическом хосте "прозрачно" общаться с виртуальной машиной, расположенной на другом физическом хосте.

В самом Open vSwitch можно найти богатый набор функций для создания виртуальных сетей, включая quality of service, виртуальные локальные сети, фильтрацию и изоляцию трафика, и множество протоколов для мониторинга и управления (таких как OpenFlow и NetFlow). Хотя в Linux уже имеется реализация виртуального коммутатора Linux Bridge, Open vSwitch мощнее по своей функциональностит (включая управление несколькими хостами) и поэтому его интеграция в ядро Linux очень важна. В разделе "Ресурсы" можно найти дополнительную информацию по Open vSwitch.


Изменения в файловой системе

В версии ядра 3.3 содержатся изменения, касающихся файловой системы, которые охватывают различные файловые системы для пользователей и разработчиков. Для пользователей стало доступно онлайновое изменение размера файловой системы ext4 (fourth extended file system) с помощью управления вводом/выводом (онлайновое означает, что система продолжает работать во время изменения размера файловой системы). Это значит, что весь процесс изменения размера полностью выполняется на уровне ядра, что приводит к ускорению этой операции.

Для файловой системы Btrfs на основе B-дерева была переписана операция балансировки (используемая для изменения основной структуры метаданных, например, в случае добавления нового диска), в которую добавили поддержку приостановки (pause) и возобновления (resume) работы. В версии 3.4 для Btrfs были также представлен инструмент для восстановления данных (btrfs-restore), который можно использовать для извлечения файлов из поврежденной системы Btfrs. Также в версии 3.4 файловая система Btrfs получила несколько изменений, направленных на улучшение производительности и обработки ошибок (включая замену "паники" на удобный алгоритмом управления ошибками). До выхода версии ядра 3.4 файловая система Btrfs не могла использоваться для виртуальных машин из-за своего механизма copy-on-write ("копирования при записи"). В версии 3.4 Btrfs эта проблема была устранена с помощью выполнена тонкой настройка параметров файловой системы.

Программная реализация RAID-массивов также была обновлена для поддержки "горячей" замены, которая позволяет перенести данные с тома (помеченного как заменяемый утилитой mdadm) на другой том и затем удалить исходный том . Также в версии 3.4 была добавлена поддержка файловой системы QNX4 в режиме "только для чтения".

У разработчиков появилась возможность вставлять ошибки в Network File Systemсистему, чтобы проверить способность клиентов файловой системы к восстановлению после ошибок с помощью sysfs. Для разработчиков, использующих Btrfs, была добавлена новая утилита для проверки целостности, которую можно использовать для идентификации некорректных запросов на запись, что, в свою очередь, должно привести к более быстрому устранению сбоев.


Новые возможности для работы в сети

Linux всегда отличался передовыми сетевыми функциями и несколько усовершенствований для работы в сети появились и в версии ядра 3.3.

Для инфраструктур с минимальными задержками (например, высокопроизводительные компьютеры) был интегрирован драйвер протокола SCSI RDMA (Remote Direct Memory Access – удаленный прямой доступ к памяти SCSI). Протокол Secure Remote Password позволяет использовать RDMA в качестве основного протокола для блочных устройств хранения данных. Это специальное расширение позволяет Linux организовать доступ к блочному устройству с помощью SRP, через который удаленные потребители могут подключаться к блочному вводу/выводу. Протокол RDMA поддерживается технологией InfiniBand и часто используется в высокопроизводительных кластерах.

Планировщик пакетов RED (Random Early Detection) был модифицирован с помощью нового алгоритма Adaptive RED от Салли Флойд (Sally Floyd), Рамакришны Гуммади (Ramakrishna Gummadi) и Скотта Шенкера (Scott Shenker). Алгоритм RED доказал свою эффективность при планировании обработки пакетов. В данном алгоритме решение об "отбрасывании" пакета, который нельзя было поместить в буфер, принималось в зависимости от доступного объёма очереди, но его работа зависит от уровня загруженности сети. Алгоритм RED использовал объём очереди для оценки вероятности "игнорирования" пакета, так что в случае с пустой или почти пустой очередью принимались все пакеты, но по мере того как очередь заполнялась, все пакеты начали сбрасываться. Алгоритм Adaptive RED динамически изменяет вероятность сброса пакета, измеряя, насколько "агрессивно" происходит игнорирование пакетов. Получить дополнительную информацию об этом алгоритме можно в описании Adaptive RED, ссылка на которое приведена в разделе "Ресурсы".

Важное изменение произошло в функциональности для объединения сетевых интерфейсов: вместо устаревшего «соединяющего» драйвера (bonding driver) ядра был представлен новый механизм teaming, позволяющее объединить несколько физических сетевых адаптеров Ethernet. Такое устройство позволяет создавать виртуальные сетевые интерфейсы, которые объединяют пропускную способность нескольких физических Ethernet-устройств (link aggregation согласно стандарту 802.1AX). Teaming можно использовать для повышения производительности сети (за счёт объединения нескольких физических устройств) или для избыточности (при сбое одного физического интерфейса его трафик переводится на другой физический интерфейс). В данный момент поддерживаются оба этих режима, в первом случае сетевой трафик просто распределяется по всем физическим портам, а во втором отдельный порт может быть выделен в качестве резервного канала для трафика, если основное сетевое соединение будет разорвано.

Среди других новых сетевых функций следует выделить возможность ограничения размера буферов, используемых протоколом TCP, с помощью контролирующих групп cgroups (control groups). Группы cgroups могут использоваться различными способами, например, для изоляции выделенной виртуальной машине ресурсов. Данное новшество позволяет cgroup отслеживать размеры памяти ядра и пользовательского пространства (которые обычно и используются для TCP-буферов), что, в свою очередь, упрощает управление ресурсами системы.


Другие интересные изменения

В Linux 3.3 также появились изменения, не относящиеся к файловым системам или сетевым интерфейсам. Так, архитектура процессора Texas Instruments C6x теперь поддерживается напрямую, а не в рамках отдельного проекта. Многоядерный процессор C6х для обработки цифровых сигналов (Digital Signal Processor) построен на основе архитектуры VLIW (Very Long Instruction Word), но в нём отсутствуют некоторые современные возможности, например, симметричная параллельная обработка данных, однородность кеша и блок управления памятью (MMU - memory management unit). Несмотря на указанные пробелы в архитектуре, процессоры серии C6x обладают большими возможностями и поддерживают широкий список периферийных устройств и встроенных ускорителей "на кристалле" (для обеспечения безопасности, быстрого преобразования Фурье и т.д). В версии ядра 3.4 поддерживаются самые современные GPU-процессоры, такие как Kepler от Nvidia и Radeon и Trinity от AMD.

Поддерево архитектуры для ARM-процессоров теперь может использовать расширение для работы с большими физическими адресами и возможности сервисов Nvidia Tegra на кристалле, что еще больше усилит позиции процессоров ARM как альтернативы процессорам Intel для серверов с уменьшенным энергопотреблением. Также в версии 3.3 стали доступны улучшения для решений на основе AMD I/O MMU, благодаря которым упростилось управление изменением размера страниц и повысилась защищенность устройств (благодаря их группированию или изоляции). Также технология Virtual Function I/O увеличила возможности платформы KVM для привязки мобильных устройств к гостевым системам KVM. Наконец, архитектура S390 была доработана для увеличения максимального поддерживаемого размера RAM с 4ТБ до 64TБ.

Модуль управления производительностью (PMU, Performance Monitoring Unit) был виртуализирован для KVM, так что гостевые системы теперь могут использовать PMU для своих виртуальных платформ. Это изменение сделало доступными для гостевых систем различные события, связанные с производительностью, включая устаревшие инструкции, удачные и неудачные обращения к кешу, а также ветви исполненных и пропущенных инструкций. Для платформы виртуализации Xen была добавлена полезная возможность – безопасное отключение (secure discard), которое полностью удаляет "подозрительный" сектор вместо того, чтобы просто пометить его как свободный. Также различные драйверы виртуального ввода/вывода (blk, net, balloon и console) теперь поддерживают "спящее" состояние по стандарту Advanced Configuration and Power Interface S4, что позволяет гостевым системам, развернутым на платформе Xen, входить в состояние гибернации.

Для плохо поддающихся диагностике проблем, связанных с повреждением памяти, был добавлен новый элемент конфигурации CONFIG_DEBUG_PAGEALLOC. Это изменение проверяет доступ CPU к свободным страницам памяти и поэтому может несколько снизить производительность.


Взгляд в будущее

Платформа Linux продолжает развиваться, и после выхода версии ядра 3.4 к публикации уже готовится предварительная версия 3.5, которая должна выйти в августе 2012 года. В этой версии также ожидается несколько новых интересных возможностей.

В файловую систему планируется добавить оптимизацию для обработчика обратной записи (write-back) в рамках файловой системы. В стандартной файловой системе Linux ext4 также появилась возможность добавления контрольной суммы к метаданным, что поможет выявлять попытки взлома защиты данных. Также в Linux скоро может появиться поддержка SCSI-targets по протоколам FireWire или USB Attached SCSI Protocol. Наконец, будет добавлена поддержка пробников пользовательского пространства для совместного использования с SystemTap при анализе поведения программ в пользовательском пространстве. И по мере того, как приближается дата выхода предварительной версии, запланированная на август 2012 года, можно ожидать появления и других изменений.

Ресурсы

  • Introducing the 3.3 and 3.4 Linux kernels: оригинал статьи (EN).
  • Linux Kernel Archives: Web-cайт с информацией о последней и предыдущих версиях ядра Linux.
  • Linux Kernel Newbies: отличный источник информации о различных версиях ядра, включая сводную информацию о наиболее новшествах каждой версии ядра. Дополнительную информацию о версии ядра Linux 3.3 можно найти на посвященной ему странице.
  • Android Open Source Project: проект, созданный компанией Google, для разработки и сопровождения платформы Android. В рамках этого проекта также поддерживается бесплатная программа оценки совместимости продуктов третьих фирм с платформой Andoird. Дополнительную информацию об Android можно найти на посвященной ему странице в Wikipedia.
  • Вы можете эмулировать среду Android для мобильных устройства с помощью Эмулятора Android. Кроме того, используя Linux и KVM, Android можно эмулировать с помощью Эмулятора Google TV, который поддерживает как эмуляцию ARM, так и менее эффективную эмуляцию x86.
  • Несколько новых компонентов Android включены в состав ядра Linux, например, IPC Binder, Low Memory Killer и Pmem (аналог исключенного компонента Ashmem).
  • Платформа Android, основанная на Linux, является отличным примером гибкости и универсальности самой платформы Linux. Аналогичные примеры можно найти в статье Тима Look at Linux, the operating system and universal platform, опубликованной на портале developerWorks в марте 2012.
  • Open vSwitch: это многоуровневый виртуальный коммутатор, который уже стал частью ядра Linux, и теперь сразу после установки Linux вы можете начать использовать Open vSwitch в качестве гипервизора. Это приятная новость для пользователей виртуализированных возможностей Linux. Дополнительную информацию об Open vSwitch можно найти в этом обзоре Why Open vSwitch. Также можно познакомиться с предшествующим решением Linux Bridge, разработанным в Linux Foundation.
  • Anatomy of an open source cloud (M. Tim Jones, developerWorks, March 2010) (EN): статья, которая знакомит с виртуальными коммутаторами в контексте облачных вычислений и IaaS.
  • Virtual networking in Linux (M. Tim Jones, developerWorks, October 2010) (EN): ещё одна статья Тима, посвященная различным вариантам виртуальных коммутаторов, доступных для Linux, включая Open vSwitch. Также вы можете узнать о различных типах виртуализации, поддерживаемых Linux, из статьи Тима Virtual Linux, опубликованной в 2006 году, а в статье Anatomy of a Linux hypervisor hypervisor рассказывает о том, как происходила трансформация Linux в гипервизор.
  • Btrfs – это файловая система, разработанная компанией Oracle, как конкурент файловой системе ZFS от компании Sun. Btrfs можно использовать для создания крупных корпоративных систем хранения данных с такими возможностями, как онлайновое восстановление и упрощенное обслуживание. Дополнительную информацию о Btrfs можно найти на её wiki-странице.
  • Virtio – это виртуализированная инфраструктура ввода/вывода для Linux-гипервизоров, которая предоставляет гипервизорам эффективный абстрактный уровень с набором стандартных виртуализированных драйверов ввода/вывода. Дополнительную информацию о Virtio можно найти в статье Тима Virtio: An I/O virtualization framework for Linux, также опубликованной на портале developerWorks в 2010 году.
  • Writing RDMA Applications on Linux (EN): статья Роланда Дрейера (Roland Dreier) из компании Cisco, знакомящая с технологией RDMA и принципами разработки приложений Linux, способных использовать возможности RDMA.
  • Adaptive RED: An Algorithm for Increasing the Robustness of RED's Active Queue Management (EN): статья с подробным описанием изменений по сравнению со стандартной реализации алгоритма RED в его обновленной версии Adaptive RED.
  • Технология Control groups рассматривается в онлайновой документации Red Hat. Узнать больше о использовании ограничений для TCP-буферов с помощью cgroups можно из статьи Per-cgroup TCP buffer limits на портале Linux Weekly News.
  • Следите за публикациями developerWorks в Твиттере или подпишитесь на канал твитов по Linux на developerWorks. Вы также может подписаться на Твиттер-канал Тима.

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Open source
ArticleID=851382
ArticleTitle=Знакомство с версиями 3.3 и 3.4 ядра Linux
publish-date=12112012