Отчет о состоянии развития FreeBSD за третий квартал 2010 года

Представлен отчет о развитии проекта FreeBSD с июля по сентябрь 2010 года. Примечательно, что данный отчет содержит 55 элементов, что делает его самым объемным за всю историю проекта и демонстрирует неплохую тенденцию роста активности представителей сообщества разработчиков FreeBSD. Основные достижения:
  • Системы хранения и файловые системы
    • В рамках проекта ExtFS ведется работа над поддержкой монтирования файловой системы ext4 в режиме только для чтения и реализацией алгоритма предварительного резервирования блоков (pre-allocation). В настоящее время код уже может быть использован для чтения данных с созданных по умолчанию ext4-разделов, в процессе находится создание модуля ядра "ext4fs";
    • В загрузчике gptboot обеспечено полное следование спецификации GPT, включая поддержку использования резервных заголовков и таблиц в случае несовпадения контрольных сумм. Новые атрибуты можно использовать для настройки разделов, с которых gptboot попытается загрузиться один раз и в случае сбоя откатится к предыдущим настройкам;
    • Отмечен прогресс в оттачивании кода системы репликации устройств хранения данных (HAST), которая позволяет использовать FreeBSD для создания высоконадежных конфигураций, в которых данные синхронизированы по всем узлам кластера. HAST реализован в виде GEOM-класса, обеспечивающего синхронную репликацию блочных устройств поверх TCP/IP сетей, независимо от типа накопителя и файловой системы. HAST предусматривает возможность быстрого восстановления после сбоя, причем, при выходе из строя первичного master-узла, его функции могут быть делегированы slave-узлу. После проверки и монтирования UFS раздела или импорта ZFS пула на поврежденном узле, система автоматически синхронизирует внесенные за время восстановления изменения и продолжит работу без потери данных. За последнее время в HASP добавлена поддержка хуков, позволяющих запустить определенную команду при наступлении указанного события (соединение, рассоединение, начало синхронизации, завершение синхронизации, прерывание синхронизации, смена роли и т.п.). При получении сигнала SIGHUP теперь осуществляется загрузка изменений конфигурации. Добавлена внутренняя реализация механизма keepalive, исправлено множество ошибок;
    • Продолжена работа по стабилизации поддержки работы FreeBSD в качестве клиента распределенной сетевой файловой системы OpenAFS;
    • Началось тестирование файловой системы ZFS v28 для FreeBSD. Среди новшеств ZFS v28 - поддержка автоматического объединения дубликатов, поддержка RAIDZ3, реализация утилиты "zfs diff", поддержка команды "zpool split", возможность ведения счетчика ссылок на снапшот, поддержка импорта пула в режиме только для чтения;
  • Система
    • Включенный ранее в состав базовой системы FreeBSD-CURRENT компилятор компилятор Clang обновлен до версии 2.8. В системы внесены все необходимые изменения для сборки "мира" с использованием Clang для архитектур i386 и amd64. Отдельное внимание уделяется адаптации портов для сборки в Clang, в большинстве случаев портирование портов сводится к добавлению опции для выбора альтернативного компилятора. Из поставленных задач можно отметить организацию регулярного процесса импортирования новых снапшотов Clang, рассмотрение возможности использования Clang для архитектуры ARM, адаптация портов для Clang и организация автоматизированных тестовых сборок портов;
    • В рамках проекта XTC (eXternal Tool Chain) осуществлена реализация возможности использования альтернативных инструментариев сборки (компилятор, ассемблер, линковщик и т.п.). Ранее скрипты сборки были завязаны на стандартных программах (CC=cc), но после начала интеграции Clang и появлении необходимости сборки для встраиваемых платформ пришлось задуматься о возможности подключения альтернативных инструментов;
    • В рамках проекта FSC (FreeBSD Services Control) ведется работа по подготовке похожих на Solaris SMF и daemontools инструментов для управления и мониторинга работой системных сервисов. Для контроля за работой сервисов используется фоновый процесс fscd, сервисы добавляются при помощи утилиты fscadm. В случае аварийного завершения работы сервиса, fscd распознает падение процесса и запускает сервис вновь. По сравнению со сторонними пакетами, такими как daemontools, система FSC имеет несколько преимуществ, например fscd использует push-нотификацию вместо пулинга (отправляет уведомления, не требуя периодического опроса состояния), fscd является внутренней подсистемой, легко интегрируемой rc.d-инфраструктуру FreeBSD и полностью поддерживаемой разработчиками (daemontools является неподконтрольным портом для которого можно лишь поддерживать набор патчей). В течение нескольких недель ожидается начало более активного тестирования и сбор замечаний, после чего код будет готовиться для интеграции в дерево исходных текстов FreeBSD;
    • Продолжается работа над новой инфраструктурой событий таймеров. Во FreeBSD-CURRENT рефакторингу подверглось API для работы с таймерами, написан машинонезависимый код для управления таймерами, который может обслуживать как устаревшие периодические, так и новые одноразовые режимы работы таймера. Одноразовый режим позволяет значительно сократить число генерируемых таймером прерываний и понизить нагрузку на CPU - прерывание таймера, в случае нахождения CPU в состоянии простоя (idle), генерируется только при необходимости обработки зарегистрированного события. Нагруженные CPU по прежнему получают полный поток прерываний таймера с целью координирования планирования задач, хронометрирования и учета ресурсов. .Для примера специальный тюнинг позволяет добиться на 8-ядерных CPU генерации всего 100 прерываний в секунду, что позволяет понизить энергопотребление и повысить эффективность технологии Intel TurboBoost;
    • Ведется работа над проектом Netdump, позволяющим отправлять дампы состояния ядра после краха по сети, вместо их сохранения на локальном диске. Для отправки данных используется UDP-протокол, обслуживаемый минимальным обособленным TCP/IPv4 стеком. Прием дампа осуществляется netdump-сервером, запущенным на внешнем хосте. Создание Netdump целесообразно для отслеживания крахов бездисковых узлов кластеров, загружающихся по PXE машин или в в случае отладки проблем в дисковой подсистеме;
    • Продолжена доработка альтернативной программы установки pc-sysinstall (консольный бэкенд, напоминающий классический sysinstall), разработанной в недрах проекта PC-BSD. Из возможностей отмечена поддержка ZFS, raidz, gmirror-зеркалирования, GPT/EFI, GELI-шифрования, gjournal, присутствует собственный менеджер для MBR слайсов/разделов, после установки формируется подробный лог, отражающий статус выполнения всех операций. Из задач, над которыми ведется работа, отмечается необходимость дополнительного тестирования автоматизированного режима установки и добавление функции создания установочных дисков с pc-sysinstall;
    • В Perforce-репозиторий добавлен код для обеспечения регистрации опциональных подсистем ядра через sysctl;
    • Завершена работа по портированию во FreeBSD кода DTrace, обеспечивающего возможность динамической трассировки пользовательских приложений (поддержка DTrace появилась еще во FreeBSD 7.0, но позволяла только отслеживать процессы, протекающие внутри ядра). Например, теперь можно устанавливать точки останова, следить за распределением памяти, использованием процессорного времени, наблюдать за блокировками, отслеживать сетевые и файловые операции в приложениях, запущенных на пользовательском уровне. В частности, в рамках портирования из OpenSolaris перенесен pid-провайдер (позволяет отслеживать выполнение определенных функций в программе), реализованы USDT-проверки (вкомпилирование в пользовательскую программу отладочных вызовов), утилита plockstat (контроль блокировок в библиотеке pthread), утилита dtruss (аналог ktrace для трассировки системных вызовов), произведена интеграция поддержки Trace в порты с MySQL и PostgreSQL. Улучшение уже интегрировано во FreeBSD HEAD и в будущем войдет в состав релизов FreeBSD 8.2 и 7.4.
    • В bsdtar, pkg_create и pkg_add добавлена поддержка метода сжатия "xz". Пакеты сжатые методом xz имеют расширение ".txz". Кроме того в newsyslog добавлена возможности сжатия лог-файлов методом xz, что позволяет сэкономить 15-30% дискового пространства по сравнению с использованием bzip2. В настоящее время рассматривается возможности перехода по умолчанию к формату пакетов ".txz" вместо ".tbz";
  • Изолированные окружения, безопасность и ограничения ресурсов
    • В рамках проекта Capsicum создан фреймворк для организации изолированного выполнения приложений и ограничения использования приложениями определенных функций. Capsicum расширяет POSIX API и предоставляет несколько новых системных примитивов, нацеленных на поддержку модели безопасности через управление возможностями объектов ("object-capability") для Unix-систем. Capsicum нацелен на дополнение традиционного централизованного мандатного контроля доступа средствами для защиты отдельных приложений. Используя Capsicum приложение можно запустить в режиме повышенной изоляции (sendbox), при котором программа сможет выполнять только ранее специфицированные штатные действия. В настоящее время уже достаточно много программ, от tcpdump до chromium, модифицированы для поддержки режима изоляции, который может быть использован для уменьшения рисков при обработке сомнительных данных.

      В настоящее время работа сосредоточена на преобразовании приложений для предоставления возможности их изоляции при помощи Capsicum. В ноябре или декабре планируется интеграция Capsicum во FreeBSD-CURRENT, также проводится анализ KBI на предмет возможности переноса Capsicum в ветку 8-STABLE;

    • В GELI, GEOM-классе для обеспечения дискового шифрования, появились следующие улучшения, которые уже добавлены во FreeBSD-CURRENT: Поддержка метода шифрования AES-XTS, который теперь используется по умолчанию. AES-XTS также интегрирован во фреймворк opencrypto и драйвер aesni. Поддержка работы с несколькими ключами шифрования, каждый ключ при этом используется для своего набора секторов на диске. Пароль теперь может быть загружен из файла (опции -J и -j);
    • Представлена новая криптографическая файловая система PEFS, работающая на уровне ядра и способная обеспечивать шифрования данных, работая поверх существующих примонтированных файловых систем. Из алгоритмов шифрования реализованы AES и Camellia. В последнее время осуществлен перевод системы на использование режима шифрвоания XTS, реализована поддержка "рассеивания" содержимого файлов, добавлена поддержка ext2. Для выполнения функций аутентификации пользователей по хранимому в файловой системе ключу и для добавления ключей для смонтированных ФС во время входа пользователя подготовлен специальный PAM-модуль. В настоящее время PEFS успешно проходит тесты fsx, pjdfstest, blogbench и dbench при работе поверх UFS и ZFS;
    • Начат проект по реализации контейнеров ресурсов и возможности установки индивидуальных ограничений ресурсов в привязке к конкретным Jail-окружениям. В настоящее время разработан общий фреймворк для управления ресурсами, который постепенно расширяется поддержкой лимитирования новых типов ресурсов;
    • Близится к завершению работа по синхронизации кода пакетного фильтра PF, интегрированного во FreeBSD, с кодовой базой OpenBSD 4.5. Код уже можно рассматривать как стабильный, но требуется еще проведение ряда регрессивных тестов. Из новшеств отмечена поддержка divert(4), которая позволит использовать совместно с pf утилиты подобные snort_inline. В качестве модуля ядра реализована поддержка pfsync;
  • Сетевая инфраструктура
    • Проведена доработка проекта BSNMP, представляющего собой легковесный SNMP-сервер (bsnmpd), распространяемый в рамках лицензии BSD. В качестве основного новшества в BSNMP добавлена поддержку SNMPv3-совместимой аутентификации и шифрования трафика. Через модуль snmp_vacmи реализована система ограничения доступа на основе представлений (view). Дополнительно в рамках проекта создан и интегрирован в базовую систему модуль snmp_wlan, нацеленный на обеспечение управления и мониторинга беспроводного сетевого стека FreeBSD;
    • Во FreeBSD-CURRENT приняты патчи, подготовленные в рамках проекта по усовершенствованию TCP/IP стека FreeBSD. Добавлен код системы автотюнинга параметров пересборки TCP-пакетов, интегрирован модуль ядра SIFTR (Statistical Information For TCP Research), разработанный при поддержке компании Cisco. SIFTR-модуль осуществляет ведение журнала в который заносится широкий диапазон параметров, связанных со статистикой активных TCP-соединений. Ожидается, что код будет бэкпортирован и появится в составе релизов FreeBSD 7.4 и 8.2;
    • Начата работа над интеграцией в ядро FreeBSD пяти новых модулей с реализацией различных алгоритмов для контроля перегрузки (Congestion Control) в TCP: HTCP, CUBIC, Vegas, HD и CHD. Готовится к интеграции в ядро FreeBSD фреймворк Khelp, представляющий интерфейс для создания модулей ядра, на лету обеспечивающих выполнение определенных сервисных функций. Также включения в ядро ожидает Khelp-модуль ERTT (Enhanced Round Trip Time), позволяющий более точно измерять параметры TCP потока для использования в алгоритмах управления контроля перегрузки TCP;
    • Отмечается прогресс в разработке стека для организации перехвата пакетов - ringmap (Packet-Capturing Stack), специально оптимизированного для высокоскоростных сетевых интерфейсов. Реализация ringmap напоминает "zero-copy BPF" тем, что минимизирует операции копирования пакетов, благодаря использованию единых совместных буферов. В отличии от "zero-copy BPF" ringmap исключает любое копирование пакета, так как DMA-буфер сетевого адаптера отображается прямо в user-space. С точки зрения API новая система совместима с libpcap. Из последних достижений отмечена интеграция с драйверов lem (поддерживаются сетевые адаптеры на базе чипов Intel 8254X), реализация BPF-совместимой фильтрации пакетов на уровне ядра и на пользовательском уровне, частичная интеграция с драйвером ixgbe для перехвата 10 гигабитных потоков;
  • Поддержка оборудования
    • Во FreeBSD-CURRENT обеспечена поддержка установки на беспроводных маршрутизаторах на базе SoC Atheros AR913x и AR910x. Так как поддержка 802.11n еще находится в процессе разработки, тестируемое оборудование удалось задействовать в качестве WiFi 802.11bg точки досутпа;
    • Работа по интеграции поддержки архитектуры ARM в дерево исходных текстов FreeBSD пока находится на начальной стадии.
    • Завершен процесс портирования во FreeBSD фреймворка DAHDI (Zaptel), набора драйверов для голосовых карт, модулей с поддержкой TDMoE (Time Division Multiplexing over Ethernet), драйверов с реализацией аппаратных, программных механизмов подавления эхо (Octasic, VPMADT032) и драйверов для аппаратных транскодеров (TC400B). Код для поддержки FreeBSD теперь размещен в официальном SVN-репозитории проекта DAHDI и отныне будет постоянно синхронизироваться с Linux-версией DAHDI. Для удобства установки DAHDI пользователями FreeBSD подготовлен специальный порт - misc/dahdi, который помимо основного кода из SVN-репозитория содержит ряд дополнений (например модуль эхоподавления OSLEC и экспериментальный драйвер zaphfc), не включенных в SVN из-за лицензионных ограничений. Из планов можно отметить обеспечение возможности запуска связки asterisk+dahdi с привилегиями обычного пользователя (сейчас запускается от root) и добавление в порт asterisk поддержки ISDN-сигнализации bri_net_ptmp, вместо устаревшей связки zaptel+asterisk-bristuff;
    • Организация FreeBSD Foundation готова профинансировать создание GEM/KMS модулей ядра для FreeBSD, что позволит использовать во FreeBSD новые версии драйверов для видеокарт Intel. Напомню, что начиная с версии 2.10 драйвер xf86-video-intel не поддерживает переключение видеорежимов на пользовательском уровне, возможно только использование KMS-модуля, работающего на уровне ядра;
    • Продолжается развитие порта FreeBSD/powerpc64, который уже успешно загружается в SMP-режиме на приставке Sony Playstation 3. Порт достаточно стабилен, например, проходит тестирование собственной пересборкой (self-hosting). Из оборудования пока поддерживается USB и Ethernet. В ближайших планах реализация поддержки SATA, SPU-блоков (Synergistic Processing Unit) процессора Cell и создание интерактивного загрузчика;
    • Отмечается прогресс в подготовке порта для MIPS-совместимых Octeon SoC (CN3xxx и CN5xxx), разработка которого теперь ведется в рамках ветки FreeBSD-CURRENT. Из новинок, отмечается портирование Ethernet-драйвера из Linux и обеспечение стабильной поддержки SMP для двухядерных систем и экспериментальной для систем, имеющих до 16 процессорных ядер. В настоящее время разработка сосредоточена на обеспечении поддержки PCI, USB, ATA Compact Flash;
    • Порт FreeBSD/mips адаптирован для работы на беспроводных маршрутизаторах D-Link DAP-1350, основанных на Ralink RT3052F SoC. Из работающих подсистем отмечаются: WiFi 802.11n, Ethernet, USB-контроллер, GPIO и CFI NOR Flash. Пока не реализована поддержка встроенного Ethernet-коммутатора, предстоит написать драйверы для I2C/I2S/PCM/SPI и задействовать аппаратные механизмы акселерации NAT/PPPoE/VLAN. Для беспроводных маршрутизаторов D-Link DIR-320, поддержка которых была обеспечена ранее, добавлен новый сборочный профиль для работы в качестве OpenVPN-сервера;
    • В порте FreeBSD для платформы SPARC64 проведена оптимизиация производительности и задействованы некоторые дополнительные возможности CPU Fujitsu SPARC64. Кроме того, разработчики получили доступ к серверу Sun Fire 3800, поддержка которого будет обеспечена в будущем;
    • В дерево исходных текстов FreeBSD HEAD добавлен код написанного с нуля универсального USB-драйвера, обеспечивающего поддержку устройств с интерфейсом USB 3.0, соответствующих спецификации XHCI (eXtensible Host Controller Interface). Представленный драйвер совместим с более старыми контроллерами USB 2.0 и USB 1.0, и способен в будущем заменить ранее присутствующие драйверы OHCI, UHCI и EHCI.
  • Приложения и система портов
    • Завершена работа над проектом pkg_patch, в рамках которого была подготовлена инфраструктура для распространения бинарных патчей, которая позволит пользователям на работающей системе эффективно исправлять проблемы в установленных пакетах. Код программы написан на языке Си и использует стандартную библиотеку libpkg. В настоящее время разработчики занимаются устранением проблем, связанных с будущей интеграцией утилиты в базовую систему. Например, требуется внести изменения в инфраструктуру портов/патчей для реализации поддержки режима "обновления" вместо "удаление+добавление";
    • В рамках проекта BSD# продолжено портирование во FreeBSD пакета Mono с реализацией технологии .NET. Mono помещен в дерево портов (lang/mono), для организации хостинга ASP.NET приложений подготовлены порты www/xsp и www/mod_mono, язык CLI можно установить из порта lang/boo, Visual Basic .NET Framework для Mono размещен как lang/mono-basic, а среда разработки MonoDevelop представлена как devel/monodevelop. В настоящее время осуществлена адаптация для FreeBSD недавно вышедшего релиза Mono 2.8, но в порты новая версия еще не помещена из-за возникновения проблем с несколькими портами на языке С# (например, с Mono 2.8 недостаточно хорошо функционирует deskutils/gnome-do);
    • Порт web-браузера Chromium адаптирован для сборки при помощи Clang. Порт уже работает достаточно стабильно, включая такие возможности как HTML 5 тег video. В процессе находится обеспечение работы встроенного менеджера задач и перевод звукового кода с ALSA на OSS. Разработчик порта Chromium использует интересную схему стимулирования финансовой поддержки проекта, свежие сборки распространяются только по платной подписке: патчи сразу доступны только для подписчиков, для остальных они публикуются через определенное время;
    • Группа, занимающаяся портированием десктоп-оболочки KDE для FreeBSD, сообщила о поддержании единого ритма с разработчиками KDE, обеспечивая выпуск порта с новыми версиями KDE в течении недели после официального релиза. Так как поддержка KDE неотъемлемо связана с библиотекой Qt, разработчики FreeBSD отслеживают процесс разработки Qt и обеспечивают интеграцию новых выпусков в собственный репозиторий. Из ближайших планов называется подготовка порта будущих выпусков KDE 4.6.0 и KDE 4.5.4;
    • Ведется работа по интеграции во FreeBSD системы mandoc, выступающую в роли упрощенной альтернативы nroff/groff, нацеленной на отображение man-страниц. Из достоинств mandoc отмечается распространение под лицензией BSD, компактный код, очень быстрая работа и высокая устойчивость к ошибкам форматирования. Так как в mandoc отсутствуют некоторые функции, используемые в рядя man-страниц FreeBSD, в настоящее время ведется работа по исправлению и адаптации таких страниц;
    • В рамках инструментария sysutils/bsdadminscripts для системы портов подготовлена утилита pkg_upgrade для обновления бинарных пакетов. Для использования утилиты не требуется копирования дерева портов. В настоящее время утилита находится на финальной стадии разработки, улучшена поддержка организации совместного доступа к пакетам через NFS или nullfs (например, для распространения пакетов для Jail-окружений), расширены возможности по отслеживанию зависимостей, увеличена производительность;
    • Число портов достигло 22000. проведена работа по закрытию накопившихся PR, впервые за долгое время число незакрытых PR оказалось меньше тысячи. Бинарные пакеты в настоящее время собираются для архитектур amd64-6, amd64-7, amd64-8, i386-6, i386-7, i386-8, i386-9, ia64-8, sparc64-7, sparc64-8, ia64-8.
    • В рамках проекта distilator написан сервис для проверки файлов distfile, оценки его состояния и верификации web-ресурсов, упоминаемых в файле pkg-descr. В текущем состоянии при использовании MySQL-бэкенда на проверку 432512 файлов distfile при работе в 30 потоков тратится примерно 24 часа;
    • В порты FreeBSD добавлена версия 3.6.0 системы для выявления ошибок с распределением памяти Valgrind;
    • Введен в строй сайт updating.versia.com, на котором реализованы RSS-каналы для слежения за обновлением UPDATING-файлов различных веток FreeBSD и портов, что дает возможность подписаться на получение важнейших системных изменений;
  • Разное
    • Продолжается работа по разбору накопившихся сообщений об ошибках (PR). Группа "Bugbusting Team" пытается разобрать накопившиеся сообщения, классифицировать их через привязку тегов и передать требующие внимания PR-ы коммиттерам и мантейнерам портов;
    • Опубликованы планы выпуска будущих релизов: версии FreeBSD 7.4 и FreeBSD 8.2 будут выпущены в один день - 24 января, при этом выпуск FreeBSD 7.4 будет последним в ветке 7.x;
    • В настоящий момент организацией FreeBSD Foundation собрано 160 тыс. долларов пожертвований, при годовом плане в 350 тыс. долларов.

Полный текст статьи читайте на OpenNet