Развитие ядра Linux

Введение в новые возможности версий 2.6.28 и 2.6.29

В жизни, как известно, неизбежны налоги и смерть - но таким же неизбежным является улучшение операционной системы GNU/Linux®, и две новые версии ядра нас не разочаровали. Выпуски ядра 2.6.28 и 2.6.29 включают в себя множество новой функциональности, такой как новейший протокол хранения данных корпоративного уровня, две новые файловые системы, поддержка работы в широкополосных беспроводных сетях WiMAX, а также проверка целостности данных на устройствах хранения. Узнайте, почему настало время для обновления ядра.

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

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



23.07.2009

В конце 2008 года появился выпуск ядра 2.6.28, после чего открылось окно включений (merge window) для следующего выпуска – 2.6.29. Так как в проекте ядра Linux используется распределенный процесс разработки, не всегда понятно, что именно попадет (или будет интегрировано) в определенный выпуск. Однако два последних выпуска были интересны как в краткосрочной, так и долгосрочной перспективе. Одним из интересных рубежей, преодоленных в ядре 2.6.28, было то, что ядро Linux впервые превысило 10 миллионов строк исходного кода (см. рисунок 1, в котором использованы данные о количестве строк кода с ресурса Heise Online).

Рисунок 1. Количество строк исходного кода в последних версиях ядра 2.6
Lines of source code in recent 2.6 kernels

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

Что нового в ядре 2.6.28?

Ядро 2.6.28 было выпущено 24 декабря 2008 года (и на начало февраля 2009 года уже появилась его 5-я версия). Этот первый выпуск 2.6.28 содержит так много нового, что размер самого файла журнала изменений составляет 6 МБ. Этот выпуск считается настолько стабильным, что следующий дистрибутив Ubuntu версии 9.04, Jaunty Jackalope, будет сделан на его основе.

Четвертая расширенная файловая система

Четвертая расширенная файловая система была переименована из ext4dev в ext4. Это означает, что теперь она стала достаточно стабильной для повседневного использования. Система ext4 – это логическое продолжение третьей файловой системы (ext3), используемой сегодня, но с лучшей производительностью, надежностью и большими возможностями. Система Ext4 позволяет работать с файловыми системами размером до одного экзабайта, c большим количеством файлов в системе, большим допустимым размером файла и более глубокой структурой директорий. Кроме того, она включает в себя экстенты, поддерживающие отложенное выделение блоков памяти и выделение блоков памяти группами для повышения производительности. Ext4 поддерживает как прямую, так и обратную совместимость (то есть можно монтировать систему ext4 на диск формата ext3 и наоборот, в зависимости от используемых возможностей системы). Также вы можете переходить с ext3 на ext4 постепенно в процессе работы. Дополнительную информацию о системе ext4 вы можете найти по ссылкам в разделе Ресурсы.

И хотя на некоторое время ext4 станет новым стандартом файловой системы Linux, уже появляются и другие файловые системы, предлагающие еще лучшую масштабируемость и большие возможности. Экспериментальная версия одной из таких файловых систем, btrfs, доступна в выпуске ядра 2.6.29. Btrfs – это Linux-совместимая (согласно GPL - общественной лицензии GNU) файловая система, конкурирующая по функциональности c широко известной файловой системой ZFS.

Управление графической памятью с помощью менеджера GEM

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

Для поддержки нынешних и будущих графических процессоров в числе других компонентов графического стека Linux нужно было улучшить систему управления памятью, включающую управление буферами, отображение страниц памяти, размещение данных и кэширование. Это было необходимо, потому что графические приложения (в особенности трехмерные) могут потреблять громадное количество памяти. Графический менеджер GEM (Graphics Execution Manager) помогает в этом, предоставляя возможности для управления графическими данными с помощью существующих подсистем ядра (например, за счет использования совместно используемой файловой системы памяти – shmfs - для управления графическими объектами).

Трассировщик загрузки

Хотя загрузка Linux по мере развития ОС требует все меньше и меньше времени, считается, что она все еще происходит слишком долго. Поэтому время загрузки системы продолжает оставаться под пристальным вниманием. В этом ядре появилась новая возможность, позволяющая измерять и записывать время выполнения вызовов init. Эти данные впоследствии можно использовать для визуализации хода и скорости процесса загрузки. Этот процесс можно конфигурировать (для сбора данных его необходимо предварительно включить). Собранные данные можно анализировать с помощью offline-скриптов (в том числе строить графические изображения), что в итоге дает возможность уменьшить загрузочное время и оптимизировать процесс загрузки. Это обновление также отображает идентификатор процесса (PID) вызывающего потока, что позволяет видеть параллелизм процесса загрузки.

