Raport de dezvoltare FreeBSD T2020 XNUMX

publicat raport privind dezvoltarea proiectului FreeBSD din ianuarie până în martie 2020. Dintre modificări putem remarca:

  • Probleme generale și sistemice
    • S-au eliminat setul de compilatori GCC din arborele sursă FreeBSD-CURRENT, precum și utilitatile neutilizate gperf, gcov și gtc (devicetree compilator). Toate platformele care nu acceptă Clang au fost trecute la utilizarea instrumentelor de construcție externe instalate din porturi. Sistemul de bază a livrat o versiune învechită a GCC 4.2.1, iar integrarea versiunilor mai noi nu a fost posibilă din cauza tranziției 4.2.2 la licența GPLv3, care a fost considerată inadecvată pentru componentele de bază FreeBSD. Versiunile actuale ale GCC, inclusiv GCC 9, pot fi instalate în continuare din pachete și porturi.
    • Infrastructura de emulare a mediului Linux (Linuxulator) a adăugat suport pentru apelul de sistem sendfile, modul TCP_CORK (necesar pentru nginx) și flag MAP_32BIT (rezolvă problema lansării pachetelor cu Mono de la Ubuntu Bionic). Problemele cu rezoluția DNS la utilizarea glibc mai nouă de 2.30 (de exemplu din CentOS 8) au fost rezolvate.
      Infrastructura de integrare continuă oferă posibilitatea de a rula joburi LTP (Linux Testing Project) care rulează Linuxulator pentru a testa îmbunătățirile aduse codului pentru a sprijini Linux. Aproximativ 400 de teste eșuează și necesită remediere (unele erori sunt cauzate de fals pozitive, unele necesită remedieri banale, dar există altele care necesită adăugarea de suport pentru noile apeluri de sistem pentru remediere). S-a lucrat pentru a curăța codul Linuxulator și a simplifica depanarea. Patch-urile cu suport pentru atribute extinse și apelul de sistem fexecve au fost pregătite, dar nu au fost încă revizuite.

    • Întâlnirile grupului de lucru creat pentru a efectua migrarea codurilor sursă din sistemul centralizat de control al sursei Subversion către sistemul descentralizat Git continuă. Un raport cu propuneri pentru migrație este în curs de pregătire.
    • В rtld (runtime linker) a îmbunătățit modul de execuție directă („/libexec/ld-elf.so.1 {cale} {argumente}”).
    • Proiectul pentru testarea fuzzing a nucleului FreeBSD folosind sistemul syzkaller continuă să se dezvolte. În perioada de raportare, problemele din stiva de rețea și codul pentru lucrul cu tabelele de descriptori de fișiere identificate folosind syzkaller au fost eliminate. În urma diagnosticării erorii, au fost adăugate modificări la stiva SCTP pentru a ușura depanarea. Au fost adăugate reguli la setul de stres2 pentru a identifica posibilele regresii. S-a adăugat suport pentru testarea fuzz a noilor apeluri de sistem, inclusiv copy_file_range(), __realpathat() și apelurile la subsistem Capsicum. Lucrările continuă pentru a acoperi stratul de emulare Linux cu testare fuzz. Am analizat și eliminat erorile observate în cele mai recente rapoarte Coverity Scan.
    • Sistemul de integrare continuă a trecut la executarea tuturor testelor de ramificare a capului numai folosind clang/lld. La testarea pentru RISC-V, formarea unei imagini de disc complete este asigurată pentru rularea testelor în QEMU folosind OpenSBI. S-au adăugat noi sarcini pentru testarea imaginilor și a mașinilor virtuale powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • Se lucrează pentru a transfera suita de testare Kyua de la porturi (devel/kyua) în sistemul de bază pentru a rezolva problemele (pachetele sunt instalate foarte lent) care apar la utilizarea Kyua pe noi arhitecturi, dezvoltare pentru care se realizează cu ajutorul unui emulator sau FPGA. Integrarea în sistemul de bază va simplifica semnificativ testarea platformelor încorporate și va interfața cu sistemele de integrare continuă.
    • A fost lansat un proiect pentru a optimiza performanța driverului de punte de rețea if_bridge, care folosește un singur mutex pentru a bloca datele interne, ceea ce nu permite atingerea performanței dorite pe sisteme cu un număr mare de medii de închisoare sau mașini virtuale unite într-o singură rețea. În această etapă, testele au fost adăugate codului pentru a preveni regresele în timpul modernizării lucrului cu încuietori. Se ia în considerare posibilitatea de a utiliza ConcurrencyKit pentru a paraleliza manipulatorii de transfer de date (bridge_input(), bridge_output(), bridge_forward(), ...).
    • S-a adăugat un nou apel de sistem sigfastblock pentru a permite unui fir să specifice un bloc de memorie pentru un handler de semnal rapid pentru a îmbunătăți performanța gestionatorilor de excepții.
    • Nucleul adaugă suport pentru instrucțiunile atomice LSE (Large System Extension) acceptate de sistemele ARMv8.1. Aceste instrucțiuni sunt necesare pentru a îmbunătăți performanța atunci când rulează pe plăcile Cavium ThunderX2 și AWS Graviton 2. Modificările adăugate detectează suportul LSE și permit în mod dinamic implementarea atomică pe baza acestora. În timpul testării, utilizarea LSE a făcut posibilă reducerea timpului petrecut procesorului la asamblarea nucleului cu 15%.
    • Optimizarea performanței a fost efectuată și funcționalitatea setului de instrumente a fost extinsă pentru fișierele executabile în format ELF.
      S-a adăugat suport pentru stocarea în cache a informațiilor de depanare DWARF, s-au rezolvat probleme în utilitarele elfcopy/objcopy, s-a adăugat procesarea DW_AT_ranges,
      readelf implementează capacitatea de a decoda steaguri PROTMAX_DISABLE, STKGAP_DISABLE și WXNEEDED, precum și Xen și GNU Build-ID.

  • Безопасность
    • Pentru a îmbunătăți performanța FreeBSD în mediile cloud Azure, se lucrează pentru a oferi suport pentru mecanismul HyperV Socket, care permite utilizarea unei interfețe socket pentru interacțiunea între sistemul invitat și mediul gazdă fără a configura o rețea.
    • Se lucrează pentru a furniza versiuni repetabile ale FreeBSD, făcând posibilă asigurarea faptului că fișierele executabile ale componentelor sistemului sunt compilate exact din codurile sursă declarate și nu conțin modificări străine.
    • Capacitatea de a controla includerea unor mecanisme de protecție suplimentare (ASLR, PROT_MAX, stack gap, mapare W+X) la nivelul proceselor individuale a fost adăugată utilitarului elfctl
  • Sisteme de stocare și fișiere
    • Se lucrează pentru implementarea capacității pentru NFS de a opera pe un canal de comunicație criptat bazat pe TLS 1.3, în loc să utilizeze Kerberos (modul sec=krb5p), care se limitează la criptarea numai a mesajelor RPC și este implementat doar în software. Noua implementare folosește stiva TLS furnizată de kernel pentru a permite accelerarea hardware. Codul NFS peste TLS este aproape gata pentru testare, dar necesită încă muncă pentru a suporta certificate de client semnate și pentru a adapta stiva TLS a nucleului pentru a trimite date NFS (patch-urile pentru primire sunt deja gata).
  • Suport hardware
    • Se lucrează pentru adăugarea suportului pentru CPU Hygon x86 chinezesc bazat pe tehnologii AMD;
    • Ca parte a CheriBSD, un furk al FreeBSD pentru arhitectura procesorului de cercetare CHERI (Capability Hardware Enhanced RISC Instructions), suportul pentru procesorul ARM Morello continuă să fie implementat, care va sprijini sistemul de control al accesului la memorie CHERI bazat pe modelul de securitate al proiectului Capsicum. chip Morello planifică lansare în 2021. În prezent, munca se concentrează pe adăugarea de suport pentru platforma Arm Neoverse N1 care alimentează Morello. A fost prezentat un port inițial al CheriBSD pentru arhitectura RISC-V. Dezvoltarea CheriBSD continuă pentru prototipul de referință CHERI bazat pe arhitectura MIPS64.
    • Portarea FreeBSD continuă pentru SoC NXP LS64A pe 1046 de biți bazat pe procesorul ARMv8 Cortex-A72 cu un motor integrat de accelerare a procesării pachetelor de rețea, Ethernet de 10 Gb, PCIe 3.0, SATA 3.0 și USB 3.0. În prezent, driverele QorIQ și LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI sunt în curs de pregătire pentru transferul în compoziția principală FreeBSD.
    • Driverul ena a fost actualizat la versiunea 2.1.1 cu suport pentru a doua generație de adaptoare de rețea ENAv2 (Elastic Network Adapter) utilizate în infrastructura Elastic Compute Cloud (EC2) pentru a organiza comunicația între nodurile EC2 la viteze de până la 25 Gb/ s. Se pregătește o actualizare la ENA 2.2.0.
    • Îmbunătățirile aduse portului FreeBSD pentru platforma powerpc64 continuă. Accentul este pus pe furnizarea de performanțe de calitate pe sistemele cu procesoare IBM POWER8 și POWER9. În perioada de raportare, FreeBSD-CURRENT a fost transferat pentru a utiliza compilatorul LLVM/Clang 10.0 și linkerul lld în loc de GCC. În mod implicit, sistemele powerpc64 utilizează ELFv2 ABI și suportul pentru ELFv1 ABI a fost întrerupt. FreeBSD-STABLE are încă gcc 4.2.1. Problemele cu driverele virtio, aacraid și ixl au fost rezolvate. Pe sistemele powerpc64 este posibil să rulați QEMU fără suport pentru Huge Pages.
    • Lucrările continuă pentru implementarea suportului pentru arhitectura RISC-V. În forma sa actuală, FreeBSD pornește deja cu succes pe placa SiFive Hifive Unleashed, pentru care driverele au fost pregătite
      UART, SPI și PRCI, acceptă firmware-ul OpenSBI și SBI 0.2. În perioada de raportare, munca s-a concentrat pe migrarea de la GCC la clang și lld.

  • Aplicații și sistem portuar
    • Colecția de porturi FreeBSD a depășit pragul de 39 de mii de porturi, numărul de PR-uri neînchise depășește ușor 2400, dintre care 640 de PR-uri nu au fost încă sortate. În perioada de raportare, au fost efectuate 8146 modificări de la 173 de dezvoltatori. Patru noi participanți au primit drepturi de committer (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore). S-a adăugat steagul USES=qca și s-a eliminat steagul USES=zope (din cauza incompatibilității cu Python 3). Se lucrează pentru a elimina Python 2.7 din arborele de porturi - toate porturile bazate pe Python 2 trebuie portate pe Python 3 sau vor fi eliminate. Managerul de pachete pkg a fost actualizat pentru lansarea 1.13.2.
    • Componentele stivei grafice actualizate și porturile legate de xorg.
      Serverul X.org a fost actualizat la versiunea 1.20.8 (exportată anterior pe ramura 1.18), ceea ce a permis FreeBSD să utilizeze implicit backend-ul udev/evdev pentru gestionarea dispozitivelor de intrare. Pachetul Mesa a fost schimbat pentru a utiliza extensia DRI3 în loc de DRI2 în mod implicit. Se lucrează pentru a păstra driverele grafice, stiva dispozitivului de intrare și componentele drm-kmod (un port care permite funcționarea modulelor amdgpu, i915 și radeon DRM, folosind cadrul linuxkpi pentru compatibilitate cu Managerul de redare directă al nucleului Linux) la zi.

    • Desktop-ul KDE Plasma, KDE Frameworks, Aplicațiile KDE și Qt sunt ținute la zi și actualizate la cele mai recente versiuni. O nouă aplicație kstars (star atlas) a fost adăugată la porturi.
    • S-a lucrat pentru a elimina modificările regresive în managerul de ferestre xfwm4 care au apărut după actualizarea Xfce la versiunea 4.14 (de exemplu, artefactele au apărut la decorarea ferestrelor).
    • Portul Wine a fost actualizat pentru a lansa Wine 5.0 (anterior 4.0.3 era oferit).
    • Începând cu versiunea 1.14, compilatorul de limbaj Go a adăugat suport oficial pentru arhitectura ARM64 pentru FreeBSD 12.0.
    • OpenSSH pe sistemul de bază a fost actualizat pentru a lansa 7.9p1.
    • Biblioteca sysctlmibinfo2 a fost implementată și plasată în porturi (devel/libsysctlmibinfo2), oferind un API pentru accesarea sysctl MIB și traducerea numelor sysctl în identificatori de obiect (OID).
    • A fost generată o actualizare de distribuție NomadBSD 1.3.1, care este o ediție a FreeBSD adaptată pentru utilizare ca desktop portabil, care poate fi pornit de pe o unitate USB. Mediul grafic se bazează pe un manager de ferestre Cutie deschisa. Folosit pentru montarea unităților DSBMD (este acceptat montarea CD9660, FAT, HFS+, NTFS, Ext2/3/4), pentru a configura o rețea fără fir - wifimgrși pentru a controla volumul - DSBMixer.
    • A început să muncă la scrierea documentației complete pentru managerul de mediu al închisorii oală. Pot 0.11.0 este în curs de pregătire pentru lansare, care va include instrumente pentru gestionarea stivei de rețea.

Sursa: opennet.ru

Adauga un comentariu