Rapporto sullo sviluppo di FreeBSD per il secondo trimestre del 2019

Pubblicato rapporto sullo sviluppo del progetto FreeBSD da aprile a giugno 2019. Tra le modifiche si possono notare:

  • Questioni generali e sistemiche
    • Il team principale ha deciso di istituire un gruppo di lavoro per studiare la fattibilità del trasferimento dei testi sorgente dal sistema di gestione centralizzata Subversion a un sistema decentralizzato Git.
    • È stato effettuato il testing di fuzzing del kernel di FreeBSD utilizzando il sistema syzkaller e sono stati corretti diversi errori riscontrati. È stata aggiunta una stratificazione per il testing di fuzzing delle librerie per la compatibilità con l'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, è previsto di ampliare la copertura del testing delle chiamate di sistema, utilizzare LLVM sanitizer per il controllo del kernel, impiegare netdump per salvare i dump del kernel durante i crash durante il testing di fuzzing, ecc.
    • È iniziato il lavoro di aggiornamento dell'implementazione di zlib a livello di kernel. Per l'accesso del kernel al codice di zlib, la cartella contrib/zlib è stata rinominata in sys/contrib/zlib; anche il file di intestazione crc.h è stato rinominato per evitare conflitti con zlib/crc.h. È stata effettuata una pulizia del codice obsoleto dipendente da zlib e inflate. In seguito, è previsto di garantire la possibilità di compilare il kernel sia con la vecchia che con la nuova versione di zlib per un trasferimento graduale alla nuova versione delle funzioni che utilizzano la compressione;
    • È stata aggiornata l'infrastruttura di emulazione dell'ambiente Linux (Linuxulator). È stata ampliata la supporto per gli strumenti di debug di Linux, come l'utilità strace. È stato aggiunto al pacchetto linux-c7-strace, che può essere utilizzato per tracciare i file eseguibili di Linux al posto delle utilità standard truss e ktrace, che al momento non possono decodificare alcuni flag e strutture specifiche di Linux. Inoltre, è stato aggiunto il pacchetto linux-ltp con i file eseguibili del Linux Test Project e sono stati risolti problemi di compatibilità con file eseguibili compilati con le nuove versioni di glibc;
    • L'implementazione delle operazioni di invalidazione ritardata dei collegamenti alle pagine di memoria fisica (delayed invalidation) nel meccanismo pmap è stata trasferita all'uso di un algoritmo di elaborazione della coda che funziona senza lock, il che ha permesso di risolvere i problemi di scalabilità durante l'esecuzione di un gran numero di operazioni unmap in parallelo.
    • È stato modificato il meccanismo di blocco del vnode durante l'esecuzione delle chiamate di sistema della famiglia execve(), il che ha consentito di migliorare l'efficienza del lavoro durante l'esecuzione simultanea di execve() per lo stesso file (ad esempio, durante le operazioni di compilazione in parallelo);
  • Sicurezza
    • Nel hypervisor bhyve è proseguita l'ottimizzazione del supporto per la migrazione live degli ambienti guest da un host all'altro e della funzionalità Save/Restore, che consente di congelare il sistema guest mantenendo lo stato in un file e poi riprendere l'esecuzione.
    • Attraverso l'uso della libreria libvdsk, in bhyve è stato aggiunto il supporto per le immagini disco nel formato QCOW2. È necessaria l'installazione di
      una versione appositamente modificata di bhyve, che è stata convertita per utilizzare gestori di operazioni sui file basati su libvdsk. Durante il periodo di rendicontazione, in libvdsk sono stati anche effettuati lavori per semplificare l'integrazione del supporto per nuovi formati, migliorando le prestazioni di lettura e scrittura, e aggiungendo il supporto per Copy-On-Write. Tra le restanti attività si segnala l'integrazione di libvdsk nella versione principale di bhyve;
    • Nei porti è stato aggiunto un sistema di raccolta di informazioni sul traffico
      Maltrail, che consente di creare trappole per richieste di rete dannose (vengono controllati gli indirizzi IP e i domini nelle liste nere) e di inviare informazioni sull'attività rilevata a un server centralizzato per un'eventuale blocco o analisi dei tentativi di attacco;
    • Nei porti è stata aggiunta una piattaforma per identificare attacchi, analizzare log e monitorare l'integrità dei file Wazuh (fork di Ossec con supporto per l'integrazione con ELK-Stack);
  • Sottosistema di rete
    • È stato aggiornato il driver ena con supporto per la seconda generazione di adattatori di rete ENAv2 (Elastic Network Adapter), utilizzati nell'infrastruttura Elastic Compute Cloud (EC2) per la connessione tra i nodi EC2 a velocità fino a 25 Gb/s. Nel driver ena è stato aggiunto il supporto per NETMAP.
    • In FreeBSD HEAD è stato adottato un nuovo stack MMC/SD, basato sul framework CAM, che consente di collegare dispositivi con interfaccia SDIO (Secure Digital I/O). Ad esempio, SDIO è utilizzato in moduli WiFi e Bluetooth per molte schede, come Raspberry Pi 3. Il nuovo stack consente anche di utilizzare l'interfaccia CAM per inviare comandi SD dalle applicazioni in user space, permettendo di creare driver per dispositivi operanti a livello utente. È iniziato il lavoro per la creazione di driver per i chip wireless Broadcom, che operano in modalità FullMAC (lato chip esegue una sorta di sistema operativo simile alla propria implementazione dello stack wireless 802.11);
    • Sono in corso lavori per l'implementazione di NFSv4.2 (RFC-7862) per FreeBSD. Nella nuova versione di NFS è stata aggiunta la supporto per le funzioni posix_fadvise, posix_fallocate, le modalità SEEKHOLE/SEEKDATA in lseek, e l'operazione di copia locale di parti di file sul server (senza inviarle al cliente).

      Attualmente per FreeBSD è già stata implementata una base di supporto per le operazioni LayoutError, IOAdvise, Allocate e Copy. Rimane da implementare l'operazione Seek, necessaria per l'uso di lseek(SEEKHOLE/SEEKDATA) con NFS. Il supporto per NFSv4.2 è previsto per essere incluso in FreeBSD 13;

  • Sistemi di archiviazione e file system
    • Il progetto di revisione del driver per il sottosistema FUSE (File system in USErspace) si sta avvicinando alla conclusione, consentendo di creare implementazioni di file system in user space. Il driver fornito inizialmente è obsoleto e contiene molti errori. Nell'ambito del progetto di modernizzazione del driver è stato implementato il supporto per il protocollo FUSE 7.23 (precedentemente era supportata la versione 7.8, rilasciata 11 anni fa), è stato aggiunto il codice per la verifica dei diritti di accesso a livello di kernel (“-o default_permissions”), sono stati aggiunti i richiami VOP_MKNOD, VOP_BMAP e VOP_ADVLOCK, è stata garantita la possibilità di interrompere le operazioni FUSE, è stato aggiunto il supporto per pipe anonime e socket unix in fusefs, è stata abilitata l'uso di kqueue per /dev/fuse, è stata autorizzata la modifica dei parametri di montaggio tramite “mount -u”, è stato implementato il supporto per l'esportazione di fusefs tramite NFS, è stata realizzata la contabilizzazione di RLIMIT_FSIZE, sono stati aggiunti i flag FOPEN_KEEP_CACHE e FUSE_ASYNC_READ, sono state apportate significative ottimizzazioni delle prestazioni e migliorata l'organizzazione della cache;
    • Nel codice di paging della memoria per lo swap è stata aggiunta la supporto per l'operazione BIO_DELETE, che consente di utilizzare il comando TRIM durante l'eliminazione di blocchi da SSD per prolungarne la vita.
  • Supporto hardware
    • Proseguono i lavori per implementare il supporto per il SoC ARM64 Broadcom BCM5871X con processori ARMv8 Cortex-A57, destinati all'uso in router, gateway e storage di rete. Durante il periodo di riferimento è stato migliorato il supporto per i bus PCIe iProc interni ed esterni, aggiunto il supporto per BNXT Ethernet e sono in corso lavori per attivare il crypto engine integrato per accelerare l'IPsec. L'integrazione del codice nel ramo HEAD è prevista per il secondo semestre.
    • È iniziato il lavoro per il supporto del SoC a 64 bit NXP LS1046A basato su processore ARMv8 Cortex-A72 con un motore integrato per accelerare l'elaborazione dei pacchetti di rete, Ethernet 10 Gb, PCIe 3.0, SATA 3.0 e USB 3.0. È già stato implementato il supporto per la piattaforma base (multi-user SMP) e SATA 3.0. Sono in fase di sviluppo il supporto per USB 3.0, SD/MMC e I2C. Sono previsti supporto per Ethernet, GPIO e QSPI. Il completamento del lavoro e l'inclusione nel ramo HEAD sono previsti per il quarto trimestre del 2019.
    • I driver mlx5en e mlx5ib per gli adattatori Ethernet e InfiniBand Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] e ConnectX-6 [Dx] sono stati aggiornati. È stato aggiunto il supporto per gli adattatori Mellanox Socket Direct (ConnectX-6), che consentono di raggiungere una larghezza di banda fino a 200 Gb/s sul bus PCIe Gen 3.0. Per i chip multi-core "BlueField" è stato aggiunto il supporto per il driver RShim. È stato aggiunto al ramo il pacchetto mstflint con un insieme di utility diagnostiche per gli adattatori Mellanox.
  • Applicazioni e sistema dei porti
    • I componenti dello stack grafico sono stati aggiornati. È stata portata la driver drm.ko (Direct Rendering Manager) dal kernel Linux 5.0. Questo driver è considerato sperimentale ed è stato aggiunto all'albero dei porti come graphics/drm-devel-kmod. Poiché il driver utilizza il framework aggiornato Linux KPI per la compatibilità con l'API DRM del kernel Linux, è richiesta la FreeBSD CURRENT per il suo funzionamento. È stato portato anche il driver drm vboxvideo.ko per la GPU virtuale VirtualBox. Il pacchetto Mesa è stato aggiornato alla versione 18.3.2 ed è stato modificato per utilizzare LLVM dal porto devel/llvm80 invece di devel/llvm60.
    • L'albero dei port di FreeBSD ha superato la soglia di 37000 porti, il numero di PR aperti si attesta a 2146. Durante il periodo di riferimento sono state apportate 7837 modifiche da 172 sviluppatori. Tre nuovi partecipanti hanno ottenuto i diritti di commit. Tra i significativi aggiornamenti delle versioni nei port si segnalano: MySQL 5.7, Python 3.6, Ruby 2.5, Samba 4.8, Julia 1.0, Firefox 68.0, Chromium 75.0.3770.100. Tutti i port nel linguaggio Go sono stati adattati all'uso del flag "USES=go". È stato aggiunto il flag "USES=cabal" per il gestore pacchetti Cabal, utilizzato per codice Haskell. È stata attivata la modalità di protezione dello stack. Per impostazione predefinita, viene proposta la versione Python 3.6 invece della 2.7.
    • È stato preparato il rilascio dell'utility nsysctl 1.0, che offre un'alternativa a /sbin/sysctl, utilizzando libxo per la visualizzazione e fornendo un set esteso di opzioni. Nsysctl può essere utilizzato per monitorare visivamente lo stato dei valori sysctl e presentare informazioni sugli oggetti in forma strutturata. È possibile l'output in formati XML, JSON e HTML;

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster