1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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.
|