Rapporto sui progressi di FreeBSD del secondo trimestre del 2019

pubblicato rapporto sullo sviluppo del progetto FreeBSD da aprile a giugno 2019. Tra le modifiche possiamo notare:

  • Questioni generali e sistemiche
    • Il Core team ha deciso di istituire un gruppo di lavoro per esplorare la possibilità di spostare il codice sorgente dal sistema di controllo sorgente centralizzato Subversion al sistema Git decentralizzato.
    • Condotto test fuzz del kernel di FreeBSD utilizzando il sistema syzkaller e una serie di errori individuati sono stati corretti. Aggiunto un livello per il test fuzzing delle librerie per la compatibilità con un ambiente a 32 bit su sistemi con kernel a 64 bit. È stata implementata la possibilità di eseguire syzkaller in macchine virtuali basate su bhyve. Nella fase successiva, si prevede di espandere la copertura dei test delle chiamate di sistema, utilizzare il disinfettante LLVM per controllare il kernel, utilizzare netdump per salvare i dump del kernel durante i crash durante i test di fuzzing, ecc.
    • È iniziato il lavoro sull'aggiornamento dell'implementazione zlib a livello di kernel. Per l'accesso del kernel al codice zlib, la directory contrib/zlib è stata rinominata in sys/contrib/zlib e anche il file di intestazione crc.h è stato rinominato per evitare conflitti con zlib/crc.h. Ripulito il codice legacy che dipendeva da zlib e inflate. Successivamente si prevede di fornire la possibilità di costruire il kernel contemporaneamente alla vecchia e alla nuova zlib per il graduale trasferimento alla nuova versione delle funzioni che utilizzano la compressione;
    • L'infrastruttura di emulazione dell'ambiente Linux (Linuxulator) è stata aggiornata. Maggiore supporto per gli strumenti di debug di Linux come l'utilità strace. Ai port è stato aggiunto il pacchetto linux-c7-strace, che può essere utilizzato per tracciare i file eseguibili di Linux al posto delle utility standard truss e ktrace, che non possono ancora decodificare alcuni flag e strutture specifiche di Linux. Inoltre è stato aggiunto il pacchetto linux-ltp con gli eseguibili del Linux Test Project e sono stati risolti i problemi di compatibilità con gli eseguibili legati alle nuove versioni di glibc;
    • L'implementazione delle operazioni di invalidazione ritardata nel meccanismo pmap è stata trasferita all'utilizzo di un algoritmo di elaborazione delle code che funziona senza blocchi, che ha permesso di risolvere problemi di scalabilità quando si eseguono un gran numero di operazioni parallele di unmap;
    • È stato modificato il meccanismo per bloccare vnode durante l'esecuzione delle chiamate di sistema della famiglia execve(), il che ha permesso di ottenere una maggiore efficienza durante l'esecuzione simultanea di execve() per lo stesso file (ad esempio, quando si eseguono operazioni di assemblaggio con parallelizzazione del lancio del compilatore);
  • sicurezza
    • L'hypervisor bhyve continua a migliorare il supporto per la migrazione live degli ambienti guest da un host all'altro e la funzionalità Salva/Ripristina, che consente di bloccare il sistema guest, salvando lo stato in un file e quindi riprendere l'esecuzione.
    • Attraverso l'uso della libreria libvdsk, bhyve ha aggiunto il supporto per le immagini disco nel formato QCOW2. Richiede l'installazione per funzionare
      appositamente modificato versione di bhyve, che è stata convertita per utilizzare gestori di operazioni sui file basati su libvdsk. Durante il periodo di riferimento, libvdsk ha anche svolto un lavoro per semplificare l'integrazione del supporto per nuovi formati, ha migliorato le prestazioni di lettura e scrittura e ha aggiunto il supporto per Copy-On-Write. Tra i restanti compiti si segnala l'integrazione di libvdsk nella struttura principale di bhyve;

    • Nei porti è stato inserito un sistema per la raccolta delle informazioni sul traffico
      Malgrado, che consente di creare trappole per richieste di rete dannose (vengono controllati IP e domini dalle blacklist) e inviare informazioni sull'attività rilevata a un server centralizzato per il successivo blocco o analisi dei tentativi di attacco;

    • Sono state aggiunte piattaforme alle porte per rilevare attacchi, analizzare registri e monitorare l'integrità dei file Wazu (fork di Ossec con supporto per l'integrazione con ELK-Stack);
  • Sottosistema di rete
    • Il driver ena è stato aggiornato per supportare 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. Il supporto NETMAP è stato aggiunto al driver ena.
    • FreeBSD HEAD adotta un nuovo stack MMC/SD, basato sul framework CAM e che consente di connettere dispositivi con un'interfaccia SDIO (Secure Digital I/O). SDIO viene utilizzato ad esempio nei moduli WiFi e Bluetooth di molte schede, come il Raspberry Pi 3. Il nuovo stack consente inoltre di utilizzare l'interfaccia CAM per inviare comandi SD dalle applicazioni nello spazio utente, il che rende possibile la creazione di dispositivi driver che operano a livello utente. È iniziato il lavoro sulla creazione di driver per i chip wireless Broadcom che operano in modalità FullMAC (dal lato del chip esegue una parvenza del proprio sistema operativo con implementazioni del suo stack wireless 802.11);
    • Sono in corso i lavori per implementare NFSv4.2 (RFC-7862) per FreeBSD. La nuova versione di NFS aggiunge il supporto per le funzioni posix_fadvise, posix_fallocate, le modalità SEEKHOLE/SEEKDATA in lseek e l'operazione di copia locale di parti di un file sul server (senza trasferimento al client).

      FreeBSD attualmente fornisce il supporto di base per le operazioni LayoutError, IOAdvise, Allocate e Copy. Tutto ciò che resta è implementare l'operazione Seek richiesta per utilizzare lseek(SEEKHOLE/SEEKDATA) con NFS. Il supporto NFSv4.2 è previsto per FreeBSD 13;

  • Archiviazione e file system
    • È in fase di completamento il progetto di rielaborazione del driver per il sottosistema FUSE (File system in USErspace), che consente di creare implementazioni di file system in user space. Il driver fornito originariamente è obsoleto e contiene molti bug. Nell'ambito del progetto di modernizzazione dei driver, è stato implementato il supporto per il protocollo FUSE 7.23 (in precedenza era supportata la versione 7.8, rilasciata 11 anni fa), è stato aggiunto codice per verificare i diritti di accesso sul lato kernel ("-o default_permissions"), chiamate a Sono stati aggiunti VOP_MKNOD, VOP_BMAP e VOP_ADVLOCK, la possibilità di interrompere le operazioni FUSE, aggiunto il supporto per pipe senza nome e socket unix in fusefs, la possibilità di utilizzare kqueue per /dev/fuse, consentito l'aggiornamento dei parametri di montaggio tramite "mount -u", aggiunto il supporto per l'esportazione di fusef tramite NFS, implementato l'accounting RLIMIT_FSIZE, aggiunti i flag FOPEN_KEEP_CACHE e FUSE_ASYNC_READ, sono state apportate significative ottimizzazioni delle prestazioni ed è stata migliorata l'organizzazione del caching;
    • Al codice del pager di scambio è stato aggiunto il supporto per l'operazione BIO_DELETE, che consente di utilizzare il comando TRIM durante la rimozione dei blocchi dalle unità SSD per aumentarne la durata.
  • Supporto hardware
    • Continua il lavoro per implementare il supporto per il SoC ARM64 Broadcom BCM5871X con processori ARMv8 Cortex-A57, finalizzato all'utilizzo in router, gateway e storage di rete. Durante il periodo di riferimento, il supporto per i bus iProc PCIe interni ed esterni è stato migliorato, è stato aggiunto il supporto per BNXT Ethernet e sono in corso lavori per utilizzare il motore crittografico integrato per accelerare IPsec. L'integrazione del codice nel ramo HEAD è prevista nella seconda metà dell'anno;
    • Sono iniziati i lavori sul supporto 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. Il supporto per la piattaforma base (SMP multiutente) e SATA 3.0 è già stato implementato. Il supporto per USB 3.0, SD/MMC e I2C è in fase di sviluppo. I piani includono il supporto per Ethernet, GPIO e QSPI. Il completamento dei lavori e l'inclusione nel ramo HEAD è previsto nel 4° trimestre 2019.
    • Driver mlx5en e mlx5ib aggiornati per gli adattatori Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] e ConnectX-6 [Dx] Ethernet e InfiniBand. Aggiunto il supporto per gli adattatori Mellanox Socket Direct (ConnectX-6), che consentono un throughput fino a 200 Gb/s sul bus PCIe Gen 3.0. Per i chip BlueField multi-core è stato aggiunto il supporto per il driver RShim. Ai port è stato aggiunto il pacchetto mstflint con un set di utilità diagnostiche per gli adattatori Mellanox;
  • Applicazioni e sistema portuale
    • I componenti dello stack grafico sono stati aggiornati. Il driver drm.ko (Direct Rendering Manager) è stato portato dal kernel Linux 5.0. Questo driver è considerato sperimentale ed è stato aggiunto all'albero dei port come graphics/drm-devel-kmod. Poiché il driver utilizza il framework KPI Linux aggiornato per essere compatibile con l'API DRM del kernel Linux, per eseguire è necessario FreeBSD CURRENT. Anche il driver drm vboxvideo.ko per la GPU virtuale VirtualBox è stato portato da Linux. Il pacchetto Mesa è stato aggiornato alla versione 18.3.2 ed è passato all'utilizzo di LLVM dal port devel/llvm80 invece di devel/llvm60.
    • L'albero dei port di FreeBSD ha superato i 37000 port, il numero di PR non chiusi rimane pari a 2146. Durante il periodo di riferimento, sono state apportate 7837 modifiche da 172 sviluppatori. Tre nuovi partecipanti hanno ricevuto i diritti di committer. Tra gli aggiornamenti di versione significativi nei port ci sono: MySQL 5.7, Python 3.6, Ruby 2.5, Samba 4.8, Julia 1.0, Firefox 68.0, Chromium 75.0.3770.100. Tutte le porte Go sono state convertite per utilizzare il flag "USES=go". Aggiunto il flag "USES=cabal" al gestore di pacchetti Cabal utilizzato per il codice Haskell. La modalità di protezione rigorosa dello stack è abilitata. La versione predefinita di Python è 3.6 invece di 2.7.
    • La versione dell'utilità è stata preparata nsysctl 1.0, che offre un analogo a /sbin/sysctl che utilizza libxo per l'output e fornendo una serie estesa di opzioni. Nsysctl può essere utilizzato per monitorare visivamente lo stato dei valori sysctl e presentare informazioni sugli oggetti in una forma strutturata. È possibile l'output nei formati XML, JSON e HTML;

Fonte: opennet.ru

Aggiungi un commento