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

Методы

Представлен отчёт о развитии проекта FreeBSD с июля по сентябрь 2011 года.

Основные достижения:
Сетевая инфраструктура
Представлен проект 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. В настоящее время уже подготовлен соответствующий набор патчей для ветки HEAD, который успешно собирается и работает в тестовом окружении. Из планов отмечается дополнительное тестирование, в том числе на рабочих серверах, а также реализация функций arpbalance и ipbalance;
Продолжается работа по доведению до готовности к интеграции с деревом исходных текстов FreeBSD проекта DIFFUSE (DIstributed Firewall and Flow-shaper Using Statistical Evidence), разработка которого пока ведётся в отдельной SVN-ветке diffused_head. Завершить проект планировалось в конце октября, после чего разработчики были намерены осуществить слияние с веткой FreeBSD-HEAD, а через некоторое время выполнить портирование для веток 8.x и 9.x.

DIFFUSE добавляет в пакетный фильтр IPFW функции классификации трафика на основании статистических параметров потоков данных, отслеживаемых в режиме реального времени на одном или нескольких узлах. Иными словами, для классификации трафика DIFFUSE оперирует не параметрами в заголовках пакетов и не анализом содержимого передаваемых в пакетах данных, а статистическими характеристиками потока, свойственными определенным видам трафика. Система позволяет для отдельных потоков трафика накапливать и учитывать в IPFW такую статистику, как размер пакетов или время между поступлением пакетов, организуя привязку потоков к определенным классам трафика при помощи техник машинного обучения (например, позволяет определить VoIP или HTTP-трафик на нестандартных сетевых портах).
Отмечен прогресс в разработке Ethernet Switch Framework, фреймворка для управления встроенными Ethernet-коммутаторами, часто встречающимися в различных встраиваемых платформах. В настоящее время для настройки используются расширенные опции ifconfig, реализована поддержка vlan для каждого порта, возможность управления состоянием интерфейсов, QoS, зеркалирование портов. Обеспечена поддержка коммутаторов на базе IP175D и IP178X (платы mikrotik), Realtek RTL8309, Ralink RT3050F/RT3052F, AR8216/AR8316 (Ubiquiti RSPRO) и Broadcom BCM5325 (BCM5354 SoC). Из планов отмечается реализация методов записи и чтения через шину MII, унификация доступа к MIB-статистике, создание псевдо-интерфейсов;
Системы хранения и файловые системы
Наблюдается высокая активность в разработке системы репликации устройств хранения данных HAST, которая позволяет использовать FreeBSD для создания высоконадежных конфигураций, в которых данные синхронизированы по всем узлам кластера. HAST реализован в виде GEOM-класса, обеспечивающего синхронную репликацию блочных устройств поверх TCP/IP сетей, независимо от типа накопителя и файловой системы. HAST предусматривает возможность быстрого восстановления после сбоя, причем, при выходе из строя первичного master-узла, его функции могут быть делегированы slave-узлу. После проверки и монтирования UFS раздела или импорта ZFS пула на поврежденном узле, система автоматически синхронизирует внесенные за время восстановления изменения и продолжит работу без потери данных.

