ИГОРЬ ШТОМПЕЛЬ, инженер, системный администратор. Сфера профессиональных интересов – GNU/Linux, функциональное программирование
Linux 2.6.30
Выглядит неплохо!
Ядро – это сердце операционной системы. Оно изменяется от версии к версии, предоставляя все более широкие возможности. Что нового появилось в версии 2.6.30?
10 июня 2009 года Линус Торвальдс представил новый выпуск ядра операционной системы Linux - 2.6.30 [1]. 1334 разработчика подготовили более тринадцати тысяч исправлений (включено 1 096 994 строки кода, а 470 555 удалено) общим объемом 63 Мб [2].
Основными новшествами Linux 2.6.30 стали: добавление поддержки для файловых систем NILFS2, EXOFS и POHMELFS; протоколов RDS и IEEE 802.11w (предварительная); архитектуры Microblaze и подсистемы безопасности Tomoyo Linux; DRM (Direct Rendering Manager) для графических видеокарт Radeon R6xx/R7xx; появление асинхронной проверки устройств и разделов для ускорения загрузки (faster bootup); локальное кэширование данных, передаваемых с использованием сетевых файловых систем, и начальная поддержка NFS 4.1; добавлены системные вызовы preadv/pwritev и ряд новшеств в поддержке RAID.
Файловые системы NILFS2, EXOFS и POHMELFS
Как было сказано, новый выпуск ядра получил поддержку ряда новых файловых систем. Одной из них стала NILFS2, которая создана и активно разрабатывается NTT Lab (Nippon Telegraph and Telephone Corporation) [3]. NILFS2 - это файловая система с лог-структурированием (log-structures). В представлении файловой системы весь жесткий диск – это последовательность списка блоков, называемых log. Все операции по добавлению данных осуществляются в конец log. При этом блоки никогда не перезаписываются, за исключением случаев, когда на носителе информации не остается места (новые блоки будут добавлены в начало log).
Преимуществом данного подхода является то, что все изменения преобразуются в последовательность операций. А сами сбои (crashes) не могут повредить файловую систему, так как файловая система определяет конец log и продолжает работу. Кроме того, NILFS2 позволяет регулярно делать снимки изменений файловой системы - непрерывный snapshotting (continuous snapshotting). Последний не требует вмешательства системного администратора. NILFS2 дает возможность смонтировать эти снимки в режиме для чтения (on read-only mode). Указанная особенность позволяет пользователям восстанавливать уничтоженные данные.
Другой файловой системой, поддержка которой появилась в ядре версии 2.6.30, стала EXOFS (раннее известная как osdfs). Данная файловая система была разработана Avisha Traeger для IBM и основывалась на ext2. С 2008 года разработкой и поддержкой файловой системы занимается компания Panasas Inc (www.panasas.com), которая специализируется на создании высокопроизводительных вычислительных хранилищ, оптимизированных под кластеры под управлением операционной системы Linux. Данная файловая система работает поверх хранилищ объектов OSD (Object-based Storage Device). OSD - это абстракция, которая вместо логического массива не связанных между собой блоков (LBA - Logical block addressing) привносит идею хранения объекта как части коллекции (набора) объектов (collection of objects). Любой объект представляет собой контейнер для хранения данных и является массивом байт, индексирующимся от нуля до бесконечности [4]. В свою очередь EXOFS является объектно-основанной файловой системой (object-based file system), реализованной на вершине внешнего хранилища объекта. Данная особенность нашла отражение в ее названии - EXtended Object File Fystem, так как файловая система использует ext2-основанные метаданные и объектное хранилище устройств (object storage device). EXOFS поддерживает протокол T10 OSD, который является расширением SCSI [5]. Протокол дает возможность передавать данные объектами, например файлами, а не блоками, при этом передача данных и метаданных происходит раздельно.
POHMELFS (Parallel Optimized Host Message Exchange Layered File System) еще одна файловая система, получившая поддержку ядра версии 2.6.30, разрабатывается Евгением Поляковым. Она является высокопроизводительной распределенной файловой системой и дает возможность читать данные с удаленных узлов и одновременно записывать данные на удаленные узлы. POHMELFS позволяет осуществлять локальное кэширование данных и метаданных, что значительно ускоряет операции ввода-вывода (превосходит по быстродействию NFS в большинстве операций).
С разработкой POHMELFS тесно связан проект, который используется для создания распределенных хранилищ данных. Он представляет собой драйвер сетевого устройства - DST (Distributed (network) STrorage), работающий в ядре на уровне блочного устройства. DST позволяет шифровать канал передачи данных и поддерживает проверку целостности последних.
Протоколы RDS и IEEE 802.11w
Ядро версии 2.6.30, как было сказано выше, принесло поддержку новых протоколов в операционную систему Linux: RDS и IEEE 802.11w (предварительная). RDS (Reliable Datgram Sockets) - это протокол, ориентированный на обеспечение высокоскоростного обмена и низких задержек в транспортной системе серверов кластера. Разработчиком протокола является OpenFabrics Alliance (http://www.openfabrics.org). Зрелость проекта характеризует то, что на сегодняшний день RDS уже используется рядом продуктов (например, Oracle и Quicksilver от Silverstorm).
Протокол IEEE 802.11w Protected Management Frames (Защищенные Управляющие Фреймы) является частью набора стандартов, определяющих порядок беспроводной коммуникации в частотных диапазонах 2.4, 3.6 и 5 Ггц. Например, такие стандарты IEEE, как 802.11a, 802.11b, 802.11g и 802.11n, сегодня используются довольно широко. Кроме того, набор стандартов 802.11 ввел понятие типа «frame» для использования в сфере управления и контроля беспроводной связи. Результатом работы по усовершенствованию Medium Access Control layer набора стандартов IEEE 802.11 стало появление рассматриваемого протокола. Стоит отметить, что окончательный вариант стандарта IEEE 802.11w еще не утвержден, потому и поддержка его в ядре версии 2.6.30 носит предварительный характер.
Основная идея стандартизации протокола IEEE 802.11w заключается в необходимости внесения поправок в стандарт IEEE 802.11 с целью повышения уровня безопасности беспроводной связи за счет обеспечения конфиденциальности данных управленческих фреймов, механизмов интеграции данных и аутентификационных данных. Стандарт призван исправить ситуацию, когда в беспроводных локальных сетях системная управленческая информация отправляется в незащищенных фреймах и соответственно является уязвимой.
Архитектура MicroBlaze
MicroBlaze является микропроцессором с программным ядром (soft processor), созданным Xilinx для Xilinx FPGAs (FPGA - Field Programmable Gate Array, программируемая логическая интегральная схема) [6]. Разработку архитектуры осуществляет Михал Шимек (Michal Simek) с поддержкой PetaLogix and Xilinx. В основе MicroBlaze лежит 32-битный микропроцессор с программным ядром на базе RISC-архитектуры (RISC Harvard architecture). MicroBlaze позволяет комбинировать периферию, память и интерфейсы при создании разнообразных систем.
Ряд параметров MicroBlaze может быть сконфигурирован пользователем. Это размер кэша, блок управления памятью (memory management unit), встроенные периферийные устройства (embedded peripherals) и ряд других.
Без блока управления памятью с использованием MicroBlaze может быть запущена операционная система с упрощенной защитой и виртуальной моделью памяти (например, µClinux или FreeRTOS), а с блоком управления памятью возможен хостинг операционных систем, которым требуется основанная на аппаратной части защита (например, ядро Linux).
Tomoyo Linux
Tomoyo Linux - это новая подсистема безопасности (например, в Linux имеются SELinux, Smack), которая предлагает более правильную реализацию данного подхода в области достижения безопасности, что отличает ее от уже существующих. Программное обеспечение ориентировано на осуществление контроля доступа - MAC (Mandatory Access Control). Кроме того, подсистема безопасности может работать в режиме обучения (learning mode), когда она анализирует доступ к ядру и сохраняет результаты в качестве политики MAC. Tomoyo Linux разрабатывается NTT DATA CORPORATION (Япония), которая распространяет его под лицензией GPL [7].
Direct Rendering Manager для Radeon R6xx/R7xx
Для обеспечения эффективной видеоакселерации (video acceleration), в особенности рендеринга 3D, в Linux (как, впрочем, на других UNIX-подобных операционных системах) используется DRM (Direct Rendering Manager). Последний является составной частью Direct Rendering Infrastructure и состоит из двух драйверов, реализованных как модули ядра Linux. Один из них - общий DRM-драйвер (generic drm driver), а другой отвечает за поддержку конкретного видеооборудования. Таким образом, ядро 2.6.30 получило поддержку DRM специфичного для видеокарт Radeon - R6xx/R7xx.
Fastboot
В рассматриваемое ядро были внесены изменения, призванные ускорить процесс загрузки. Компания Intel реализовала проект, использование которого дает возможность осуществления асинхронной проверки устройств и разделов. Так, например, ядро может продолжить загрузку остальной части, в то же время сканирование устройств хранения данных будет осуществляться параллельно. Как известно, ранее процесс сканирования был синхронным - сканировалось только одно устройство, а ядро находилось в состоянии ожидания. А это занимало достаточно много времени [8].
Кэширование для сетевых файловых систем
и начальная поддержка NFS 4.1
Компания RedHat является разработчиком технологии локального кэширования данных, передаваемых с использованием сетевых файловых систем - FS-Cache. Данный процесс позволяет значительно ускорить осуществляемые операции. Реализация RedHat похожа на CacheFS, которую разработала компания Sun Microsystems и включила в ОС Solaris 2.3 [9]. Версия, включенная в ядро 2.6.30, получила поддержку файловых систем NFS и AFS.
Что касается NFS, то рассматриваемое ядро получило начальную поддержку этой файловой системы версии 4.1. NFS 4.1 разрабатывается в IETF (Internet Engineering Task Force, Специальная комиссия интернет-разработок - http://www.ietf.org). Основное поле деятельности организации - развитие протоколов и архитектуры Интернета. Важными новшествами, реализованными в данной файловой системе, стали обязательные для выполнения (mandatory-to-implement) сессии NFS 4.1, в то же время включение исходного кода Parallel NFS (http://pnfs.com) должно произойти в одной из следующих версий ядра.
Системные вызовы preadv()/pwritev()
В ядро версии 2.6.30 добавлена поддержка системных вызовов preadv()/pwritev(), разработчиком которых для операционной системы Linux является компания RedHat. Данные системные вызовы имеются в BSD-системах (например, NetBSD). Они предназначены для чтения из файлового дескриптора или записи в него по определенному смещению. Включение системных вызовов в ядро стало логичным шагом вперед, так как системные вызовы pread и pwrite появились в ядре Linux версии 2.1.60.
Изменения в поддержке RAID
Основным новшеством, затрагивающим поддержку RAID в рассматриваемой версии ядра, стало добавление проверки контроля целостности данных для переключения между режимами RAID5/6. Кроме того, внесено большое количество изменений в код MD (Multiple Device) реализации программного RAID. Так, RAID5 может быть конвертирован в RAID6 и наоборот, а также RAID1 в RAID5. Хотя стоит отметить, что текущая версия программы mdadm (ориентирована на создание программных RAID-массивов в Linux, раннее называлась - mdctl) не поддерживает эти изменения.
Новые драйверы
Среди большого количества изменений, внесенных в ядро 2.6.30, можно отметить появление новых драйверов. Так, звуковая подсистема получила поддержку ISA-драйвера для различных звуковых карт серии Turtle Beach MultiSound. Подсистема V4L/DVB стала поддерживать TV-устройства Conextant (с чипами серии cx231xx), которые подключаются через USB. Благодаря новому драйверу hdpvr добавлена возможность работать в Linux с устройствами Hauppauge HD PVR (ориентированы на запись видео с компьютера, телевизора или PlayStation 3 в качестве H.264). Также включены три драйвера (sq905, sq905c и mr97310a) для поддержки чипов, используемых в вебкамерах различных производителей.
В подсистему FireWire добавлена поддержка трансляции каналов (broadcasting channel) и асинхронного потока передачи. Разработчики удалили драйвер phidgets (предназначен для хранилищ (storage), работающих через USB), а вместо него предложили драйвер пространства пользователя (userspace), который имеет более широкую поддержку компонентов phidgets.
Подсистема I2C стала работать с рядом последних версий чипсетов для материнских плат Nvidia - MCP67, MCP73, MCP79 и MCP78S, AMD - SB800, Broadcom - HT1100. Подсистема аппаратного мониторинга обзавелась поддержкой чипов FSC Syleus, Hades, Nuvoton и Winbond Nuvoton.
В Linux 2.6.30 включен wmi-драйвер для ноутбуков Dell, который ответственен за обработку нажатий «горячих клавиш» (hotkeys). Поддержка лэптопов Sony и драйверов Thinkpad-acpi подверглась серьезной переработке (появилась поддержка большего количества моделей данных устройств).
***
Рассмотрение новшеств было сконцентрировано на основных моментах и не охватывает всего перечня изменений. Но ознакомления с ними достаточно, чтобы понять пути и масштабы совершенствования ядра одной из самых свободных операционных систем.
- http://permalink.gmane.org/gmane.linux.kernel/849020.
- http://www.opennet.ru/opennews/art.shtml?num=22084.
- http://www.nilfs.org/en/current_status.html.
- http://en.wikipedia.org/wiki/Object_storage_device.
- http://www.t10.org/intro.htm.
- http://www.xilinx.com/tools/microblaze.htm.
- http://tomoyo.sourceforge.jp/wiki-e.
- http://lwn.net/Articles/299483.
- http://en.wikipedia.org/wiki/CacheFS.