Informe de desarrollo de FreeBSD Q2020 XNUMX

publicado Informe sobre el desarrollo del proyecto FreeBSD de enero a marzo de 2020. Los cambios incluyen:

  • Preguntas generales y de sistema.
    • Se eliminó el conjunto de compiladores GCC del árbol de fuentes FreeBSD-CURRENT, así como las utilidades no utilizadas gperf, gcov y gtc (compilador de árbol de dispositivos). Todas las plataformas que no son compatibles con Clang han pasado a utilizar herramientas de compilación externas instaladas desde los puertos. El sistema base incluía una versión 4.2.1 desactualizada de GCC y la integración de versiones más nuevas no fue posible debido al cambio de 4.2.2 a la licencia GPLv3, que se consideró inaceptable para los componentes principales de FreeBSD. Las versiones actuales de GCC, incluido GCC 9, aún se pueden instalar desde paquetes y puertos.
    • Se ha agregado soporte para la llamada al sistema sendfile, modo TCP_CORK (requerido para nginx), indicador MAP_32BIT (resuelve el problema con la ejecución de paquetes con Mono de Ubuntu Bionic) a la infraestructura de emulación del entorno Linux (Linuxulator). Se solucionaron problemas con la resolución de DNS al usar glibc posterior a 2.30 (por ejemplo, de CentOS 8).
      El marco de integración continua proporciona trabajos en ejecución para ejecutar un LTP (Proyecto de prueba de Linux) en Linuxulator para probar mejoras en el código para admitir Linux. Aproximadamente 400 pruebas fallan y deben corregirse (algunos errores se deben a falsos positivos, algunos requieren correcciones triviales, pero hay otros que requieren soporte de nuevas llamadas al sistema para corregirse). Se ha trabajado para limpiar el código de Linuxulator y simplificar la depuración. Parches preparados, pero aún no revisados, con soporte para atributos extendidos y la llamada al sistema fexecve.

    • Continúan las reuniones del grupo de trabajo creado para realizar la migración de códigos fuente desde el sistema centralizado de gestión de código fuente Subversion al sistema descentralizado Git. Se está preparando un informe con propuestas para la migración.
    • В rtld (enlazador de tiempo de ejecución) modo de ejecución directa mejorado ("/libexec/ld-elf.so.1 {ruta} {argumentos}").
    • Continúa desarrollándose un proyecto para realizar pruebas fuzz del kernel de FreeBSD utilizando el sistema syzkaller. Durante el período del informe, se solucionaron problemas en la pila de red y en el código para trabajar con tablas de descriptores de archivos, identificados mediante syzkaller. A raíz del diagnóstico de errores, se agregaron cambios a la pila SCTP para facilitar la depuración. Se agregaron reglas al conjunto de estrés2 para detectar posibles regresiones. Se agregó soporte para pruebas difusas de nuevas llamadas al sistema, incluidas copy_file_range(), __realpathat() y llamadas al subsistema Capsicum. Se continúa trabajando para cubrir la capa de emulación de Linux con pruebas de fuzzing. Analicé y eliminé los errores observados en los últimos informes de Coverity Scan.
    • En el sistema de integración continua, se realizó una transición para ejecutar todas las pruebas de la rama principal solo usando clang/lld. Al realizar pruebas de RISC-V, se proporciona la formación de una imagen de disco completa para ejecutar pruebas en QEMU utilizando OpenSBI. Se agregaron nuevas tareas para probar imágenes y máquinas virtuales de powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • Se está trabajando para trasladar el conjunto de pruebas de Kyua desde los puertos (devel/kyua) al sistema base para abordar los problemas (los paquetes son muy lentos) que surgen al usar Kyua en nuevas arquitecturas que se están desarrollando usando un emulador o FPGA. La integración en el sistema base simplificará enormemente las pruebas de plataformas integradas y la interfaz con sistemas de integración continua.
    • Se inició un proyecto para optimizar el rendimiento del controlador del puente de red. si_puente, que utiliza un mutex para bloquear datos internos, lo que no permite lograr el rendimiento deseado en sistemas con una gran cantidad de entornos encarcelados o máquinas virtuales conectadas a la misma red. En esta etapa, se han agregado pruebas al código para evitar regresiones en el proceso de modernización del trabajo con cerraduras. Se está considerando la posibilidad de utilizar ConcurrencyKit para paralelizar los controladores de transferencia de datos (bridge_input(), bridge_output(), bridge_forward(), ...).
    • Se agregó una nueva llamada al sistema sigfastblock para permitir que un subproceso especifique un bloque de memoria para un controlador de señales rápido para mejorar el rendimiento de los controladores de excepciones.
    • El kernel agrega soporte para instrucciones atómicas LSE (Large System Extension) compatibles con los sistemas ARMv8.1. Estas instrucciones son necesarias para mejorar el rendimiento cuando se ejecuta en placas Cavium ThunderX2 y AWS Graviton 2. Los cambios agregados detectan la presencia de soporte LSE y habilitan dinámicamente la implementación atómica basada en ellos. Durante las pruebas, el uso de LSE permitió reducir en un 15% el tiempo de CPU dedicado a ensamblar el kernel.
    • Se ha optimizado el rendimiento y se ha ampliado la funcionalidad del kit de herramientas para archivos ejecutables en formato ELF.
      Se agregó soporte para almacenar en caché la información de depuración de DWARF, se resolvieron problemas en las utilidades elfcopy/objcopy, se agregó procesamiento DW_AT_ranges,
      readelf implementa la capacidad de decodificar los indicadores PROTMAX_DISABLE, STKGAP_DISABLE y WXNEEDED, así como Xen y GNU Build-ID.

  • seguridad
    • Para mejorar el rendimiento de FreeBSD en entornos de nube de Azure, se está trabajando para brindar soporte para el mecanismo HyperV Socket, que permite utilizar la interfaz de socket para interactuar con el sistema invitado con el entorno host sin configurar una red.
    • Se está trabajando para proporcionar compilaciones repetibles de FreeBSD para garantizar que los archivos ejecutables de los componentes del sistema se creen exactamente a partir de las fuentes declaradas y no contengan cambios extraños.
    • Se ha agregado a la utilidad elfctl la capacidad de controlar la inclusión de mecanismos de protección adicionales (ASLR, PROT_MAX, stack gap, mapeo W + X) a nivel de procesos individuales.
  • Sistemas de almacenamiento y archivos.
    • Se está trabajando para implementar la capacidad de trabajar con NFS a través de un canal de comunicación cifrado basado en TLS 1.3, en lugar de usar Kerberos (modo sec=krb5p), que se limita a cifrar solo mensajes RPC y se implementa solo en software. La nueva implementación utiliza la pila TLS proporcionada por el kernel para permitir la aceleración de hardware. El código NFS sobre TLS está casi listo para ser probado, pero aún requiere trabajo para admitir certificados de cliente firmados y adaptar la pila TLS del kernel para enviar datos NFS (los parches para recibir ya están listos).
  • Soporte de hardware
    • Se está trabajando para agregar soporte para la CPU china x86 Hygon basada en tecnologías AMD;
    • Dentro de CheriBSD, una bifurcación de FreeBSD para arquitectura de procesadores de investigación CHERI (Instrucciones RISC mejoradas de capacidad de hardware), continúa la implementación de soporte para el procesador ARM Morello, que soportará el sistema de control de acceso a memoria CHERI basado en el modelo de seguridad Capsicum. chip morello están planeando lanzamiento en 2021. Actualmente, el trabajo se centra en agregar soporte para la plataforma Arm Neoverse N1 que sustenta a Morello. Se ha introducido una adaptación inicial de CheriBSD para la arquitectura RISC-V. Continúa el desarrollo de CheriBSD para el prototipo de referencia CHERI basado en la arquitectura MIPS64.
    • Continuó la migración de FreeBSD al SoC NXP LS64A de 1046 bits basado en el procesador ARMv8 Cortex-A72 con motor de aceleración de procesamiento de paquetes de red integrado, Ethernet de 10 Gb, PCIe 3.0, SATA 3.0 y USB 3.0. Los controladores QorIQ y LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI se están preparando actualmente para su transferencia al equipo principal de FreeBSD.
    • El controlador ena se actualizó a la versión 2.1.1 para admitir la segunda generación de adaptadores de red ENAv2 (Elastic Network Adapter) utilizados en la infraestructura Elastic Compute Cloud (EC2) para organizar la comunicación entre nodos EC2 a velocidades de hasta 25 Gb/s. Se está preparando una actualización a ENA 2.2.0.
    • Se continúa mejorando el puerto FreeBSD para la plataforma powerpc64. La atención se centra en garantizar un rendimiento de calidad en sistemas con procesadores IBM POWER8 y POWER9. Durante el período del informe, se cambió FreeBSD-CURRENT para usar el compilador LLVM/Clang 10.0 y el vinculador lld en lugar de GCC. La ABI ELFv64 está habilitada de forma predeterminada para los sistemas powerpc2 y la ABI ELFv1 ha quedado obsoleta. FreeBSD-STABLE todavía tiene gcc 4.2.1. Se solucionaron problemas con los controladores virtio, aacraid e ixl. En los sistemas powerpc64, es posible ejecutar QEMU sin compatibilidad con Huge Pages.
    • Se continuó trabajando en la implementación del soporte para la arquitectura RISC-V. En su forma actual, FreeBSD ya se inicia con éxito en la placa SiFive Hifive Unleashed, para la cual se han preparado controladores.
      UART, SPI y PRCI, admite firmware OpenSBI y SBI 0.2. Durante el período que abarca el informe, el trabajo se centró en la migración de GCC a clang y lld.

  • Sistema de aplicaciones y puertos.
    • La Colección de Ports de FreeBSD ha superado el hito de 39 ports, el número de PR abiertos supera ligeramente los 2400, de los cuales 640 PR aún están pendientes. Durante el período del informe, 8146 desarrolladores realizaron 173 cambios. Cuatro nuevos miembros (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore) recibieron derechos de comisionado. Se agregó el indicador USES=qca y se eliminó el indicador USES=zope (debido a incompatibilidad con Python 3). Se está trabajando para eliminar Python 2.7 del árbol de puertos: todos los puertos vinculados a Python 2 deben migrarse a Python 3 o se eliminarán. El administrador de paquetes pkg se actualizó a la versión 1.13.2.
    • Componentes de pila de gráficos actualizados y puertos relacionados con xorg.
      El servidor X.org se actualizó a la versión 1.20.8 (anteriormente se envió una rama 1.18), lo que permite a FreeBSD utilizar de forma predeterminada el backend udev/evdev para manejar dispositivos de entrada. El paquete Mesa se ha traducido de forma predeterminada para utilizar la extensión DRI3 en lugar de DRI2. Se está trabajando para mantener actualizados los controladores de gráficos, la pila de dispositivos de entrada y los componentes drm-kmod (un puerto que proporciona módulos DRM amdgpu, i915 y radeon, utilizando el marco linuxkpi para compatibilidad con Direct Rendering Manager del kernel de Linux). ).

    • El escritorio KDE Plasma, KDE Frameworks, KDE Applications y Qt se mantienen actualizados y actualizados con las últimas versiones. Se ha agregado a los puertos una nueva aplicación kstars (star atlas).
    • Se ha trabajado para eliminar los cambios regresivos en el administrador de ventanas xfwm4 que surgieron después de actualizar Xfce a la versión 4.14 (por ejemplo, aparecieron artefactos al decorar ventanas).
    • El port con Wine se actualizó al lanzamiento de Wine 5.0 (anteriormente se ofrecía 4.0.3).
    • A partir de la versión 1.14, el compilador Go agregó soporte oficial para la arquitectura ARM64 para FreeBSD 12.0.
    • OpenSSH en el sistema base se actualizó a la versión 7.9p1.
    • Implementada y colocada en los puertos (devel/libsysctlmibinfo2) está la biblioteca sysctlmibinfo2, que proporciona una API para acceder a la MIB de sysctl y traducir los nombres de sysctl en identificadores de objetos (OID).
    • Actualización de distribución generada NomadBSD 1.3.1, que es una edición de FreeBSD adaptada para su uso como escritorio portátil que se puede iniciar desde una unidad USB. El entorno gráfico se basa en un gestor de ventanas. Openbox. Se utiliza para montar unidades. DSBMD (se admite el montaje de CD9660, FAT, HFS+, NTFS, Ext2/3/4), para configurar una red inalámbrica: wifimgr, y para controlar el volumen - DSBMixer.
    • Iniciado trabajo sobre la redacción de documentación completa para el administrador del entorno carcelario lata. Se está preparando el lanzamiento de Pot 0.11.0, que introducirá herramientas de gestión de pila de red.

Fuente: opennet.ru

Añadir un comentario