xref: /openbmc/qemu/docs/glossary.rst (revision 94d689d0c6f23dc3129e8432c496ccb866788dbf)
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