Доклад за развитието на FreeBSD за второто тримесечие на 2019 година

Публикувано Доклад за развитието на проекта FreeBSD от април до юни 2019 година. От промените можем да отбележим:

  • Общи и системни въпроси
    • Ключовият екип взе решение за учредяване на работна група за проучване на възможността за прехвърляне на изходния код от централизирана система за управление на изходния код 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 е реализирана основна поддръжка на операциите 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 се очаква през четвъртото тримесечие на 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster