Главная » 2012 » Май » 15 » Отчёт о состоянии развития FreeBSD за первый квартал 2012 года
Отчёт о состоянии развития FreeBSD за первый квартал 2012 года
23:02
Представлен отчёт о развитии проекта FreeBSD с января по март 2012 года. После выхода 13 января FreeBSD 9.0 в первые месяцы 2012 года основные усилия разработчиков были направлены на подготовку релиза FreeBSD 8.3,
который был выпущен в середине апреля и кроме поддержки нового
оборудования включал результаты бэкпортирования некоторых возможностей
из FreeBSD 9.
Основные достижения:
Система
В базовую систему FreeBSD 10.0-CURRENT и 9.0-STABLE по умолчанию установлен распространяемый под лицензией BSD компилятор Clang 3.0.
Во FreeBSD 10.0-RELEASE принято решение задействовать Clang в качестве
системного компилятора по умолчанию, GCC будет оставлен в качестве
опции. В настоящее время, как минимум для FreeBSD 10.0-CURRENT
обеспечена полноценная пересборка базовой системы и ядра в конфигурации
GENERIC без предупреждений при сборке с опцией "-Werror" (для изменённых
конфигураций ядра предупреждения пока могут наблюдаться).
В src.conf добавлена опция WITH_CLANG_IS_CC, при установке которой
Clang по умолчанию будет установлен в качестве базового системного
компилятора, т.е. заменит собой /usr/bin/cc, /usr/bin/c++ и
/usr/bin/cpp. GCC пока остаётся в системе - даже при использовании опции
WITHOUT_GCC, gcc будет доступен как /usr/bin/gcc, /usr/bin/g++ и
/usr/bin/gcpp. Кроме того, в src.conf добавлена опция WITH_CLANG_EXTRAS,
которая позволяет задействовать при сборке несколько дополнительных
инструментов, созданных в рамках проектов LLVM и Clang, таких как 'llc' и
'opt'. Подобные утилиты могут оказаться полезными для работы с биткодом
LLVM (.bc) и ассемблерными файлами LLVM (.ll).
В настоящее время все усилия разработчиков направлены на
обеспечение сборки и запуска всей системы FreeBSD с использованием
Clang, в том числе на проверку работы как можно большего числа
приложений, включая порты. Пользователи могут существенно помочь в этом
начинании, приняв участие в тестировании и сообщая о наблюдаемых
проблемах. Что касается сборки портов с использованием Clang, то в
это области также отмечается значительный прогресс: многие мэйнтейнеры
уже адаптировали свои порты для работы с Clang, налажен процесс
автоматической периодической проверки сборки портов с использованием
Clang. Тем не менее в портах ещё можно встретить приложения, которые не
могут быть собраны с Clang, как правило это очень старые программы,
которые часто не собираются и с новыми версиями GCC.
Из планов упоминается работа по импортированию в систему нового
снапшота Clang, на базе которого будет сформирован релиз LLVM/Clang 3.1
(релиз ожидается в ближайшие дни). В Clang 3.1 ожидается улучшение
поддержки кросс-компиляции, что поможет форсировать процесс обеспечения
кросс-компиляции ядра и базовой системы FreeBSD для архитектур ARM и
MIPS.
Продолжается работа по созданию для FreeBSD
полноценного С++ стека, целиком распространяемого под лицензией BSD и
независящего от кода проекта GNU. Проведено расширенное тестирование и
добавлены новые возможности, например, поддержка ARM EABI, в библиотеки:
libc++ (реализация элементов, определённых в стандарте C++11) и
libcxxrt (реализация спецификации C++ ABI). Использование
предварительной версии Clang 3.1 совместно с данными библиотеками
демонстрирует полное прохождение тестов на совместимость со стандартом
C++11. По умолчанию библиотеки пока не используются, так как библиотека
libc++ не совместима с поставляемым в базовой системе gcc и может
работать только с clang. Переход на новый C++ стек ожидается во FreeBSD
10, одновременно с задействованием по умолчанию Clang.
Реализация
расширенных функций для работы с локалью (xlocale), от которых зависит
развиваемая проектом LLVM библиотека libc++, протестирована c множеством
портов, изначально написанных для реализации xlocale от проекта
Darwin. Выявленные в процессе тестирования ошибки исправлены, код
библиотеки планируется выпустить в составе FreeBSD 9.1.
Во FreeBSD-CURRENT сборка libsupc++ теперь осуществлена в виде
разделяемой библиотеки, что позволяет упростить замену данной библиотеки
на libcxxrt от проекта LLVM. Выбор какие из библиотек использовать, GNU
libsupc++ или BSD libcxxrt, осуществляется через изменение настроек в
libmap.conf. Если в качестве libstdc++ используется libcxxrt,
пользователь имеет возможность связывания с обоими библиотеками,
использующими libstdc++ и libc++, что значительно упрощает миграцию.
Из открытых задач остаётся создание замены для некоторых частей
libgcc_s и системы динамического связывания, проведение тестирования
сборки портов с libc++ (большинство портов без проблем собираются, но
остаются такие, которые жестко привязаны к libstdc++ или требуют
патчей), переход на сборку и использование libc++ и libcxxrt по
умолчанию (когда clang станет компилятором по умолчанию в базовой
системе); удаление libstdc++ из базовой системы и помещение в порты для
обеспечения обратной совместимости;
Возобновлена работа над проектом FSC
(FreeBSD Services Control), в рамках которого развиваются похожие на
Solaris SMF и daemontools инструменты для управления и мониторинга
работой системных сервисов. Для контроля за работой сервисов
используется фоновый процесс fscd, сервисы добавляются при помощи
утилиты fscadm. В случае аварийного завершения работы сервиса, fscd
распознает падение процесса и запускает сервис вновь. По сравнению со
сторонними пакетами, такими как daemontools, система FSC имеет несколько
преимуществ, например fscd использует push-нотификацию вместо поллинга
(отправляет уведомления, не требуя периодического опроса состояния).
Кроме того, fscd является внутренней подсистемой, легко интегрируемой в
rc.d-инфраструктуру FreeBSD и полностью поддерживаемой разработчиками
(daemontools является неподконтрольным портом для которого можно лишь
поддерживать набор патчей). В настоящее время подготовлена
новая версия FSC, поддерживающая большее число опций, добавляющая новый
файл конфигурации fscd.conf, поддерживающая отладочный режим и
поставляемая с обновлённым rc.d-скриптом для запуска fscd. Обновлён порт со вспомогательными утилитами для FSC;
Достигла стабильного состояния распространяемая под лицензией BSD утилита sort,
написанная с целью замены GNU sort. Отмечается, что производительность
BSD sort находится на уровне GNU sort и поддерживаются все возможности
присутствующие в GNU sort 5.3.0 (данная версия поставляется во FreeBSD).
Кроме того в BSD sort реализован ряд дополнительных возможностей,
например, корректно поддерживаются многобайтовые кодировки, в то время
как GNU sort 5.3 в этой области испытывает проблемы. Из планов на
будущее отмечается интеграция новой утилиты во FreeBSD-HEAD в качестве
альтернативы, устанавливаемой под именем bsdsort (после того как будет
ясно, что всё работает как задумано, утилита GNU sort будет удалена, а
bsdsort переименована в sort). Также планируется интеграция в BSD sort
поддержки многопоточной сортировки и реализация некоторых возможностей,
которые присутствуют в последней версии GNU sort 8.15;
Ведётся работа по замене устаревшей реализации регулярных выражений в libc на библиотеку TRE,
распространяемую под лицензией BSD, поддерживающую многобайтные
символы, совместимую с POSIX и работающую не хуже других альтернатив.
Практически завершена разработка нового эвристического метода выявления
соответствий с поддержкой поиска по множественным шаблонам
(multi-pattern), который отличается заметным ускорением поиска по
шаблонам. Из планов на будущее отмечается реализация поддержки
возможностей, специфичных для GNU grep, а также проведение тестирования
на предмет соответствия стандартам и корректности работы;
Близится к завершению работа над новой утилитой bsdconfig
с набором функций по настройке компонентов дистрибутива для интеграции в
новый инсталлятор bsdinstall. Интеграция bsdconfig в bsdinstall
позволит довести функциональность нового инсталлятора в плане
конфигурирования системы до возможностей устаревшего инсталлятора
sysinstall. В настоящее время разработка завершена на 70%, ожидается,
что размер кода bsdconfig составит приблизительно 20 тысяч строк на
shell. Среди незавершённых задач: создание набора модулей к bsdinstall
для загрузки/установки бинарных пакетов и дополнительных наборов
программ, а также создание модуля для настройки запускаемых сервисов;
Доведён до конца проект по созданию демона
auditdistd, нацеленного на обеспечение безопасного и надёжного способа
передачи логов системного аудита поверх TCP/IP сети от локального демона
аудита к демону аудита на удалённом сервере. Система аудита FreeBSD
позволяет организовать ведение полного лога событий, который, в
частности, может быть полезен для анализа причин и последствий
инцидентов, связанных с нарушением безопасности. Необходимость создания
auditdistd продиктована желанием обеспечить возможность надёжного
хранения логов аудита на внешнем сервере, что позволит защитить данные
аудита от модификации злоумышленником в случае взлома локальной системы
(сейчас ядро передаёт события аудита напрямую в файл или через
устройство /dev/auditpipe, так как лог сохраняется локально,
злоумышленнику не составляет труда удалить лог или почистить в нём следы
своей деятельности);
Системы хранения и файловые системы
Близится к завершению проект по реализации возможности
увеличения размера файловых систем UFS и ZFS без размонтирования
дискового раздела. Указанная возможность позволит существенно упростить
поддержание виртуализированных окружений на базе FreeBSD. С практической
стороны администратор сможет вначале изменить размер смонтированного на
запись дискового раздела при помощи утилиты gpart, а затем изменить
размер ФС с использованием growfs. Все операции выполняются без
отмонтирования раздела, в том числе и для корневой ФС. В рамках проекта
подготовлен новый GEOM-класс, внесены необходимые изменения в код ФС и
драйвера da. В тестовых целях возможность изменения размера также
добавлена в mdconfig и обеспечена поддержка изменения размера LUN в CAM
Target Layer. В настоящее время вся запланированная функциональность
работает и началась подготовка к интеграции кода в ветку FreeBSD-HEAD.
Из планов на будущее отмечается адаптация инфраструктуры для выполнения
tunefs и fsck для примонтированных на запись разделов;
Для включения во FreeBSD-HEAD готовятся стек и ФС для накопителей NAND Flash, переданные
сообществу FreeBSD компаниями Juniper и Semihalf. Среди компонентов,
готовящихся к интеграции: Устойчивая к сбоям файловая система,
основанная на механизме представления структур в форме лога и
обеспечивающая равномерное использование блоков данных для снижения
износа NAND Flash; Фреймворк для создания драйверов и набор драйверов
для контроллеров NAND и чипов памяти; Симулятор NAND-устройств; набор
драйверов с поддержкой NAND Flash контроллеров (NFC) для NAND Simulator и
Marvell MV-78100 (ARM); Набор сопутствующих утилит, инструментов и
документации, необходимых для работы с NAND Flash и интеграции поддержки
данной технологии в пользовательские приложения;
Сетевая инфраструктура
Выполнена работа
по анализу производительности IPv6-стека FreeBSD. Если ранее основное
внимание уделялось стабильности и корректности работы IPv6, то проект по
анализу эффективности IPv6-стека направлен на концентрацию внимания на
оценке производительности стека IPv6. Проведённая работа позволила
выявить источники проблем, проявляющихся в понижении производительности
при использовании IPv6 вместо IPv4. Разработанный в рамках проекта
тестовый набор также может быть использован для оценки появления
регрессивных изменений и для проверки качества внесённых оптимизаций.
В процессе начального анализа результатов измерения
производительности были внесены улучшения в реализацию системы
блокировок для обработчиков UDP, оптимизирован поиск маршрутов в
таблицах, добавлена реализация отложенного вычисления контрольных сумм,
обеспечена поддержка TSO6 и LRO для IPv6, включено offload-ускорение
проверки контрольных сумм для loopback-интерфейса, оптимизировано
использование кэшей и внесены многочисленные мелкие доработки, которые в
некоторых случаях затронули и IPv4 стек. В результате удалось добиться
заметного повышения производительности IPv6 для физических и
loopback-интерфейсов при использовании offload-акселерации. Увеличена
производительность UDP и повышена скорость работы IPv6-стека в общем
виде, но в некоторые ситуациях IPv6 по прежнему медленнее IPv4, что в
основном связано с отсутствием должных оптимизаций;
В реализации множественных таблиц маршрутизации (Multi-FIB)
добавлена поддержка IPv6. Для IPv4 поддержка Multi-FIB была добавлена
ещё в 2008 году, сейчас данная возможность стала доступна и для IPv6.
Используя Multi-FIB возможно определение правил, по которым к пакету
будет применена одна из альтернативных таблиц маршрутизации, например,
можно организовать "policy based" маршрутизацию с несколькими исходящими
интерфейсами или привязать отдельную таблицу маршрутизации к Jail
окружению. Разработка выполнена при поддержке компании Cisco Systems.
Кроме
того, отмечается обеспечение поддержки включения Multi-FIB через опцию
на этапе загрузки без необходимости пересборки ядра, что позволяет
использовать Multi-FIB с ядром GENERIC. Сокеты маршрутизации (routing
sockets) теперь принимают во внимание FIB-ы и показывают сообщения
маршрутизации только адресованные к привязанному FIB, что позволяет
программам управления маршрутизацией и демонам маршрутизации производить
выборочные обновления определенного FIB. В настоящее время поддержка
IPv6 в Multi-FIB уже добавлена в ветку HEAD и бэкпортирована для веток
STABLE-9 и STABLE-8 (отдельно подготовлен порт для STABLE-7).
Поддержка оборудования
В звуковом драйвере HDA (snd_hda) улучшена поддержка
вывода звука через порты HDMI и DisplayPort. В частности добавлено
получение EDID-подобных данных от кодеков и видеодрайверов c информацией
о звуковых возможностях устройства отображения. Реализована возможность
установки специфичных для HDMI и DisplayPort опций кодеков, таких как
число каналов, конфигурация громкоговорителей и маппинг каналов.
Добавлена поддержка дополнительных многоканальных форматов: для HDMI и
DisplayPort поддерживаются каналы 2.0, 2.1, 3.0, 3.1, 4.0, 4.1, 5.0,
5.1, 6.0, 6.1, 7.0 и 7.1. Добавлена поддержка проброса сжатых звуковых
потоков с интенсивностью в диапазоне 6.144 - 24Mbps, таких как DTS-HD
Master Audio или Dolby TrueHD.
Добавлена поддержка
мультиплексирования шины HDA для обеспечения высокоскоростных потоков
(например, 92 и 184 Mbps), что позволяет обрабатывать одновременно
192/24/8 LPCM-потоков. Указанная функциональность успешно протестирована
для видеокарт NVIDIA GT210 и GT520 с драйвером nvidia 290.10. Отчеты
об успешном использовании HDMI также получены для карт Intel c
экспериментальным KMS-драйвером, а также для ограниченного числа старых
карт AMD/ATI. Для старых карт NVIDIA ION и Geforce 8300 поддержка HDMI
пока не работает. В настоящее время код уже принят в ветки HEAD и
9-STABLE;
Обеспечена
полнофункциональная поддержка 802.11n в режиме станции и точки доступа
(hostap) для беспроводного оборудования на базе чипов Atheros.
Поддерживается агрегация линков, обработка BAR TX и программная
повторная отправка кадров, но пока не реализованы энергосберегающие
режимы hostap. Кроме реализации режимов энергосбережения среди открытых
задач отмечается проведение тестирования и выявления ошибок, реализация в
драйвере возможности фильтрации кадров, устранение проблем с потерей
трафика во время операций сканирования сетей (scan/bgscan, при
тестировании рекомендуется использовать опцию "-bgscan" для запрета
фонового сканирования);
Разработан новый драйвер isci для SAS-контроллеров,
интегрированных в чипсеты Intel C600. Драйвер isci уже включён в состав
релиза FreeBSD 8.3 и интегрирован в ветки head, stable-9, stable-8 и
stable-7;
Во FreeBSD/arm отмечается прогресс поддержки
SoC компании Texas Instruments, таких как OMAP3, OMAP4 и AM335x.
Обеспечена поддержка таких компонентов процессора Cortex-A, как GIC
(Generic Interrupt Controller), PL310 L2 Cache Controller и SCU. Для
PandaBoard (TI OMAP4430) и PandaBoard ES (OMAP4460) на базе двухядерного
процессора ARM Cortex-A9 в настоящее время реализована поддержка USB,
проброса Ethernet поверх USB, GPIO, I2C и MMC/SD. Для платы BeagleBone
(TI AM3358/AM3359), основанной на одноядерном ARM Cortex-A8,
поддерживается Ethernet, кэш L2, GPIO и I2C. На указанных платах FreeBSD
успешно запускается в многопользовательском режиме с корневым разделом
через NFS. Среди компонентов, поддержка которых пока не доведена до
конца: SMP, DMA, SPI, MMC/SD, Video, Audio;
Улучшение во FreeBSD/powerpc поддержки процессоров
Freescale QorIQ, идущих на смену семейству PowerQUICC (MPC85xx). QorIQ
базируется на архитектуре DPAA (Data Path Acceleration Architecture),
которая подразумевает интеграцию в SoC функций обработки пакетов. За
отчётный период добавлена поддержка SoC QorIQ P5020 в 32-разрядном
режиме, обеспечено полноценное функционирование Ethernet (в режиме DPAA
Regular Mode) и начальная поддержка расширенного SDHC;
Переработана поддержка hwpmc(9) для архитектуры
MIPS. Код msip24k объединён с кодом, специфичным для CPU и аппаратной
архитектуры, что упростило процесс добавления поддержки новых
процессоров. Добавлена поддержка процессоров Octeon PMC;
Основная часть системы динамической отладки DTrace
портирована для архитектуры MIPS (поддерживается ABI o32 и n64, пока не
протестирована работа с n32). Реализация DTrace для MIPS в настоящее
время проходит 853 из 927 проверок тестового набора DTrace. Пока не
поддерживаются DTrace-провайдер fbt и пользовательский инструментарий
DTrace. Ведётся работа по портированию для архитектуры ARM.
Изолированные окружения, эмуляторы, безопасность и ограничения ресурсов
Подготовлен новый порт linux_base с набором компонентов
для работы Linux-эмуляции, основанный на CentOS 6 (старый порт был
основан на устаревшей версии Fedora Linux). В настоящее время новый порт
пока пригоден только для использования в тестовых окружениях, так как в
нём присутствуют зависимости от функций свежих версий ядра Linux,
которые пока не реализованы в linuxulator. В настоящее время готовится к
включению в дерево портов новый порт на базе CentOS и проводится работа
по устранению конфликтов с другими портами linux_base;
В состав FreeBSD-CURRENT включён модуль с
реализацией статического провайдера DTrace для эмулятора Linux
(linuxulator), обеспечивающий специфичные для linuxulator контрольные
вызовы (probes). Для демонстрации использования подобных контрольных
вызовов подготовлено несколько D-скриптов, позволяющих оценить
функционирование различных частей linuxulator и что может быть
использовано для выявления ошибок (например, проблем с блокировками) как
во внутренних компонентах эмулятора, так и в работающих под его
управлением приложениях.
Приложения и система портов
Отмечается прогресс в адаптации новых версий
десктоп-оболочки KDE и Qt для FreeBSD. В порты помещены свежие релизы:
KDE SC 4.7.4 (4.8.2 в экспериментальном репозитории area51), Qt 4.8.1 (в
area51), CMake 2.8.7, PyQt 4.9.1, KDevelop: 2.3.0, KDevPlatform: 1.3.0
(в area51), Calligra 2.3.87 (в area51). Уже портированы, но требуют
дополнительного тестирования, KDE SC 4.8.2, менеджер персональной
информации KDE PIM 4.8.2, офисный пакет Calligra, бэкенды
phonon-gstreamer, phonon-xine и phonon-vlc;
Ведётся работа
по наведению порядка с работоспособностью perl-модулей в портах -
выявляются и исправляются модули для которых завершается ошибкой
выполнение встроенных тестовых сценариев. Обновлены многие порты, у
которых проблемы были вызваны отсутствием в зависимостях необходимых
модулей. Решены проблемы с работой при сборке perl с поддержкой
многопоточного режима (опция "-pthread").
Изначальная проверка всех
"p5-*" портов показала, что только 61% модулей корректно проходят тесты,
сейчас число таких модулей доведено до 90%, конечной целью проекта
является исправление всех выявленных проблем. Из планов отмечается
создание патчей для ещё не решённых проблем и инициирование подобной
работы для тестирования других категорий портов, например, с
дополнениями к python и ruby. Отмечается также намерение создать
специальный фреймворк для тестирования портов и автоматизированного
запуска тестов после обновления портов;
Обновлены порты,
связанные с языком программирования Haskell. Обновлены ключевые порты:
Haskell Platform 2011.4.0.0 и GHC 7.0.4. Число связанных с Haskell
портов превысило 300. Среди новых портов web-фреймворки Yesod и
Happstack, а также система профилирования ThreadScope и пакеты
wxHaskell, gitit. В рамках проекта hsporter началась разработка системы
для автоматического создания и обновления портов на основе
.cabal-файлов. Из задач которые предстоит выполнить отмечено
тестирование работы GHC с clang/LLVM и обеспечение сборки порта lang/ghc
с использование уже установленного компилятора ghc без загрузки
отдельного архива с компилятором, добавление новых портов;
Ведётся работа по подготовке новой версии
дистрибутива для быстрого развёртывания сетевого хранилища (NAS,
Network-Attached Storage) - FreeNAS 8.2.0. В новой версии ожидается
расширение средств управления ZFS в GUI и поддержка плагинов,
позволяющий автоматизировать запуск произвольных приложений в
изолированных Jail-окружениях. После выхода FreeNAS 8.2 оперативно
планируется выпустить версию 8.3, которая будет отличаться обновлением
драйверов и переходом на ZFS v28.
Дерево портов FreeBSD преодолело отметку в 23 тысячи
портов, число незакрытых PR держится на уровне 1100. Ведутся
подготовительные работы для обеспечения гладкой миграции дерева портов с
CVS на систему контроля версий Subversion. Из проводимых работ
отмечаются: проверка портов на работу в окружении FreeBSD; обновление
bison, libtool и libiconv; задействование java/opendjdk6 в качестве
реализации java по умолчанию; адаптация портов для обеспечения сборки с
использованием компилятора Clang; обновление devel/boost, audio/sdl,
devel/ruby1[8|9], postresql, apr, security/gnutls; проверка нового порта
x11/xorg; задействование Pkgng (pkg_install нового поколения) для проверки целостности текущей инфраструктуры портов.