informe sobre el desarrollo del proyecto FreeBSD de abril a junio de 2019. Entre los cambios se pueden señalar:
- Cuestiones generales y sistemáticas
- El equipo central decidió establecer un grupo de trabajo para estudiar la posibilidad de traducir los textos fuente de un sistema centralizado de gestión de textos fuente Subversion a un sistema descentralizado Git.
- Se realizó una prueba de fuzzing en el núcleo de FreeBSD utilizando el sistema y se corrigieron varios errores identificados durante el proceso. Se añadió una capa para realizar pruebas de fuzzing en las bibliotecas para la compatibilidad con entornos de 32 bits en sistemas con un núcleo de 64 bits. Se implementó la posibilidad de ejecutar syzkaller en máquinas virtuales basadas en bhyve. En la siguiente etapa, se planea ampliar la cobertura de pruebas de llamadas al sistema, emplear LLVM sanitizer para verificar el núcleo, utilizar netdump para guardar volcados del núcleo durante fallos en las pruebas de fuzzing, etc.
- Se inició el trabajo de actualización de la implementación de zlib a nivel del núcleo. Para que el núcleo acceda al código de zlib, el directorio contrib/zlib se renombró a sys/contrib/zlib, y también se renombró el archivo de encabezado crc.h para evitar conflictos con zlib/crc.h. Se realizó una limpieza del código obsoleto dependiente de zlib e inflate. A continuación, se planea permitir la compilación del núcleo simultáneamente con la versión antigua y nueva de zlib para una transición gradual a la nueva versión de funciones que utilizan compresión;
- Se actualizó la infraestructura de emulación del entorno Linux (Linuxulator). Se amplió el soporte para herramientas de depuración de Linux, como la utilidad strace. Se añadió al puerto el paquete linux-c7-strace, que puede utilizarse para rastrear archivos ejecutables de Linux en lugar de las utilidades estándar truss y ktrace, que aún no pueden decodificar algunas flags y estructuras específicas de Linux. Además, se añadió el paquete linux-ltp con archivos ejecutables del Linux Test Project y se resolvieron problemas de compatibilidad con archivos ejecutables compilados con nuevas versiones de glibc;
- La implementación de operaciones de limpieza diferida de enlaces a páginas físicas de memoria (delayed invalidation) en el mecanismo pmap se ha migrado a un algoritmo de procesamiento de colas que funciona sin bloqueos, lo que ha permitido resolver problemas de escalabilidad al realizar un gran número de operaciones paralelas de unmap;
- Se ha modificado el mecanismo de bloqueo de vnode durante la ejecución de las llamadas del sistema de la familia execve(), lo que ha permitido lograr una mayor eficiencia al ejecutar execve() simultáneamente para el mismo archivo (por ejemplo, durante operaciones de compilación con ejecución paralela del compilador);
- Seguridad
- En el hipervisor bhyve, se ha continuado mejorando el soporte para la migración en vivo de entornos invitados de un host a otro y la funcionalidad de Guardar/Restaurar, que permite congelar el sistema invitado mientras guarda su estado en un archivo y luego reanudar la ejecución.
- A través del uso de la biblioteca libvdsk, se ha añadido soporte para imágenes de disco en formato QCOW2 en bhyve. Se requiere la instalación
de bhyve, que ha sido adaptada para utilizar controladores de operaciones de archivos basados en libvdsk. Durante el período de informe, también se han realizado trabajos en libvdsk para simplificar la integración de nuevos formatos, mejorar el rendimiento de lectura y escritura, y se ha añadido soporte para Copy-On-Write. Entre las tareas restantes se destaca la integración de libvdsk en la composición principal de bhyve; - Se ha agregado al puerto un sistema de recopilación de información sobre el tráfico,
que permite crear trampas para solicitudes de red maliciosas (se verifican IP y dominios de listas negras) y enviar información sobre la actividad detectada a un servidor centralizado para su posterior bloqueo o análisis de intentos de ataque; - Se ha añadido al puerto una plataforma para detectar ataques, analizar registros y rastrear la integridad de archivos, (fork de Ossec con soporte de integración con );
- Subsistema de red
- Se ha actualizado el controlador ena con soporte para la segunda generación de adaptadores de red ENAv2 (Elastic Network Adapter), utilizados en la infraestructura Elastic Compute Cloud (EC2) para establecer la comunicación entre nodos EC2 a velocidades de hasta 25 Gb/s. Se ha añadido soporte para NETMAP al controlador ena.
- Se ha aceptado un nuevo stack MMC/SD en FreeBSD HEAD, basado en el marco CAM, que permite conectar dispositivos con interfaz SDIO (Secure Digital I/O). Por ejemplo, SDIO se utiliza en módulos WiFi y Bluetooth para muchas placas, como Raspberry Pi 3. El nuevo stack también permite utilizar la interfaz CAM para enviar comandos SD desde aplicaciones en el espacio de usuario, lo que posibilita crear controladores de dispositivos que operan a nivel de usuario. Se ha comenzado a trabajar en la creación de controladores para chips inalámbricos Broadcom que operan en modo FullMAC (donde el chip ejecuta una especie de su propio sistema operativo con su implementación del stack inalámbrico 802.11);
- Se está trabajando en la implementación de NFSv4.2 (RFC-7862) para FreeBSD. La nueva versión de NFS incluye soporte para funciones posix_fadvise, posix_fallocate, modos SEEKHOLE/SEEKDATA en lseek, y operaciones de copia local de partes de archivos en el servidor (sin transmisión al cliente).
Actualmente, FreeBSD ya ha implementado el soporte básico para las operaciones LayoutError, IOAdvise, Allocate y Copy. Permanece por implementar la operación Seek, que es necesaria para utilizar lseek(SEEKHOLE/SEEKDATA) con NFS. Se planea incluir el soporte para NFSv4.2 en FreeBSD 13;
- Sistemas de almacenamiento y sistemas de archivos
- Se está acercando a su finalización un proyecto para revisar el controlador del subsistema FUSE (File system in USErspace), que permite crear implementaciones de sistemas de archivos en el espacio de usuario. El controlador suministrado originalmente está obsoleto y contiene muchos errores. Como parte del proyecto de modernización del controlador, se ha implementado el soporte para el protocolo FUSE 7.23 (anteriormente se soportaba la versión 7.8, lanzada hace 11 años), se ha añadido código para verificar los derechos de acceso del lado del kernel (‘-o default_permissions’), se han incorporado llamadas a VOP_MKNOD, VOP_BMAP y VOP_ADVLOCK, se ha asegurado la posibilidad de interrumpir operaciones FUSE, se ha añadido soporte para tubos anónimos y sockets unix en fusefs, se ha facilitado el uso de kqueue para /dev/fuse, se ha permitido actualizar los parámetros de montado a través de ‘mount -u’, se ha implementado la exportación de fusefs a través de NFS, se ha realizado un seguimiento de RLIMIT_FSIZE, se han añadido los flags FOPEN_KEEP_CACHE y FUSE_ASYNC_READ, y se han realizado significativas optimizaciones de rendimiento y mejoras en la organización de la caché;
- En el código para el intercambio de páginas de memoria en el paginador de intercambio (swap pager), se ha añadido soporte para la operación BIO_DELETE, que permite utilizar el comando TRIM en el proceso de eliminación de bloques de unidades SSD para aumentar su vida útil.
- Soporte de hardware
- Se ha continuado el trabajo en la implementación del soporte para el SoC ARM64 Broadcom BCM5871X con procesadores ARMv8 Cortex-A57, destinado a su uso en enrutadores, gateways y almacenamiento en red. Durante el periodo informe se mejoró el soporte de los buses internos y externos iProc PCIe, se añadió soporte para BNXT Ethernet, y se avanza en la integración de un motor criptográfico incorporado para acelerar IPsec. La integración del código en la rama HEAD se espera para el segundo semestre;
- Se ha iniciado el trabajo en el soporte para el SoC NXP LS1046A de 64 bits basado en el procesador ARMv8 Cortex-A72, con un motor integrado de aceleración de procesamiento de paquetes de red, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 y USB 3.0. Ya se ha implementado el soporte para la plataforma base (multiusuario SMP) y SATA 3.0. Se está desarrollando el soporte para USB 3.0, SD/MMC e I2C. Está en planificación el soporte para Ethernet, GPIO y QSPI. Se espera que el trabajo esté finalizado e integrado en la rama HEAD para el cuarto trimestre de 2019.
- Se han actualizado los controladores mlx5en y mlx5ib para adaptadores Ethernet e InfiniBand Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] y ConnectX-6 [Dx]. Se añadió soporte para los adaptadores Mellanox Socket Direct (ConnectX-6), que permiten lograr un ancho de banda de hasta 200 Gb/s en el bus PCIe Gen 3.0. Se ha añadido soporte para el controlador RShim en los chips multi-core 'BlueField'. En los puertos se añadió el paquete mstflint con un conjunto de utilidades diagnósticas para los adaptadores Mellanox;
- Aplicaciones y sistema de puertos
- Se han actualizado los componentes de la pila gráfica. Se realizó la portación del controlador drm.ko (Direct Rendering Manager) del núcleo Linux 5.0. Este controlador se considera experimental y se ha añadido al árbol de puertos como graphics/drm-devel-kmod. Dado que el controlador utiliza el marco actualizado Linux KPI para ser compatible con la API DRM del núcleo Linux, se requiere FreeBSD CURRENT para su funcionamiento. También se ha portado el controlador drm vboxvideo.ko para el GPU virtual de VirtualBox. El paquete Mesa se ha actualizado a la versión 18.3.2 y se ha transferido para usar LLVM desde el puerto devel/llvm80 en lugar de devel/llvm60.
- El árbol de puertos de FreeBSD ha superado el umbral de 37000 puertos, y el número de PR abiertos se mantiene en 2146. Durante el periodo informe se realizaron 7837 cambios por parte de 172 desarrolladores. Tres nuevos participantes han obtenido los derechos de committer. Entre las actualizaciones significativas de versiones en los puertos se encuentran: MySQL 5.7, Python 3.6, Ruby 2.5, Samba 4.8, Julia 1.0, Firefox 68.0, Chromium 75.0.3770.100. Todos los puertos en lenguaje Go han sido migrados para utilizar la bandera "USES=go". Se ha añadido la bandera "USES=cabal" para el gestor de paquetes Cabal, utilizado para código en Haskell. Se ha habilitado el modo estricto de protección de pila. Por defecto, se ofrece la versión Python 3.6 en lugar de 2.7.
- Se ha preparado el lanzamiento de la herramienta , que ofrece una alternativa a \/sbin\/sysctl, usando para la salida y proporcionando un conjunto ampliado de opciones. Nsysctl se puede utilizar para monitorear visualmente el estado de los valores de sysctl y presentar información sobre objetos de forma estructurada. La salida es posible en formatos XML, JSON y HTML;
Fuente: opennet.ru
