~jderose/ubuntu/raring/qemu/vde-again

« back to all changes in this revision

Viewing changes to qemu-tech.texi

  • Committer: Bazaar Package Importer
  • Author(s): Aurelien Jarno, Aurelien Jarno
  • Date: 2009-03-22 10:13:17 UTC
  • mfrom: (1.2.1 upstream) (6.1.1 sid)
  • Revision ID: james.westby@ubuntu.com-20090322101317-iigjtnu5qil35dtb
Tags: 0.10.1-1
[ Aurelien Jarno ]
* New upstream stable release:
  - patches/80_stable-branch.patch: remove.
* debian/control: 
  - Remove depends on proll.
  - Move depends on device-tree-compiler to build-depends.
  - Bump Standards-Version to 3.8.1 (no changes).
* patches/82_qemu-img_decimal.patch: new patch from upstream to make
  qemu-img accept sizes with decimal values (closes: bug#501400).

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
 
34
34
@menu
35
35
* intro_features::        Features
36
 
* intro_x86_emulation::   x86 emulation
 
36
* intro_x86_emulation::   x86 and x86-64 emulation
37
37
* intro_arm_emulation::   ARM emulation
38
38
* intro_mips_emulation::  MIPS emulation
39
39
* intro_ppc_emulation::   PowerPC emulation
40
 
* intro_sparc_emulation:: SPARC emulation
 
40
* intro_sparc_emulation:: Sparc32 and Sparc64 emulation
 
41
* intro_other_emulation:: Other CPU emulation
41
42
@end menu
42
43
 
43
44
@node intro_features
51
52
@itemize @minus
52
53
 
53
54
@item
54
 
Full system emulation. In this mode, QEMU emulates a full system
55
 
(usually a PC), including a processor and various peripherals. It can
56
 
be used to launch an different Operating System without rebooting the
57
 
PC or to debug system code.
 
55
Full system emulation. In this mode (full platform virtualization),
 
56
QEMU emulates a full system (usually a PC), including a processor and
 
57
various peripherals. It can be used to launch several different
 
58
Operating Systems at once without rebooting the host machine or to
 
59
debug system code.
58
60
 
59
61
@item
60
 
User mode emulation (Linux host only). In this mode, QEMU can launch
61
 
Linux processes compiled for one CPU on another CPU. It can be used to
62
 
launch the Wine Windows API emulator (@url{http://www.winehq.org}) or
63
 
to ease cross-compilation and cross-debugging.
64
 
 
 
62
User mode emulation. In this mode (application level virtualization),
 
63
QEMU can launch processes compiled for one CPU on another CPU, however
 
64
the Operating Systems must match. This can be used for example to ease
 
65
cross-compilation and cross-debugging.
65
66
@end itemize
66
67
 
67
68
As QEMU requires no host kernel driver to run, it is very safe and
75
76
 
76
77
@item Using dynamic translation to native code for reasonable speed.
77
78
 
78
 
@item Working on x86 and PowerPC hosts. Being tested on ARM, Sparc32, Alpha and S390.
 
79
@item
 
80
Working on x86, x86_64 and PowerPC32/64 hosts. Being tested on ARM,
 
81
HPPA, Sparc32 and Sparc64. Previous versions had some support for
 
82
Alpha and S390 hosts, but TCG (see below) doesn't support those yet.
79
83
 
80
84
@item Self-modifying code support.
81
85
 
85
89
in other projects (look at @file{qemu/tests/qruncom.c} to have an
86
90
example of user mode @code{libqemu} usage).
87
91
 
 
92
@item
 
93
Floating point library supporting both full software emulation and
 
94
native host FPU instructions.
 
95
 
88
96
@end itemize
89
97
 
90
98
QEMU user mode emulation features:
96
104
@item Accurate signal handling by remapping host signals to target signals.
97
105
@end itemize
98
106
 
 
107
Linux user emulator (Linux host only) can be used to launch the Wine
 
108
Windows API emulator (@url{http://www.winehq.org}). A Darwin user
 
109
emulator (Darwin hosts only) exists and a BSD user emulator for BSD
 
110
hosts is under development. It would also be possible to develop a
 
111
similar user emulator for Solaris.
 
112
 
99
113
QEMU full system emulation features:
100
114
@itemize
101
 
@item QEMU can either use a full software MMU for maximum portability or use the host system call mmap() to simulate the target MMU.
 
115
@item
 
116
QEMU uses a full software MMU for maximum portability.
 
117
 
 
118
@item
 
119
QEMU can optionally use an in-kernel accelerator, like kqemu and
 
120
kvm. The accelerators execute some of the guest code natively, while
 
121
continuing to emulate the rest of the machine.
 
122
 
 
123
@item
 
124
Various hardware devices can be emulated and in some cases, host
 
125
devices (e.g. serial and parallel ports, USB, drives) can be used
 
126
transparently by the guest Operating System. Host device passthrough
 
127
can be used for talking to external physical peripherals (e.g. a
 
128
webcam, modem or tape drive).
 
129
 
 
130
@item
 
131
Symmetric multiprocessing (SMP) even on a host with a single CPU. On a
 
132
SMP host system, QEMU can use only one CPU fully due to difficulty in
 
133
implementing atomic memory accesses efficiently.
 
134
 
102
135
@end itemize
103
136
 
104
137
@node intro_x86_emulation
105
 
@section x86 emulation
 
138
@section x86 and x86-64 emulation
106
139
 
107
140
QEMU x86 target features:
108
141
 
109
142
@itemize
110
143
 
111
144
@item The virtual x86 CPU supports 16 bit and 32 bit addressing with segmentation.
112
 
LDT/GDT and IDT are emulated. VM86 mode is also supported to run DOSEMU.
 
145
LDT/GDT and IDT are emulated. VM86 mode is also supported to run
 
146
DOSEMU. There is some support for MMX/3DNow!, SSE, SSE2, SSE3, SSSE3,
 
147
and SSE4 as well as x86-64 SVM.
113
148
 
114
149
@item Support of host page sizes bigger than 4KB in user mode emulation.
115
150
 
124
159
 
125
160
@itemize
126
161
 
127
 
@item No SSE/MMX support (yet).
128
 
 
129
 
@item No x86-64 support.
 
162
@item Limited x86-64 support.
130
163
 
131
164
@item IPC syscalls are missing.
132
165
 
134
167
memory access (yet). Hopefully, very few OSes seem to rely on that for
135
168
normal use.
136
169
 
137
 
@item On non x86 host CPUs, @code{double}s are used instead of the non standard
138
 
10 byte @code{long double}s of x86 for floating point emulation to get
139
 
maximum performances.
140
 
 
141
170
@end itemize
142
171
 
143
172
@node intro_arm_emulation
193
222
@end itemize
194
223
 
195
224
@node intro_sparc_emulation
196
 
@section SPARC emulation
 
225
@section Sparc32 and Sparc64 emulation
197
226
 
198
227
@itemize
199
228
 
216
245
 
217
246
@item Atomic instructions are not correctly implemented.
218
247
 
219
 
@item Sparc64 emulators are not usable for anything yet.
220
 
 
 
248
@item There are still some problems with Sparc64 emulators.
 
249
 
 
250
@end itemize
 
251
 
 
252
@node intro_other_emulation
 
253
@section Other CPU emulation
 
254
 
 
255
In addition to the above, QEMU supports emulation of other CPUs with
 
256
varying levels of success. These are:
 
257
 
 
258
@itemize
 
259
 
 
260
@item
 
261
Alpha
 
262
@item
 
263
CRIS
 
264
@item
 
265
M68k
 
266
@item
 
267
SH4
221
268
@end itemize
222
269
 
223
270
@node QEMU Internals
226
273
@menu
227
274
* QEMU compared to other emulators::
228
275
* Portable dynamic translation::
229
 
* Register allocation::
230
276
* Condition code optimisations::
231
277
* CPU state optimisations::
232
278
* Translation cache::
234
280
* Self-modifying code and translated code invalidation::
235
281
* Exception support::
236
282
* MMU emulation::
 
283
* Device emulation::
237
284
* Hardware interrupts::
238
285
* User emulation specific details::
239
286
* Bibliography::
273
320
QEMU accepts unpatched Linux kernels. The price to pay is that QEMU is
274
321
slower.
275
322
 
276
 
The new Plex86 [8] PC virtualizer is done in the same spirit as the
277
 
qemu-fast system emulator. It requires a patched Linux kernel to work
278
 
(you cannot launch the same kernel on your PC), but the patches are
279
 
really small. As it is a PC virtualizer (no emulation is done except
280
 
for some priveledged instructions), it has the potential of being
281
 
faster than QEMU. The downside is that a complicated (and potentially
282
 
unsafe) host kernel patch is needed.
 
323
The Plex86 [8] PC virtualizer is done in the same spirit as the now
 
324
obsolete qemu-fast system emulator. It requires a patched Linux kernel
 
325
to work (you cannot launch the same kernel on your PC), but the
 
326
patches are really small. As it is a PC virtualizer (no emulation is
 
327
done except for some privileged instructions), it has the potential of
 
328
being faster than QEMU. The downside is that a complicated (and
 
329
potentially unsafe) host kernel patch is needed.
283
330
 
284
331
The commercial PC Virtualizers (VMWare [9], VirtualPC [10], TwoOStwo
285
332
[11]) are faster than QEMU, but they all need specific, proprietary
286
333
and potentially unsafe host drivers. Moreover, they are unable to
287
334
provide cycle exact simulation as an emulator can.
288
335
 
 
336
VirtualBox [12], Xen [13] and KVM [14] are based on QEMU. QEMU-SystemC
 
337
[15] uses QEMU to simulate a system where some hardware devices are
 
338
developed in SystemC.
 
339
 
289
340
@node Portable dynamic translation
290
341
@section Portable dynamic translation
291
342
 
295
346
which make it relatively easily portable and simple while achieving good
296
347
performances.
297
348
 
298
 
The basic idea is to split every x86 instruction into fewer simpler
299
 
instructions. Each simple instruction is implemented by a piece of C
300
 
code (see @file{target-i386/op.c}). Then a compile time tool
301
 
(@file{dyngen}) takes the corresponding object file (@file{op.o})
302
 
to generate a dynamic code generator which concatenates the simple
303
 
instructions to build a function (see @file{op.h:dyngen_code()}).
304
 
 
305
 
In essence, the process is similar to [1], but more work is done at
306
 
compile time.
307
 
 
308
 
A key idea to get optimal performances is that constant parameters can
309
 
be passed to the simple operations. For that purpose, dummy ELF
310
 
relocations are generated with gcc for each constant parameter. Then,
311
 
the tool (@file{dyngen}) can locate the relocations and generate the
312
 
appriopriate C code to resolve them when building the dynamic code.
313
 
 
314
 
That way, QEMU is no more difficult to port than a dynamic linker.
315
 
 
316
 
To go even faster, GCC static register variables are used to keep the
317
 
state of the virtual CPU.
318
 
 
319
 
@node Register allocation
320
 
@section Register allocation
321
 
 
322
 
Since QEMU uses fixed simple instructions, no efficient register
323
 
allocation can be done. However, because RISC CPUs have a lot of
324
 
register, most of the virtual CPU state can be put in registers without
325
 
doing complicated register allocation.
 
349
After the release of version 0.9.1, QEMU switched to a new method of
 
350
generating code, Tiny Code Generator or TCG. TCG relaxes the
 
351
dependency on the exact version of the compiler used. The basic idea
 
352
is to split every target instruction into a couple of RISC-like TCG
 
353
ops (see @code{target-i386/translate.c}). Some optimizations can be
 
354
performed at this stage, including liveness analysis and trivial
 
355
constant expression evaluation. TCG ops are then implemented in the
 
356
host CPU back end, also known as TCG target (see
 
357
@code{tcg/i386/tcg-target.c}). For more information, please take a
 
358
look at @code{tcg/README}.
326
359
 
327
360
@node Condition code optimisations
328
361
@section Condition code optimisations
329
362
 
330
 
Good CPU condition codes emulation (@code{EFLAGS} register on x86) is a
331
 
critical point to get good performances. QEMU uses lazy condition code
332
 
evaluation: instead of computing the condition codes after each x86
333
 
instruction, it just stores one operand (called @code{CC_SRC}), the
334
 
result (called @code{CC_DST}) and the type of operation (called
335
 
@code{CC_OP}).
336
 
 
337
 
@code{CC_OP} is almost never explicitely set in the generated code
 
363
Lazy evaluation of CPU condition codes (@code{EFLAGS} register on x86)
 
364
is important for CPUs where every instruction sets the condition
 
365
codes. It tends to be less important on conventional RISC systems
 
366
where condition codes are only updated when explicitly requested.
 
367
 
 
368
Instead of computing the condition codes after each x86 instruction,
 
369
QEMU just stores one operand (called @code{CC_SRC}), the result
 
370
(called @code{CC_DST}) and the type of operation (called
 
371
@code{CC_OP}). When the condition codes are needed, the condition
 
372
codes can be calculated using this information. In addition, an
 
373
optimized calculation can be performed for some instruction types like
 
374
conditional branches.
 
375
 
 
376
@code{CC_OP} is almost never explicitly set in the generated code
338
377
because it is known at translation time.
339
378
 
340
 
In order to increase performances, a backward pass is performed on the
341
 
generated simple instructions (see
342
 
@code{target-i386/translate.c:optimize_flags()}). When it can be proved that
343
 
the condition codes are not needed by the next instructions, no
344
 
condition codes are computed at all.
 
379
The lazy condition code evaluation is used on x86, m68k and cris. ARM
 
380
uses a simplified variant for the N and Z flags.
345
381
 
346
382
@node CPU state optimisations
347
383
@section CPU state optimisations
348
384
 
349
 
The x86 CPU has many internal states which change the way it evaluates
350
 
instructions. In order to achieve a good speed, the translation phase
351
 
considers that some state information of the virtual x86 CPU cannot
352
 
change in it. For example, if the SS, DS and ES segments have a zero
353
 
base, then the translator does not even generate an addition for the
354
 
segment base.
 
385
The target CPUs have many internal states which change the way it
 
386
evaluates instructions. In order to achieve a good speed, the
 
387
translation phase considers that some state information of the virtual
 
388
CPU cannot change in it. The state is recorded in the Translation
 
389
Block (TB). If the state changes (e.g. privilege level), a new TB will
 
390
be generated and the previous TB won't be used anymore until the state
 
391
matches the state recorded in the previous TB. For example, if the SS,
 
392
DS and ES segments have a zero base, then the translator does not even
 
393
generate an addition for the segment base.
355
394
 
356
395
[The FPU stack pointer register is not handled that way yet].
357
396
 
388
427
is modified.
389
428
 
390
429
When translated code is generated for a basic block, the corresponding
391
 
host page is write protected if it is not already read-only (with the
392
 
system call @code{mprotect()}). Then, if a write access is done to the
393
 
page, Linux raises a SEGV signal. QEMU then invalidates all the
394
 
translated code in the page and enables write accesses to the page.
 
430
host page is write protected if it is not already read-only. Then, if
 
431
a write access is done to the page, Linux raises a SEGV signal. QEMU
 
432
then invalidates all the translated code in the page and enables write
 
433
accesses to the page.
395
434
 
396
435
Correct translated code invalidation is done efficiently by maintaining
397
436
a linked list of every translated block contained in a given page. Other
398
437
linked lists are also maintained to undo direct block chaining.
399
438
 
400
 
Although the overhead of doing @code{mprotect()} calls is important,
401
 
most MSDOS programs can be emulated at reasonnable speed with QEMU and
402
 
DOSEMU.
403
 
 
404
 
Note that QEMU also invalidates pages of translated code when it detects
405
 
that memory mappings are modified with @code{mmap()} or @code{munmap()}.
406
 
 
407
 
When using a software MMU, the code invalidation is more efficient: if
408
 
a given code page is invalidated too often because of write accesses,
409
 
then a bitmap representing all the code inside the page is
410
 
built. Every store into that page checks the bitmap to see if the code
411
 
really needs to be invalidated. It avoids invalidating the code when
412
 
only data is modified in the page.
 
439
On RISC targets, correctly written software uses memory barriers and
 
440
cache flushes, so some of the protection above would not be
 
441
necessary. However, QEMU still requires that the generated code always
 
442
matches the target instructions in memory in order to handle
 
443
exceptions correctly.
413
444
 
414
445
@node Exception support
415
446
@section Exception support
418
449
encountered.
419
450
 
420
451
The host SIGSEGV and SIGBUS signal handlers are used to get invalid
421
 
memory accesses. The exact CPU state can be retrieved because all the
422
 
x86 registers are stored in fixed host registers. The simulated program
423
 
counter is found by retranslating the corresponding basic block and by
424
 
looking where the host program counter was at the exception point.
 
452
memory accesses. The simulated program counter is found by
 
453
retranslating the corresponding basic block and by looking where the
 
454
host program counter was at the exception point.
425
455
 
426
456
The virtual CPU cannot retrieve the exact @code{EFLAGS} register because
427
457
in some cases it is not computed because of condition code
431
461
@node MMU emulation
432
462
@section MMU emulation
433
463
 
434
 
For system emulation, QEMU uses the mmap() system call to emulate the
435
 
target CPU MMU. It works as long the emulated OS does not use an area
436
 
reserved by the host OS (such as the area above 0xc0000000 on x86
437
 
Linux).
438
 
 
439
 
In order to be able to launch any OS, QEMU also supports a soft
440
 
MMU. In that mode, the MMU virtual to physical address translation is
441
 
done at every memory access. QEMU uses an address translation cache to
442
 
speed up the translation.
 
464
For system emulation QEMU supports a soft MMU. In that mode, the MMU
 
465
virtual to physical address translation is done at every memory
 
466
access. QEMU uses an address translation cache to speed up the
 
467
translation.
443
468
 
444
469
In order to avoid flushing the translated code each time the MMU
445
470
mappings change, QEMU uses a physically indexed translation cache. It
448
473
When MMU mappings change, only the chaining of the basic blocks is
449
474
reset (i.e. a basic block can no longer jump directly to another one).
450
475
 
 
476
@node Device emulation
 
477
@section Device emulation
 
478
 
 
479
Systems emulated by QEMU are organized by boards. At initialization
 
480
phase, each board instantiates a number of CPUs, devices, RAM and
 
481
ROM. Each device in turn can assign I/O ports or memory areas (for
 
482
MMIO) to its handlers. When the emulation starts, an access to the
 
483
ports or MMIO memory areas assigned to the device causes the
 
484
corresponding handler to be called.
 
485
 
 
486
RAM and ROM are handled more optimally, only the offset to the host
 
487
memory needs to be added to the guest address.
 
488
 
 
489
The video RAM of VGA and other display cards is special: it can be
 
490
read or written directly like RAM, but write accesses cause the memory
 
491
to be marked with VGA_DIRTY flag as well.
 
492
 
 
493
QEMU supports some device classes like serial and parallel ports, USB,
 
494
drives and network devices, by providing APIs for easier connection to
 
495
the generic, higher level implementations. The API hides the
 
496
implementation details from the devices, like native device use or
 
497
advanced block device formats like QCOW.
 
498
 
 
499
Usually the devices implement a reset method and register support for
 
500
saving and loading of the device state. The devices can also use
 
501
timers, especially together with the use of bottom halves (BHs).
 
502
 
451
503
@node Hardware interrupts
452
504
@section Hardware interrupts
453
505
 
513
565
emulator.
514
566
 
515
567
Achieving self-virtualization is not easy because there may be address
516
 
space conflicts. QEMU solves this problem by being an executable ELF
517
 
shared object as the ld-linux.so ELF interpreter. That way, it can be
518
 
relocated at load time.
 
568
space conflicts. QEMU user emulators solve this problem by being an
 
569
executable ELF shared object as the ld-linux.so ELF interpreter. That
 
570
way, it can be relocated at load time.
519
571
 
520
572
@node Bibliography
521
573
@section Bibliography
568
620
@url{http://www.twoostwo.org/},
569
621
The TwoOStwo PC virtualizer.
570
622
 
 
623
@item [12]
 
624
@url{http://virtualbox.org/},
 
625
The VirtualBox PC virtualizer.
 
626
 
 
627
@item [13]
 
628
@url{http://www.xen.org/},
 
629
The Xen hypervisor.
 
630
 
 
631
@item [14]
 
632
@url{http://kvm.qumranet.com/kvmwiki/Front_Page},
 
633
Kernel Based Virtual Machine (KVM).
 
634
 
 
635
@item [15]
 
636
@url{http://www.greensocs.com/projects/QEMUSystemC},
 
637
QEMU-SystemC, a hardware co-simulator.
 
638
 
571
639
@end table
572
640
 
573
641
@node Regression Tests