Звіт про розвиток 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 для дослідницької процесорної архітектури ШЕРІ (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.
      Сервер 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/3/4), для налаштування бездротової мережі wifimgr, а для керування гучністю - DSBMixer.
    • Почалася робота з написання повноцінної документації для менеджера jail-оточень горщик. Готується до випуску pot 0.11.0, у якому з'являться засоби управління мережевим стеком.

Джерело: opennet.ru

Додати коментар або відгук