Отчет о состоянии развития FreeBSD за второй квартал 2011 года
15 сентября 2011 года
Представлен отчет о развитии проекта 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.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.