С момента прошлого отчета в HAST добавлена поддержка режима асинхронной репликации, который к сожалению не вошел в состав FreeBSD 9.0; добавлена поддержка IPv6; значительно уменьшено необходимое для работы число обновлений метаданных; реализован сброс кэша записи HAST-провайдера после обновления метаданных; добавлена возможность указания pid-файла в конфигурации; устранено множество ошибок;
Отмечается прогресс в реализации поддержки работы FreeBSD в качестве клиента распределенной сетевой файловой системы OpenAFS. В дерево портов добавлен релиз файловой системы OpenAFS 1.6.0. Порт OpenAFS признан достаточно стабильным для повседневного использования, при условии небольшой нагрузки (при высокой нагрузке всё ещё отмечаются нерешённые проблемы). Для сборки модуля ядра OpenAFS теперь используется инфраструктура bsd.kmod.mk из master-ветки git. В будущем планируется: обновить поддержку VFS-блокировок с целью обеспечения возможности использования дискового кэша на стороне клиента, помимо уже поддерживаемого кэша в оперативной памяти; выявить и исправить эффекты гонки и взаимные блокировки, проявляющиеся при большой нагрузке; устранить утечки памяти; довести до рабочего состояния поддержку PAG (Process Authentication Group);
Анонсирован проект ZFSguru, в рамках которого на базе FreeBSD развивается новая операционная система для создания сетевых хранилищ с использованием файловой системы ZFS. В отличие от FreeNAS, в ZFSguru используется полноценная, не урезанная, базовая система FreeBSD, что даёт возможность опытным пользователям развернуть любые дополнительные сервисы. Для новичков в ZFSguru подготовлен web-интерфейс, который позволяет быстро создавать нужные конфигурации и управлять ZFS-хранилищем, не имея углублённых знаний. Среди расширенных функций, на которые обращают внимание разработчики ZFSguru, — интегрированные средства для оценки производительности хранилища и поддержка установки системы на корневой раздел с ZFS. Из планов отмечено расширение числа сервисных дополнений, которые пока ограничены дополнениями iSCSI-target и VirtualBox.

Система
Представлен проект по созданию нового уровня VM, который будет находиться между UMA и системой виртуальной памяти. Назначение нового уровня — распределение кусков (chunks) виртуальной памяти из области ядра, произвольным размером от 2 до 4 Мб. После реализации задуманного UMA-функция page_alloc() больше не будет вызываться напрямую из подсистемы виртуальной памяти. Вместо этого будут использоваться функции представленного нового уровня. Таким образом, выполнение uma_large_malloc() и uma_large_free() не будет приводить к мгновенному выделению и возвращению виртуальной памяти ядра, что положительно повлияет на производительность и приведёт у уменьшению фрагментации памяти;
Поддержка оборудования
В рамках проекта ZRouter.org ведётся работа по созданию прошивок на базе FreeBSD для различных встраиваемых устройств, таких как беспроводные точки доступа и SOHO-маршрутизаторы.

