Foi apresentado o lançamento do projeto QEMU 7.1. Como emulador, o QEMU permite executar um programa criado para uma plataforma de hardware em um sistema com uma arquitetura completamente diferente, por exemplo, executar um aplicativo para ARM em um PC compatível com x86. No modo de virtualização, o desempenho da execução de código em um ambiente isolado é próximo ao de um sistema de hardware devido à execução direta das instruções na CPU e ao uso do hipervisor Xen ou do módulo KVM.
O projeto foi inicialmente criado por Fabrice Bellard com o objetivo de possibilitar a execução de arquivos executáveis Linux compilados para plataformas x86 em arquiteturas diferentes de x86. Ao longo dos anos de desenvolvimento, foi adicionada a suporte para emulação completa de 14 arquiteturas de hardware, e o número de dispositivos de hardware emulados ultrapassou 400. Para a versão 7.1, foram feitas mais de 2800 alterações por 238 desenvolvedores.
Melhorias principais adicionadas no QEMU 7.1:
- Na plataforma Linux, foi implementada a opção zero-copy-send, que permite a transferência de páginas de memória durante a migração ao vivo sem bufferização intermediária.
- No QMP (QEMU Machine Protocol), foi adicionada a possibilidade de usar o comando block-export-add para exportar imagens NBD com informações sobre páginas no estado 'dirty'. Novos comandos 'query-stats' e 'query-stats-schema' também foram adicionados para solicitar estatísticas de várias subsistemas do QEMU.
- No agente para sistemas convidados, melhorou o suporte à plataforma Solaris e foram adicionados novos comandos 'guest-get-diskstats' e 'guest-get-cpustats' para exibir o estado dos discos e da CPU. A saída do comando 'guest-get-disks' agora inclui informações do NVMe SMART, e o comando 'guest-get-fsinfo' exibe dados sobre o tipo de barramento NVMe.
- Foi adicionado um novo emulador LoongArch com suporte para a versão de 64 bits do conjunto de instruções da arquitetura LoongArch (LA64). O emulador oferece suporte aos processadores Loongson 3 5000 e aos chipsets Loongson 7A1000.
- No emulador ARM, foram implementados novos tipos de máquinas emuladas: SoC Aspeed AST1030, Qualcomm e AST2600 / AST1030 (fby35). Foi adicionada a suporte para emulação da CPU Cortex-A76 e Neoverse-N1, bem como extensões de processador SME (Scalable Matrix Extensions), RAS (Reliability, Availability, Serviceability) e comandos para bloquear vazamentos do cache interno durante a execução especulativa das instruções na CPU. Para máquinas 'virt', foi implementada a emulação do controlador de interrupções GICv4.
- No emulador da arquitetura x86 para KVM adicionada a supporte para a virtualização do mecanismo de rastreamento LBR (Last Branch Record).
- No emulador da arquitetura HPPA, foi proposta uma nova firmware baseada no SeaBIOS v6, que suporta o uso de teclado PS/2 no menu de inicialização. Melhorou a emulação da porta serial. Foram adicionadas fontes de console STI adicionais.
- No emulador da arquitetura MIPS para placas Nios2 (-machine 10m50-ghrd), foi implementada a emulação do Controlador de Interrupção Vetorial (Vectored Interrupt Controller) e do conjunto de registros em modo sombra. A manipulação de exceções foi aprimorada.
- No emulador da arquitetura OpenRISC para a máquina ‘or1k-sim’ foi adicionada a possibilidade de uso de até 4 dispositivos UART 16550A.
- No emulador da arquitetura RISC-V, foi adicionada a suporte para novas extensões do conjunto de instruções (ISA) definidas na especificação 1.12.0, além do suporte à extensão Sdtrig e melhorias no suporte a instruções vetoriais. As funcionalidades para depuração foram ampliadas. Na máquina emulada ‘virt’, foi adicionada a suporte a TPM (Trusted Platform Module), e na máquina ‘OpenTitan’ — a suporte a Ibex SPI.
- No emulador da arquitetura 390x, foi garantida a suporte para as extensões VEF 2 (Vector-Enhancements Facility 2). No BIOS s390-ccw, foi implementada a possibilidade de inicialização a partir de discos com tamanho de setor diferente de 512 bytes.
- No emulador da arquitetura Xtensa, foi adicionada a suporte para núcleos lx106 e códigos objeto para teste de cache.
Fonte: opennet.ru
