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

Представлен отчет о развитии проекта FreeBSD с января по март 2010 года. Основные достижения:
  • Сетевая инфраструктура
    • Проведена основательная ревизия кода ipfw и dummynet, в результате которой в ветки HEAD и stable/8 добавлены такие улучшения, как значительное ускорение работы инструкции skipto, поиск заданного правила теперь имеет сложность O(1) или O(log N) вместо O(N), также значительное увеличение производительности могут отметить пользователи конструкций "skipto tablearg" и "pipe tablearg", при большом наборе правил и pipe-ов. В таблицах теперь можно использовать в качестве аргумента опции "ports" и "tos". Атрибут 'log' теперь отправляет пакеты в псевдо-интерфейс "ipfw0" на котором можно запустить tcpdump для формирования дополнительной выборки. Расширено число поддерживаемых планировщиков в dummynet (FIFO, WF2Q+, Deficit Round Robin, Priority и QFQ). Из планов на будущее отмечается реализации параллельной обработки динамических правил ipfw, при выполнении которых в настоящее время используется эксклюзивная блокировка хэша.
    • Изменен способ выделения ресурсов и проведена работа по выявлению и устранению ошибок в виртуальном сетевом стеке (vimage). Введение виртуального сетевого стека позволяет значительно расширить сетевую функциональность подсистемы jail, например, иметь для каждого jail индивидуальные настройки пакетного фильтра, маршрутизации, IPSec и обеспечить возможность их автономного администрирования. Подсистему vimage планируется довести до готового для промышленного использования состояния к релизу 8.2.
    • Ведется работа по усовершенствованию TCP/IP стека FreeBSD. В реализацию подсистем ALQ и KPI добавлена поддержка обработки сообщений с непостоянным размером, а также возможность сборки в виде модуля ядра. Продолжается работа по интеграции SIFTR-утилиты для анализа трафика и улучшению работы кода пересборки TCP-пакетов.
    • Достигнута возможность сборки ядра FreeBSD только с поддержкой IPv6, без использования кода INET.
    • Продолжается тестирование модульной системы подключения различных алгоритмов для контроля перегрузки (Congestion Control) в TCP. Разработчики не успевают доделать систему к выходу 8.1, но постараются успеть к релизу FreeBSD 8.2;
    • Для беспроводного стека net80211 добавлена экспериментальная модульная система контроля интенсивности потока данных (rate control). Задача проекта - вынести код из драйверов на уровень стека и реализовать дополнительные алгоритмы контроля пропускной способности.
  • Системы хранения
    • Продолжена работа над улучшением, интегрированной во FreeBSD 8.0-RELEASE CAM-реализации подсистемы ATA, позволяющей использовать для взаимодействия с PATA/SATA устройствами более совершенную систему CAM, ранее задействованную для обеспечения работы SCSI устройств. Новая инфраструктура поддерживает такие возможности, как NCQ (Native Command Queuing), MSI (Message Signaled Interrupts) и мультипликатор портов (Port Multiplier). Управление производится через стандартную утилиту camcontrol. За отчетный период доработан код восстановления состояния после ошибок передачи данных и таймаутов, доведена до рабочего состояния поддержка горячего подключения устройств (hot-plug), новые драйверы ahci(4) и siis(4) помечены как стабильные, опция ядра "options ATA_CAM" хорошо показала себя для обеспечения работы в новой подсистеме старых ATA-драйверов, начата работа над драйвером для контроллеров Marvell SATA для карт PCI-X/PCIe и ARM System-on-Chip SATA. Из открытых задач называется портирование функциональности ataraid(4) для использования в GEOM-модулях и написание специфичного для SAS HBA транспорта и драйверов.
    • Продолжается развитие поддержки NFSv4, начальная реализация которой была включена в состав FreeBSD 8.0, завершение интеграции RFC3530 (NFS Version 4.0) ожидается в версии FreeBSD 8.1. После выпуска 8.1 работа будет сосредоточена на чистке кода, реализации возможности агрессивного локального кэширования, реализации возможности делегирования выполнения локальных процессов на сервер, улучшении клиентской части и добавлении поддержки Dtrace.
    • Близок к завершению проект по реализации механизма журналирования Soft Updates (SU+J) для файловой системы UFS. Данное нововведение позволит отказаться от необходимости запуска fsck после "грязного" размонтирования файловой системы. Новая система журналирования позволяет достичь очень высокой скорости восстановления состояния файловой системы при очень малом объеме журнала, при этом система полностью обратно совместима с нежурналируемым вариантом softupdates.
    • Реализация файловой системы ZFS обновлена до версии 13 и готова к промышленной эксплуатации. Список улучшений в ZFSv13 можно найти здесь, а примеры использования здесь. В ближайшем будущем планируется бэкпортировать исправления и оптимизиации из версии ZFS v15. Позднее планируется полная миграция на версию 24, в которой реализована поддержка автоматического распознавания и объединения дубликатов данных. Если в нескольких файлах присутствуют аналогичные блоки данных, то они будут сохранены на физический носитель только один раз, что позволит существенно уменьшить потребление дискового пространства и увеличить производительность - вместо копирования блоков будет лишь изменена запись в соответствующей таблице.
  • Система
    • Продолжается адаптация компилятора clang из проекта LLVM для сборки базовой системы FreeBSD. Разработка ведется в рамках специально выделенной ветки ClangBSD. В настоящее время система на базе ветки ClangBSD успешно производит полную сборка "мира" для платформ i386/amd64, включая ядро, приложения на языке C++ и сам Clang. Отмечается прогресс, связанный с поддержкой использования clang для архитектур Mips и PowerPC, работа по поддержке ARM и Sparc64 пока стоит на месте. Разработчики проекта призывают заинтересованных лиц помочь с тестированием и выявлением ошибок.
    • Подготовлен экспериментальный код с поддержкой динамической обработки синхронизирующих прерываний от таймера в зависимости от характера нагрузки на систему (возможность пропускать обработку HZ-тиков если CPU находится в состоянии ожидания ("idle"), что приводит к снижению нагрузки на CPU, что особенно актуально для уменьшения потребления энергии и при использовании FreeBSD в системах виртуализации).
    • Реализована поддержка загрузки с использованием EFI на платформе i386, загрузчик считывается в виде ELF-файла, размещенного на EFI FAT разделе.
    • В дерево исходных текстов FreeBSD добавлен GEOM-класс geom_sched, реализующий поддержку планировщиков ввода-вывода для подсистемы GEOM. Класс SCHED занимается планированием очередей запросов ввода-вывода на основании алгоритмов, реализованных в виде отдельных загружаемых модулей. Большая часть работы была выполнена Fabio Checconi и представлена на конференции BSDCan 2009.
    • Доведен до стабильного состояния набор скриптов mfsBSD для генерации специфичных загрузочных образов FreeBSD, пригодных для создания минимальных инсталляций FreeBSD, работающих в RAM-диске. Образы могут создаваться как из iso с 8.0-RELEASE и 7.3-RELEASE, так и из собственных сборок. Из новинок отмечен скрипт "zfsinstall", автоматизирующих развертывание систем, поддерживающих только ZFS.
    • Значительно улучшена работа инсталляционного бэкенда pc-sysinstall, разработанного в рамках проекта PC-BSD, но который может использоваться и для установки FreeBSD. Из новых возможностей отмечено: поддержка ZFS, raidz, зеркалирования, GPT/EFI, добавлен менеджер для MBR слайсов/разделов, реализована возможность проброса парольной фразы в подсистему geli.
    • Подготовлен патч с переработкой системных вызовов read(2)/write(2), направленной на использование страничного кэша и механизма совместной блокировки vnode. Отмечается, что в зависимости от ситуации патч может привести не только к повышению производительности, но и к ее падению, т.е. еще требует доработки и тестирования.
  • Поддержка оборудования
    • Ведется работа по обеспечению поддержки стандарта 802.11n в драйвере для беспроводных карт Atheros, в настоящий момент готов код для работы AMPDU RX и на стадии разработки код с реализацией поддержки AMPDU TX;
    • Во FreeBSD HEAD и 8-STABLE интегрирован код с поддержкой беспроводных карт на базе чипа Atheros AR9285;
    • В новом звуковом драйвере snd_hda (High Definition Audio) появилась полноценная поддержка многоканального звука, поддерживаются режимы 4.0 (quadro), 5.1 и 7.1 для аналоговых акустических систем. Многоканальный проброс для цифровых портов AC3/DTS был реализован ранее, но теперь он расширен поддержкой многоканального вывода LPCM через HDMI интерфейс.
    • Для встраиваемых вариантов FreeBSD разрабатывается фреймворк для унифицированной и корректной работы с NAND Flash. В настоящий момент разработаны драйверы для контроллеров Freescale MPC8572 (PowerPC), Marvell MV-78100 (ARM) и Samsung S3C24X0 (ARM).
  • Аппаратные архитектуры
    • Реализована начальная поддержка ARM9-совместимого SoC DaVinci (TMS320DM644x) от компании Texas Instruments. Порт для данной платформы поддерживает загрузку в многопользовательском режиме с монтированием корневой ФС через NFS или с карты SD/MMC, работает Serial -консоль, обработчик прерываний, управление питанием, ethernet-драйвер и поддержка SD/MMC. Предстоит релизовать драйверы для периферии (USB, ATA, NAND flash, I2C, DMA, звку, ввод/вывод видео) и модуль для использования встроенного в SoC DSP-процессора.
    • Продолжена работа по портированию FreeBSD на архитектуру ia64. В ветки 9.0-CURRENT и 8-STABLE добавлено множество коммитов, связанных с повышением стабильности, завершен процесс организации сборки пакетов (порты ia64-8, всего собрано 17187 пакетов, для сравнения для i386-8 собрано 19885).
    • Для беспроводных маршрутизаторов D-Link DIR-320, построенных на базе MIPS-совместимой платформы BCM5354, подготовлена специализированная сборка FreeBSD для работы которой достаточно имеющейся в устройстве 4 Мб Flash-памяти и 32 Мб ОЗУ. В настоящее время готова сборка с поддержкой IPSec. В разработке находятся сборки, нацеленные на работу в качестве маршрутизатора, беспроводной точки доступа и openvpn.
    • Отмечается прогресс в подготовке порта для MIPS-совместимых Octeon SoC (CN3xxx и CN5xxx).
    • Передача проекту сервера Apple XServe G5 позволила сдвинуть с места развитие дерево портов для PowerPC (powerpc-8), в настоящее время успешно собрано 10918 пакетов (для i386-8 собрано 19885). Среди портов которые еще не удалось собрать - lang/python25.
    • Доведен до рабочего завершенного состояния и в ближайшее время будет интегрирован в HEAD порт для 64-разрядных процессоров PowerPC. Таким образом во FreeBSD 9.0 появится поддержка базирующихся на SLB 64-разрядных CPU, таких как IBM POWER4-7, PowerPC 970 (G5) и Cell Broadband Engine. В настоящее время поддержка ограничена одно- и двухпроцессорными машинами Apple G5, в будущем планируется обеспечение поддержки IBM Power Systems servers и Sony PlayStation 3.
    • Ощутимый прогресс отмечается в развитии порта FreeBSD/sparc64: добавлено много небольших улучшений и исправлений, реализована поддержка процессоров UltraSPARC-IV и -IV+, в процессе находится реализация поддержки серверов Sun Fire V1280.
  • Приложения и система портов
    • Продолжается усовершенствование порта web-браузера Chromium. Порт уже работает достаточно стабильно, включая такие возможности как HTML 5 тег video. Остается выполнить задачу синхронизации подготовленных патчей с основной веткой Chromium, после чего будет оформлен официальный порт chromium-devel.
    • Ведется работа по разбору накопившихся сообщений об ошибках (PR). Группа "Bugbusting Team" пытается разобрать накопившиеся сообщения, классифицировать их через привязку тегов и передать требующие внимания PR-ы коммиттерам и мантейнерам портов. Общее число PR в настоящий момент находится на отметке в 6400 записей;
    • Представлена альфа-версия порта библиотеки libunwind, реализующей API для использования в программах на языке Си метода определения цепочек вызовов программ, состояние каждой из цепочек может быть заморожено для последующего выполнения с заданной точки.
    • Развивается инициатива по включению в базовую систему урезанной версии OpenLDAP и соответствующих LDAP плагинов PAM и NSS. В настоящее время обеспечена возможность хранения в LDAP идентификационных данных пользователя, пароля и ключей SSH.
    • Ведется разработка проекта по обеспечению возможности использования сторонних компиляторов и сопутствующих инструментов (загрузчиков и линковщиков) для сборки FreeBSD, как правило в окружениях для кросс-компиляции. На начальном этапе развития планируется подготовить отбельные порты для последних версий binutils и GCC.
    • После некоторого затишья продолжена работа над утилитой для управления портами portmaster, недавно выпущен релиз 2.22 в котором появились такие новшества, как использование индексного файла (INDEX) для отображения какие из портов требуют обновления; реализована возможность работы без локального дерева портов, только на основе индексного файла; добавлена опция "-delete-build-only" для удаления пакетов, которые требуются только для сборки, но не нужны для работы системы.
    • Улучшена работа демона Webcamd, предназначенного для организации работы с web-камерами. Webcamd, поддерживающий сотни моделей web-камер и работающий на пользовательском уровне, создан на основе портирования Video4Linux-драйверов. Среди зависимостей webcamd - libc, pthreads, libcuse4bsd и libusb. В настоящее время усилия разработчиков направлены на расширение спекта поддерживаемых web-камер с интерфейсом USB.
    • Число портов достигло 21500, из них у более тысячи имеются незакрытые PR. Бинарные пакеты в настоящее время собираются для архитектур amd64-6, amd64-7, amd64-8, i386-6, i386-7, i386-8, i386-9, ia64-8, sparc64-7, sparc64-8, ia64-8.

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