Отчёт о развитии 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;
- В порты добавлена система сбора информации о трафике Maltrail, позволяющая создавать ловушки для вредоносных сетевых запросов (проверяются IP и домены из чёрных списков) и отправлять сведения о выявленной активности на централизованный сервер для последующей блокировки или анализа попыток совершения атак;
- В порты добавлена платформ для выявления атак, анализа логов и отслеживания целостности файлов Wazuh (форк 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-current now has a Linux compatible copy_file_range (2) syscall that will invoke this Copy operation on NFSv4.2 mounts. There is also support for MAC labelling, but it requires changes to the RPCSEC_GSS implementation to add V3 support and, as such, may not happen soon. В настоящее время для 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_ADVLOCK, обеспечена возможность прерывания операций FUSE, добавлена поддержка неименованных каналов и unix-сокетов в fusefs, появилась возможность использования kqueue для /dev/fuse, разрешено обновление параметров монтирования через «mount -u», добавлена поддержка экспорта fusefs через NFS, реализован учёт RLIMIT_FSIZE, добавлены флаги FOPEN_KEEP_CACHE и 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