Заморозка

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

Заморозка заданий осуществляется в контексте контейнера – схемы виртуализации операционной системы на уровне пользовательского пространства (одно ядро поддерживает множество пользовательских пространств). Эта новая функциональность представляет собой шаг по направлению к решению задачи миграции набора процессов между машинами, что может быть полезным для балансирования загрузки. Также можно использовать заморозку файловой системы, чтобы делать образы файловой системы для резервирования. В настоящее время замораживать и восстанавливать систему можно с помощью вызова ioctl с параметрами FIFREEZE и FITHAW.

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

Улучшение масштабируемости виртуальной памяти

По мере распространения Linux в системах виртуализации, особенно в многопроцессорных системах с огромным количеством памяти, возможность масштабировать использование памяти становится критичной для производительности. В ядре 2.6.28 сделано несколько улучшений масштабирования памяти. Например, в этом ядре поддерживаются отдельные списки давно использовавшихся страниц (LRU – Least Recently Used) для страниц памяти, используемых (обычными) файлами, и для страниц, используемых файлом подкачки. Это позволяет ядру фокусироваться на страницах, используемых файлом подкачки, так как они с большей вероятностью будут записываться на диск и уделять меньше внимания страницам, используемым файлами.

Еще одно изменение состоит в разделении на доступные для удаления и недоступные для удаления (например, находящиеся под блокировкой mlock) страницы. В таком случае код, освобождающий неиспользуемые страницы памяти, при просмотре списков LRU может пропускать недоступные для удаления страницы. В системах с очень большим количеством страниц это приводит к улучшению производительности.


Улучшения работы с диском

Ядро 2.6.28 содержит несколько улучшений работы с дисками. В этом разделе мы расскажем об улучшении работы с твердотельными дисками (SSD) и защите ATA-устройств.

Улучшения в поддержке SSD дисков

Диски SSD – это очень перспективное направление улучшения производительности работы по сравнению с традиционными жесткими дисками. Диски SSD обеспечивают меньшее время отклика и более эффективное произвольное чтение данных, потребляя при этом меньше энергии и производя меньше шума. Но диски SSD фундаментально отличаются от традиционных жестких дисков (HDD), поэтому для их эффективного использования необходимо было сделать изменения в Linux. Фундаментальной проблемой SSD-устройств является то, что в них производится выравнивание уровня использования блоков флэш-памяти (wear-leveling), которое может сокращать срок службы устройства. Один из способов уменьшить этот эффект – сообщать SSD-устройству о том, что тот или иной блок памяти больше не используется (например, из-за удаления файла). Когда блок памяти в SSD-устройстве освобождается, он больше не участвует в процедуре выравнивания использования, что позволяет уменьшить скорость общего износа устройства. Но чтобы поддерживать эту операцию, файловая система должна уметь сообщать эту информацию устройству.

Комитет стандартов T13 создал новое расширение протокола ATA для поддержки передачи этой информации с помощью команды trim. Когда SSD-устройство получает эту новую команду, оно может добавить указанные блоки в список свободных блоков и больше не утруждать себя их перемещением в рамках процедуры выравнивания износа. Отвечающий за это в Linux компонент блочного уровня называется запросом на удаление (discard request). Он создается в результате удаления файла из файловой системы более высокого уровня. Запрос на удаление работает на блочном уровне и предоставляет средства для удаления блоков посредством команды trim, отправляемой на ATA диск. Дополнительные улучшения включают в себя интеллектуальное планирование запросов на удаление для их объединения с другими запросами, а также переупорядочивание элементов очереди блочных запросов для улучшения работы с соответствующими запросами на удаление и запись.

Улучшения работы с дисками ATA

