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