Rapporto sullo sviluppo di FreeBSD per il primo trimestre del 2020

pubblicato rapporto sullo sviluppo del progetto FreeBSD da gennaio a marzo 2020. Tra le modifiche possiamo notare:

  • Questioni generali e sistemiche
    • Rimosso il set di compilatori GCC dall'albero dei sorgenti di FreeBSD-CURRENT, così come le utilità gperf, gcov e gtc (compilatore devicetree) inutilizzate. Tutte le piattaforme che non supportano Clang sono passate all'utilizzo di strumenti di compilazione esterni installati dai port. Il sistema base conteneva una versione obsoleta di GCC 4.2.1 e l'integrazione delle versioni più recenti non era possibile a causa del passaggio dalla 4.2.2 alla licenza GPLv3, considerata inappropriata per i componenti base di FreeBSD. Le versioni attuali di GCC, incluso GCC 9, possono ancora essere installate da pacchetti e port.
    • L'infrastruttura di emulazione dell'ambiente Linux (Linuxulator) ha aggiunto il supporto per la chiamata di sistema sendfile, la modalità TCP_CORK (richiesta per nginx) e il flag MAP_32BIT (risolve il problema con l'avvio di pacchetti con Mono da Ubuntu Bionic). Sono stati risolti i problemi con la risoluzione DNS quando si utilizza glibc più recente della 2.30 (ad esempio da CentOS 8).
      L'infrastruttura di integrazione continua offre la possibilità di eseguire lavori LTP (Linux Testing Project) eseguendo Linuxulator per testare i miglioramenti apportati al codice per supportare Linux. Circa 400 test falliscono e richiedono una correzione (alcuni errori sono causati da falsi positivi, alcuni richiedono correzioni banali, ma ce ne sono altri che richiedono l'aggiunta del supporto per le nuove chiamate di sistema per essere corretti). È stato fatto del lavoro per ripulire il codice del Linuxulator e semplificare il debug. Le patch con il supporto per gli attributi estesi e la chiamata di sistema fexecve sono state preparate, ma non ancora revisionate.

    • Proseguono le riunioni del gruppo di lavoro creato per effettuare la migrazione dei codici sorgente dal sistema di controllo sorgente centralizzato Subversion al sistema decentralizzato Git. È in fase di preparazione un rapporto con proposte sulla migrazione.
    • В rtld (linker runtime) modalità di esecuzione diretta migliorata (“/libexec/ld-elf.so.1 {percorso} {argomenti}”).
    • Il progetto per il test fuzzing del kernel di FreeBSD utilizzando il sistema syzkaller continua a svilupparsi. Durante il periodo di riferimento, sono stati eliminati i problemi nello stack di rete e nel codice per lavorare con le tabelle dei descrittori di file identificati utilizzando syzkaller. Dopo la diagnosi degli errori, sono state aggiunte modifiche allo stack SCTP per semplificare il debug. Sono state aggiunte regole al set stress2 per identificare possibili regressioni. Aggiunto il supporto per il test fuzz delle nuove chiamate di sistema, incluse le chiamate al sottosistema copy_file_range(), __realpathat() e Capsicum. Il lavoro continua per coprire il livello di emulazione Linux con test fuzz. Abbiamo analizzato ed eliminato gli errori rilevati negli ultimi report di Coverity Scan.
    • Il sistema di integrazione continua è passato all'esecuzione di tutti i test del ramo principale solo utilizzando clang/lld. Durante i test per RISC-V, viene garantita la formazione di un'immagine del disco completa per l'esecuzione dei test in QEMU utilizzando OpenSBI. Aggiunte nuove attività per testare immagini e macchine virtuali powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • È in corso il lavoro per trasferire la suite di test Kyua dai port (devel/kyua) al sistema base per risolvere i problemi (i pacchetti vengono installati molto lentamente) che sorgono quando si utilizza Kyua su nuove architetture, il cui sviluppo viene effettuato utilizzando un emulatore o FPGA. L'integrazione nel sistema di base semplificherà notevolmente il test delle piattaforme integrate e si interfaccerà con i sistemi di integrazione continua.
    • È stato avviato un progetto per ottimizzare le prestazioni del driver del bridge di rete if_bridge, che utilizza un singolo mutex per bloccare i dati interni, il che non consente di ottenere le prestazioni desiderate su sistemi con un gran numero di ambienti jail o macchine virtuali uniti in un'unica rete. In questa fase, sono stati aggiunti dei test al codice per evitare che si verifichino regressioni durante la modernizzazione del lavoro con i blocchi. Viene presa in considerazione la possibilità di utilizzare ConcurrencyKit per parallelizzare i gestori di trasferimento dati (bridge_input(), bridge_output(), bridge_forward(), ...).
    • Aggiunta una nuova chiamata di sistema sigfastblock per consentire a un thread di specificare un blocco di memoria per un gestore di segnali veloce per migliorare le prestazioni dei gestori di eccezioni.
    • Il kernel aggiunge il supporto per le istruzioni atomiche LSE (Large System Extension) supportate dai sistemi ARMv8.1. Queste istruzioni sono necessarie per migliorare le prestazioni durante l'esecuzione su schede Cavium ThunderX2 e AWS Graviton 2. Le modifiche aggiunte rilevano il supporto LSE e abilitano dinamicamente l'implementazione atomica basata su di esse. Durante i test, l'uso di LSE ha permesso di ridurre del 15% il tempo impiegato dal processore durante l'assemblaggio del kernel.
    • È stata effettuata l'ottimizzazione delle prestazioni e la funzionalità del toolkit è stata ampliata per i file eseguibili in formato ELF.
      Aggiunto supporto per la memorizzazione nella cache delle informazioni di debug DWARF, risolti problemi nelle utilità elfcopy/objcopy, aggiunta elaborazione DW_AT_ranges,
      readelf implementa la capacità di decodificare i flag PROTMAX_DISABLE, STKGAP_DISABLE e WXNEEDED, nonché Xen e GNU Build-ID.

  • sicurezza
    • Per migliorare le prestazioni di FreeBSD negli ambienti cloud di Azure, si sta lavorando per fornire il supporto al meccanismo HyperV Socket, che consente l'utilizzo di un'interfaccia socket per l'interazione tra il sistema ospite e l'ambiente host senza configurare una rete.
    • Sono in corso lavori per fornire build ripetibili di FreeBSD, rendendo possibile garantire che i file eseguibili dei componenti di sistema siano compilati esattamente dai codici sorgente dichiarati e non contengano modifiche estranee.
    • All'utilità elfctl è stata aggiunta la possibilità di controllare l'inclusione di meccanismi di protezione aggiuntivi (ASLR, PROT_MAX, stack gap, mappatura W+X) a livello dei singoli processi
  • Archiviazione e file system
    • Sono in corso i lavori per implementare la capacità di NFS di operare su un canale di comunicazione crittografato basato su TLS 1.3, invece di utilizzare Kerberos (modalità sec=krb5p), che si limita a crittografare solo i messaggi RPC ed è implementato solo nel software. La nuova implementazione utilizza lo stack TLS fornito dal kernel per abilitare l'accelerazione hardware. Il codice NFS su TLS è quasi pronto per il test, ma richiede ancora lavoro per supportare i certificati client firmati e adattare lo stack TLS del kernel per inviare dati NFS (le patch per la ricezione sono già pronte).
  • Supporto hardware
    • È in corso il lavoro per aggiungere il supporto per la CPU x86 cinese Hygon basata su tecnologie AMD;
    • Come parte di CheriBSD, un fork di FreeBSD per l'architettura dei processori di ricerca CHERÌ (Capability Hardware Enhanced RISC Instruction), continua ad essere implementato il supporto al processore ARM Morello che supporterà il sistema di controllo degli accessi alla memoria CHERI basato sul modello di sicurezza del progetto Capsicum. Patatine Morello stanno pianificando rilascio nel 2021. Il lavoro è attualmente concentrato sull'aggiunta del supporto per la piattaforma Arm Neoverse N1 che alimenta Morello. È stato presentato un port iniziale di CheriBSD per l'architettura RISC-V. Prosegue lo sviluppo di CheriBSD per il prototipo di riferimento CHERI basato sull'architettura MIPS64.
    • Continua il porting di FreeBSD per il SoC NXP LS64A a 1046 bit basato sul processore ARMv8 Cortex-A72 con un motore di accelerazione dell'elaborazione dei pacchetti di rete integrato, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 e USB 3.0. Attualmente, i driver QorIQ e LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI sono in fase di preparazione per il trasferimento alla composizione principale di FreeBSD.
    • Il driver ena è stato aggiornato alla versione 2.1.1 con il supporto per la seconda generazione di adattatori di rete ENAv2 (Elastic Network Adapter) utilizzati nell'infrastruttura Elastic Compute Cloud (EC2) per organizzare la comunicazione tra i nodi EC2 a velocità fino a 25 Gb/ S. È in preparazione un aggiornamento a ENA 2.2.0.
    • Continuano i miglioramenti al port di FreeBSD per la piattaforma powerpc64. L'obiettivo è fornire prestazioni di qualità sui sistemi con processori IBM POWER8 e POWER9. Durante il periodo di riferimento, FreeBSD-CURRENT è stato trasferito per utilizzare il compilatore LLVM/Clang 10.0 e il linker lld invece di GCC. Per impostazione predefinita, i sistemi powerpc64 utilizzano l'ABI ELFv2 e il supporto per l'ABI ELFv1 è stato interrotto. FreeBSD-STABLE ha ancora gcc 4.2.1. I problemi con i driver virtio, aacraid e ixl sono stati risolti. Sui sistemi powerpc64 è possibile eseguire QEMU senza il supporto di Huge Pages.
    • Il lavoro continua per implementare il supporto per l'architettura RISC-V. Nella sua forma attuale, FreeBSD si avvia già con successo sulla scheda SiFive Hifive Unleashed, per la quale sono stati preparati i driver
      UART, SPI e PRCI, supporta firmware OpenSBI e SBI 0.2. Durante il periodo di riferimento, il lavoro si è concentrato sulla migrazione dal GCC a clang e lld.

  • Applicazioni e sistema portuale
    • La raccolta dei port di FreeBSD ha superato la soglia dei 39mila port, il numero dei PR non chiusi supera di poco i 2400, di cui 640 PR non sono ancora stati smistati. Durante il periodo di riferimento sono state apportate 8146 modifiche da 173 sviluppatori. Quattro nuovi partecipanti hanno ricevuto i diritti di committer (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore). Aggiunto il flag USES=qca e rimosso il flag USES=zope (a causa dell'incompatibilità con Python 3). È in corso il lavoro per rimuovere Python 2.7 dall'albero dei port: tutti i port basati su Python 2 devono essere portati su Python 3 o verranno rimossi. Il gestore pacchetti pkg è stato aggiornato alla versione 1.13.2.
    • Aggiornati i componenti dello stack grafico e le porte relative a xorg.
      Il server X.org è stato aggiornato alla versione 1.20.8 (precedentemente fornita nel ramo 1.18), che ha consentito a FreeBSD di utilizzare per impostazione predefinita il backend udev/evdev per la gestione dei dispositivi di input. Il pacchetto Mesa è stato modificato per utilizzare l'estensione DRI3 invece di DRI2 per impostazione predefinita. Sono in corso lavori per mantenere i driver grafici, lo stack dei dispositivi di input e i componenti drm-kmod (una porta che consente il funzionamento dei moduli DRM amdgpu, i915 e radeon, utilizzando il framework linuxkpi per la compatibilità con il Direct Rendering Manager del kernel Linux) aggiornato.

    • Il desktop KDE Plasma, KDE Frameworks, le applicazioni KDE e Qt sono mantenuti aggiornati e aggiornati alle ultime versioni. Ai port è stata aggiunta una nuova applicazione kstars (star atlas).
    • È stato fatto del lavoro per eliminare i cambiamenti regressivi nel window manager xfwm4 che apparivano dopo l'aggiornamento di Xfce alla versione 4.14 (ad esempio, apparivano artefatti durante la decorazione delle finestre).
    • Il port di Wine è stato aggiornato per rilasciare Wine 5.0 (in precedenza veniva offerto il 4.0.3).
    • A partire dalla versione 1.14, il compilatore del linguaggio Go ha aggiunto il supporto ufficiale per l'architettura ARM64 per FreeBSD 12.0.
    • OpenSSH sul sistema di base è stato aggiornato alla versione 7.9p1.
    • La libreria sysctlmibinfo2 è stata implementata e inserita nei port (devel/libsysctlmibinfo2), fornendo un'API per accedere al MIB sysctl e tradurre i nomi sysctl in identificatori di oggetto (OID).
    • È stato generato un aggiornamento della distribuzione NomadBSD 1.3.1, che è un'edizione di FreeBSD adattata per l'uso come desktop portatile avviabile da un'unità USB. L'ambiente grafico è basato su un window manager Scatola aperta. Utilizzato per il montaggio di azionamenti DSBMD (è supportato il montaggio di CD9660, FAT, HFS+, NTFS, Ext2/3/4), per configurare una rete wireless - wifimgre per controllare il volume - DSBMixer.
    • Iniziato lavoro sulla scrittura della documentazione completa per il responsabile dell'ambiente carcerario lattina. È in preparazione il rilascio del Pot 0.11.0, che includerà strumenti per la gestione dello stack di rete.

Fonte: opennet.ru

Aggiungi un commento