доклад за развитието на проекта FreeBSD от април до юни 2019 г. От промените могат да се отбележат:
- Общи и системни въпроси
- Ядреният екип е взел решение за формиране на работна група за изследване възможността за прехвърляне на изходните текстове от централизирана система за управление на изходния код Subversion в децентрализирана система Git.
- Проведено е fuzzing тестване на ядрото на FreeBSD с използване на системата и е поправен редица установени грешки. Добавен е слой за 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 с поддръжка на интеграция с );
- Мрежова подсистема
- Обновен е драйверът 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. Интеграцията на кода в основната версия се очаква през второто полугодие.
- Започна работата по поддръжка на 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. Завършването на работата и вклучването в основната версия се очаква през четвърто тримесечие на 2019 година.
- Актуализирани са драйверите mlx5en и mlx5ib за Ethernet и InfiniBand адаптери Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] и ConnectX-6 [Dx]. Добавена е поддръжка за адаптери Mellanox Socket Direct (ConnectX-6), които осигуряват пропускна способност до 200 Gb/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.
- Подготвен е релиз на утилита , предлагаща аналог на /sbin/sysctl, използваща за извеждане и предоставяща разширен набор от опции. Nsysctl може да се използва за визуализиране на състоянието на стойностите sysctl и представяне на информацията за обектите в структурирана форма. Възможен е изход във формати XML, JSON и HTML;
Източник: opennet.ru
