Отчёт о развитии FreeBSD за первый квартал 2020 года

Опубликован отчёт о развитии проекта FreeBSD с января по март 2020 года. Из изменений можно отметить:

  • Общие и системные вопросы
    • Из дерева исходных текстов FreeBSD-CURRENT удалён набор компиляторов GCC, а также неиспользуемые утилиты gperf, gcov и gtc (компилятор devicetree). Все платформы, не поддерживающие Clang, переведены на использование внешнего сборочного инструментария, устанавливаемого из портов. В базовой системе поставлялся устаревший выпуск GCC 4.2.1, а интеграция более новых версий была невозможна из-за перехода 4.2.2 на лицензию GPLv3, которая была признана неприемлемой для базовых компонентов FreeBSD. Актуальные выпуски GCC, включая GCC 9, как и раньше, можно установить из пакетов и портов.
    • В инфраструктуре эмуляции окружения Linux (Linuxulator) добавлена поддержка системного вызова sendfile, режима TCP_CORK (требуется для nginx), флага MAP_32BIT (решает проблему с запуском пакетов с Mono из Ubuntu Bionic). Решены проблемы с резовингом DNS при использовании glibc новее 2.30 (например из CentOS 8). В инфраструктуре непрерывной интеграции обеспечен запуск заданий для запуска LTP (Linux Testing Project) под управлением Linuxulator для тестирования улучшений, вносимых в код для поддержки Linux. Около 400 тестов завершаются ошибкой и требуют исправления (некоторые ошибки вызваны ложными срабатываниями, некоторые требуют тривиальных исправлений, но если и такие, для устранения которых нужно добавлять поддержку новых системных вызовов). Проведена работа по чистке кода Linuxulator и упрощению отладки. Подготовлены, но ещё не рецензированы, патчи с поддержкой расширенных атрибутов и системного вызова fexecve.
    • Продолжаются заседания рабочей группы, созданной для проведения миграции исходных текстов из централизованной системы управления исходными текстами Subversion в децентрализованную систему Git. Отчёт с предложениями по миграции находится в процессе подготовки.
    • В rtld (runtime linker) улучшен режим прямого исполнения (»/libexec/ld-elf.so.1 {путь} {аргументы}»).
    • Продолжает развиваться проект по fuzzing-тестированию ядра FreeBSD с использованием системы syzkaller. За отчётный период устранены проблемы в сетевом стеке и коде для работы с таблицами файловых дескрипторов, выявленные при помощи syzkaller. По следам диагностики ошибок в стек SCTP добавлены изменения, упрощающие отладку. В набор stress2 добавлены правила для выявления возможных регрессий. Добавлена поддержка fuzzing-тестирования новых системных вызовов, включая copy_file_range (), __realpathat () и вызовы подсистемы Capsicum. Продолжается работа по охвату fuzzing-тестированием слоя эмуляции Linux. Проведён разбор и устранение ошибок, отмеченных в свежих отчётах Coverity Scan.
    • В системе непрерывной интеграции осуществлён переход к выполнению всех тестов ветки head только с использованием clang/lld. При тестировании для RISC-V обеспечено формирование полного дискового образа для запуска тестов в QEMU с использованием OpenSBI. Добавлены новые задания для тестирования образов и виртуальных машин powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • Ведётся работа по переносу тестового набора Kyua из портов (devel/kyua) в базовую систему для решения проблем (пакеты ставятся очень медленно), возникающих при использовании Kyua на новых архитектурах, разработка для которых ведётся с использованием эмулятора или FPGA. Интеграция в базовую систему существенно упростит тестирование встраиваемых платформ и сопряжение с системами непрерывной интеграции.
    • Стартовал проект по оптимизации производительности драйвера сетевых мостов if_bridge, который использует один mutex для блокировки внутренних данных, что не позволяет добиться желаемой производительности на системах с большим числом jail-окружений или виртуальных машин, объединённых в одну сеть. На данном этапе в код добавлены тесты, чтобы предотвратить возникновение регрессий в процессе модернизации работы с блокировками. Рассматривается возможность использования ConcurrencyKit для распараллеливания обработчиков передачи данных (bridge_input (), bridge_output (), bridge_forward (), …).
    • Добавлен новый системный вызов sigfastblock, позволяющий потоку определить блок памяти для быстрого обработчика сигналов с целью повышения производительности обработчиков исключений.
    • В ядре добавлена поддержка атомартных инструкций LSE (Large System Extension), поддерживаемых системами ARMv8.1. Указанные инструкции необходимы для повышения производительности при работе на платах Cavium ThunderX2 и AWS Graviton 2. Добавленные изменения определяют наличие поддержки LSE и динамически включают реализацию atomic на их основе. При тестировании использование LSE позволило на 15% снизить процессорное время, расходуемое при сборке ядра.
    • Проведена оптимизация производительности и расширена функциональность инструментария для исполняемых файлов в формате ELF. Добавлена поддержка кэширования отладочной информации DWARF, решены проблемы в утилитах elfcopy/objcopy, добавлена обработка DW_AT_ranges, в readelf реализована возможность декодирования флагов PROTMAX_DISABLE, STKGAP_DISABLE и WXNEEDED, а также Xen и GNU Build-ID.
  • Безопасность
    • Для улучшения работы FreeBSD в облачных окружениях Azure ведётся работа по обеспечению поддержки механизма HyperV Socket, позволяющего использовать интерфейс сокетов для взаимодействия гостевой системы с хост-окружением без настройки сети.
    • Ведётся работа по обеспечению повторяемых сборок FreeBSD, позволяющих удостовериться, что исполняемые файлы компонентов системы собраны именно из заявленных исходных текстов и не содержит посторонних изменений.
    • В утилиту elfctl добавлена возможность управления включением дополнительных механизмов защиты (ASLR, PROT_MAX, stack gap, W+X mapping) на уровне отдельных процессов
  • Системы хранения и файловые системы
    • Ведётся работа по реализации возможности работы NFS поверх шифрованного канала связи на базе TLS 1.3, вместо использования Kerberos (режим sec=krb5p), который ограничивается шифрованием только RPC-сообщений и реализуется только программно. Новая реализация использует предоставляемый ядром стек TLS, позволяющий задействовать средства аппаратного ускорения. Код NFS поверх TLS уже почти готов для тестирования, но ещё требует проведения работы по поддержке подписанных клиентских сертификатов и адаптации TLS-стека ядра для отправки данных NFS (патчи для приёма уже готовы).
  • Поддержка оборудования
    • Ведётся работа по добавлению поддержки китайских x86 CPU Hygon на основе технологий AMD;
    • В рамках CheriBSD, ответвления от FreeBSD для исследовательской процессорной архитектуры CHERI (Capability Hardware Enhanced RISC Instructions), продолжается реализация поддержки процессора ARM Morello, который будет поддерживать систему управления доступом к памяти CHERI, основанную на модели защиты проекта Capsicum. Чип Morello планируют выпустить в 2021 году. В настоящее время работа сосредоточена на добавлении поддержки платформы Arm Neoverse N1, лежащей в основе Morello. Представлен начальный порт CheriBSD для архитектуры RISC-V. Продолжается развитие CheriBSD для эталонного прототипа CHERI на базе архитектуры MIPS64.
    • Продолжено портирование FreeBSD для 64-разрядного SoC NXP LS1046A на базе процессора ARMv8 Cortex-A72 с интегрированным движком ускорения обработки сетевых пакетов, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 и USB 3.0. В настоящее время для передачи в основной состав FreeBSD готовятся драйверы QorIQ и LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI.
    • До версии 2.1.1 обновлён драйвер ena с поддержкой второго поколения сетевых адаптеров ENAv2 (Elastic Network Adapter), используемых в инфраструктуре Elastic Compute Cloud (EC2) для организации связи между узлами EC2 на скоростях до 25 Gb/s. Готовится обновление до ENA 2.2.0.
    • Продолжается усовершенствование порта FreeBSD для платформы powerpc64. Основное внимание уделяется обеспечению качественной работы на системах с процессорами IBM POWER8 и POWER9. За отчётный период осуществлён перевод FreeBSD-CURRENT на использование компилятора LLVM/Clang 10.0 и компоновщика lld вместо GCC. По умолчанию для систем powerpc64 задействован ELFv2 ABI, а поддержка ELFv1 ABI прекращена. Во FreeBSD-STABLE пока остаётся gcc 4.2.1. Решены проблемы с драйверами virtio, aacraid и ixl. На системах powerpc64 обеспечена возможность запуска QEMU без поддержки Huge Pages.
    • Продолжена работа по реализации поддержки архитектуры RISC-V. В текущем виде FreeBSD уже успешно загружается на плате SiFive Hifive Unleashed, для которой подготовлены драйверы UART, SPI и PRCI, поддерживает прошивку OpenSBI и SBI 0.2. За отчётный период работа была сосредоточена на миграции с GCC на clang и lld.
  • Приложения и система портов
    • Коллекция портов FreeBSD преодолела рубеж в 39 тысяч портов, число незакрытых PR немного превышает 2400, из которых 640 PR ещё не разобраны. За отчётный период внесено 8146 изменений от 173 разработчиков. Права коммиттера получили четыре новых участника (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore). Добавлен флаг USES=qca и удалён флаг USES=zope (из-за несовместимости с Python 3). Ведётся работа по удалению Python 2.7 из дерева портов — все завязанные на Python 2 порты должны быть портированы на Python 3 или будут удалены. Пакетный менеджер pkg обновлён до выпуска 1.13.2.
    • Обновлены компоненты графического стека и порты, связанные с xorg. Cервер X.org обновлён до версии 1.20.8 (ранее поставлялась ветка 1.18), что позволило перевести FreeBSD по умолчанию на использование бэкенда udev/evdev для обработки устройств ввода. Пакет Mesa переведён по умолчанию на использование расширения DRI3 вместо DRI2. Ведётся работа по поддержанию в актуальном состоянии графических драйверов, стека устройств ввода и компонентов drm-kmod (порт, обеспечивающий работу DRM-модулей amdgpu, i915 и radeon, используя фреймворк linuxkpi для совместимости с Direct Rendering Manager ядра Linux).
    • Рабочий стол KDE Plasma, KDE Frameworks, KDE Applications и Qt поддерживаются в актуальном состоянии и обновлены до самых свежих выпусков. В порты добавлено новое приложение kstars (звёздный атлас).
    • Проведена работа по устранению регрессивных изменений в оконном менеджере xfwm4, всплывших после обновления Xfce до версии 4.14 (например, появилась артефакты при декорировании окон).
    • Порт с Wine обновлён до выпуска Wine 5.0 (ранее предлагался 4.0.3).
    • Начиная с версии 1.14 в компиляторе языка Go добавлена официальная поддержка архитектуры ARM64 для FreeBSD 12.0.
    • OpenSSH в базовой системе обновлён до выпуска 7.9p1.
    • Реализована и размещена в портах (devel/libsysctlmibinfo2) библиотека sysctlmibinfo2, предоставляющая API для доступа к sysctl MIB и выполняющая трансляцию имён sysctl в идентификаторы объектов (OID).
    • Сформировано обновление дистрибутива NomadBSD 1.3.1, представляющего собой редакцию FreeBSD, адаптированную для использования в качестве переносного рабочего стола, загружаемого с USB-накопителя. Графическое окружение основано на оконном менеджере Openbox. Для монтирования накопителей применяется DSBMD (поддерживается монтирование CD9660, FAT, HFS+, NTFS, Ext2/¾), для настройки беспроводной сети — wifimgr, а для управления громкостью — DSBMixer.
    • Началась работа по написанию полноценной документации для менеджера jail-окружений pot. Готовится к выпуску pot 0.11.0, в котором появятся средства управления сетевым стеком.



Источник: http://www.opennet.ru/opennews/art.shtml? num=52727

Полный текст статьи читайте на OpenNet