Справаздача аб развіцці 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 ужо рэалізаваная базавая падтрымка аперацый 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_FSIZE і 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;