Отчёт о состоянии развития FreeBSD за четвёртый квартал 2011 года
Представлен отчёт о развитии проекта FreeBSD с сентября по декабрь 2011 года. Основные усилия разработчиков в четвёртом квартале 2011 года были связаны с подготовкой релиза FreeBSD 9.0, который вышел в начале января.Основные достижения:
- Системы хранения и файловые системы
- Во FreeBSD-HEAD принят код подсистемы CAM Target Layer (CTL), обеспечивающей эмуляцию дисковых и процессорных устройств. Например, CTL позволит реализовать возможность использования системы на базе FreeBSD и карты Fibre Channel в качестве внешнего RAID-массива, target-интерфейс которого будет реализован через CTL. Кроме того, CTL можно использовать как тестовый фреймворк для CAM (Common Access Method): реализовав в CAM новую возможность, можно сразу протестировать её в CTL. При этом легко сэмулировать нетипичное поведение устройств и различные аппаратные ошибки, которые в штатном режиме невозможно повторить на реальном устройстве.
Например, для тестирования драйвера новой карты Fibre Channel можно создать LUN и использовать CTL без реального оборудования, привязав драйвер "da" к CTL LUN и выполняя с ним любые операции ввода/вывода. Изначально CTL был создан для Linux в 2003 году компанией Copan Systems, ныне входящей в состав SGI. В 2008 году код был портирован во FreeBSD, а в 2010 году по договорённости с SGI предоставлен под лицензией BSD. Во FreeBSD-STABLE CTL планируется интегрировать в середине февраля, т.е. данная подсистема войдёт в состав FreeBSD 9.1;
- Инициатива по переработке GEOM-класса Multipath, позволяющего организовать доступ к хранилищу, подключенному через несколько каналов ввода/вывода. В новой реализации устранены многие проблемы и добавлены дополнительные возможности, такие как поддержка режима Active/Active, который распределяет нагрузку по всем рабочим каналам, в дополнение к ранее доступному Active/Passive. Улучшена реализация автоматического режима конфигурации Multipath. Добавлен ручной режим настройки, при котором каналы можно удалять и добавлять через команды remove и add. Изменён подход к работе с каналами после сбоя, теперь они не удаляются из GEOM, а лишь помечаются сбойными (для управления сбойными каналами добавлены команды "fail" и "restore"). Новая реализация GEOM-класса Multipath уже добавлена во FreeBSD HEAD и скоро будет перенесена в ветки 9-STABLE и 8-STABLE;
- Компания LSI представила свой вариант драйвера "mps", в котором реализована поддержка 6Gb SAS-контроллеров, SSD-накопителей WarpDrive и интегрированных RAID. В драйвере также улучшен код восстановления ошибок, добавлена поддержка EEDP (SCSI protection information) и TLR (Transport Level Retries). Ioctl-интерфейс драйвера совместим с утилитами LSI. Код драйвера интегрирован во FreeBSD HEAD и в феврале будет портирован для веток stable-9 и stable-8;
- В драйвер "da" (SCSI Direct Access Driver) добавлена поддержка операции BIO_DELETE (TRIM). В зависимости от возможностей устройств используются разные методы работы TRIM (для управления подготовлен sysctl kern.cam.da.X.delete_method): NONE, DISABLE, ZERO, WS10, WS16 и UNMAP. Дополнительно в драйвере "da" обеспечена возможность вывода информации о физическом размере сектора для устройств. Код уже интегрирован в ветку HEAD и скоро будет портирован в ветки 8/9-STABLE;
- Снят гриф экспериментальной разработки с кода новой реализации клиента и сервера NFS, которые начиная с версии FreeBSD 9.0 используются по умолчанию. Обеспечена достаточно полная поддержка NFSv4.0, NFSv3 и NFSv2. Продолжается работа по реализации поддержки NFSv4.1. Доступны начальные патчи с реализацией pNFS и режима агрессивного дискового кэширования на стороне клиента NFSv4 (packrats);
- Во FreeBSD-HEAD принят код подсистемы CAM Target Layer (CTL), обеспечивающей эмуляцию дисковых и процессорных устройств. Например, CTL позволит реализовать возможность использования системы на базе FreeBSD и карты Fibre Channel в качестве внешнего RAID-массива, target-интерфейс которого будет реализован через CTL. Кроме того, CTL можно использовать как тестовый фреймворк для CAM (Common Access Method): реализовав в CAM новую возможность, можно сразу протестировать её в CTL. При этом легко сэмулировать нетипичное поведение устройств и различные аппаратные ошибки, которые в штатном режиме невозможно повторить на реальном устройстве.
- Сетевая инфраструктура
- Обеспечена возможность активации во FreeBSD 9.0 только IPv6-стека без поддержки IPv4. Возможность использования IPv6 без IPv4 полезна для тестирования самодостаточности реализации IPv6 и выявления ошибок в приложениях, трудноуловимых при использовании двойного IP-стека (часто в случае сбоя программа без лишних предупреждений начинает использовать IPv4);
- Во FreeBSD HEAD добавлены наработки проекта CARP2, в рамках которого предпринята попытка полностью переписать реализацию протокола CARP (Common Address Redundancy Protocol) для FreeBSD. Протокол CARP, выступая в роли открытой альтернативы протоколам HSRP (Hot Standby Router Protocol) и VRRP (Virtual Router Redundancy Protocol), позволяет организовать совместное использование IP-адреса между несколькими серверами в локальной сети, что может применяться для балансировки нагрузки (IP одновременно используют все сервера) или для создания отказоустойчивых систем (IP использует первичный сервер, при нарушении его работы, IP подхватывает другой).
Причиной создания новой реализации CARP для FreeBSD является то, что текущая реализация не вносит нового сетевого интерфейса, а привязана к адресу на существующем интерфейсе, из-за чего в коде обработки входящих пакетов присутствует несколько "хаков", от которых хотелось бы избавиться. Среди других целей - упрощение кода, решение многих связанных с CARP проблем для которых остаются незакрытые PR в GNATS, нормализация адресов CARP с точки зрения демонов маршрутизации, таких как quagga/zebra. Новая реализация также позволит обеспечить поддержку одного избыточного IP на подсеть и реализовать режим carpdev для интерфейсов без IP. Из планов отмечается реализация функций arpbalance и ipbalance, добавление поддержки наглядного вывода CARP-пакетов в tcpdump, работа с IANA по получению официального номера для нового протокола;
- Система
- Отмечается большой прогресс в создании для FreeBSD полноценного С++ стека, целиком распространяемого под лицензией BSD и независящего от кода проекта GNU. Добавлены две новые библиотеки: libc++ с реализацией элементов, определённых в стандарте C++11, и libcxxrt с реализацией спецификации C++ ABI. Для задействования данных библиотек в src.conf следует указать "WITH_LIBCPLUSPLUS=yes" и использовать при сборке "-stdlib=libc++" (для задействования GNU libstdc++ нужно указать "-stdlib=libstdc++"). По умолчанию библиотеки не используются, так как библиотека libc++ не совместима с поставляемым в базовой системе gcc и может работать только с clang.
Среди планов на будущее: тестирование сборки портов с libc++ (большинство портов без проблем собираются, но остаются такие, которые жестко привязаны к libstdc++ или требуют патчей); обеспечение возможности выбора GNU или BSD библиотек через libmap.conf; переход на сборку и использование libc++ и libcxxrt по умолчанию (когда clang станет компилятором по умолчанию в базовой системе); удаление libstdc++ из базовой системы и помещение в порты для обеспечения обратной совместимости;
- Продолжена работа по замене устаревшей реализации регулярных выражений в libc. Наиболее подходящим кандидатом для замены является библиотека TRE, распространяемая под лицензией BSD, поддерживающая многобайтные символы, совместимая с POSIX и работающая не хуже других альтернатив. С другой стороны, при разработке BSD-варианта утилиты grep уже подготовлен необходимый задел, но имеются проблемы с реализацией некоторых оптимизаций, внесению которых мешают ограничения POSIX API.
В рамках текущего проекта ведётся работа по доработке кода и созданию эффективного алгоритма сопоставления по шаблону, который можно будет использовать в других приложениях. Среди планов на будущее: создание нового эвристического метода выявления соответствий, поддержка специфичных для утилит GNU расширений регулярных выражений, добавление в BSD grep поддержки поиска по множественным шаблонам (multi-pattern);
- Отмечается большой прогресс в создании для FreeBSD полноценного С++ стека, целиком распространяемого под лицензией BSD и независящего от кода проекта GNU. Добавлены две новые библиотеки: libc++ с реализацией элементов, определённых в стандарте C++11, и libcxxrt с реализацией спецификации C++ ABI. Для задействования данных библиотек в src.conf следует указать "WITH_LIBCPLUSPLUS=yes" и использовать при сборке "-stdlib=libc++" (для задействования GNU libstdc++ нужно указать "-stdlib=libstdc++"). По умолчанию библиотеки не используются, так как библиотека libc++ не совместима с поставляемым в базовой системе gcc и может работать только с clang.
- Поддержка оборудования
- Обеспечена поддержка новых возможностей процессоров Intel SandyBridge. Добавлена поддержка проверки и включения расширенных состояний FPU, позволяющих использовать регистры YMM и набор инструкций AVX. Возможность включения и использования привязки TLB к отдельным процессам. Поддержка использования инструкций INVPCID, которые появятся в CPU IvyBridge и позволят оптимизировать работу обработчиков TLB. В будущем планируется обеспечить поддержку SEP, использовать аппаратный генератор случайных чисел и задействовать в драйвере aesni набор инструкций AES-NI;
- Представлен переписанный звуковой драйвер snd_hda (High Definition Audio). Старый драйвер разбит на три независимых части, которые теперь взаимодействуют через интерфейс NewBus: драйвер HDA-контроллера (hdac), драйвер HDA-кодека (hdacc) и драйвер для работы с HDA-звуком (hdaa). Добавлена поддержка записи многоканального звука. В ситуации, когда несколько DAC/ADC используют в кодеке один и тот же звуковой сигнал, для pcm-устройства теперь регистрируется дополнительный канал записи/воспроизведения. Реализован новый механизм резервирования потоков, позволяющий использовать больше pcm-устройств, чем контроллер поддерживает потоков (обычно 4 в каждом направлении). Добавлены sysctl-вызовы для доступа к настройкам кодека. В настоящий момент переработанный драйвер находится на стадии тестирования и скоро будет интегрирован в ветку HEAD;
- Отмечается прогресс в развитии средств для просмотра и записи цифрового TV для FreeBSD. В порт multimedia/webcamd добавлена поддержка новой порции TV-тюнеров с интерфейсом USB, для работы которых используются драйверы Linux V4L/DVB. В порт multimedia/cx88 добавлена поддержка Linux DVB API для PCI DVB-T тюнеров на базе чипа CX88. Для просмотра и записи TV можно использовать новый порт multimedia/xbmc-pvr или порт multimedia/vdr, а также такие приложения, как kaffeine, mplayer и vlc. Из планов на будущее называется обновления версий VDR-приложений в портах, обновление multimedia/libxine до версии 1.2.0 и продолжение тестирования оборудования;
- Началась работа над портом FreeBSD/390 для мейнфреймов IBM System/390. Среди задач отмечено создание загрузчика IPLabel для тестирования загрузки ядра без использования команд эмулятора Hercules. После этого планируется приступить к работе по обеспечению кросс-сборки и загрузки ядра;
- Во FreeBSD/arm продолжена реализация поддержки SoC-платформы Marvell Armada XP, основанной на ARMv6/v7-совместимых CPU Sheeva. Поддерживается загрузка с использованием U-Boot, последовательный порт, контроллер прерываний, таймеры, USB, Ethernet и PCI-Express. Реализована поддержка SMP, интегрированы драйверы SATA и CESA. На следующем этапе будет реализована поддержка L2-кэша и полная поддержка WB/WBA кэша;
- Во FreeBSD/powerpc продолжена реализация поддержки SoC APM86290, основанного на процессорах семейства AppliedMicro PACKETpro. Чип включает в себя два ядра PPC465 на базе архитектуры Power, соответствующих спецификации Book-E. В рамках проекта предпринята попытка расширения поддержки Book-E во FreeBSD и создания драйверов для интегрированных в SoC APM86290 периферийных устройств. В настоящий момент уже поддерживается загрузка с использованием U-Boot, CPU PPC465, L1-кэш, консоль через последовательный порт, контроллер прерываний, EHCI USB, менеджер очередей, Ethernet-контроллер, GPIO, I2C. Завершена работа над Classifier-драйвером, менеджером очередей и трафика, улучшена производительность и стабильность. Предстоит реализовать поддержку L2-кэша и интегрировать наработки с поддержкой APM86290 в ветку CURRENT;
- Добавление в FreeBSD/powerpc поддержки процессоров Freescale QorIQ, идущих на смену семейству PowerQUICC (MPC85xx). QorIQ базируется на архитектуре DPAA (Data Path Acceleration Architecture), которая подразумевает интеграцию в SoC функций обработки пакетов. В настоящий момент обеспечена поддержка чипов QorIQ P2021 и P3041, поддержка ядра E500mc и средств связи CoreNet, возможность загрузки с использованием U-Boot, поддержка L1, L2 и L3 кэшей, последовательного порта (UART), контроллера прерываний, инфраструктуры DPAA (BMAN, FMAN, QMAN), Ethernet (в режимах TSEC, SGMII), I2C, EHCI-контроллера, контроллера PCI Express, поддержку SMP. Предстоит реализовать поддержку чипа QorIQ P5020 (32-bit), Ethernet с поддержкой DPAA Regular Mode DPAA, расширенного SDHC;
- Изолированные окружения, безопасность и ограничения ресурсов
- Начало разработки демона auditdistd, нацеленного на обеспечение безопасного и надёжного способа передачи логов системного аудита поверх TCP/IP сети от локального демона аудита к демону аудита на удалённом сервере. Система аудита FreeBSD позволяет организовать ведение полного лога событий, который, в частности, может быть полезен для анализа причин и последствий инцидентов, связанных с нарушением безопасности.
В настоящее время ядро передаёт события аудита напрямую в файл или через устройство /dev/auditpipe. Так как лог сохраняется локально, злоумышленнику не составляет труда удалить лог или почистить в нём следы своей деятельности. Необходимость создания auditdistd продиктована желанием обеспечить возможность надёжного хранения логов аудита на внешнем сервере, что позволит защитить данные аудита от модификации злоумышленником в случае взлома локальной системы. Работу планируется завершить в конце февраля.
- Начало разработки демона auditdistd, нацеленного на обеспечение безопасного и надёжного способа передачи логов системного аудита поверх TCP/IP сети от локального демона аудита к демону аудита на удалённом сервере. Система аудита FreeBSD позволяет организовать ведение полного лога событий, который, в частности, может быть полезен для анализа причин и последствий инцидентов, связанных с нарушением безопасности.
- Приложения и система портов
- В системе портов отмечено два важных события: 1. Дерево портов FreeBSD наконец-то преодолело отметку в 23 тысячи портов. 2. Принято решение о миграции дерева портов с CVS на систему контроля версий Subversion.
Среди других изменений: Проведена работа по закрытию накопившихся PR, число незакрытых PR держится на уровне 1100. Выпущена вторая альфа версия pkgng (pkg_install нового поколения), в которой обеспечена поддержка установки бинарных обновлений и проверки целостности. В ближайшее время Pkgng планируется задействовать для проверки целостности текущей инфраструктуры портов. Из проводимых работ отмечаются: адаптация портов для обеспечения сборки с использованием компилятора Clang, обновление KDE4 и cmake, тестирование скриптов на нормальную обработку двух цифр в номере версии FreeBSD 10, перенос из портов в базовую систему flex и m4, оптимизация bsd.ports.mk, сокращение числа портов завязанных на старые ioctl;
- Введён в строй новый сервис для разработчиков, коммитеров и мэйнтейнеров портов FreeBSD - redports.org. Сервис позволяет организовать автоматическую сборку портов для различных архитектур и версий FreeBSD;
- Представлена утилита igor, предназначенная для выявления типичных ошибок в документации (man-руководствах, DocBook SGML документах и прочих текстовых файлах). Среди выявляемых ошибок: типичные орфографические ошибки, дублирование слов, некорректная расстановка пробелов, проблемы со структурой man-ов и форматированием DocBook SGML;
- Обновлены порты, связанные с языком программирования Haskell. Обновлены ключевые порты: Haskell Platform 2011.4.0.0 и GHC 7.0.4. Число связанных с Haskell портов превысило 300. Среди новых портов web-фреймворки Yesod и Happstack, а также система профилирования ThreadScope. Из задач которые предстоит выполнить отмечено тестирование работы GHC с clang/LLVM и обеспечение сборки порта lang/ghc с использование уже установленного компилятора ghc без загрузки отдельного архива с компилятором;
- Отмечается прогресс в адаптации новых версий десктоп-оболочки KDE и Qt для FreeBSD. Проделана большая работа по обеспечению сборки KDE и Qt с использованием Clang. В порты помещены свежие релизы: KDE SC 4.7.3 (4.7.4 в экспериментальном репозитории area51), Qt 4.8.0 (в area51), CMake 2.8.7. Уже портированы, но требуют дополнительного тестирования, KDE SC 4.8.0, менеджер персональной информации KDE PIM 4.7.4, офисный пакет Calligra, бэкенды phonon-gstreamer, phonon-xine и phonon-vlc;
- Ведётся работа по подготовке порта GNOME 3.x, в частности, в настоящее время в экспериментальном репозитории тестируется GNOME 3.2. К сожалению, портирование продвигается медленно, так как не хватает разработчиков;
- Инициатива по наведению порядка с работоспособностью perl-модулей в портах. Планируется выявить и исправить модули, для которых завершается ошибкой выполнение встроенных тестовых сценариев. Проверка всех "p5-*" портов показала, что только 61% модулей корректно проходят тесты. Уже обновлены многие порты, у которых проблемы были вызваны отсутствием в зависимостях необходимых модулей. Из более глобальных планов отмечается создание специально фреймворка для тестирования портов и автоматизированного запуска тестов после обновления портов;
- Ведётся работа по переименованию портов "ruby-" в "rubygem-". Готовится вторая попытка перехода в портах с Ruby 1.8 на 1.9;
- Доступен релиз минидистрибутива для создания межсетевых экранов и сетевых шлюзов pfSense 2.0.1, который основан на кодовой базе FreeBSD 8.1 с задействованием наработок проекта m0n0wall и активным использованием pf и ALTQ. Из планов на будущее отмечается переход на 6-месячный цикл выпуска релизов, миграция на FreeBSD 9, обеспечение полной поддержки IPv6, реализация возможности установки дополнений, оформленных в виде пакетов PBI (используются в PC-BSD), создание универсального Captive Portal, интеграция DNS-сервера Unbound, замена JavaScript-библиотеки Prototype на jQuery;
- Представлено несколько новых системных утилит для управления конфигурацией: добавлены порты sysutils/sysrc и ysutils/host-setup, ожидает включения порт sysutils/tzdialog. Утилита sysrc позволяет безопасно вносить изменения в файл rc.conf, без опасения получить неработающую систему из-за опечатки. host-setup предоставляет наглядный интерфейс для настройки таких параметров, как часовой пояс, имя хоста, сетевые интерфейсы, параметры шлюза, DNS-серверы и т.п. Утилита tzdialog является заменой tzsetup и отличается наличием графического интерфейса пользователя, построенного на основе Xdialox;
- Началась работа по обновлению версий компонентов X.Org в портах. В настоящее время в порты помещён X-сервер 1.7.7 и 1.10.4, обновлены драйверы, в том числе пакет Mesa и драйвер xf86-video-intel. Ведётся работа по адаптации грядущего релиза xorg-server 1.12.
- В системе портов отмечено два важных события: 1. Дерево портов FreeBSD наконец-то преодолело отметку в 23 тысячи портов. 2. Принято решение о миграции дерева портов с CVS на систему контроля версий Subversion.
Полный текст статьи читайте на OpenNet