Отчёт о состоянии развития FreeBSD за третий квартал 2014 года
Представлен отчёт о развитии проекта FreeBSD с января по июля по сентябрь 2014 года. За отчётный период основная работа была сосредоточена на доведении до готовности кода поддержки различных ARM-платформ для FreeBSD 11, развитию средств для использования FreeBSD на рабочем столе и оптимизации производительности.
Основные достижения:
- Система
- Реализована возможность автоматизированной установки FreeBSD c загрузкой по сети. На первом этапе реализации проекта для управления ходом установки в bsdinstall добавлена поддержка сценариев, в которых доступны такие переменные, как KEYMAP, HOSTNAME, MIRROR, RELEASE, TIMEZONE, DAEMONS, ROOTPWHASH и USERS, а также средства для настройки сети и настройки ZFS. На втором этапе представлен автономный режим установки, активируемый через PXE. Минимальный загрузочный образ с инсталлятором сформирован на базе mfsBSD. Имя и путь к сценарию установки передаётся DHCP-сервером через переменную "bootfile-name".
- Продолжается работа по внедрению системы непрерывной интеграции Jenkins в процесс разработки FreeBSD. Инфраструктура непрерывной интеграции основана на системе, уже опробованной компанией iXsystems при разработке дистрибутива FreeNAS. Увеличено число веток, конфигураций и портов, проверяемых в системе непрерывной интеграции. Обеспечено выполнение тестов kyua после завершения сборки. В случае выявления проблем уведомления автоматически отправляются в списки рассылки и разработчикам, осуществлявшим коммиты с момента последней успешной сборки. В систему тестирования kyua добавлена команда report-junit, которая позволяет экспортировать результаты проверки в формате JUnit XML, который успешно поддерживается в Jenkins. На сайте scan.freebsd.org организована публикация результатов статического анализа кода FreeBSD, выполненного при помощи инструмента LLVM scan-build.
- В ветку stable/10 перенесена улучшенная поддержка загрузки на системах с UEFI. В загрузчике и процессе загрузки ядра обеспечена совместимость с существующими UEFI-прошивками для ПК, ноутбуков и серверов. Поддержка UEFI войдёт в состав ожидаемого на следующей неделе выпуска FreeBSD 10.1, но потребует использования отдельного установочного образа (базовый установочный образ для избежания регрессивных изменений будет поддерживать только BIOS). Из планов на будущее отмечено создание boot1.efi для ZFS, поддержка UEFI Secure Boot, возможность использования хранимых в NVRAM переменных UEFI.
- Внесена большая порция улучшений в подсистему vt, развиваемую в рамках проекта Newcons и пришедшую на смену syscons. Vt предоставляет новый интерфейс для обеспечения вывода через графические устройства, позволяющий организовать доступ простых драйверов к консоли и терминальному режиму, а также доступ к фреймбуферу для X.Org. При этом от драйвера не требуется встраивание шрифтов, цветовых карт и изображений курсоров мыши, все эти компоненты предоставлены Newcons-драйвером vt. Проект также включает интеграцию с модулями KMS (Kernel Mode Setting), что позволит добиться поддержки современных релизов X.Org и обеспечить корректный возврат к режиму виртуального терминала после смены видеорежима средствами X.Org. Среди возможностей отмечается поддержка мыши, KMS (i915kms и radeonkms), USB-клавиатур, экрана-заставки, vidcontrol, Unicode, xterm-подобная эмуляция терминала, использование различных шрифтов в разных окнах терминала.
За отчётный период решены проблемы с производительностью vt_vga, проявляющейся при запуске в системах виртуализации. Сформирован набор файлов с клавиатурными раскладками для vt. Обеспечена работа драйверов EFI framebuffer и ofwfb с видеодрайвером xf86-video-scfb. Накопившиеся улучшения и исправления войдут в состав выпуска FreeBSD 10.1 (vt пока предлагается в качестве опции, которая может быть активирована пересборкой ядра с заменой настроек "device sc" и "device vga" на "device vt" и "device vt_vga").
- Изолированные окружения, эмуляторы, безопасность и ограничения ресурсов
- Продолжена работа по улучшению реализации технологии ASLR (Address space layout randomization) для защиты от некоторых видов атак, манипулирующих переполнением буфера. Устранена проблема, мешающая использованию ASLR в сборках для архитектуры ARM. Добавлен API, позволяющий отключать ASLR во время отладки. Внесены изменения, повышающие производительность ASLR. Максимальный размер рандомизированных данных повышен до 20 битов, по умолчанию установлено значение в 14 битов.
- Для работы над улучшением механизмов защиты FreeBSD авторами патчей ASLR инициирован проект HardenedBSD, в котором будут развиваться новые технологии и по мере их готовности интегрироваться во FreeBSD. Кроме ASLR проект развивает такие возможности, как SEGVGUARD, secfw, добавление вызовов arc4random и getentropy, поддержку механизма SMAP (Intel Supervisor Mode Access Prevention), повышение защищённости mprotect, PTrace, mmap(MAP_32BIT) и procfs/linprocfs.
- Представлен проект по добавлению в ядро FreeBSD средств для выполнения в режиме паравиртуализации Xen на системах с архитектурой AMD64. В настоящее время проект находится на стадии формирования рабочего прототипа и доступен для тестирования через ветку projects/amd64_xen_pv.
- Продолжается работа по улучшению реализации гипервизора BHyVe, изначально разработанного компанией NetApp и поставляемого в базовом составе FreeBSD 10. Для работы BHyVe требуется система с процессором Intel, поддерживающим аппаратные средства виртуализации VT-x и EPT (Extended Page Tables). Из возможностей можно отметить проброс PCI-устройств, доступ к содержимому виртуальной машины через специальное блочное устройство, возможность назначения нескольких CPU гостевой системе. В качестве гостевых систем могут запускаться системы для которых имеются драйверы VirtIO для паравиртуализации ввода/вывода, в том числе различные версии FreeBSD, OpenBSD, NetBSD и системы GNU/Linux (CentOS, Debian, Ubuntu, openSUSE).
За отчётный период в гипервизор bhyve добавлена поддержка гостевых систем Linux i386/x64, OpenBSD i386/amd6 и NetBSD amd64, реализована эмуляция дополнительных инструкций, в утилиту bhyvectl добавлена команда для сброса/выключения гостевой системы, возможность установки SMBIOS UUID из командной строки, улучшена обработка ошибок AHCI, содержимое памяти гостевой ОС исключено по умолчанию из core-дампов, возможность привязки vCPU к ядрам CPU хост-системы, добавлена эмуляция Virtio RNG, в Handbook добавлена глава по использованию bhyve. Из планов на будущее можно отметить live-миграцию, поддержку virtio-scsi, эмуляцию сетевых адаптеров Intel 82580 и e1000, поддержку Netmap, возможность запуска bhyve без прав root, добавление поддержки образов в форматах VMDK, VHD и QCOW2, трансляцию вывода через VNC, поддержка приостановки виртуальной машины (Suspend/resume), возможность вложенного запуска виртуальных машин (bhyve внутри гостевой системы), поддержка архитектур ARM, MIPS и PPC.
- Во фреймворк OpenCrypto добавлена поддержка режимов шифрования AES-CTR и AES-GCM с задействованием средств аппаратного ускорения с использованием инструкций AES-NI, доступных в современных процессорах Intel. В дальнейшем ожидается обеспечение поддержку указанных режимов в IPSec, что позволит использовать решения на базе FreeBSD для организации работы высокоскоростных каналов шифрованной связи на обычном оборудовании. Например, новый модуль AES-GCM обеспечит шифрование со скоростью порядка одного гигабайта данных в секунду на одном ядре современного 64-разрядного CPU Intel.
- Проведена работа по устранению ошибок и наращиванию функциональности отладчика LLDB, развиваемого проектом LLVM. LLDB пока не собирается по умолчанию и требует отдельной сборки с указанием "WITH_LLDB=" в src.conf. После обновления системного Clang до выпуска 3.5 намечен перенос во FreeBSD свежего снапшота LLDB. Представлен прототип с реализацией отладки ядра для архитектуры amd64, который пока не готов для включения в состав FreeBSD, но выступит в качестве основы для дальнейшего развития средств отладки ядра. Из планов на будущее отмечается добавление LLDB в порты, реализация совместимого с gdb протокола удалённой отладки, обеспечение поддержки отладки ядра и включение по умолчанию в базовую систему для поддерживаемых архитектур.
- Для FreeBSD портирована развиваемая проектом LLVM система выявления проблем с распределением памяти Asan (LLVM address sanitizer), позволяющая находить такие ошибки как обращение к буферу после его освобождения и переполнения буфера. Организован процесс тестирования ветки FreeBSD stable/10 с использованием Asan. Для использования проверки на этапе выполнения приложений добавлен специальный sysctl kern.proc_vmmap_skip_resident_count, который для работы Asan должен быть установлен в 1. Аналогичная работа также проводится для добавления поддержки системы Tsan (LLVM thread sanitizer), которая позволяет выявлять условия гонки при доступе к данным в многопоточных программах.
- Началась работа по реализации для архитектуры amd64 вариантов функций системной библиотеки libc, в которых используются оптимизации с использованием инструкций SSE/AVX. В настоящее время подобные оптимизации добавлены в функции memcpy, memset и strlen. Перенос данных оптимизаций в libc ожидается после завершения тестирования и проведения оценки производительности на реальных нагрузках.
- Сетевая подсистема
- В компании Microsoft подтверждена возможность включения реализации протокола DCTCP (Data Center TCP) в состав FreeBSD.
- Для нового нативного стека iSCSI, работающего на уровне ядра и содержащего реализации iSCSI Target и iSCSI Initiator, представлена возможность выноса выполнения некоторых операций на плечи сетевых адаптеров (PDU Offload). В настоящее время подобная возможность обеспечена для 10- и 40-гигабитных Ethernet-адаптеров Chelsio T4 и T5. Для упрощения поддержки других карт представлен независящий от оборудования offload API. Наработки планируется включить в состав выпуска FreeBSD 10.2.
- Системы хранения и файловые системы
- Доведена до готовности реализация файловой системы autofs и связанного с ней демона automountd для организации автоматического монтирования ФС при попытке обращения к связанным с ними разделам. Система автомонтирования реализована виде, близком к подобным подсистемам Linux, OS X и Solaris, для обеспечения совместимости на уровне формата файлов маппинга. Поддерживается интеграция с LDAP. Реализация системы автоматического монтирования уже принята в ветки 11-CURRENT и 10-STABLE, и будет поставляться в составе выпуска FreeBSD 10.1.
- В подсистеме CAM Target Layer (CTL), обеспечивающей эмуляцию дисковых и процессорных устройств, через которую реализован сервер iSCSI, добавлена поддержка механизмов ускорения доступа к хранилищам VMWare VAAI и Microsoft ODX. Предлагаемые указанными механизмами SCSI-команды (XCOPY, UNMAP, WRITE SAME и т.п.) позволяют обойти ограничения пропускной способности сети и увеличить эффективность выполнения крупных операций с хранилищами, такими как создание, копирование и удаление больших файлов, а также их заполнение нулями. Улучшения уже приняты в состав FreeBSD HEAD и stable/10, и будут включены в состав выпусков FreeBSD 10.1 и FreeNAS 9.2.1.8 / 9.3.
- Выпущена десятая сборка (10.1) проекта ZFSguru, в рамках которого на базе FreeBSD развивается серверная редакция FreeBSD, ориентированная на создание сетевых хранилищ с использованием файловой системы ZFS. В отличие от FreeNAS, в ZFSguru используется полноценная, не урезанная, базовая система FreeBSD, что даёт возможность опытным пользователям развернуть любые дополнительные сервисы. Для новичков в ZFSguru подготовлен web-интерфейс, который позволяет быстро создавать нужные конфигурации и управлять ZFS-хранилищем, не имея углублённых знаний.
Сразу после установки, помимо базовой системы FreeBSD, из коробки становятся доступны web-интерфейс и сервис для доступа к хранилищу пользователей Windows, построенный на базе Samba. Дополнительно могут быть установлены другие расширенные сервисы, такие как экспорт разделов по NFS. В новом выпуске подготовлена реализация сервера для разработки приложений на основе системы GitLab, улучшена совместимость web-интерфейса с web-браузерами. В будущем выпуске планируется добавить Migration Manager для сохранения и восстановления снапшотов ФС, организации процесса обновления дистрибутива путём замены базового образа с сохранением настроек, резервного копирования настроек и клонирования конфигураций.
- Поддержка оборудования
- Выпущено обновление драйвера i915kms для графических карт Intel, которое основано на свежем среде кодовой базы драйвера для Linux. Код GEM I/O ioctl изменён для большего соответствия структуре кода Linux, что должно упростить синхронизацию с будущими выпусками драйвера. Не вся функциональность пока реализована, например, из нерешённых проблем отмечается организация работы чипами Intel Haswell в Mesa.
- Продолжено развитие драйвера для устройств с интерфейсом SDIO (Secure Digital I/O), позволяющего подключать периферийные устройства через стандартный контроллер для SD-карт. Среди устройств с интерфейсом SDIO на рынке присутствуют адаптеры Bluetooth и WiFi, камеры, устройства чтения отпечатков пальцев, сканеры штрихкодов и т.п. Драйвер выполнен в виде дополнения для существующей шины MMC, расширенной поддержкой специфичных для SDIO возможностей. На текущем этапе работа сосредоточена на переработке существующего стека MMC/SD для использования фреймворка CAM, что позволит задействовать уже хорошо проверенную модель организации блокировок и средства для отладки. Первый вариант нового драйвера уже загружен в систему рецензирования кода. В настоящее время поддерживается только драйвер ti_sdhci, используемый для плат BeagleBone Black.
- Возобновлено приостановленное ранее портирования для плат IFC6410, основанных на SoC Qualcomm Snapdragon S4 c CPU Krait, который позиционируется как платформа для смартфонов, планшетов и умных устройств. CPU Krait во многом напоминает процессор ARM Cortex-A15 и также предоставляет набор инструкций ARMv7.
- Продолжена работа по обеспечению поддержки 64-разрядной архитектуры ARM64 (AARCH64). В отчётном периоде началась работа над выполнением кода в пространстве пользователя, реализована необходимая для обработки пользовательских процессов функциональность в ядре. Пока наблюдаются проблемы со сборкой приложений с использованием Clang, но их планируется решить после импорта clang 3.5. Добавлена начальная поддержка драйверов устройств. Переработана реализация pmap, которая теперь основана на коде, написанном для архитектуры amd64. В ближайшем будущем планируется обеспечить поддержку работы многопользовательского окружения, возможность использования динамических библиотек и приступить к тестированию на реальном оборудовании (сейчас используется эмулятор).
- Приложения и система портов
- Дерево портов FreeBSD держится на уровне 24 тысяч портов, число незакрытых PR снижено до уровня 1400. За отчётный период закрыто около 2 тысяч PR и внесено более 9 тысяч изменений. Принято пять новых коммитеров портов. Система портов отметила своё 20-летие.
- Реализовано основанное на QEMU сборочное окружение, которое может запускаться в пространстве пользователя и позволяет эмулировать кросс-сборку пакетов использованием сборщика для amd64. Подобное окружение может решить проблему с выделением оборудования для сборки пакетов для вторичных архитектур (для i386 и amd64 выделен отдельный сервер, для остальных архитектур такого оборудования нет). Текущим методом сборки пакетов пока остаётся ports-mgmt/poudriere-devel, новая система пока тестируется для ARMv6.
- Продолжена работа по рефакторингу и упрощению сопровождения портов, связанных с языком программирования Python (lang/python*), например, прекращена поддержка режима easy_install, а компоненты bsd.python.mk в инфраструктуре портов заменены на более современный формат USES. Ветка Python 2 обновлена до выпуска Python 2.7.8, а порт devel/py-setuptools до версии 5.5.1. С появлением пакетного менеджера pkg 1.3 решена проблема с установкой пакетов и модулей для разных версий Python, что позволило избавиться от дублирования одинаковых портов для Python 2 и Python 3.
- Порты с пользовательским окружением MATE обновлены до выпуска 1.8. Используемая в GNOME библиотека Cairo обновлена до выпуска 1.12, что позволило начать добавление в порты GNOME 3.12. Уже ведётся работа по обеспечению работы во FreeBSD экспериментальной ветки GNOME 3.15, стабильный выпуск 3.14 будет пропущен.
- Проведена адаптация новых версий десктоп-оболочки KDE и фреймворка Qt для FreeBSD. В порты помещены релизы KDE 4.13.3, 4.14.0 и 4.14.1 (в area51), KDE Telepathy 0.8.0 (в area51), DigiKam 4.2.0 (в area51), CMake 3.0.1 и 3.0.2, PyQt 4.11.1, SIP 4.16.2, QScintilla 2.8.3. Началась работа по обновлению порта Qt5 до версии 5.3.
- Обновлены порты, связанные с десктоп-окружением Xfce, в том числе добавлены новые версии приложений x11-wm/xfce4-session 4.11.0, deskutils/xfce4-xkb-plugin 0.7.0, devel/xfce4-dev-tools 4.11.0, misc/xfce4-appfinder 4.11.0, multimedia/xfce4-parole 0.6.1/0.7.0, sysutils/garcon 0.3.0, sysutils/xfce4-settings 4.11.3, x11/libxfce4menu 4.11.1, x11/libxfce4util 4.11.0, x11-wm/xfce4-desktop 4.11.8, x11-wm/xfce4-panel 4.11.1. Добавлены новые порты deskutils/xfce4-volumed-pulse 0.2.0 и x11/xfce4-dashboard 0.2.3/0.3.2. В дальнейшем ожидается обеспечение одновременной поддержки GTK2 и GTK3 (по умолчанию GTK2), перевод портов на фреймворк USES и задействование похожей на GNOME темы оформления.
- Новый графический стек (WITH_NEW_XORG), основанный на X server 1.12, libdrm 2.4.52 и Mesa 9.1, активирован для всех поддерживаемых архитектур. Проблемы могут наблюдаться для пользователей GPU Intel, продолжающих использовать выпуски FreeBSD 8.X/9.0, в которых отсутствует поддержка KMS, а UMS-драйвер xf86-video-intel не работает с x-сервером 1.12. Для таких пользователей рекомендуется использовать драйвер xf86-video-vesa. Пользователи GPU AMD, системы которых не поддерживают KMS-драйвер radeon (появился в FreeBSD 9.3), могут использовать USM-драйвер xf86-video-ati-ums 6.14.6, ещё работающий с x-сервером 1.12. Старый графический стек (xserver 1.7, Mesa 7.6) будет удалён при следующем обновлении портов.
Во FreeBSD HEAD и 10.1 интегрирован обновлённый вариант kms-драйвера i915, в котором появилась поддержка аппаратных контекстов, что позволяет перевести на использование новой версии Mesa портов libglapi, libGL, dri, libEGL и libglesv2.
- Разное
- Рассматривается возможность завершения периода тестовой эксплуатации Git-репозитория git-beta.freebsd.org с его переводом в разряд официальных служб и переименованием в git.freebsd.org.
- Проведена унификации конфигурации и программной начинки машин, входящих в кластер, обслуживающий инфраструктуру FreeBSD, что позволило задействовать единый механизм бинарных обновлений. Подготовлен централизованный узел сборки сторонних бинарных пакетов, используемых в инфраструктуре FreeBSD. Для оценки качестве собранных пакетов задействован порт ports-mgmt/poudriere-devel.
- Официальный форум проекта forums.freebsd.org переведён c phpBB проприетарный на движок XenForo. В качестве причины миграции называется отсутствие в phpBB некоторых необходимых возможностей, к которым привыкли пользователи форума (в прошлом году из-за проблем с безопасностью проект перешёл с vBulletin на phpBB);
- В Handbook добавлен раздел, посвящённый файловой системе ZFS, а также страница по использованию утилиты ezjail для управления jail-окружениями.
- Отмечается прогресс в разработке порта Debian GNU/kFreeBSD, сочетающего в себе ядро FreeBSD с пользовательским окружением на базе glibc и GNU-утилит. Несмотря на то, что kFreeBSD грозит исключение из числа официально поддерживаемых архитектур Debian Jessie, разработчики надеются, что они смогут выполнить условия нахождения Debian GNU/kFreeBSD в числе официально поддерживаемых архитектур. Для Debian GNU/kFreeBSD на архитектурах amd64 и i386 обеспечена сборка около 90% всех пакетов из архива Debian. Также ведётся работа по обеспечению запуска Debian GNU/kFreeBSD внутри jail-окружений FreeBSD и наоборот. В связи с миграцией Debian на systemd, планируется перевести Debian GNU/kFreeBSD с системы инициализации SysV-init на OpenRC. Из-за привязки к systemd в Debian GNU/kFreeBSD не ожидается поддержки GNOME 3.14, но будет обеспечена работа окружений Xfce, KDE, LXDE и MATE.