Справаздача аб развіцці FreeBSD за першы квартал 2020 года

Апублікаваны справаздача аб развіцці праекту FreeBSD са студзеня па сакавік 2020 гады. З змен можна адзначыць:

  • Агульныя і сістэмныя пытанні
    • З дрэва зыходных тэкстаў FreeBSD-CURRENT выдалены набор кампілятараў GCC, а таксама невыкарыстоўваныя ўтыліты gperf, gcov і gtc (кампілятар devicetree). Усе платформы, якія не падтрымліваюць Clang, перакладзены на выкарыстанне вонкавага зборачнага інструментара, які ўсталёўваецца з партоў. У базавай сістэме пастаўляўся састарэлы выпуск GCC 4.2.1, а інтэграцыя навейшых версій была немагчымая з-за пераходу 4.2.2 на ліцэнзію GPLv3, якая была прызнаная непрымальнай для базавых кампанентаў FreeBSD. Актуальныя выпускі GCC, у тым ліку GCC 9, па-ранейшаму, можна ўсталяваць з пакетаў і партоў.
    • У інфраструктуры эмуляцыі асяроддзя Linux (Linuxulator) дададзеная падтрымка сістэмнага выкліку sendfile, рэжыму TCP_CORK (патрабуецца для nginx), сцяга MAP_32BIT (вырашае праблему з запускам пакетаў з Mono з Ubuntu Bionic). Вырашаны праблемы з рэзалвінгам DNS пры выкарыстанні glibc навей 2.30 (напрыклад з CentOS 8).
      У інфраструктуры бесперапыннай інтэграцыі забяспечаны запуск заданняў для запуску LTP (Linux Testing Project) пад кіраваннем Linuxulator для тэставання паляпшэнняў, якія ўносяцца ў код для падтрымкі Linux. Каля 400 тэстаў завяршаюцца памылкай і патрабуюць выпраўленні (некаторыя памылкі выкліканыя ілжывымі спрацоўваннямі, некаторыя патрабуюць трывіяльных выпраўленняў, але ёсць і такія, для ўхілення якіх трэба дадаваць падтрымку новых сістэмных выклікаў). Праведзена праца па чыстцы кода Linuxulator і спрашчэнню адладкі. Падрыхтаваны, але яшчэ не рэцэнзаваны, патчы з падтрымкай пашыраных атрыбутаў і сістэмнага выкліку fexecve.

    • Працягваюцца паседжанні працоўнай групы, створанай для правядзення міграцыі зыходных тэкстаў з цэнтралізаванай сістэмы кіравання зыходнымі тэкстамі Subversion у дэцэнтралізаваную сістэму Git. Справаздача з прапановамі па міграцыі знаходзіцца ў працэсе падрыхтоўкі.
    • В rtld (runtime linker) палепшаны рэжым прамога выканання («/libexec/ld-elf.so.1 {шлях} {аргументы}»).
    • Працягвае развівацца праект па fuzzing-тэставанні ядра FreeBSD з выкарыстаннем сістэмы syzkaller. За справаздачны перыяд ухіленыя праблемы ў сеткавым стэку і кодзе для працы з табліцамі файлавых дэскрыптараў, выяўленыя пры дапамозе syzkaller. Па слядах дыягностыкі памылак у стэк SCTP дададзены змены, якія спрашчаюць адладку. У набор stress2 дададзены правілы для выяўлення магчымых рэгрэсій. Дададзена падтрымка fuzzing-тэставанні новых сістэмных выклікаў, уключаючы copy_file_range(), __realpathat() і выклікі падсістэмы Capsicum. Працягваецца праца па ахопе fuzzing-тэставаннем пласта эмуляцыі Linux. Праведзены разбор і ўхіленне памылак, адзначаных у свежых справаздачах Coverity Scan.
    • У сістэме бесперапыннай інтэграцыі ажыццёўлены пераход да выканання ўсіх тэстаў галінкі head толькі з выкарыстаннем clang/lld. Пры тэставанні для RISC-V забяспечана фармаванне поўнай дыскавай выявы для запуску тэстаў у QEMU з выкарыстаннем OpenSBI. Дададзены новыя заданні для тэставання выяў і віртуальных машын powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • Вядзецца праца па пераносе тэставага набору Kyua з портаў (devel/kyua) у базавую сістэму для рашэння праблем (пакеты ставяцца вельмі павольна), якія ўзнікаюць пры выкарыстанні Kyua на новых архітэктурах, распрацоўка для якіх вядзецца з выкарыстаннем эмулятара ці FPGA. Інтэграцыя ў базавую сістэму істотна спросціць тэсціраванне ўбудаваных платформ і спалучэнне з сістэмамі бесперапыннай інтэграцыі.
    • Стартаваў праект па аптымізацыі прадукцыйнасці драйвера сеткавых мастоў if_bridge, які выкарыстоўвае адзін mutex для блакавання ўнутраных дадзеных, што не дазваляе дамагчыся жаданай прадукцыйнасці на сістэмах з вялікай колькасцю jail-акружэнняў або віртуальных машын, аб'яднаных у адну сетку. На дадзеным этапе ў код дабаўлены тэсты, каб прадухіліць узнікненне рэгрэсій у працэсе мадэрнізацыі работы з блакіроўкамі. Разглядаецца магчымасць выкарыстання ConcurrencyKit для распаралельвання апрацоўшчыкаў перадачы даных (bridge_input(), bridge_output(), bridge_forward(), …).
    • Дададзены новы сістэмны выклік sigfastblock, які дазваляе патоку вызначыць блок памяці для хуткага апрацоўшчыка сігналаў з мэтай павышэння прадукцыйнасці апрацоўшчыкаў выключэнняў.
    • У ядры дададзена падтрымка атамартных інструкцый LSE (Large System Extension), якія падтрымліваюцца сістэмамі ARMv8.1. Паказаныя інструкцыі неабходныя для падвышэння прадукцыйнасці пры працы на поплатках Cavium ThunderX2 і AWS Graviton 2. Дададзеныя змены вызначаюць наяўнасць падтрымкі LSE і дынамічна ўключаюць рэалізацыю atomic на іх аснове. Пры тэставанні выкарыстанне LSE дазволіла на 15% зменшыць працэсарны час, выдаткоўванае пры зборцы ядра.
    • Праведзена аптымізацыя прадукцыйнасці і пашырана функцыянальнасць інструментарыя для выкананых файлаў у фармаце ELF.
      Дададзена падтрымка кэшавання адладкавай інфармацыі DWARF, вырашаны праблемы ва ўтылітах elfcopy/objcopy, дададзена апрацоўка DW_AT_ranges,
      у readelf рэалізавана магчымасць дэкадавання сцягоў PROTMAX_DISABLE, STKGAP_DISABLE і WXNEEDED, а таксама Xen і GNU Build-ID.

  • бяспеку
    • Для паляпшэння працы FreeBSD у хмарных асяроддзі Azure вядзецца праца па забеспячэнні падтрымкі механізму HyperV Socket, які дазваляе выкарыстоўваць інтэрфейс сокетаў для ўзаемадзеяння гасцявой сістэмы з хост-акружэннем без налады сеткі.
    • Вядзецца праца па забеспячэнні паўтаральных зборак FreeBSD, якія дазваляюць пераканацца, што выкананыя файлы кампанентаў сістэмы сабраны менавіта з заяўленых зыходных тэкстаў і не ўтрымоўвае старонніх змен.
    • Ва ўтыліту elfctl дададзена магчымасць кіравання ўключэннем дадатковых механізмаў абароны (ASLR, PROT_MAX, stack gap, W+X mapping) на ўзроўні асобных працэсаў.
  • Сістэмы захоўвання і файлавыя сістэмы
    • Вядзецца праца па рэалізацыі магчымасці працы NFS па-над шыфраваным каналам сувязі на базе TLS 1.3, замест выкарыстання Kerberos (рэжым sec=krb5p), які абмяжоўваецца шыфраваннем толькі RPC-паведамленняў і рэалізуецца толькі праграмна. Новая рэалізацыя выкарыстоўвае які прадстаўляецца ядром стэк TLS, які дазваляе задзейнічаць сродкі апаратнага паскарэння. Код NFS па-над TLS ужо амаль готаў для тэставання, але яшчэ патрабуе правядзенні працы па падтрымцы падпісаных кліенцкіх сертыфікатаў і адаптацыі TLS-стэка ядра для адпраўкі дадзеных NFS (патчы для прыёму ўжо гатовыя).
  • Падтрымка абсталявання
    • Вядзецца праца па даданні падтрымкі кітайскіх x86 CPU Hygon на аснове тэхналогій AMD;
    • У рамках CheriBSD, адгалінавання ад FreeBSD для даследчай працэсарнай архітэктуры CHERI (Capability Hardware Enhanced RISC Instructions), працягваецца рэалізацыя падтрымкі працэсара ARM Morello, які будзе падтрымліваць сістэму кіравання доступам да памяці CHERI, заснаваную на мадэлі абароны праекту Capsicum. Чып Morello плануюць выпусціць у 2021 годзе. У цяперашні час праца сканцэнтравана на даданні падтрымкі платформы Arm Neoverse N1, якая ляжыць у аснове Morello. Прадстаўлены пачатковы порт CheriBSD для архітэктуры RISC-V. Працягваецца развіццё CheriBSD для эталоннага прататыпа CHERI на базе архітэктуры MIPS64.
    • Працягнута партаванне FreeBSD для 64-разраднага SoC NXP LS1046A на базе працэсара ARMv8 Cortex-A72 з інтэграваным рухавіком паскарэння апрацоўкі сеткавых пакетаў, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 і USB 3.0. У наш час для перадачы ў асноўны склад FreeBSD рыхтуюцца драйверы QorIQ і LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI.
    • Да версіі 2.1.1 абноўлены драйвер ena з падтрымкай другога пакалення сеткавых адаптараў ENAv2 (Elastic Network Adapter), якія выкарыстоўваюцца ў інфраструктуры Elastic Compute Cloud (EC2) для арганізацыі сувязі паміж вузламі EC2 на хуткасцях да 25 Gb/s. Рыхтуецца абнаўленне да ENA 2.2.0.
    • Працягваецца ўдасканаленне порта FreeBSD для платформы powerpc64. Асноўная ўвага надаецца забеспячэнню якаснай працы на сістэмах з працэсарамі IBM POWER8 і POWER9. За справаздачны перыяд ажыццёўлены пераклад FreeBSD-CURRENT на выкарыстанне кампілятара LLVM/Clang 10.0 і кампаноўніка lld замест GCC. Па змаўчанні для сістэм powerpc64 задзейнічаны ELFv2 ABI, а падтрымка ELFv1 ABI спынена. Ва FreeBSD-STABLE пакуль застаецца gcc 4.2.1. Вырашаны праблемы з драйверамі virtio, aacraid і ixl. На сістэмах powerpc64 забяспечана магчымасць запуску QEMU без падтрымкі Huge Pages.
    • Прадоўжана работа па рэалізацыі падтрымкі архітэктуры RISC-V. У бягучым выглядзе FreeBSD ужо паспяхова загружаецца на плаце SiFive Hifive Unleashed, для якой падрыхтаваны драйверы
      UART, SPI і PRCI, падтрымлівае прашыўку OpenSBI і SBI 0.2. За справаздачны перыяд праца была засяроджана на міграцыі з GCC на clang і lld.

  • Прыкладанні і сістэма партоў
    • Калекцыя партоў FreeBSD пераадолела мяжу ў 39 тысяч партоў, колькасць незачыненых PR крыху перавышае 2400, з якіх 640 PR яшчэ не разабраны. За справаздачны перыяд унесена 8146 змен ад 173 распрацоўшчыкаў. Правы комітара атрымалі чатыры новыя ўдзельнікі (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore). Дададзены сцяг USES=qca і выдалены сцяг USES=zope (з-за несумяшчальнасці з Python 3). Вядзецца праца па выдаленні Python 2.7 з дрэва портаў - усе завязаныя на Python 2 порты павінны быць портированы на Python 3 або будуць выдалены. Пакетны мэнэджар pkg абноўлены да выпуску 1.13.2.
    • Абноўлены кампаненты графічнага стэка і парты, звязаныя з xorg.
      Сервер X.org абноўлены да версіі 1.20.8 (раней пастаўлялася галінка 1.18), што дазволіла перавесці FreeBSD па змаўчанні на выкарыстанне бэкенда udev/evdev для апрацоўкі прылад уводу. Пакет Mesa перакладзены па змаўчанні на выкарыстанне пашырэння DRI3 замест DRI2. Вядзецца праца па падтрыманні ў актуальным стане графічных драйвераў, стэка прылад уводу і кампанентаў drm-kmod (порт, які забяспечвае працу DRM-модуляў amdgpu, i915 і radeon, выкарыстоўваючы фрэймворк linuxkpi для сумяшчальнасці з Direct Rendering Manager ядра Linux).

    • Працоўны стол KDE Plasma, KDE Frameworks, KDE Applications і Qt падтрымліваюцца ў актуальным стане і абноўлены да самых свежых выпускаў. У парты дададзена новае прыкладанне kstars (зорны атлас).
    • Праведзена праца па ўхіленні рэгрэсіўных змен у аконным мэнэджары xfwm4, усплылых пасля абнаўлення Xfce да версіі 4.14 (напрыклад, з'явілася артэфакты пры дэкарыраванні вокнаў).
    • Порт з Wine абноўлены да выпуску Wine 5.0 (раней прапаноўваўся 4.0.3).
    • Пачынаючы з версіі 1.14 у кампілятары мовы Go дададзена афіцыйная падтрымка архітэктуры ARM64 для FreeBSD 12.0.
    • OpenSSH у базавай сістэме абноўлены да выпуску 7.9p1.
    • Рэалізавана і размешчана ў партах (devel/libsysctlmibinfo2) бібліятэка sysctlmibinfo2, якая прадстаўляе API для доступу да sysctl MIB і выконвае трансляцыю імёнаў sysctl у ідэнтыфікатары аб'ектаў (OID).
    • Сфарміравана абнаўленне дыстрыбутыва NomadBSD 1.3.1, які прадстаўляе сабой рэдакцыю FreeBSD, адаптаваную для выкарыстання ў якасці пераноснага працоўнага стала, загружанага з USB-назапашвальніка. Графічнае асяроддзе заснавана на аконным мэнэджэры Openbox. Для мантавання назапашвальнікаў прымяняецца DSBMD (падтрымліваецца мантаванне CD9660, FAT, HFS+, NTFS, Ext2/3/4), для налады бесправадной сеткі wifimgr, а для кіравання гучнасцю - DSBMixer.
    • пачалася праца па напісанні паўнавартаснай дакументацыі для мэнэджара jail-акружэнняў гаршчок. Рыхтуецца да выпуску pot 0.11.0, у якім з'явяцца сродкі кіравання сеткавым стэкам.

Крыніца: opennet.ru

Дадаць каментар