В настоящее время предоставлена возможность сборки рабочих прошивок для следующих устройств: D-Link DAP-1350, D-Link DIR-320/320-NRU/330/615-E4/620/632, D-Link DSA-3110-A1, D-Link DSR-1000N, NorthQ NQ-900, TPLink TL-WR941ND-v3_2 и Ubiquiti RSPRO. Прошивка может быть достаточно легко адаптирована для новых типов устройств, например, для создания прошивки для Asus WL-500g достаточно скопировать базирующуюся на том же SoC прошивку D-Link/DIR-320 и откорректировать настройки. Среди поддерживаемых типовых SoC: Broadcom BCM5354/BCM5836, Ralink RT3052F/RT3050F/RT5350F, Atheros AR7161/AR7242/AR7241/AR7240/AR9132, Intel ixp435 и Cavium CN5010. В ближайшее время для упрощения управления устройствами планируется подготовить web-интерфейс;
Обеспечена поддержка 802.11n для беспроводного оборудования на базе чипов Atheros AR5416, AR9160 и AR9280. Поддерживается работа в режиме станции и точки доступа (hostap), агрегация линков и программная повторная отправка кадров. Производительность драйвера отмечена как хорошая. Пока не реализовано: BAR TX, защита HT, энергосберегающие режимы MIMO, гибкие средства управления интенсивностью потока;
Во FreeBSD/arm продолжена реализация поддержки SoC-платформы Marvell Armada XP, основанной на ARMv6/v7-совместимых CPU Sheeva. Поддерживается загрузка с использованием U-Boot, последовательный порт, контроллер прерываний, таймеры, USB, Ethernet и PCI-Express. Реализована базовая поддержка SMP, которую ещё предстоит доработать. Пока нет поддержки L2-кэша и SATA;
Во 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. Предстоит реализовать поддержку L2-кэша и довести до конца драйвер для Ethernet;
Изолированные окружения, безопасность и ограничения ресурсов
В GELI, GEOM-классе для обеспечения дискового шифрования, появились следующие улучшения: поддержка перехода в спящий режим (suspend/resume); новая версия субкоманды для проверки версии GELI-провайдера; новая опция «-V» для субокманды init, позволяющая создать GELI-провайдеры для старых версий FreeBSD; значительное увеличение производительности реализации алгоритма AES-XTS в aesni(4);
Приложения и система портов
Представлен набор утилит freebsd-vm-image, предназначенных для автоматизации периодического создания образов виртуальных машин на базе свежего среза исходных текстов FreeBSD из SVN-репозитория проекта. Итоговый образ может быть скопирован при помощи утилиты dd на USB Flash или запущен в роли гостевой системы под управлением VirtualBox (.vdi). Из планов названо обеспечения включения в сборку набора портов, как из основного дерева портов, так и из экспериментальной ветки area51. Также планируется создавать сборки для тестирования определённых драйверов устройств и других экспериментальных улучшений;
Группа, занимающаяся портированием десктоп-оболочки KDE и Qt для FreeBSD, сообщила о продолжении адаптации данных проектов для FreeBSD и налаживании более тесного взаимодействия с разработчиками из upstream. Важнейшим достижением является обеспечение сборки Qt с использованием компилятора Clang. Из последних портированных систем отмечены: Qt 4.7.3, KDE 4.6.3-4.6.5, Amarok 2.4.1, Digikam (+ KIPI-plugins) 1.9.0. Уже портированы, но требуют дополнительного тестирования, менеджер персональной информации KDE PIM 4.6.0 и офисный пакет Calligra 2.3.72;
В рамках проекта nvi-iconv, проведена работа по портированию в ветку nvi-1.79, поддержки многобайтовых кодировок. Nvi — входящий в состав базовой системы вариант текстового редактора Vi, распространяемый под лицензией BSD. Из последних работ отмечается выявление утечек памяти, добавление поддержки UTF-16, реализация изменения заголовка окна xterm через опцию ‘windowname’, завершение работы над кодом автоматического определения кодировки файла, обеспечение сборки только с widechar и без iconv, добавление полного перевода каталога на русский язык;
Обновлены порты, связанные с языком программирования Haskell. Устранены проблемы с крахом GHC из-за ошибки в rtld, проявляющейся в 9-CURRENT. Начата работа над портом экспериментальной ветки Haskell Platform 2011.3.0.1. Из задач которые предстоит выполнить отмечено тестирование работы GHC с clang/LLVM, расширение числа связанных с Haskell портов, общее число которых уже превышает 200;
Доступен релиз минидистрибутива для создания межсетевых экранов и сетевых шлюзов pfSense 2.0, который основан на кодовой базе FreeBSD 8.1 с задействованием наработок проекта m0n0wall и активным использованием pf и ALTQ. Обзор новшеств можно прочитать здесь. Из планов на версию 2.1 отмечается обеспечение поддержки IPv6 и реализация возможности установки дополнений, оформленных в виде пакетов PBI (используются в PC-BSD);
В утилиту для управления портами portmaster добавлена возможность одновременного указания нескольких опций «-r», что позволяет повысить эффективность работы при необходимости обновления сразу нескольких веток портов в процессе работы систем сборки пакетов;
Число портов медленно продолжает приближаться к отметке 23000. Проведена работа по закрытию накопившихся PR, число незакрытых PR держится на уровне 1000. Бинарные пакеты в настоящее время собираются для архитектур amd64-6, amd64-7, amd64-8, i386-6, i386-7, i386-8, i386-9, ia64-8, sparc64-7, sparc64-8. Из проведённых работ отмечено обновление портов Python, Boost и Gtk3, а также продолжение тестирования портов Clang, pkgng и ruby19. В качестве порта по умолчанию для http-сервера Apache теперь используется apache22, а языка программирования Fortran — lang/gcc46. Продолжается работа по адаптации портов для обеспечения сборки с использованием компилятора Clang, а также чистки неработоспособных портов для ветки CURRENT;
Релиз FreeBSD 9.0 немного задерживается, в настоящее время выпущен первый кандидат в релизы. Перед релизом планируется выпустить ещё две тестовые версии (RC2 и RC3), т.е. ждать FreeBSD 9.0-RELEASE можно не раньше, чем через месяц.