rapporto sullo sviluppo del progetto FreeBSD da aprile a giugno 2019. Tra le modifiche si possono notare:
- Domande generali e di sistema
- Il core team ha deciso di istituire un gruppo di lavoro per studiare la possibilità di trasferire i testi sorgente da un sistema centralizzato di gestione dei testi sorgente Subversion a un sistema decentralizzato Git.
- È stato condotto un fuzzing testing del kernel FreeBSD utilizzando il sistema e sono stati corretti diversi errori identificati in questo modo. È stato aggiunto uno strato per il fuzzing testing delle librerie per la compatibilità con l'ambiente a 32 bit su sistemi con kernel a 64 bit. È stata realizzata la possibilità di eseguire syzkaller in macchine virtuali basate su bhyve. Nella prossima fase, si prevede di espandere l'ambito del testing sui sistemi di chiamata, coinvolgere LLVM sanitizer per il controllo del kernel, utilizzare netdump per salvare i dump del kernel durante i crash durante il fuzzing testing, e così via.
- È iniziato il lavoro di aggiornamento dell'implementazione di zlib a livello di kernel. Per consentire l'accesso del kernel al codice zlib, la directory contrib/zlib è stata rinominata in sys/contrib/zlib; inoltre, il file di intestazione crc.h è stato rinominato per evitare conflitti con zlib/crc.h. È stata eseguita una pulizia del codice obsoleto dipendente da zlib e inflate. In futuro, si prevede di garantire la possibilità di compilare il kernel con la vecchia e la nuova zlib contemporaneamente per una transizione 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 Linux, come l'utilità strace. Nei porti è stato aggiunto il pacchetto linux-c7-strace, che può essere utilizzato per tracciare file eseguibili Linux al posto delle utilities standard truss e ktrace, che attualmente non riescono a decodificare alcuni flag e strutture specifici di Linux. Inoltre, è stato aggiunto il pacchetto linux-ltp con i file eseguibili del Linux Test Project e risolti problemi di compatibilità con i file eseguibili compilati con le nuove versioni di glibc.
- L'implementazione delle operazioni di invalidazione ritardata dei collegamenti alle pagine fisiche della memoria (delayed invalidation) nel meccanismo pmap è stata convertita per utilizzare un algoritmo di gestione della coda senza locking, risolvendo i problemi di scalabilità durante l'esecuzione di un elevato numero di operazioni unmap parallele;
- È stato modificato il meccanismo di locking del vnode durante le chiamate di sistema della famiglia execve(), migliorando così l'efficienza durante l'esecuzione simultanea di execve() per lo stesso file (ad esempio, durante le operazioni di building con il parallelismo del compilatore);
- Sicurezza
- Nel hypervisor bhyve sono proseguiti i miglioramenti nel supporto della migrazione live delle macchine virtuali da un host all'altro e della funzionalità di Salvataggio/Ripristino, che permette di congelare il sistema guest mantenendo lo stato in un file, per poi riprendere l'esecuzione.
- Attraverso l'uso della libreria libvdsk, è stato aggiunto in bhyve il supporto per immagini disco nel formato QCOW2. È necessaria l'installazione di
versione di bhyve, che è stata trasferita per utilizzare gestori di operazioni sui file basati su libvdsk. Durante il periodo di riferimento, in libvdsk sono stati semplificati anche l'integrazione del supporto per nuovi formati, migliorate le prestazioni di lettura e scrittura e aggiunto il supporto per Copy-On-Write. Tra le attività rimaste, si segnala l'integrazione di libvdsk nel nucleo di bhyve; - Sistemi di raccolta informazioni sul traffico sono stati aggiunti ai porti
, che consente di creare trappole per richieste di rete dannose (vengono controllati IP e domini da blacklist) e di inviare informazioni sulle attività identificate a un server centralizzato per bloccare o analizzare tentativi di attacco; - Piattaforme per identificare attacchi, analizzare i registri e monitorare l'integrità dei file sono state aggiunte ai porti (fork di Ossec con supporto per l'integrazione con );
- Sottosistema di rete
- Il driver ena è stato aggiornato con supporto per la seconda generazione di adattatori di rete ENAv2 (Elastic Network Adapter), utilizzati nella infrastruttura Elastic Compute Cloud (EC2) per stabilire comunicazioni tra nodi EC2 a velocità fino a 25 Gb/s. Il driver ena ha aggiunto supporto per NETMAP.
- È stato integrato in FreeBSD HEAD un nuovo stack MMC/SD, basato sul framework CAM, che consente di collegare dispositivi con interfaccia SDIO (Secure Digital I/O). Ad esempio, l'SDIO è utilizzato nei moduli WiFi e Bluetooth per molte schede, come la Raspberry Pi 3. Il nuovo stack permette anche di utilizzare l'interfaccia CAM per inviare comandi SD dalle applicazioni nello spazio utente, consentendo così la creazione di driver per dispositivi che operano a livello utente. Sono iniziati i lavori per la realizzazione di driver per i chip wireless Broadcom, che operano in modalità FullMAC (sul chip è eseguita una sorta di sistema operativo con implementazione del proprio stack wireless 802.11).
- È in corso di sviluppo 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, e le modalità SEEKHOLE/SEEKDATA in lseek, oltre all'operazione di copia locale di porzioni di file sul server (senza trasmettere al client).
Attualmente, FreeBSD ha già implementato il supporto base per le operazioni LayoutError, IOAdvise, Allocate e Copy. Resta da implementare l'operazione Seek, necessaria per utilizzare lseek(SEEKHOLE/SEEKDATA) con NFS. Il supporto per NFSv4.2 è previsto per essere incluso in FreeBSD 13.
- Sistemi di archiviazione e file system
- Si sta avvicinando alla conclusione il progetto di revisione del driver del sottosistema FUSE (File system in USErspace), che consente di creare implementazioni di file system nello spazio utente. Il driver fornito inizialmente era obsoleto e conteneva numerosi errori. Nell'ambito del progetto di modernizzazione del 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 la verifica dei diritti di accesso lato kernel («-o default_permissions»), sono state introduzioni le chiamate 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 resa possibile l'utilizzo di kqueue per /dev/fuse, è stato consentito l'aggiornamento dei parametri di montaggio tramite «mount -u», è stato implementato l'export di fusefs tramite NFS, è stato realizzato il monitoraggio di RLIMIT_FSIZE, sono stati aggiunti i flag FOPEN_KEEP_CACHE e FUSE_ASYNC_READ, sono state effettuate significative ottimizzazioni delle prestazioni e migliorata l'organizzazione della cache.
- Nel codice di sostituzione della memoria nel file di swap (swap pager) è stata aggiunta la supporto per l'operazione BIO_DELETE, che consente di utilizzare il comando TRIM durante l'eliminazione dei blocchi dai dischi SSD per prolungarne la vita utile.
- Supporto hardware
- Continuano i lavori per implementare il supporto per il SoC ARM64 Broadcom BCM5871X con processori ARMv8 Cortex-A57, destinati all'uso in router, gate e NAS. Nel periodo di riferimento è stato migliorato il supporto per i bus interni ed esterni iProc PCIe, è stata aggiunta la supporto per Ethernet BNXT, e si sta lavorando per utilizzare il motore crittografico integrato per accelerare l'IPsec. L'integrazione del codice nel ramo principale è prevista per il secondo semestre.
- È iniziato il lavoro per il supporto del SoC NXP LS1046A a 64 bit basato sul processore ARMv8 Cortex-A72 con un motore integrato per l'accelerazione dell'elaborazione dei pacchetti di rete, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 e USB 3.0. È già stato implementato il supporto per la piattaforma di base (multi-user SMP) e SATA 3.0. Sono in fase di sviluppo la supporto per USB 3.0, SD/MMC e I2C. Nei piani c'è il supporto per Ethernet, GPIO e QSPI. Il completamento dei lavori e l'inclusione nel ramo principale è previsto 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. È stata aggiunta la supporto per gli adattatori Mellanox Socket Direct (ConnectX-6), che consentono di raggiungere una larghezza di banda fino a 200 Gb/s su un bus PCIe Gen 3.0. Per i chip multi-core "BlueField" è stata aggiunta la supporto per il driver RShim. È stato aggiunto il pacchetto mstflint con un insieme di strumenti diagnostici per gli adattatori Mellanox;
- Applicazioni e sistema di porte
- Sono stati aggiornati i componenti dello stack grafico. È stata effettuata la portabilità del driver drm.ko (Direct Rendering Manager) dal kernel Linux 5.0. Questo driver è considerato sperimentale ed è stato aggiunto all'albero delle porte come graphics/drm-devel-kmod. Poiché il driver utilizza il framework aggiornato Linux KPI per la compatibilità con l'API DRM del kernel Linux, è necessaria la FreeBSD CURRENT per il corretto funzionamento. È stato anche portato il driver drm vboxvideo.ko per la GPU virtuale VirtualBox. Il pacchetto Mesa è stato aggiornato alla versione 18.3.2 ed è stato convertito per utilizzare LLVM dal porto devel/llvm80 invece di devel/llvm60.
- L'albero dei porti FreeBSD ha superato la soglia di 37.000 porti, mentre il numero di PR aperti rimane a 2.146. Nel periodo di riferimento sono state apportate 7.837 modifiche da 172 sviluppatori. Tre nuovi membri hanno ottenuto i diritti di commit. Tra i principali aggiornamenti delle versioni nei porti 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. Tutti i porti in linguaggio Go sono stati convertiti per utilizzare il flag "USES=go". È stato aggiunto il flag "USES=cabal" per il gestore di pacchetti Cabal, utilizzato per il codice Haskell. È stata inclusa una modalità di protezione dello stack rigorosa. Per impostazione predefinita, è stata proposta la versione Python 3.6 invece della 2.7.
- È stato preparato il rilascio dell'utilità , che offre un'alternativa a /sbin/sysctl, utilizzando per l'output e fornendo un set ampliato di opzioni. Nsysctl può essere utilizzato per monitorare graficamente lo stato dei valori sysctl e presentare informazioni sugli oggetti in formato strutturato. È possibile l'output nei formati XML, JSON e HTML;
Fonte: opennet.ru