Одним очень интересным улучшением надежности работы с жесткими дисками ATA является противоударная защита, позволяющая предотвратить выход диска ноутбука из строя в результате внезапного толчка или удара. В спецификации ATAPI определена команда IDLE IMMEDIATE, останавливающая работу жесткого диска и поднимающая считывающие головки, чтобы они не ударили по пластинам. В ядре эта команда доступна через proc-файл sys/block/*/device/unload_heads. После записи какого-либо значения в файл и записи последней ATA команды на соответствующий диск все считывающие головки поднимаются, и операции ввода-вывода приостанавливаются на небольшое время, задаваемое таймером. По истечении таймера операции ввода-вывода возобновляются в нормальном режиме. Ранее эта возможность была реализована в ноутбуках IBM с помощью акселерометра, измерявшего ускорение и помогавшего определить, падает ноутбук или нет. Общая схема процесса этой защиты показана на рисунке 2.

Рисунок 2. Общая схема процесса защиты жестких дисков ATA
Generic process of ATA hard disk protection

Что появится в ядре 2.6.29?

Ядро 2.6.28 включает в себя множество новых полезных возможностей, но в ядре 2.6.29 следует ожидать еще более значительных улучшений.

Btrfs

Одним из самых важных новшеств ядра 2.6.29 является добавление файловой системы Btrfs (B-tree FS- файловая система на основе B-деревьев), изначально разработанной в Oracle. Система Btrfs была разработана в ответ на систему ZFS от Sun, используемую для построения сильно масштабируемых файловых систем с проверкой целостности данных. Помимо множества продвинутой функциональности, имеющейся в ext4, btrfs поддерживает зеркалирование и чередование записи на объектном уровне, копирование при записи (copy-on-write), создание снимков файловой системы (а также снимков этих снимков), контроль целостности и внутреннее сжатие. Она поддерживает тома и файлы размером до 16 экзабайт и до 264 файлов на томе. Для облегчения переключения предусмотрена процедура перехода с ext3 на btrfs (а также обратно, но в этом случае будет восстановлено состояние системы только на момент осуществления перехода).

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

Изменения работы с сетью

Помимо большого количества обновлений различных сетевых драйверов, стоит отметить еще несколько улучшений. Во-первых, появление инфраструктуры Generic Receive Offload, которая снижает сетевую нагрузку при обработке поступающих из сети данных (подобна инфраструктуре Large Receive Offload, но не зависит от протокола).

Также появилась поддержка уведомлений о перегрузке в обратном направлении (BCN - backward congestion notification). Это улучшает управление перегрузками, так как позволяет при необходимости ужесточать управление путем передачи сообщений. Эта функциональность является одним из основополагающих элементов для построения Ethernet-сетей современных вычислительных центров.

И последнее в списке, но не по значимости, - это появление в ядре 2.6.29 сетевого стека WiMAX (который в настоящее время основан на USB-драйвере i2400m). Не следует путать WiMAX с Wi-Fi - WiMAX создает соединения точка-точка, используя частоты из лицензируемого диапазона, а также предлагает улучшенное качество сервиса.

Настройка графического режима из ядра

Интересным косметическим изменением процесса загрузки ядра и графического режима является настройка графического режима из ядра (KMS - kernel-based mode setting). Эта возможность позволяет ядру управлять графическим аппаратным обеспечением после инициализации необходимых компонентов (таких как шина PCI и видеоадаптер). В результате ядро может задавать желаемое разрешение экрана на гораздо более раннем этапе процесса загрузки, что устраняет некоторые проблемы с мерцанием и пустотой на экране (из-за перенастройки графического процессора) и позволяет правильно настроить дисплей до старта X-сервера.

Еще одним преимуществом KMS является улучшенная процедура повторной инициализации после прерывания работы: теперь она также происходит в ядре, что является гораздо более эффективным способом. И, наконец, благодаря тому, что управление графическим процессором осуществляется из ядра, теперь нет необходимости запускать X-сервер с привилегиями root-пользователя, что улучшает защищенность операционной системы, устраняя еще один набор возможностей для взлома.


Двигаясь дальше

На момент написания статьи ядро 2.6.29 находится в процессе стабилизации. Но работа продолжается дальше, и мы уже с нетерпением ожидаем ядра 2.6.30. Среди прочего ядро 2.6.29 включает в себя Squahfs (файловую систему только для чтения), наконец получившую своё место в ядре, а также улучшения безопасности, связанные с обязательным управлением доступом на основе путей файлов. Кроме того, в ядро был добавлен новый протокол FCoE (Fibre Channel over Ethernet), проверка целостности данных на диске с помощью стандартного поля Data Integrity Field (T10-DIF), которое поддерживается некоторыми накопителями, для проверки данных «от двери до двери» и проверки целостности во время бездействия.

Итак, по мере развития Linux мы наблюдаем появление новой функциональности, улучшение масштабируемости и повышение безопасности. Как хороший виски, Linux с годами становится все лучше и лучше. Информацию о других изменениях ядра и предстоящих нововведениях можно найти по ссылкам в разделе Ресурсы.

Ресурсы

Научиться

  • Ознакомьтесь с оригиналом статьи: " Linux kernel advances" (En).
  • Узнайте больше о возможностях четвертой расширенной файловой системы из статьи " Анатомия ext4". Скорее всего, ext4 станет новым стандартом для настольных систем Linux. А для очень больших систем хранения данных, требующих как масштабируемости, так и эффективности в будущем может применяться Btrfs. Узнать поброднее об этой файловой системе можно в wiki-разделе сайта Btrfs (En).
  • Узнайте больше о менеджере GEM (и более старой технологии TTM) из статьи Memory management for graphics processors с ресурса lwn.net. Графические процессоры развиваются и предъявляют новые системные требования, а значит, возникает необходимость в новых способах управления ими. В прошлом для управления памятью общего назначения использовались карты таблиц преобразования (translation table maps или TTM). Однако теперь можно пользоваться менеджером GEM, предлагающим улучшенную производительность управления памятью. GEM может использовать подсистему общей памяти для управления объектами. Узнать больше об общей памяти (/dev/shm) и ее использовании можно из этого практического руководства по /dev/shm (En).
  • Новая функция ядра для трассировки предоставляет средства измерения и уменьшения времени загрузки Linux. Видимо, как бы быстро ни загружался Linux, кто-нибудь всегда будет жаловаться, что он это делает слишком медленно. К счастью, кто-нибудь другой всегда может найти способ сократить время загрузки. Измерение времени, уходящего на различные этапы загрузки системы – это первый шаг к его оптимизации (En).
  • Узнайте о двух сторонах выравнивания нагрузки (wear-leveling) из статьи "Anatomy of Linux flash file systems". Выравнивание нагрузки – это важный аспект использования флэш-памяти в SSD-устройствах. Важным требованием к выравниванию нагрузки является возможность исключать из процедуры блоки, потерявшие значимость (например, из-за удаления). Протокол ATA предоставляет для этого новую команду управления диском, называемую trim, которая теперь поддерживается в Linux через запросы блочного уровня на удаление (En).
  • Одной из интересных возможностей ядра 2.6.28 (и нового ядра 2.6.29) является заморозка контейнеров и файловых систем, которая также может поддерживать создание контрольных точек групп процессов. Еще одним новшеством ядра 2.6.28 является возможность передавать PCI-устройства для использования гостевой операционной системе напрямую, минуя гипервизор (En).
  • Прочитав статью "LXC: Kонтейнерные утилиты Linux" вы получите представление о контейнерах в Linux. А в статье "Secure Linux containers cookbook" (En) вы можете ознакомиться со способами улучшения безопасности работы с контейнерами с помощью SELinux.
  • Почитайте статьи "Knock-based commands for your Linux laptop" (EN, developerWorks, июль 2006 г.), "Shake some sense into your Linux ThinkPad" и "ThinkPad aerobics: Rotate and shake your laptop to control applications" о некоторых хитроумных способах использования акселерометров в ноутбуках (En).
  • В ядре 2.6.29 появится поддержка WiMAX - технологии беспроводной широкополосной связи нового поколения. Эта технология будет состоять из компонентов пользовательского пространства и ядра, основанных на наборе стандартов 802.16e ассоциации IEEE (En).
  • Почитайте об инфраструктуре GRO (Generic Receive Offload - универсальные функции снижения нагрузки при приеме данных) в журнале фиксаций или на ресурсе lwn.net. GRO – это обобщение функциональности Large Send Offload, присутствующей во многих сетевых IP-стеках (En).
  • В этой статье о технологиях с открытым исходным кодом с сайта Oracle рассказывается о введении стандарта DIF в ядро Linux. T10-DIF – это функциональность промышленного уровня для обеспечения целостности данных, доступная теперь и в Linux. Технология DIF защищает данные на диске и решает проблему незаметного повреждения данных путем добавления информации о целостности данных в каждый блок диска (En).
  • В основном разделе Linux и в разделе Linux для новичков вы найдете множество ресурсов для Linux-разработчиков.
  • Семинары и обучение на developerWorks Россия.

Получить продукты и технологии

  • SEK.
  • Разработайте ваш следующий Linux-проект с помощью ознакомительного ПО от IBM, которое можно загрузить непосредственно с сайта developerWorks (En).

Комментарии

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
ArticleID=416324
ArticleTitle=Развитие ядра Linux
publish-date=07232009