1a4340e7cSPierrick Bouvier.. _Glossary: 2a4340e7cSPierrick Bouvier 3a4340e7cSPierrick Bouvier-------- 4a4340e7cSPierrick BouvierGlossary 5a4340e7cSPierrick Bouvier-------- 6a4340e7cSPierrick Bouvier 7a4340e7cSPierrick BouvierThis section of the manual presents brief definitions of acronyms and terms used 8a4340e7cSPierrick Bouvierby QEMU developers. 9a4340e7cSPierrick Bouvier 10a4340e7cSPierrick BouvierAccelerator 11a4340e7cSPierrick Bouvier----------- 12a4340e7cSPierrick Bouvier 13a4340e7cSPierrick BouvierA specific API used to accelerate execution of guest instructions. It can be 14a4340e7cSPierrick Bouvierhardware-based, through a virtualization API provided by the host OS (kvm, hvf, 15a4340e7cSPierrick Bouvierwhpx, ...), or software-based (tcg). See this description of `supported 16a4340e7cSPierrick Bouvieraccelerators<Accelerators>`. 17a4340e7cSPierrick Bouvier 18a4340e7cSPierrick BouvierBoard 19a4340e7cSPierrick Bouvier----- 20a4340e7cSPierrick Bouvier 21a4340e7cSPierrick BouvierAnother name for :ref:`machine`. 22a4340e7cSPierrick Bouvier 23a4340e7cSPierrick BouvierBlock 24a4340e7cSPierrick Bouvier----- 25a4340e7cSPierrick Bouvier 26a4340e7cSPierrick BouvierBlock drivers are the available `disk formats and front-ends 27a4340e7cSPierrick Bouvier<block-drivers>` available, and block devices `(see Block device section on 28a4340e7cSPierrick Bouvieroptions page)<sec_005finvocation>` are using them to implement disks for a 29a4340e7cSPierrick Bouviervirtual machine. 30a4340e7cSPierrick Bouvier 31a4340e7cSPierrick BouvierCFI 32a4340e7cSPierrick Bouvier--- 33a4340e7cSPierrick Bouvier 34a4340e7cSPierrick BouvierControl Flow Integrity is a hardening technique used to prevent exploits 35a4340e7cSPierrick Bouviertargeting QEMU by detecting unexpected branches during execution. QEMU `actively 36a4340e7cSPierrick Bouviersupports<cfi>` being compiled with CFI enabled. 37a4340e7cSPierrick Bouvier 38a4340e7cSPierrick BouvierDevice 39a4340e7cSPierrick Bouvier------ 40a4340e7cSPierrick Bouvier 41a4340e7cSPierrick BouvierIn QEMU, a device is a piece of hardware visible to the guest. Examples include 42a4340e7cSPierrick BouvierUARTs, PCI controllers, PCI cards, VGA controllers, and many more. 43a4340e7cSPierrick Bouvier 44a4340e7cSPierrick BouvierQEMU is able to emulate a CPU, and all the hardware interacting with it, 45a4340e7cSPierrick Bouvierincluding `many devices<device-emulation>`. When QEMU runs a virtual machine 46a4340e7cSPierrick Bouvierusing a hardware-based accelerator, it is responsible for emulating, using 47a4340e7cSPierrick Bouviersoftware, all devices. 48a4340e7cSPierrick Bouvier 49a4340e7cSPierrick BouvierEDK2 50a4340e7cSPierrick Bouvier---- 51a4340e7cSPierrick Bouvier 52a4340e7cSPierrick BouvierEDK2, as known as `TianoCore <https://www.tianocore.org/>`_, is an open source 53a4340e7cSPierrick Bouvierimplementation of UEFI standard. QEMU virtual machines that boot a UEFI firmware 54a4340e7cSPierrick Bouvierusually use EDK2. 55a4340e7cSPierrick Bouvier 56a4340e7cSPierrick Bouviergdbstub 57a4340e7cSPierrick Bouvier------- 58a4340e7cSPierrick Bouvier 59a4340e7cSPierrick BouvierQEMU implements a `gdb server <GDB usage>`, allowing gdb to attach to it and 60a4340e7cSPierrick Bouvierdebug a running virtual machine, or a program in user-mode. This allows 61a4340e7cSPierrick Bouvierdebugging the guest code that is running inside QEMU. 62a4340e7cSPierrick Bouvier 63a4340e7cSPierrick Bouvierglib2 64a4340e7cSPierrick Bouvier----- 65a4340e7cSPierrick Bouvier 66a4340e7cSPierrick Bouvier`GLib2 <https://docs.gtk.org/glib/>`_ is one of the most important libraries we 67a4340e7cSPierrick Bouvierare using through the codebase. It provides many data structures, macros, string 68a4340e7cSPierrick Bouvierand thread utilities and portable functions across different OS. It's required 69a4340e7cSPierrick Bouvierto build QEMU. 70a4340e7cSPierrick Bouvier 71a4340e7cSPierrick BouvierGuest agent 72a4340e7cSPierrick Bouvier----------- 73a4340e7cSPierrick Bouvier 74a4340e7cSPierrick BouvierThe `QEMU Guest Agent <qemu-ga>` is a daemon intended to be run within virtual 75a4340e7cSPierrick Bouviermachines. It provides various services to help QEMU to interact with it. 76a4340e7cSPierrick Bouvier 77a4340e7cSPierrick Bouvier.. _guest: 78a4340e7cSPierrick Bouvier 79a4340e7cSPierrick BouvierGuest 80a4340e7cSPierrick Bouvier----- 81a4340e7cSPierrick Bouvier 82a4340e7cSPierrick BouvierGuest is the architecture of the virtual machine, which is emulated. 83a4340e7cSPierrick BouvierSee also :ref:`host`. 84a4340e7cSPierrick Bouvier 85a4340e7cSPierrick BouvierSometimes this is called the :ref:`target` architecture, but that term 86a4340e7cSPierrick Bouviercan be ambiguous. 87a4340e7cSPierrick Bouvier 88a4340e7cSPierrick Bouvier.. _host: 89a4340e7cSPierrick Bouvier 90a4340e7cSPierrick BouvierHost 91a4340e7cSPierrick Bouvier---- 92a4340e7cSPierrick Bouvier 93a4340e7cSPierrick BouvierHost is the architecture on which QEMU is running on, which is native. 94a4340e7cSPierrick BouvierSee also :ref:`guest`. 95a4340e7cSPierrick Bouvier 96a4340e7cSPierrick BouvierHypervisor 97a4340e7cSPierrick Bouvier---------- 98a4340e7cSPierrick Bouvier 99a4340e7cSPierrick BouvierThe formal definition of an hypervisor is a program or API than can be used to 100a4340e7cSPierrick Bouviermanage a virtual machine. QEMU is a virtualizer, that interacts with various 101a4340e7cSPierrick Bouvierhypervisors. 102a4340e7cSPierrick Bouvier 103a4340e7cSPierrick BouvierIn the context of QEMU, an hypervisor is an API, provided by the Host OS, 104a4340e7cSPierrick Bouvierallowing to execute virtual machines. Linux implementation is KVM (and supports 105a4340e7cSPierrick BouvierXen as well). For MacOS, it's HVF. Windows defines WHPX. And NetBSD provides 106a4340e7cSPierrick BouvierNVMM. 107a4340e7cSPierrick Bouvier 108a4340e7cSPierrick Bouvier.. _machine: 109a4340e7cSPierrick Bouvier 110a4340e7cSPierrick BouvierMachine 111a4340e7cSPierrick Bouvier------- 112a4340e7cSPierrick Bouvier 113a4340e7cSPierrick BouvierQEMU's system emulation models many different types of hardware. A machine model 114a4340e7cSPierrick Bouvier(sometimes called a board model) is the model of a complete virtual system with 115a4340e7cSPierrick BouvierRAM, one or more CPUs, and various devices. It can be selected with the option 116a4340e7cSPierrick Bouvier``-machine`` of qemu-system. Our machine models can be found on this `page 117a4340e7cSPierrick Bouvier<system-targets-ref>`. 118a4340e7cSPierrick Bouvier 119a4340e7cSPierrick BouvierMigration 120a4340e7cSPierrick Bouvier--------- 121a4340e7cSPierrick Bouvier 122a4340e7cSPierrick BouvierQEMU can save and restore the execution of a virtual machine between different 123*30ab96cfSJohn Snowhost systems. This is provided by the :ref:`Migration framework<migration>`. 124a4340e7cSPierrick Bouvier 125a4340e7cSPierrick BouvierNBD 126a4340e7cSPierrick Bouvier--- 127a4340e7cSPierrick Bouvier 128a4340e7cSPierrick BouvierThe `QEMU Network Block Device server <qemu-nbd>` is a tool that can be used to 129a4340e7cSPierrick Bouviermount and access QEMU images, providing functionality similar to a loop device. 130a4340e7cSPierrick Bouvier 131a4340e7cSPierrick BouvierMailing List 132a4340e7cSPierrick Bouvier------------ 133a4340e7cSPierrick Bouvier 134a4340e7cSPierrick BouvierThis is `where <https://wiki.qemu.org/Contribute/MailingLists>`_ all the 135a4340e7cSPierrick Bouvierdevelopment happens! Changes are posted as series, that all developers can 136a4340e7cSPierrick Bouvierreview and share feedback for. 137a4340e7cSPierrick Bouvier 138a4340e7cSPierrick BouvierFor reporting issues, our `GitLab 139a4340e7cSPierrick Bouvier<https://gitlab.com/qemu-project/qemu/-/issues>`_ tracker is the best place. 140a4340e7cSPierrick Bouvier 141a4340e7cSPierrick Bouvier.. _softmmu: 142a4340e7cSPierrick Bouvier 143a4340e7cSPierrick BouvierMMU / softmmu 144a4340e7cSPierrick Bouvier------------- 145a4340e7cSPierrick Bouvier 146a4340e7cSPierrick BouvierThe Memory Management Unit is responsible for translating virtual addresses to 147a4340e7cSPierrick Bouvierphysical addresses and managing memory protection. QEMU system mode is named 148a4340e7cSPierrick Bouvier"softmmu" precisely because it implements this in software, including a TLB 149a4340e7cSPierrick Bouvier(Translation lookaside buffer), for the guest virtual machine. 150a4340e7cSPierrick Bouvier 151a4340e7cSPierrick BouvierQEMU user-mode does not implement a full software MMU, but "simply" translates 152a4340e7cSPierrick Bouviervirtual addresses by adding a specific offset, and relying on host MMU/OS 153a4340e7cSPierrick Bouvierinstead. 154a4340e7cSPierrick Bouvier 155a4340e7cSPierrick BouvierMonitor / QMP / HMP 156a4340e7cSPierrick Bouvier------------------- 157a4340e7cSPierrick Bouvier 158a4340e7cSPierrick BouvierThe `QEMU Monitor <QEMU monitor>` is a text interface which can be used to interact 159a4340e7cSPierrick Bouvierwith a running virtual machine. 160a4340e7cSPierrick Bouvier 161a4340e7cSPierrick BouvierQMP stands for QEMU Monitor Protocol and is a json based interface. 162a4340e7cSPierrick BouvierHMP stands for Human Monitor Protocol and is a set of text commands available 163a4340e7cSPierrick Bouvierfor users who prefer natural language to json. 164a4340e7cSPierrick Bouvier 165a4340e7cSPierrick BouvierMTTCG 166a4340e7cSPierrick Bouvier----- 167a4340e7cSPierrick Bouvier 168a4340e7cSPierrick BouvierMultiple CPU support was first implemented using a round-robin algorithm 169a4340e7cSPierrick Bouvierrunning on a single thread. Later on, `Multi-threaded TCG <mttcg>` was developed 170a4340e7cSPierrick Bouvierto benefit from multiple cores to speed up execution. 171a4340e7cSPierrick Bouvier 172a4340e7cSPierrick BouvierPlugins 173a4340e7cSPierrick Bouvier------- 174a4340e7cSPierrick Bouvier 175a4340e7cSPierrick Bouvier`TCG Plugins <TCG Plugins>` is an API used to instrument guest code, in system 176a4340e7cSPierrick Bouvierand user mode. The end goal is to have a similar set of functionality compared 177a4340e7cSPierrick Bouvierto `DynamoRIO <https://dynamorio.org/>`_ or `valgrind <https://valgrind.org/>`_. 178a4340e7cSPierrick Bouvier 179a4340e7cSPierrick BouvierOne key advantage of QEMU plugins is that they can be used to perform 180a4340e7cSPierrick Bouvierarchitecture agnostic instrumentation. 181a4340e7cSPierrick Bouvier 182a4340e7cSPierrick BouvierPatchew 183a4340e7cSPierrick Bouvier------- 184a4340e7cSPierrick Bouvier 185a4340e7cSPierrick Bouvier`Patchew <https://patchew.org/QEMU/>`_ is a website that tracks patches on the 186a4340e7cSPierrick BouvierMailing List. 187a4340e7cSPierrick Bouvier 188a4340e7cSPierrick BouvierPR 189a4340e7cSPierrick Bouvier-- 190a4340e7cSPierrick Bouvier 191a4340e7cSPierrick BouvierOnce a series is reviewed and accepted by a subsystem maintainer, it will be 192a4340e7cSPierrick Bouvierincluded in a PR (Pull Request) that the project maintainer will merge into QEMU 193a4340e7cSPierrick Bouviermain branch, after running tests. 194a4340e7cSPierrick Bouvier 195a4340e7cSPierrick BouvierThe QEMU project doesn't currently expect most developers to directly submit 196a4340e7cSPierrick Bouvierpull requests. 197a4340e7cSPierrick Bouvier 198a4340e7cSPierrick BouvierQCOW2 199a4340e7cSPierrick Bouvier----- 200a4340e7cSPierrick Bouvier 201a4340e7cSPierrick BouvierQEMU Copy On Write is a disk format developed by QEMU. It provides transparent 202a4340e7cSPierrick Bouviercompression, automatic extension, and many other advantages over a raw image. 203a4340e7cSPierrick Bouvier 204a4340e7cSPierrick Bouvierqcow2 is the recommended format to use. 205a4340e7cSPierrick Bouvier 206a4340e7cSPierrick BouvierQEMU 207a4340e7cSPierrick Bouvier---- 208a4340e7cSPierrick Bouvier 209a4340e7cSPierrick Bouvier`QEMU (Quick Emulator) <https://www.qemu.org/>`_ is a generic and open source 210a4340e7cSPierrick Bouviermachine emulator and virtualizer. 211a4340e7cSPierrick Bouvier 212a4340e7cSPierrick BouvierQOM 213a4340e7cSPierrick Bouvier--- 214a4340e7cSPierrick Bouvier 215*30ab96cfSJohn Snow:ref:`QEMU Object Model <qom>` is an object oriented API used to define 216*30ab96cfSJohn Snowvarious devices and hardware in the QEMU codebase. 217a4340e7cSPierrick Bouvier 218a4340e7cSPierrick BouvierRecord/replay 219a4340e7cSPierrick Bouvier------------- 220a4340e7cSPierrick Bouvier 221*30ab96cfSJohn Snow:ref:`Record/replay <replay>` is a feature of QEMU allowing to have a 222*30ab96cfSJohn Snowdeterministic and reproducible execution of a virtual machine. 223a4340e7cSPierrick Bouvier 224a4340e7cSPierrick BouvierRust 225a4340e7cSPierrick Bouvier---- 226a4340e7cSPierrick Bouvier 227a4340e7cSPierrick Bouvier`A new programming language <https://www.rust-lang.org/>`_, memory safe by 228a4340e7cSPierrick Bouvierdefault. There is a work in progress to integrate it in QEMU codebase for 229a4340e7cSPierrick Bouviervarious subsystems. 230a4340e7cSPierrick Bouvier 231a4340e7cSPierrick BouvierSystem mode 232a4340e7cSPierrick Bouvier----------- 233a4340e7cSPierrick Bouvier 234a4340e7cSPierrick BouvierQEMU System mode provides a virtual model of an entire machine (CPU, memory and 235a4340e7cSPierrick Bouvieremulated devices) to run a guest OS. In this mode the CPU may be fully emulated, 236a4340e7cSPierrick Bouvieror it may work with a hypervisor such as KVM, Xen or Hypervisor.Framework to 237a4340e7cSPierrick Bouvierallow the guest to run directly on the host CPU. 238a4340e7cSPierrick Bouvier 239a4340e7cSPierrick BouvierQEMU System mode is called :ref:`softmmu <softmmu>` as well. 240a4340e7cSPierrick Bouvier 241a4340e7cSPierrick Bouvier.. _target: 242a4340e7cSPierrick Bouvier 243a4340e7cSPierrick BouvierTarget 244a4340e7cSPierrick Bouvier------ 245a4340e7cSPierrick Bouvier 246a4340e7cSPierrick BouvierThe term "target" can be ambiguous. In most places in QEMU it is used as a 247a4340e7cSPierrick Bouviersynonym for :ref:`guest`. For example the code for emulating Arm CPUs is in 248a4340e7cSPierrick Bouvier``target/arm/``. However in the :ref:`TCG subsystem <tcg>` "target" refers to the 249a4340e7cSPierrick Bouvierarchitecture which QEMU is running on, i.e. the :ref:`host`. 250a4340e7cSPierrick Bouvier 251a4340e7cSPierrick BouvierTCG 252a4340e7cSPierrick Bouvier--- 253a4340e7cSPierrick Bouvier 254a4340e7cSPierrick BouvierTCG is the QEMU `Tiny Code Generator <tcg>`. It is the JIT (just-in-time) 255a4340e7cSPierrick Bouviercompiler we use to emulate a guest CPU in software. 256a4340e7cSPierrick Bouvier 257a4340e7cSPierrick BouvierIt is one of the accelerators supported by QEMU, and supports a lot of 258a4340e7cSPierrick Bouvierguest/host architectures. 259a4340e7cSPierrick Bouvier 260a4340e7cSPierrick BouvierUser mode 261a4340e7cSPierrick Bouvier--------- 262a4340e7cSPierrick Bouvier 263a4340e7cSPierrick BouvierQEMU User mode can launch processes compiled for one CPU on another CPU. In this 264a4340e7cSPierrick Bouviermode the CPU is always emulated. In this mode, QEMU translate system calls from 265a4340e7cSPierrick Bouvierguest to host kernel. It is available for Linux and BSD. 266a4340e7cSPierrick Bouvier 267a4340e7cSPierrick BouvierVirtIO 268a4340e7cSPierrick Bouvier------ 269a4340e7cSPierrick Bouvier 270a4340e7cSPierrick BouvierVirtIO is an open standard used to define and implement virtual devices with a 271a4340e7cSPierrick Bouvierminimal overhead, defining a set of data structures and hypercalls (similar to 272a4340e7cSPierrick Bouviersystem calls, but targeting an hypervisor, which happens to be QEMU in our 273a4340e7cSPierrick Bouviercase). It's designed to be more efficient than emulating a real device, by 274a4340e7cSPierrick Bouvierminimizing the amount of interactions between a guest VM and its hypervisor. 275a4340e7cSPierrick Bouvier 276a4340e7cSPierrick Bouviervhost-user 277a4340e7cSPierrick Bouvier---------- 278a4340e7cSPierrick Bouvier 279a4340e7cSPierrick Bouvier`Vhost-user <vhost_user>` is an interface used to implement VirtIO devices 280a4340e7cSPierrick Bouvieroutside of QEMU itself. 281