Представлен отчет о развитии проекта FreeBSD с апреля по июнь 2011 года. В указанный период основные усилия разработчиков были направлены на подготовку к релизу FreeBSD 9.0, который ожидается в начале октября.

Основные достижения:

  • Сетевая инфраструктура
    • Ведется работа над новым фреймворком netmap, нацеленным на обеспечение высокоскоростной обработки пакетов с сохранением богатой функциональности, доступной из пространства пользователя при помощи стандартных системных вызовов. При использовании netmap на перемещение одного пакета между каналом связи и пользовательским приложением тратится примерно 70 циклов, что позволяет одним ядром CPU с частотой 1050 MHz генерировать поток в 14.8 Mpps (миллионов пакетов в секунду), которого достаточно для анализа трафика на 10-гигабитном сетевом интерфейсе. В относительных показателях производительность netmap в 5-10 раз выше стандартного сетевого драйвера.

      Код драйвера netmap, работающего на уровне ядра, состоит из примерно 2000 строк кода, плюс 300-500 строк специфичных для конкретных сетевых карт. В настоящее время поддерживаются 1- и 10-гигабитные сетевые адаптеры Intel и 1-гигабитные карты RealTek. Взаимодействие с пользовательскими приложениями производится через стандартный API и не требует подключения специальных библиотек, переработки кода и пересборки приложений. Для работы существующих приложений поверх нового API подготовлена небольшая библиотека-враппер libpcap-over-netmap, позволяющая задействовать netmap в программах, уже поддерживающих libpcap;

    • Расширены возможности пакетного фильтра ipfw, для которого реализованы новые действия "call" и "return", позволяющие организовать выполнение типовых "подпрограмм", которые могут быть вызваны из разных участков правил. Когда обработка достигает правила с действием "call", текущий номер правила сохраняется в стеке и осуществляется переход к номеру правила, на который ссылается текущее действие "call". В дальнейшем, если обработка дошла до правила с действием "return", осуществляется возврат к следующему номеру, идущему после запомненной в стеке позиции. Действие "call" похоже на "skipto" и отличается только возможностью возврата в исходную позицию.
    • Выпущен релиз проекта DIFFUSE 0.4 (DIstributed Firewall and Flow-shaper Using Statistical Evidence), добавляющего в пакетный фильтр IPFW функции классификации IP-трафика на основании статистических данных. Система позволяет для отдельных потоков трафика накапливать и учитывать в IPFW такую статистику, как размер пакетов или время между поступлением пакетов, организуя привязку потоков к определенным классам трафика при помощи техник машинного обучения. В новой версии расширены возможности утилит, используемых для offline-анализа и обучения системы классификации трафика. Сообщается, что работа над проектом доведена до готовности и DIFFUSE 0.4 станет последним релизом. При необходимости в будущем могут быть выпущены корректирующие релизы с исправлением ошибок. Патчи с реализацией DIFFUSE подготовлены для FreeBSD-CURRENT;
    • Добавлена возможность собрать ядро FreeBSD только с IPv6 (INET6), без IPv4 (INET). Для тестирования подготовлена специальная сборка FreeBSD в которой по умолчанию отсутствует поддержка IPv4 и которая может работать только с IPv6. Сборка подготовлена с целью всесторонней проверки реализации IPv6-стека во FreeBSD, особенно в направлении проверки его самодостаточности и способности полноценно работать без наличия поддержки IPv4 в системе. Главный интерес эксперимента связан с выявлением ошибок в конечных приложениях, проблемы поддержки IPv6 в которых часто остаются незамеченными в двойном стеке, так как в случае сбоя программа без лишних предупреждений начинает использовать IPv4;
    • Проведена работа по улучшению реализации, устранению ограничений и добавлению поддержки новых функций в коде обработки сообщений ICMPv6 Router Advertisement (RA), определенных в RFC и являющихся частью IPv6 Neighbor Discovery Protocol. В частности, реализовано получение RA независимо от состояния net.inet6.ip6.forwarding, так как в IPv6 вместо модели с хостом и маршрутизатором используется понятие интерфейса принимающего RA и интерфейса отправляющего RA.

      В программах rtadvd(8) и rtsold(8) добавлена поддержка IPv6 Router Advertisement Options для конкурирования DNS, которая позволяет организовать обновление содержимого /etc/resolv.conf, используя RA. В демоне rtadvd(8) добавлена поддержка динамического добавления и удаления сетевых интерфейсов, а также их конфигурирования на лету при получении соответствующих RA-сообщений. Добавлена утилита rtadvctl(8), отображающая статус отправки RA для каждого интерфейса и предоставляющая функции для управления контролирующим RA фоновым процессом;

    • Проведена переработка подсистемы mii(4), в которую были добавлены исправления и улучшения, накопленные проектами NetBSD и OpenBSD со времени изначального портирования mii. В результате, из PHY-драйверов был удален дублирующийся код и не совсем красивые "хаки". Также достигнута возможность совместного использования файла miidevs с проектом NetBSD;
    • Реализована поддержка опции UTO (TCP User Timeout Option), позволяющая из приложений управлять параметрами ожидания получения TCP-подтверждений. Например, SSH-клиент может запросить установки большого таймаута для соединения (допустим 4 часа). Через какое-то небольшое время у клиента пропадает связь и восстанавливается только спустя 2 часа. Если IP-адрес не изменился, то благодаря UTO соединение не будет разорвано и все потерянные во время недоступности клиента данные будут переданы повторно. Поддержка UTO уже добавлена в такие утилиты, как telnet, ssh и netcat;
  • Изолированные окружения, безопасность и ограничения ресурсов
    • Для некоторых приложений из базовой системы реализована поддержка запуска в изолированных окружениях, сформированных с использованием фреймворка Capsicum. Ведется работа по адаптации легковесного DNS-резолвера для работы с Capsicum, что решит проблемы с выполнением в sandbox-режиме приложений, использующих функции преобразования имен.

      Capsicum нацелен на дополнение традиционного централизованного мандатного контроля доступа средствами для защиты отдельных приложений. Используя Capsicum приложение можно запустить в режиме повышенной изоляции (sandbox), при котором программа сможет выполнять только ранее специфицированные штатные действия. В настоящее время уже достаточно много программ, от tcpdump до chromium, модифицированы для поддержки режима изоляции, который может быть использован для уменьшения рисков при обработке сомнительных данных;

    • Во FreeBSD портирован тулкит Libvirt, в рамках которого подготовлены библиотеки и набор инструментов для унифицированного локального и удаленного управления виртуальными окружениями. Портирование поддержки функций управления по сети ещё не завершено, например, предстоит портировать драйвер для настройки сетевых интерфейсов (netcf) и драйвер для обеспечения работы сетевых мостов (bridge_drive), который достаточно плотно привязан к особенностям Linux;
  • Система
    • В состав базовой системы FreeBSD-CURRENT импортирована новая версия компилятора Clang 2.9, в котором переписан код, занимающийся распределением регистров (register allocator), что позволило заметно увеличить производительность. Кроме того, отмечается прогресс в обеспечении сборки с использованием Clang для платформ Mips и PowerPC, в дополнение к традиционному улучшению поддержки платформ ARM, i386 и amd64. Например, уже удалось достичь успешной загрузки ядра для архитектуры ARM, собранного с использованием Clang. Сборка всей базовой системы для архитектуры ARM пока затруднена использованием старого ARM ABI.

      Для тестирования качества подготовлена автоматизированная система периодической сборки clang/llvm во FreeBSD и FreeBSD (amd64 и i386) при помощи clang/llvm, а также загрузки собранных экземпляров. Решено много ошибок со сборкой портов с использованием clang. В настоящее время успешно собирается более 15000 портов, при этом число собираемых портов постоянно увеличивается, так как мешающие их сборке проблемы как правило имеют тривиальный характер;

    • Выполнена большая работа по устранению предупреждений при пересборке с использованием Clang, которая позволит в скором времени вернуться к использованию флага "-Werror". В сумме число выводимых на этапе сборки предупреждений сокращено с 42 тысяч до 9 тысяч;
    • Началась работа по замене устаревшей реализации регулярных выражений в libc. В качестве замены выбрана библиотека TRE, распространяемая под лицензией BSD, поддерживающая многобайтные символы, совместимая с POSIX и работающая не хуже других альтернатив. Кроме замены кода, планируется дополнительно обеспечить поддержку более быстрого алгоритма сопоставления строк и нового эвристического метода выявления соответствий, что должно значительно увеличить скорость сопоставления по шаблону.

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

  • Системы хранения и файловые системы
    • С кода нового клиента и сервера NFS снят гриф экспериментального проекта, что открывает двери для использования во FreeBSD 9.0 по умолчанию новой реализации NFS. Новый код поддерживает NFSv4.0, NFSv3 и NFSv2. В скором времени планируется завершить тестирование кода с поддержкой NFSv4.1 и представить патчи с реализацией экспериментального режима агрессивного дискового кэширования на стороне клиента NFSv4;
    • Продолжена работа по доведению до рабочего состояния поддержки работы FreeBSD в качестве клиента распределенной сетевой файловой системы OpenAFS. Порт OpenAFS обновлен до версии 1.6.0pre6. Ожидается, что ко времени выхода релиза OpenAFS 1.6 порт будет достаточно стабилен для повседневного использования;
    • Во FreeBSD-STABLE интегрирована поддержка ZFS pool v28. Дополнительно импортированы некоторые исправления ошибок, подготовленные в рамках проекта Illumos;
    • В утилиту iostat добавлена возможность вывода значения счетчика ошибок для диска. В настоящее время при запуске "iostat -e" выводится статистика по пяти типам ошибок, в будущем планируется расширить число распознаваемых ошибок;
  • Поддержка оборудования
    • Подготовлен первый работающий вариант GEM/KMS-драйвера для графических чипов Intel, реализованный на уровне ядра FreeBSD. Несмотря на то, что драйвер еще не достаточно протестирован, с его помощью удалось выполнить такие игры, как uhexen2 и ioquake3. После завершения разработки, пользователи FreeBSD получат возможность задействовать последние версии видеодрайверов xf86-video-intel, в которых обеспечена поддержка новых видеокарт Intel. В данный момент во FreeBSD невозможно использование xf86-video-intel начиная с версии 2.10, так как в данном выпуске была удалена поддержка переключения видеорежимов на пользовательском уровне (UMS) и оставлена только поддержка KMS (Kernel Mode Setting), обеспечивающая переключение видеорежимов на уровне ядра;
    • Поддержка работы FreeBSD на игровых приставках Sony PlayStation 3 доведена до готовности к включению в состав релиза FreeBSD 9. Из оборудования поддерживается большинство внутренних устройств, USB, Bluetooth, Ethernet и SATA. Система может быть установлена и загружена со встроенного диска. В ближайших планах реализация поддержки звуковой подсистемы, беспроводной карты и SPU-блоков (Synergistic Processing Unit) процессора Cell. Также планируется довести драйвер framebuffer до поддержки запуска X11;
    • Во FreeBSD/arm обеспечена базовая поддержка SoC-платформы Marvell Armada XP, основанной на ARMv6/v7-совместимых CPU Sheeva. Поддерживается загрузка с использованием U-Boot, последовательный порт, контроллер прерываний, таймеры, USB, Ethernet. Пока нет поддержки L2-кэша, SMP, PCI-Express и SATA;
    • Во FreeBSD/powerpc обеспечена начальная поддержка SoC APM86290, основанного на процессорах семейства AppliedMicro PACKETpro. В настоящий момент уже поддерживается загрузка с использованием U-Boot, CPU PPC465, L1-кэш и консоль через последовательный порт. Предстоит реализовать поддержку контроллера прерываний, EHCI USB, Ethernet, L2 -кэша и менеджера очередей;
    • Инициирован проект по обеспечению возможности запуска FreeBSD/powerpc на PAPR-совместимых машинах, таких как серверы IBM pSeries;
    • Значительны расширены возможности порта FreeBSD для платформы SPARC64: улучшена работа драйвера iommu, обеспечена возможность сборки GNUTLS, добавлена поддержка оборудования Sun Fire V890 на базе процессоров UltraSPARC-IV, обновлен драйвер schizo, в котором добавлена поддержка PCI-X мостов XMITS Fireplane/Safari и Casinni/Skyhawk, налажена работа Sun Fire V480, обеспечена возможность работы с более чем 32 CPU, улучшена работа подсистемы управления памятью для UltraSPARC-III и более новых CPU;
  • Приложения и система портов
    • После трех лет разработки представлен проект Portbuilder (ports-mgmt/portbuilder), предназначенный для организации параллельной одновременной сборки разных портов в несколько потоков. В процессе сборки имеется возможность контролировать нагрузку на систему через top-подобный интерфейс;
    • Число портов медленно продолжает приближаться к отметке 23000. Проведена работа по закрытию накопившихся PR, число незакрытых PR держится на уровне 1100. Бинарные пакеты в настоящее время собираются для архитектур amd64-6, amd64-7, amd64-8, i386-6, i386-7, i386-8, i386-9, ia64-8, sparc64-7, sparc64-8.
    • Порт web-браузера Chromium синхронизирован с основной веткой разработки браузера. При этом удалось обеспечить помещение новых релизов Chromium в дерево портов без задержки, в день выхода новой версии. Совместная работа с командой разработчиков Chromium позволила обеспечить интеграцию в upstream большого числа патчей, созданных в процессе портирования браузера для FreeBSD. Например, доступная в репозитории Chruëtertee версия 13 содержит на 70 патчей меньше, чем версия 12;
    • Добавлен порт Haskell Platform 2011.2.0.1. Другие связанные с Haskell порты, общее число которых уже превышает 200, также обновлены до последних версий. Некоторые порты, например, web-фреймворк Snap и Leksah с зависимостями, пока доступны только через специальный репозиторий;
    • Группа, занимающаяся портированием десктоп-оболочки KDE и Qt для FreeBSD, сообщила о продолжении адаптации данных проектов для FreeBSD. Важнейшим достижением является обеспечение сборки Qt с использованием компилятора Clang. Из последних портированных систем отмечены: Qt 4.7.3, KDE 4.6.5, Amarok 2.4.1, Digikam (+ KIPI-plugins) 1.9.0. Уже портированы, но требуют дополнительного тестирования, менеджер персональной информации KDE PIM 4.6.0 и офисный пакет Calligra 2.3.72;
    • Libarchive, bsdtar и bsdcpio обновлены до версии 2.8.4 во FreeBSD 9-CURRENT. В bsdtar добавлена поддержка распаковки форматов XAR и RPM. В экспериментальной версии bsdtar появилась поддержка чтения CAB, LHA и RAR, а также записи iso9660 и XAR;
    • Выполнена работа по добавлению поддержки многобайтовых кодировок в Nvi, распространяемого под лицензией BSD варианта текстового редактора Vi.


Источник: http://www.opennet.ru/opennews/art.shtml?num=31758