Представлен отчёт о развитии проекта FreeBSD с октября по декабрь 2013 года.
Основные достижения:
- Система
- В компилятор GCC, ещё используемый в базовой системе на некоторых вторичных архитектурах (Clang во FreeBSD 10 задействован только для ARM, x86 и AMD64), интегрированы патчи, нацеленные на улучшение совместимости с Clаng. Поддержка в GCC некоторых возможностей Clang необходима для унификации процесса сборки, в котором пока не могут быть задействованы некоторые полезные возможности Clang, отсутствующие в GCC 4.2.1. В частности, добавлена поддержка расширенных предупреждений и такие улучшения, как "-Wmost" и "-Wnewline-eof". Также доступна реализация Си-расширения Blocks, которое поможет улучшить поддержку во FreeBSD технологии GCD (Grand Central Dispatch). Патчи в основном портированы из ветки GCC, поддерживаемой компанией Apple.
- В рамках проекта ZFSBoot ведётся работа по обеспечению поддержки файловой системы ZFS в установщике BSDInstall. В декабре, перед релизом FreeBSD 10.0, ZFSBoot достиг стабильного состояния, предоставляя возможности установки систем с корневым разделом на ZFS и опциональной поддержкой загрузочных окружений и шифрования через geli. Благодаря проекту ZFSBoot, в BSDInstall также появились расширенные средства отладки, дополнительные возможности по использованию скриптов, новое меню для выбора раскладки клавиатуры, упрощена настройки беспроводной сети, внесена серия небольших улучшений в процесс установки. Из планируемых улучшений отмечается предоставление возможности по настройке всех параметров в интерактивных меню, возможность создания дополнительных параметров, поддержка установки на шифрованные разделы UFS, интеграция конфигуратора BSDConfig с реализацией функций по настройке и установке пакетов, ранее присутствующих в sysinstall.
- В рамках проекта FreeBSD Test Suite ведётся работа по внедрению средств для обеспечения тестирования качества кода в процессе разработки FreeBSD. В качестве базового инструмента для организации автоматизированного тестирования используется фреймворк kyua (devel/kyua). Сценарии тестирования размещаются в каталоге /usr/tests/. Для разработчиков формируемый тестовый набор позволяет постоянно контролировать качество кодовой базы и оперативно выявлять регрессивные изменения, для пользователей появляется возможность проверки корректности работы внедрённых программных и аппаратных конфигураций. В настоящее время тестовые наборы только создаются и проект находится на стадии формирования инфраструктуры, после проверки которой начнётся перевод на новый инструментарий используемого ранее кода для тестирования системы, например, тестов tools/regression/.
- Завершена работа по портированию для использования в процессе разработки FreeBSD системы непрерывной интеграции, построенной на базе сервера Jenkins и уже используемой в проектах компании iXsystems при разработке дистрибутива FreeNAS. Инфраструктура пока не введена в строй и требует дополнительной настройки, но сервер на базе Jenkins уже установлен в специально подготовленном виртуальном окружении.
- Продолжена работа по интеграции в базовую систему отладчика LLDB, развиваемого проектом LLVM. За отчётный период была добавлена поддержка отладки многопоточных программ в live-режиме с использованием ptrace. Реализована поддержка архитектуры MIPS. Для тестирования в базовую систему импортирван снапшот LLDB (SVN rev 196322), который можно собрать, указав "WITH_LLDB=" в src.conf (по умолчанию не собирается). После импорта Clang 3.4 сборку отладчика LLDB планируется включить по умолчанию для архитектуры AMD64. Из дальнейших планов отмечается поддержка архитектуры ARM и возможность локальной и удалённой отладки ядра;
- Ведётся работа по улучшению поддержки загрузки FreeBSD на системах с UEFI. Загрузчик и процесс загрузки ядра FreeBSD адаптируются для обеспечения совместимости с прошивками UEFI, применяемыми на выпускаемых ноутбуках, ПК и серверах. В настоящее время уже подготовлен прототип UEFI-загрузчика FreeBSD, который готовится к интеграции во FreeBSD HEAD. Некоторые созданные в рамках проекта улучшения уже добавлены в HEAD. Поддержку UEFI Secure Boot планируется реализовать в выпуске FreeBSD 10.1.
- Изолированные окружения, эмуляторы, безопасность и ограничения ресурсов
- Ведётся работа по расширению возможностей демона auditdistd, используемого для организации безопасной и надёжной передачи логов системного аудита поверх TCP/IP сети от локального демона аудита к демону аудита на удалённом сервере, без промежуточного сохранения лога на локальной системе. В auditdistd будет добавлена проверка сертификатов на стороне клиента (сейчас поддерживается только TLS с проверкой сертификатов на стороне сервера) и более полноценной поддержки инфраструктуры открытых ключей с возможностью проверки всей цепочки доверия для сертификата и проверкой по спискам отозванных сертификатов. Демон auditdistd будет поддерживать только режимы TLSv1.2 и PFS. Кроме того в будущем выпуске появится возможность отправки логов сразу на несколько серверов. Работу планируется завершить уже в начале февраля.
- Продолжена работа по расширению средств для изоляции выполнения приложений при помощи фреймворка Capsicum, который расширяет POSIX API и предоставляет несколько новых системных примитивов, нацеленных на поддержку модели безопасности через управление возможностями объектов ("object-capability"). Capsicum дополняет традиционный централизованный мандатный контроль доступа средствами для защиты отдельных приложений и активируется на стороне самого приложения. Используя Capsicum приложение можно запустить в режиме повышенной изоляции (sandbox), при котором программа сможет выполнять только ранее специфицированные штатные действия. Для организации доступа привилегированным операциям и функциональности, недоступным при работе в режиме повышенной изоляции, развивается демон Casper.
Из последних улучшений отмечается интеграция во FreeBSD HEAD демона Casper, сервисов Casper (system.dns, system.grp, system.pwd, system.random и system.sysctl) и библиотек libcasper, libcapsicum и libnv. Утилита tcpdump адаптирована для использования сервиса system.dns для выполнения DNS-запросов. Утилита kdump адаптирована для использования сервисов system.pwd и system.grp для преобразования идентификаторов пользователей и групп и имена пользователей и групп. Продолжается работа по обеспечению режима изоляции для различных приложений базовой системы.
- В рамках проекта CBSD подготовлен инструментарий для управления изолированными jail-окружениями, комбинирующий в одном инструменте средства для быстрого развёртывания, клонирования, импорта/экспорта, создания снапшотов и мониторинга jail-окружениями. CBSD также предоставляет средства для подготовки и использования готовых преднастроенных образов Jail с определённым набором приложений и сервисов. Для управления в том числе может использоваться web-интерфейс.
- Проект по добавлению в облачную платформу OpenStack поддержки использования FreeBSD в качестве хост-системы для развёртывания гостевых систем, с использованием гипервизора bhyve и средств виртуализации сети OpenContrail. Для реализации данной цели разрабатывается драйвер для поддержки гипервизора bhyve в компоненте OpenStack nova-compute и ведётся портирование для FreeBSD модуля OpenContrail vRouter. В настоящий момент разработка уже находится на стадии работающего демонстрационного прототипа. Проект развивается при поддержке компании Juniper Networks.
- Готовятся к включению во FreeBSD HEAD патчи с реализацией поддержки работы FreeBSD в качестве гостевой системы в режиме PVH DomU (использование паравиртуализации в полностью виртуализированном HVM-контейнере без применения эмуляции), поддержка которого появится в Xen 4.4. Также подготовлен начальный набор патчей для поддержки PVH Dom0, позволяющие использовать FreeBSD в качестве хост-системы.
- Во FreeBSD HEAD и stable/10 интегрированы наработки проекта по обеспечению поддержки аппаратных механизмов виртуализации ввода/вывода Intel IOMMU (VT-d, DMAR), используемых в гипервизорах для проброса реальных PCI-устройств в виртуальное окружение и дополнительной изоляции устройств. В частности, интегрирован драйвер VT-d, реализующий интерфейс busdma с использованием элементов DMA Remap (DMARs), поддерживаемых текущими чипсетами Intel. Драйвер позволяет увеличить надёжность и безопасность систем, за счёт ограничения доступа к основной памяти из устройств, а также добиться увеличения производительности за счёт избежания дополнительной буферизации. По умолчанию драйвер отключен, но может быть активирован в loader.conf через опцию hw.dmar.enable;
- Сетевая подсистема
- Проведена большая работа по увеличению стабильности и производительности нового нативного стека iSCSI, работающего на уровне ядра и содержащего реализации iSCSI Target и iSCSI Initiator. Продолжается работа по реализации поддержки iSER. Добавлены оптимизации для распределения нагрузки между несколькими потоками внутри ядра и проведена переработка механизма блокировок, что в конечном счёте позволило добиться повышения производительности на многоядерных системах. Все подготовленные оптимизации планируется перенести во FreeBSD HEAD в феврале, после чего вернуть их в ветку stable/10 и включить в состав релиза 10.1;
- Системы хранения и файловые системы
- Завершён проект по увеличению масштабируемости и производительности работы подсистем CAM (ATA/SCSI) и GEOM (уровень блочных устройств) на многоядерных системах. В рамках проекта переработан механизм блокировок, что позволило заметно увеличить производительность CAM и GEOM на многоядерных системах. Например, в тестах был достигнут порог в 1 млн операций ввода/вывода в секунду. В GEOM дополнительно проведена общая полировка кодовой базы и добавлена новая функциональность прямой отправки (direct dispatch), позволяющей разделить нагрузку между несколькими потоками и процессорами, сократив число переключений контекста. Наработки уже перенесены в ветки FreeBSD HEAD и stable/10, и ожидаются в выпуске FreeBSD 10.1;
- Началась разработка проекта по реализации файловой системы autofs и связанного с ней демона automountd для организации автоматического монтирования ФС при попытке обращения к связанным с ними разделам. Систему автомонтирования планируется реализовать в виде, близком к подобным подсистемам Linux, OS X и Solaris, обеспечив совместимость на уровне формата файлов маппинга. Кроме того планируется обеспечить интеграцию с сервисами директорий, таких как LDAP;
- Во FreeBSD HEAD и stable/10 приняты изменения с поддержкой использования в ZFS улучшенного кода кэширвоания в механизме распределения памяти UMA, который позволяет добиться большей производительности. В ZFS для ZIO/ARC использование UMA можно активировать через опцию vfs.zfs.zio.use_uma в loader.conf, которая уже активирована по умолчанию для архитектуры ARM64. Поддержка кэша UMA для буферов сжатия LZ4 включена для всех архитектур. При тестировании на многопроцессорных системах указанные изменения показали удвоение прозводительности;
- Во FreeBSD HEAD принят ряд оптимизаций работы сервера NFS (RPC, FHA, DRC), которые позволили в некоторых тестах значительно увеличить производительность и снизить нагрузку на CPU. Вкупе с вышеотмеченными улучшениями в ZFS удалось добиться производительности в 200 тыс операций чтения NFS блоков в секунду (IOPS) и 55 тыс SPEC NFS IOPS.
- Поддержка оборудования
- Обновлён код KMS-модуля i915kms для видеокарт Intel, обеспечивающего переключение видеорежимов на уровня ядра. Код драйвера синхронизирован с текущей кодовой базой драйвера для ядра Linux и включает все исправления, внесённые за последние полтора года. С точки зрения функциональности в новом выпуске обновлена поддержка IvyBridge, добавлена поддержка процессоров серии Haswell и ValleyView, запланированы для включения новые возможности, необходимые для использования свежих выпусков X.Org и Mesa;
- Продолжается развитие порта с поддержкой Allwinner A20 SoC, позволяющего запустить FreeBSD на плате Cubieboard2. Из периферии поддерживается USB EHCI и GPIO, заершена работа над драйвером EMAC 10/100 Ethernet.
- Во FreeBSD HEAD и stable/10 добавлена начальная поддержка процессоров Freescale i.MX6, построенных на архитектуре ARM (ARM Cortex A9). Уже готовые драйверы для USB (EHCI), Ethernet (Gigabit), SD Card и UART. В разработке поддержка I2C, SPI, AHCI, подсистем для звука и виждео.
- Во FreeBSD HEAD добавлена поддержка SoC Freescale Vybrid VF6xx на базе ARM Cortex-A5/M4. Поддерживается NAND Flash Controller (NFC), USB EHCI, GPIO, UART, GIC, MPCore timer, Ethernet. Требует доработки поддержка фреймбуфера.
- Ведётся работа по адаптации FreeBSD для работы на новых ARM-платах, таких как SoC серии Rockchip и Qualcomm Snapdragon S4. Во FreeBSD HEAD принят код для начальной поддержки SoC Rockchip RK3188 (Quad core Cortex A9).
- Продолжается работа над драйвером iwn для беспроводных адаптеров Intel 802.11n. В последнее время добавлена поддержка серий чипов 2xxx, 6xxx и 1xx, устранены недоработки при сканировании сетей, задействованы средства контроля потока 802.11n из стека net80211.
- Приложения и система портов
- Дерево портов FreeBSD преодолело отметку в 24,500 портов, число незакрытых PR держится на уровне 1900. Введён в строй pkg.freebsd.org, официальный репозиторий бинарных пакетов для использования с пакетным менеджером pkg. Пакеты для pkg сформированы для выпусков 8.3, 8.4, 9.1, 9.2, 10.0 и -CURRENT. Добавлена поддержка проверки валидности пакетов по цифровой подписи;
- Подготовлен порт sysutils/panicmail с реализацией механизма отправки отчётов о крахе ядра системы в централизованное хранилище. Информации о крахах пока присылается очень мало. Пользователям рекомендуется установить данный порт и активировать автоматическую отправку информации о крахах, что позволит ускорить выявление и устранение проблем в ядре FreeBSD.
- Продолжена чистка портов lang/python* для обеспечения совместимости с используемыми в upstream методами сборки и разными версиями Python, без применения специфичных для FreeBSD сборочных патчей.Осуществлён уход от привязки портов к сборке lang/python, каждый порт теперь связывается зависимостями с конкретной версией Python или с мета-портом lang/python, что решает проблемы с привязкой портов к веткам Python 2.x или Python 3.x. Ведётся подготовка к поддержанию в одном порте возможности использования нескольких версий Python. Порт lang/python27 обновлён до версии 2.7.6, lang/python33 port до версии 3.3.3, lang/pypy до версии 2.2.1. Порт devel/py-distribute заменён на обновлённый порт devel/py-setuptools, в котором добавлена поддержка новых средств для упрощения установки Python-пакетов.
- Развивается инициатива по формированию сборок FreeBSD для развёртывания в качестве гостевой ОС в cloud-окружениях Amazon EC2. Во FreeBSD 10 работа FreeBSD в EC2 возможна без применения дополнительных патчей со штатным GENERIC-ядром, в котором включена по умолчанию поддержка XENHVM. В состав сборок FreeBSD/EC2 включена система "configinit" для автонастройки использования пользовательских данных окружения EC2. Из открытых задач отмечается перевод формирования AMI-сборок FreeBSD в рамках основного процесса формирования релизов.
- В коллекцию портов добавлено десктоп-окружение MATE 1.6, в рамках которого продолжена работа по поддержанию классического рабочего стола в стиле GNOME 2. Пользователям, отдающим предпочтение GNOME 2, рекомендуется перейти на использования данного порта (x11/mate или сокращённый вариант x11/mate-base), так как в скором времени в GNOME 2 в портах будет заменён на GNOME 3 (работа над портом GNOME 3.6 близится к завершению).
- Проведена адаптация новых версий десктоп-оболочки KDE и фреймворка Qt для FreeBSD. В порты помещены релизы KDE 4.11.4 (area51), Qt 4.8.5, Qt 5.2 (area51), PyQt 4.10.3, SIP, 4.15.2, QScintilla2 2.8, Qt Creator 2.8.0, KDevelop 4.5.2, Calligra 2.7.5 и CMake 2.8.12.1. По данным сервиса PortScout доступно 464 связанных с KDE порта, из которых 88.15% (в прошлом отчёте было 98.73%) портов содержат свежие версии приложений. Из планов отмечается исключение HAL из числа зависимостей, переход на интерфейс Bluedevil для обеспечения работы c Bluetooth, поддержка KDE 4.12 и Qt 5, проверка корректности сборки компонентов KDE с использованием Clang и libc++;