1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
performance: 0.933
device: 0.519
PID: 0.517
x86: 0.489
ppc: 0.473
architecture: 0.468
boot: 0.462
i386: 0.438
vnc: 0.421
graphic: 0.395
socket: 0.387
files: 0.385
network: 0.375
user-level: 0.363
peripherals: 0.337
hypervisor: 0.337
kernel: 0.331
TCG: 0.327
permissions: 0.306
VMM: 0.285
semantic: 0.281
arm: 0.255
risc-v: 0.254
register: 0.211
debug: 0.196
mistranslation: 0.141
virtual: 0.135
assembly: 0.102
KVM: 0.009
Slow Windows XP load after commit a9353fe897ca2687e5b3385ed39e3db3927a90e0
I've recently discovered, that in QEMU 2.8+ my Windows XP loading time has significantly worsened. In 2.7 it took 30-40 second to boot, but in 2.8 it became 2-2,5 minutes.
I've used Git bisect, and found out that the change happened after commit a9353fe897ca2687e5b3385ed39e3db3927a90e0, which, as far as I can tell from the commit message, handled race condition when invalidating breakpoint.
I've set a breakpoint in static void breakpoint_invalidate(CPUState *cpu, target_ulong pc), and here's a backtrace:
#0 cpu_breakpoint_insert (cpu=cpu@entry=0x555556a73be0, pc=144,
flags=flags@entry=32, breakpoint=breakpoint@entry=0x555556a7c670)
at /media/sdd2/qemu-work/exec.c:830
#1 0x00005555558746ac in hw_breakpoint_insert (env=env@entry=0x555556a7be60,
index=index@entry=0) at /media/sdd2/qemu-work/target-i386/bpt_helper.c:64
#2 0x00005555558748ed in cpu_x86_update_dr7 (env=0x555556a7be60,
new_dr7=<optimised out>)
at /media/sdd2/qemu-work/target-i386/bpt_helper.c:160
#3 0x00007fffa17421f6 in code_gen_buffer ()
#4 0x000055555577fcb4 in cpu_tb_exec (itb=<optimised out>,
itb=<optimised out>, cpu=0x7fff8b7763b0)
at /media/sdd2/qemu-work/cpu-exec.c:164
It seems that XP sets some breakpoints during it's load, and it leads to frequent TB flushes and slow execution.
Supposedly fixed by commit 406bc339b0505fcfc2ffcbca1f05a3756e338a65
|