premiera projektu . Jako emulator QEMU pozwala uruchomić program skompilowany dla jednej platformy sprzętowej na systemie o zupełnie innej architekturze, na przykład uruchomić aplikację dla ARM na komputerze z procesorem zgodnym z x86. W trybie wirtualizacji w QEMU wydajność wykonywania kodu w izolowanym środowisku jest bliska natywnej dzięki bezpośredniemu wykonywaniu instrukcji na CPU i wykorzystaniu hypervisora Xen lub modułu KVM.
Projekt został pierwotnie stworzony przez Fabrice'a Bellarda w celu umożliwienia uruchamiania plików wykonywalnych Linuxa skompilowanych na platformę x86 na architekturach innych niż x86. W ciągu lat rozwoju dodano obsługę pełnej emulacji dla 14 architektur sprzętowych, a liczba emulowanych urządzeń sprzętowych przekroczyła 400. Przygotowując wersję 4.0, wprowadzono ponad 3100 zmian od 220 programistów.
Kluczowe , dodanych w QEMU 4.0:
- W emulatorze architektury ARM dodano obsługę rozszerzeń instrukcji ARMv8+: SB, PredInv, HPD, LOR, FHM, AA32HPD,
PAuth, JSConv, CondM, FRINT i BTI. Dodano wsparcie dla emulacji platform "Musca" i "MPS2". Ulepszono emulację ARM PMU (Power Management Unit). W platformie dodano możliwość wykorzystania ponad 255 GB RAM oraz obsługę obrazów u-boot typu „noload”; - W emulatorze architektury x86 w silniku przyspieszającym wirtualizację (Intel Hardware Accelerated Execution) dodano wsparcie dla hostów zgodnych z POSIX, takich jak Linux i NetBSD (wcześniej obsługiwano tylko platformę Darwin). W emulatorze chipsetu Q35 (ICH9) dla głównych portów PCIe opcjonalnie można zadeklarować maksymalną prędkość (16GT/s) i liczbę linii połączeń (x32), określoną w specyfikacji PCIe 4.0 (dla zapewnienia zgodności domyślnej dla starszych typów maszyn, QEMU ustawia 2.5GT/s i x1). Umożliwiono ładowanie obrazów Xen PVH z opcją „-kernel”;
- W emulatorze architektury MIPS dodano wsparcie dla wielowątkowej emulacji z wykorzystaniem klasycznego generatora kodu TCG (Tiny Code Generator). Dodano również wsparcie dla emulacji CPU I7200 (nanoMIPS32 ISA) i I6500 (MIPS64R6 ISA), możliwość obsługi żądań typu CPU z wykorzystaniem protokołu QMP (QEMU Management Protocol), dodano wsparcie dla rejestrów konfiguracyjnych SAARI i SAAR. Ulepszono działanie maszyn wirtualnych typu Fulong 2E. Zaktualizowano implementację Interthread Communication Unit;
- W emulatorze architektury PowerPC dodano wsparcie dla emulacji kontrolera przerwań XIVE, rozszerzono wsparcie POWER9, dla serii P dodano możliwość gorącego podłączenia głównych mostów PCI (PHB, PCI host bridge). Domyślnie włączono ochronę przed atakami Spectre i Meltdown;
- W emulatorze architektury RISC-V dodano wsparcie dla emulacji PCI i USB. Wbudowany serwer debugowania (gdbserver) zrealizował wsparcie dla definiowania list rejestrów w plikach XML. Dodano wsparcie dla pól mstatus TSR, TW i TVM;
- Do emulatora architektury s390 dodano wsparcie dla modelu CPU z14 GA 2 oraz wsparcie dla emulacji rozszerzeń instrukcji dotyczących obliczeń zmiennoprzecinkowych i operacji wektorowych. Do vfio-ap dodano możliwość gorącego podłączenia urządzeń;
- W emulatorze procesorów rodziny Tensilica Xtensa poprawiono wsparcie dla SMP w systemie Linux oraz dodano wsparcie rozszerzenia FLIX (rozszerzenie instrukcji o elastycznej długości);
- Do interfejsu graficznego dodano opcję ‘-display spice-app’ do konfiguracji i uruchamiania klienta dostępu zdalnego Spice z interfejsem podobnym do GTK QEMU;
- W implementacji serwera VNC dodano wsparcie dla zarządzania dostępem za pomocą opcji tls-authz/sasl-authz;
- W QMP (QEMU Management Protocol) dodano wsparcie dla centralnego/zewnętrznego (Out-of-band) wykonywania poleceń oraz wprowadzono dodatkowe polecenia do pracy z urządzeniami blokowymi;
- W VFIO dodano implementację interfejsu EDID dla obsługiwanych mdev (Intel vGPU), co pozwala na zmianę rozdzielczości ekranu przy użyciu opcji xres i yres;
- Dla Xen dodano nowe urządzenie ‘xen-disk’, które samodzielnie może stworzyć backend dysku dla Xen PV (bez korzystania z xenstore). Zwiększono wydajność backendu dysku Xen PV oraz dodano możliwość zmiany rozmiaru dysku;
- W sieciowych urządzeniach blokowych rozszerzono możliwości diagnostyki i śledzenia, poprawiono kompatybilność klienta z problematycznymi implementacjami serwera NBD. W qemu-nbd dodano opcje ‘—bitmap’, ‘—list’ oraz ‘—tls-authz’;
- Do emulowanego urządzenia IDE/via dodano wsparcie dla trybu PCI IDE;
- Dodano wsparcie dla użycia algorytmu lzfse do kompresji obrazów dmg. Dla formatu qcow2 dodano wsparcie dla podłączania zewnętrznych plików z danymi. Operacje rozpakowywania qcow2 przeniesiono do osobnego wątku. W obrazach vmdk dodano wsparcie dla operacji ‘blockdev-create’;
- W urządzeniu blokowym virtio-blk dodano wsparcie dla operacji DISCARD (informowanie o zwolnieniu bloków) oraz WRITE_ZEROES (zerowanie zakresu logicznych bloków);
- W urządzeniu pvrdma zrealizowano wsparcie dla usług RDMA Management Datagram (MAD);
- Wprowadzono , które łamią kompatybilność wstecz. Na przykład, zamiast opcji „handle” w „-fsdev” i „-virtfs” należy używać opcji „local” lub „proxy”. Usunięto opcje „-virtioconsole” (zastąpiona przez „-device virtconsole”), „-no-frame”, „-clock”, „-enable-hax” (zastąpiona przez „-accel hax”). Usunięto urządzenie „ivshmem” (należy używać „ivshmem-doorbell” lub „ivshmem-plain”). Wsparcie dla kompilacji z SDL1.2 zostało zakończone (należy używać SDL2).
Źródło: opennet.ru
