Отчёт о состоянии развития FreeBSD за третий квартал 2013 года
Представлен отчёт о развитии проекта FreeBSD с июля по сентябрь 2013 года. Основные достижения:
Система Продолжена разработка проекта Newcons, в рамках которого развивается новый интерфейс для обеспечения вывода через графические устройства, позволяющий организовать доступ простых драйверов к консоли и терминальному режиму, а также доступ к фреймбуферу для X.Org. При этом от драйвера не требуется встраивание шрифтов, цветовых карт и изображений курсоров мыши, все эти компоненты будут предоставлены Newcons-драйвером vt. Проект также включает интеграцию с модулями KMS (Kernel Mode Setting), что позволит добиться поддержки современных релизов X.Org и обеспечить корректный возврат к режиму виртуального терминала после смены видеорежима средствами X.Org. Среди возможностей отмечается поддержка мыши, KMS (i915kms и radeonkms), USB-клавиатур, экрана-заставки, vidcontrol. Уже доступен первый рабочий вариант проекта, включающий поддержку мыши (sysmouse, пока без копирования и вставки), KMS, Unicode-шрифтов (в том числе кириллических), вывода Unicode символов на экран, работы в графическом и текстовом режимах, прокрутки истории вывода на экран. Доведена до конца работа по реализации атомарной установки флага «close-on-exec» для предотвращения утечки файловых дескрипторов в дочерние процессы при вызове fork () и exec () в нитях и обработчиках сигналов. Поддержка атомарной установки флага обеспечена для всех POSIX-функций, создающих новые файловые дескрипторы, а также задействована для многих файловых дескрипторов, используемых в libc и libutil; Продолжена работа по интеграции в базовую систему отладчика LLDB, развиваемого проектом LLVM. Для тестирования в базовую систему импортирван снапшот LLDB (SVN rev 255722), который можно собрать, указав WITH_LLDB= в src.conf. Из пока не решённых задач отмечается поддержка отладки многопоточных программ, core-файлов и ядра, возможность удалённой отладки, поддержка архитектуры MIPS; Ведётся работа по устранению дефектов, выявленных в результате проведения статического анализа кода в сервисе Coverity, а также при использовании развиваемого проектом LLVM статического анализатора. Налажено автоматизированное тестирование кода FreeBSD HEAD в clang-analyzer, выполняемое несколько раз в неделю. Планируется обеспечить автоматическую публикацию в списке рассылки информации о новых проблемах. Изолированные окружения, эмуляторы, безопасность и ограничения ресурсов Представлены результаты улучшения реализации встроенного в ядро генератора псевдослучайных чисел CSPRNG, доступного через /dev/random. Текущий генератор случайных чисел является достаточно надёжным и пригодным для формирования непредсказуемых последовательностей в том числе и для криптографических нужд. Для формирования качественных непредсказумых входных данных в генераторе случайных чисел реализован предложенный Шнайером алгоритм Yarrow, основанный на дополнительном цикличном применении хэшей над неповторяющимися данными из разных частей ядра. Но в базовой реализации CSPRNG некоторые считающиеся качественными источники энтропии использовались без дополнительной рандомизации при помощи Yarrow. Недавние разоблачения действий АНБ дали повод для дополнительной проверки качества методов сбора энтропии и применения дополнительных параноидальных методов для гарантирования независимости от отдельных источников энтропии, даже для тех которые считаются надёжными. В обновлённой реализации осуществлён переход к применению Yarrow для всех без исключения источников энтропии. В будущем планируется подготовить реализацию нового алгоритма Fortuna, также разработанного при участии Шнайера. Fortuna сможет быть использован в качестве альтернативной опции и, возможно, заменит по умолчанию Yarrow (решение пока не принято). Также планируется реализовать поддержку FIPS 800–90b и провести глубокий аудит качества энтропии;
Улучшение поддержки инструкций AES-NI и задействование SSE2 во фреймворке OpenCrypto позволило существенно поднять скорость расшифровки AES-XTS и AES-CBC. Как следствие, производительность дискового шифрования при помощи GEOM-класса GELI при использовании AES-XTS поверх GNOP возросла в три раза. Продолжена работа по расширению применения средств для изоляции выполнения приложений при помощи фреймворка Capsicum. Capsicum расширяет POSIX API и предоставляет несколько новых системных примитивов, нацеленных на поддержку модели безопасности через управление возможностями объектов («object-capability») для Unix-систем. Capsicum нацелен на дополнение традиционного централизованного мандатного контроля доступа средствами для защиты отдельных приложений и активируется на стороне самого приложения. Используя Capsicum приложение можно запустить в режиме повышенной изоляции (sandbox), при котором программа сможет выполнять только ранее специфицированные штатные действия. Из последних изменений отмечено включение в состав FreeBSD 10 переработанного варианта capability cap_rights_t, позволяющего снять лимит в 64 правила над файловыми дескрипторами. Доведена до конца разработка библиотеки libnv, выступающей связующим звеном между потребителями и сервисами Casper (демон, предоставляющий сервисы для доступа к привилегированным операциям из изолированных процессов). Расширено число приложений для которых задействованы механизмы изоляции Capsicum.
Подготовлены сборки FreeBSD 8.3-RELEASE, 8.4-RELEASE, 9.0-RELEASE, 9.1-RELEASE и 9.2-RELEASE для развёртывания в качестве гостевой ОС в cloud-окружениях Amazon EC2. Во FreeBSD 9.2-RELEASE работа FreeBSD в EC2 возможна без применения дополнительных патчей, но требует сборки ядра с включением опции XENHVM, которая включена по умолчанию начиная с FreeBSD 10.0-ALPHA3 (в EC2 смогут работать штатные сборки FreeBSD 10.0). Проведена чистка и расширена функциональность драйвера virtio с поддержкой паравиртуальных устройств ввода/вывода vtnet (Ethernet), virtio_blk (блочное устройство), virtio_scsi (SCSI HBA) и virtio_balloon (для возвращения памяти гипервизору). Добавлена поддержка работы с несколькими очередями (multiqueue); Сетевая подсистема Портирован из OpenBSD и интегрирован в HEAD драйвер vmx для виртуальных ethernet-адаптеров VMware. Драйвер может быть использован вместо неподдерживаемого в 10.0-RELEASE и 9-STABLE драйвера vmxnet3 из состава VMware Tools. Из планов отмечается намерение включить драйвер в ветку stable/9. Системы хранения и файловые системы Проведена работа по увеличению масштабируемости в GEOM и CAM на многопроцессорных системах, направленная на устранение узких мест в подсистеме работы с блочными устройствами, ограничивающими пиковую производительность на уровне 300–500 тысяч операций ввода/вывода в секунду. В GEOM была обеспечена возможность одновременной обработки запросов ввода/вывода из параллельно выполняемых потоков. В CAM переработан механизм блокировок, крупные блокировки разделены на серию мелких локальных блокировок (отдельные блокировки для шины, LUN, очередей), полностью не останавливающих работу CAM. В итоге, удалось поднять пиковую производительность в два раза, доведя её до миллиона операций ввода/вывода в секунду. Изменения планируется в скором времени включить в состав FreeBSD HEAD и ветку stable/10, после выпуска релиза FreeBSD 10.0. Во FreeBSD HEAD добавлен новый нативный iSCSI стек, содержащий реализации iSCSI Target и iSCSI Initiator, отличающиеся более высокой надёжностью и производительностью, в сочетании с предоставлением значительно упрощённых средств администрирования. Новый стек будет поставляться в составе FreeBSD 10. Для упрощения миграции со старого iSCSI Initiator в новом обеспечена совместимость на уровне файлов конфигурации; Поддержка оборудования Во FreeBSD HEAD принят порт с поддержкой Allwinner A20 SoC, позволяющий запустить FreeBSD на плате Cubieboard2. Из периферии поддерживается USB EHCI и GPIO. В ближайшее время планируется обеспечить работу EMAC Ethernet и других драйверов; Во FreeBSD HEAD интегрирована ветка projects/pseries, позволяющая использовать сборки FreeBSD/powerpc64 на серверах IBM pSeries внутри логических разделов IBM POWER; Устранены ранее наблюдаемые проблемы с портом FreeBSD/sparc64, обеспечена кросс-сборка образов для данного порта и налажена возможность использования нового графического стека на базе X.Org. Продолжено развитие драйвера для устройств с интерфейсом SDIO (Secure Digital I/O), позволяющего подключать периферийные устройства через стандартный контроллер для SD-карт. Среди устройств с интерфейсом SDIO на рынке присутствуют адаптеры Bluetooth и WiFi, камеры, устройства чтения отпечатков пальцев, сканеры штрихкодов и т.п. Драйвер выполнен в виде дополнения для существующей шины MMC, расширенной поддержкой специфичных для SDIO возможностей. Поддерживаются операции получения информации об устройстве, простая байтовая передача данных и чтение в мультибайтовом режиме. Дополнительно подготовлен прототип драйвера для модуля Marvell SDIO WLAN/BT, созданный на основе аналогичного драйвера для Linux. В настоящее время драйвер уже успешно определяет SDIO-карты и производит их инициализацию, реализована и протестирована поддержка большинства методов шины, возможна загрузка прошивки для беспроводных карт. Из нерешённых задач отмечается создание модели блокировок в стеке SDIO и доведение до полноценного вида драйвера Marvell SDIO WiFi. Во FreeBSD HEAD добавлены разработанные для порта FreeBSD/ARM средства для манипуляции страницами памяти большого размера (Transparent SuperPages), поддерживаемыми процессорами ARMv7. Поддержка SuperPages позволит увеличить эффективность и производительность работы FreeBSD на ARM-системах, благодаря обеспечению средств трансляции TLB для динамического покрытия больших областей памяти, что особенно актуально с появлением серверных ARM-систем. Модуль pmap настроен для задействования SuperPages. Проведено тестирование, которое показало сокращение задержек при доступе к памяти на 34% в тесте GUPS и на 38% в тесте LMbench, время сборки buildworld сократилось на 20%. Приложения и система портов Реализован новый менеджер загрузки портов, призванный заменить собой утилиту fetch для более эффективного выполнения задач загрузки требуемых для установки порта компонентов, таких как архивы с исходными текстами программ. Из недостатков fetch, которые попытались устранить в новом менеджере загрузки, отмечаются дублирующие загрузки, проблемы с выбором оптимального зеркала и отсутствие средств для ускорения загрузки (например, загрузка в несколько параллельных потоков с разных зеркал). В рамках проекта разработан сервис, обслуживающий запросы на загрузку, и клиентское приложение dmget. Сервис поддерживает выбор оптимального зеркала на основании накопления статистики о скорости загрузки с разных зеркал, может мигрировать выполнение загрузок с одного зеркала на другое при выявлении более быстрого зеркала; Возвращены порты для поддержки языка программирования Ada, которые были убраны из-за проблем со сборкой компилятора GNAT в новых версиях FreeBSD. В рамках порта lang/gnat-aux представлен новый вариант компилятора GNAT. Также добавлены порты со средой разработки GNAT Programming Studio, XML/Ada и GtkAda; FreeBSD Core Team работает над введением в строй pkg.freebsd.org, первого официального репозитория бинарных пакетов, который можно будет использовать с утилитой pkg. Также ведётся подготовка к прекращению использования pkg_add и задействованию по умолчанию pkg, начиная с 10.0-RELEASE; Дерево портов FreeBSD преодолело отметку в 24,400 портов, число незакрытых PR повысился до 1900. Проведена большая работа по подготовке инфраструктуры к переходу на использование пакетного менеджера pkg вместо pkg_add и задействование Clang в качестве компилятора портов по умолчанию. Реализована автоматизированная процедура для обеспечения качества сборки портов. Проводится чистка портов lang/python* для обеспечения совместимости с используемыми в upstream методами сборки и разными версиями Python, без применения специфичных для FreeBSD сборочных патчей. В дерево портов добавлены новые версии библиотек Glib 2.36 и GTK+ 3.8. Ведётся работа по увеличению качества работы портов с десктоп-окружением GNOME 3.6. В порт multimedia/cheese добавлена возможность использования devd для работы с web-камерой с использованием порта multimedia/webcamd. Внесены исправления, связанные со сборкой www/webkit-gtk3. Близок к готовности порт с окружением MATE. GNOME 2 скоро будет удалён из дерева портов. (примечание: GNOME 3.6.2, Cinnamon 1.8.8.1 и Mate 1.6 для FreeBSD можно установить из стороннего репозитория Pkgdemon). Обновлены порты с компонентами проекта GNUstep, в рамках которого развивается фреймворк с реализацией API Apple Cocoa (OpenStep) и сопутствующих библиотек. Обеспечена поддержка сборки с использованием GNUstep Objective-C runtime и Clang 3.3, что позволяет задействовать все актуальные возможности Objective-C, включая ARC (Automatic Reference Counting) и новые элементы синтаксиса. Так как libc из состава FreeBSD и OS X достаточно близки, FreeBSD становится привлекательной платформой для портирования программ OS X с использованием наработок GNUstep. Для установки всех необходимых для работки библиотек GNUstep можно использовать мета-порт devel/gnustep, а для установки приложений — x11/gnustep-app. Обновлены порты с графическим стеком. В состав портов включен выпуск MESA 9.1, в том числе с экспериментальной поддержкой libEGL и libgles2, требуемой для работы Wayland/Weston. В порт x11-servers/xorg-server добавлена поддержка бэкенда devd для динамического определения и настройки устройств ввода. В состав 10.0-RELEASE принят код драйвера radeonkms, который уже достаточно стабилен, но пока не поддерживает переход в спящий режим. С появлением поддержки KMS драйвер x11-drivers/xf86-video-ati был обновлён до версии 7.2.0, что позволило обеспечить работу GPU серии HD7000 и HD8000. Началась работа по портированию из ядра Linux 3.8 DRM-кода (Direct Rendering Manager), используемого в драйверах i915kms и radeonkms. Из планов отмечается работа по интеграции Mesa 9.2 и xorg-server 1.14, тестирование новых драйверов для GPU AMD, обеспечение экспериментальной поддержки Wayland и Weston, улучшение работы бэкенда devd.
Полный текст статьи читайте на OpenNet