Звіт про розвиток FreeBSD за другий квартал 2019 року

Опубліковано звіт про розвиток проекту FreeBSD з квітня до червня 2019 року. Зі змін можна відзначити:

  • Загальні та системні питання
    • Core team ухвалив рішення щодо заснування робочої групи для вивчення можливості перекладу вихідних текстів із централізованої системи управління вихідними текстами Subversion у децентралізовану систему Git.
    • Проведено fuzzing-тестування ядра FreeBSD із використанням системи syzkaller і виправлено ряд виявлених у своїй помилок. Додано прошарок для fuzzing-тестування бібліотек для сумісності з 32-розрядним оточенням на системах з 64-розрядним ядром. Реалізовано можливість запуску syzkaller у віртуальних машинах на базі bhyve. На наступному етапі планується розширити охоплення тестуванням системних викликів, задіяти LLVM sanitizer для перевірки ядра, використовувати netdump для збереження дампів ядра під час крахів під час fuzzing-тестування тощо.
    • Почалася робота з оновлення реалізації zlib лише на рівні ядра. Для доступу ядра до коду zlib каталог contrib/zlib перейменований на sys/contrib/zlib, також перейменований заголовний файл crc.h для запобігання конфлікту з zlib/crc.h. Проведено чищення застарілого коду, залежного від zlib та inflate. Далі планується забезпечити можливість складання ядра одночасно зі старим та новим zlib для поступового перекладу на нову версію функцій, що використовують стиснення;
    • Оновлено інфраструктуру емуляції оточення Linux (Linuxulator). Розширено підтримку налагоджувальних інструментів Linux, таких як утиліта strace. У порти доданий пакет linux-c7-strace, який може використовуватися для трасування виконуваних файлів Linux замість штатних утиліт truss і ktrace, які поки що не можуть декодувати деякі специфічні для Linux прапори та структури. Крім того, доданий пакет linux-ltp з файлами Linux Test Project, що виконуються, і вирішені проблеми із сумісністю з виконуваними файлами, скомпонованими з новими версіями glibc;
    • Реалізація операцій відкладеного чищення прив'язок до фізичних сторінок пам'яті (delayed invalidation) у механізмі pmap переведено використання алгоритму обробки черги, працюючого без блокувань, що дозволило вирішити проблеми з масштабируемостью під час виконання великої кількості паралельних операцій unmap;
    • Змінено механізм блокування vnode в процесі виконання системних викликів сімейства execve(), що дозволило домогтися підвищення ефективності роботи при одночасному виконанні execve() для одного і того ж файлу (наприклад, при виконанні операцій складання з розпаралелювання запуску компілятора);
  • Безпека
    • У гіпервізорі bhyve продовжено удосконалення підтримки Live-міграції гостьових оточень з одного хоста на інший та функціональності Save/Restore, що дозволяє заморозити гостьову систему зі збереженням стану у файл, а потім відновити виконання.
    • Через використання бібліотеки libvdsk в bhyve додано підтримку дискових образів у форматі QCOW2. Для роботи потрібна установка
      спеціально модифікованою версії bhyve, яка перекладена використання обробників файлових операцій з урахуванням libvdsk. За звітний період у libvdsk також проведено роботу зі спрощення інтеграції підтримки нових форматів, покращено продуктивність читання та запису, додано підтримку Copy-On-Write. З завдань, що залишилися відзначається інтеграція libvdsk в основний склад bhyve;

    • До портів додано систему збору інформації про трафік
      Малтрейл, що дозволяє створювати пастки для шкідливих мережевих запитів (перевіряються IP та домени з чорних списків) та надсилати відомості про виявлену активність на централізований сервер для подальшого блокування або аналізу спроб скоєння атак;

    • До портів додано платформи для виявлення атак, аналізу логів та відстеження цілісності файлів. Вазух (Форк Ossec з підтримкою інтеграції з ELK-Stack);
  • Мережева підсистема
    • Оновлено драйвер ena з підтримкою другого покоління мережевих адаптерів ENAv2 (Elastic Network Adapter), які використовуються в інфраструктурі Elastic Compute Cloud (EC2) для організації зв'язку між вузлами EC2 на швидкості до 25 Gb/s. До драйвера ena додано підтримку NETMAP.
    • У FreeBSD HEAD прийнято новий стек MMC/SD, заснований на фреймворку CAM і що дозволяє підключати пристрої з інтерфейсом SDIO (Secure Digital I/O). Наприклад, SDIO використовується у WiFi та Bluetooth модулях для багатьох плат, таких як Raspberry Pi 3. Новий стек також дозволяє використовувати інтерфейс CAM для відправки SD-команд із додатків у просторі користувача, що дає можливість створювати драйвери пристроїв, що працюють на рівні користувача. Почалася робота зі створення драйверів для бездротових чіпів Broadcom, що працюють у режимі FullMAC (на стороні чіпа виконується подібність своєї операційної системи з реалізацією свого бездротового стека 802.11);
    • Ведеться робота з реалізації NFSv4.2 (RFC-7862) для FreeBSD. У новій версії NFS додано підтримку функцій posix_fadvise, posix_fallocate, режимів SEEKHOLE/SEEKDATA в lseek, операції локального копіювання частин файлу на сервері (без передачі клієнту).

      В даний час для FreeBSD вже реалізована базова підтримка операцій LayoutError, IOAdvise, Allocate та Copy. Залишається реалізувати операцію Seek, необхідну використання lseek(SEEKHOLE/SEEKDATA) з NFS. Підтримку NFSv4.2 планується включити до FreeBSD 13;

  • Системи зберігання та файлові системи
    • Наближається до завершення проект з переробки драйвера підсистеми FUSE (File system in USErspace), що дозволяє створювати реалізацію файлових систем у просторі користувача. Спочатку драйвер, що поставляється, застарів і містить багато помилок. В рамках проекту з модернізації драйвера реалізовано підтримку протоколу FUSE 7.23 (раніше підтримувалася версія 7.8, випущена 11 років тому), додано код для перевірки прав доступу на стороні ядра («-o default_permissions»), додано виклики VOP_MKNOD, VOP_BMAP та VOP переривання операцій FUSE, додано підтримку неіменованих каналів і unix-сокетів у fusefs, з'явилася можливість використання kqueue для /dev/fuse, дозволено оновлення параметрів монтування через «mount -u», додано підтримку експорту fusefs через NFS, реалізовано облік RLIMIT_EPSIEN, додано та FUSE_ASYNC_READ, внесено значні оптимізації продуктивності та покращено організацію кешування;
    • У код витіснення сторінок пам'яті в розділ підкачки (swap pager) додано підтримку операції BIO_DELETE, яка дозволяє використовувати команду TRIM в процесі видалення блоків з SSD-накопичувачів для підвищення терміну їх служби.
  • Підтримка обладнання
    • Продовжено роботу з реалізації підтримки ARM64 SoC Broadcom BCM5871X з процесорами ARMv8 Cortex-A57, націленими на використання у маршрутизаторах, шлюзах та мережевих сховищах. За звітний період покращено підтримку внутрішніх та зовнішніх шин iProc PCIe, додано підтримку BNXT Ethernet, ведеться робота щодо задіяння вбудованого криптодвигуна для прискорення IPsec. Інтеграція коду у гілку HEAD очікується у другому півріччі;
    • Почалася робота над підтримкою 64-розрядного SoC NXP LS1046A на базі процесора ARMv8 Cortex-A72 з інтегрованим двигуном прискорення обробки мережних пакетів, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 та USB 3.0. Вже реалізовано підтримку базової платформи (multi-user SMP) та SATA 3.0. У розробці підтримка USB 3.0, SD/MMC та I2C. У планах підтримка Ethernet, GPIO та QSPI. Завершення роботи та включення у гілку HEAD очікується у 4 кварталі 2019 року.
    • Оновлено драйвери mlx5en та mlx5ib для Ethernet- та InfiniBand-адаптерів Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] та ConnectX-6 [Dx]. Додано підтримку адаптерів Mellanox Socket Direct (ConnectX-6), що дозволяють досягти пропускної здатності до 200Gb/s на шині PCIe Gen 3.0. Для багатоядерних чіпів BlueField додана підтримка драйвера RShim. До портів додано пакет mstflint з набором діагностичних утиліт для адаптерів Mellanox;
  • Програми та система портів
    • Оновлено компоненти графічного стеку. Виконано портування драйвера drm.ko (Direct Rendering Manager) з ядра Linux 5.0. Цей драйвер розглядається як експериментальний і доданий до дерева портів як graphics/drm-devel-kmod. Оскільки драйвер використовує оновлений фреймворк Linux KPI для сумісності з DRM API ядра Linux, для роботи потрібно FreeBSD CURRENT. З Linux також портовано drm-драйвер vboxvideo.ko для віртуального GPU VirtualBox. Пакет Mesa оновлено до випуску 18.3.2 та переведено на використання LLVM з порту devel/llvm80 замість devel/llvm60.
    • Дерево портів FreeBSD подолало кордон у 37000 портів, кількість незакритих PR тримається на позначці 2146. За звітний період внесено 7837 змін від 172 розробників. Права комітера отримали три нових учасники. Серед значних оновлень версій портів відзначаються: MySQL 5.7, Python 3.6, Ruby 2.5, Samba 4.8, Julia 1.0, Firefox 68.0, Chromium 75.0.3770.100. Всі порти на мові Go переведені на прапор «USES=go». Доданий прапор USES=cabal для пакетного менеджера Cabal, що використовується для коду на Haskell. Увімкнено строгий режим захисту стека. За промовчанням запропоновано версію Python 3.6 замість 2.7.
    • Підготовлено реліз утиліти nsysctl 1.0, що пропонує аналог /sbin/sysctl, який використовує libxo для виведення та надає розширений набір опцій. Nsysctl може застосовуватися для наглядного спостереження станом значень sysctl і подання інформації по об'єктах в структурованому вигляді. Можливий висновок у форматах XML, JSON та HTML;

Джерело: opennet.ru

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