patch QEMU for raspberry4
Go to file
Peter Lieven 5cc11c46cf migration: use XBZRLE only after bulk stage
at the beginning of migration all pages are marked dirty and
in the first round a bulk migration of all pages is performed.

currently all these pages are copied to the page cache regardless
of whether they are frequently updated or not. this doesn't make sense
since most of these pages are never transferred again.

this patch changes the XBZRLE transfer to only be used after
the bulk stage has been completed. that means a page is added
to the page cache the second time it is transferred and XBZRLE
can benefit from the third time of transfer.

since the page cache is likely smaller than the number of pages
it's also likely that in the second round the page is missing in the
cache due to collisions in the bulk phase.

on the other hand a lot of unnecessary mallocs, memdups and frees
are saved.

the following results have been taken earlier while executing
the test program from docs/xbzrle.txt. (+) with the patch and (-)
without. (thanks to Eric Blake for reformatting and comments)

+ total time: 22185 milliseconds
- total time: 22410 milliseconds

Shaved 0.3 seconds, better than 1%!

+ downtime: 29 milliseconds
- downtime: 21 milliseconds

Not sure why downtime seemed worse, but probably not the end of the world.

+ transferred ram: 706034 kbytes
- transferred ram: 721318 kbytes

Fewer bytes sent - good.

+ remaining ram: 0 kbytes
- remaining ram: 0 kbytes
+ total ram: 1057216 kbytes
- total ram: 1057216 kbytes
+ duplicate: 108556 pages
- duplicate: 105553 pages
+ normal: 175146 pages
- normal: 179589 pages
+ normal bytes: 700584 kbytes
- normal bytes: 718356 kbytes

Fewer normal bytes...

+ cache size: 67108864 bytes
- cache size: 67108864 bytes
+ xbzrle transferred: 3127 kbytes
- xbzrle transferred: 630 kbytes

...and more compressed pages sent - good.

+ xbzrle pages: 117811 pages
- xbzrle pages: 21527 pages
+ xbzrle cache miss: 18750
- xbzrle cache miss: 179589

And very good improvement on the cache miss rate.

+ xbzrle overflow : 0
- xbzrle overflow : 0

Signed-off-by: Peter Lieven <pl@kamp.de>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Orit Wasserman <owasserm@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
2013-03-26 13:32:33 +01:00
audio audio: Replace non-portable asprintf in debug code by g_strdup_printf 2013-01-16 12:03:26 -06:00
backends chardev: add braille support to qapi 2013-03-13 10:27:46 +01:00
block block: Add options QDict to bdrv_file_open() prototypes (fix MinGW build) 2013-03-25 09:53:04 +01:00
bsd-user qemu-log: default to stderr for logging output 2013-02-26 13:31:47 -06:00
default-configs VMXNET3 device implementation 2013-03-25 11:13:10 +01:00
disas Add moxie disassembler 2013-03-23 14:25:41 +00:00
docs Fix typos and misspellings 2013-03-22 13:25:07 +01:00
fpu softfloat: Handle float_muladd_negate_c when product is zero 2013-01-26 13:22:09 +00:00
fsdev virtfs-proxy-helper: Fix unchecked strdup() by conv. to g_strdup() 2013-01-30 11:14:46 +01:00
gdb-xml
hw savevm: Add VMSTATE_UINTTL_EQUAL helper 2013-03-26 13:30:49 +01:00
include migration: do not sent zero pages in bulk stage 2013-03-26 13:32:33 +01:00
ldscripts build: create ldscripts/ 2012-12-19 08:29:06 +01:00
libcacard libcacard: Fix unchecked strdup() by converting to g_strdup() 2013-01-30 11:14:46 +01:00
linux-headers linux-headers: resync from mainline to add ARM KVM headers 2013-03-05 00:34:40 +00:00
linux-user linux-user/syscall.c: Don't warn about unimplemented get_robust_list 2013-03-11 14:35:08 +02:00
net net: increase buffer size to accommodate Jumbo frame pkts 2013-03-25 11:14:07 +01:00
pc-bios ipxe: update binaries 2013-03-25 09:13:18 +01:00
pixman@97336fad32 qapi: move include files to include/qobject/ 2012-12-19 08:31:31 +01:00
po ui/gtk: Use menu item from stock for full screen 2013-02-22 14:49:00 -06:00
qapi qapi: Fix unchecked strdup() by converting to g_strdup() 2013-01-30 11:14:46 +01:00
qga Fix typos and misspellings 2013-03-22 13:25:07 +01:00
QMP qmp: add pull_event function 2012-10-24 10:26:22 +02:00
qobject Add qdict_clone_shallow() 2013-03-15 16:07:49 +01:00
qom exec: Pass CPUState to cpu_reset_interrupt() 2013-03-12 10:35:55 +01:00
roms ipxe: disable two second timeout 2013-03-25 09:07:40 +01:00
scripts make_device_config.sh: Emit dependency file to directory where included 2013-03-09 12:00:03 +00:00
slirp MinGW: Replace setsockopt by qemu_setsocketopt 2013-03-22 13:14:48 +01:00
stubs stubs: Add a vmstate_dummy struct for CONFIG_USER_ONLY 2013-03-12 10:35:54 +01:00
sysconfigs/target Eliminate cpus-x86_64.conf file 2012-09-21 15:12:58 +02:00
target-alpha cpu: Replace do_interrupt() by CPUClass::do_interrupt method 2013-03-12 10:35:55 +01:00
target-arm target-arm: Override do_interrupt for ARMv7-M profile 2013-03-12 10:35:55 +01:00
target-cris cpu: Replace do_interrupt() by CPUClass::do_interrupt method 2013-03-12 10:35:55 +01:00
target-i386 target-i386: Don't modify env->eflags around cpu_dump_state 2013-03-23 14:30:12 +00:00
target-lm32 target-lm32: use HELPER() macro 2013-03-18 19:40:34 +01:00
target-m68k cpu: Replace do_interrupt() by CPUClass::do_interrupt method 2013-03-12 10:35:55 +01:00
target-microblaze microblaze: Ignore non-cpu accesses to unmapped areas 2013-03-19 17:34:47 +01:00
target-mips target-mips: fix rndrashift_short_acc and code for EXTR_ instructions 2013-03-17 01:06:34 +01:00
target-moxie Add moxie target code 2013-03-23 14:25:41 +00:00
target-openrisc cpu: Replace do_interrupt() by CPUClass::do_interrupt method 2013-03-12 10:35:55 +01:00
target-ppc target-ppc: Use NARROW_MODE macro for tlbie 2013-03-22 15:28:54 +01:00
target-s390x Fix typos and misspellings 2013-03-22 13:25:07 +01:00
target-sh4 cpu: Replace do_interrupt() by CPUClass::do_interrupt method 2013-03-12 10:35:55 +01:00
target-sparc cpu: Replace do_interrupt() by CPUClass::do_interrupt method 2013-03-12 10:35:55 +01:00
target-unicore32 cpu: Replace do_interrupt() by CPUClass::do_interrupt method 2013-03-12 10:35:55 +01:00
target-xtensa cpu: Replace do_interrupt() by CPUClass::do_interrupt method 2013-03-12 10:35:55 +01:00
tcg tcg-optimize: Fold sub r,0,x to neg r,x 2013-03-23 14:31:03 +00:00
tests Merge branch 'for-upstream' of git://github.com/mwalle/qemu 2013-03-23 14:23:26 +00:00
tpm Add support for cancelling of a TPM command 2013-03-12 13:40:55 -05:00
trace trace: deal with deprecated glib thread functions 2013-02-12 16:26:44 -06:00
ui gtk: Release modifier when graphic console loses keyboard focus 2013-03-25 13:10:40 -05:00
util bitops: unroll while loop in find_next_bit() 2013-03-26 13:32:32 +01:00
.exrc qemu: add .exrc 2012-09-07 09:02:44 +03:00
.gitignore gitignore: ignore more files 2013-03-22 16:09:46 +01:00
.gitmodules pixman: add submodule 2012-11-01 13:10:06 +01:00
.mailmap Add a .mailmap to map pre-git-conversion authors to friendly names 2011-12-12 17:06:21 -06:00
aio-posix.c aio: support G_IO_HUP and G_IO_ERR 2013-02-21 16:17:31 -06:00
aio-win32.c aio: Fix return value of aio_poll() 2013-01-17 10:51:42 +01:00
arch_init.c migration: use XBZRLE only after bulk stage 2013-03-26 13:32:33 +01:00
async.c aio: add a ThreadPool instance to AioContext 2013-03-15 16:07:50 +01:00
balloon.c softmmu: move include files to include/sysemu/ 2012-12-19 08:32:45 +01:00
block-migration.c migration: run setup callbacks out of big lock 2013-03-11 13:32:01 +01:00
block.c block: Allow omitting the file name when using driver-specific options 2013-03-22 17:51:32 +01:00
blockdev-nbd.c softmmu: move include files to include/sysemu/ 2012-12-19 08:32:45 +01:00
blockdev.c block: Allow omitting the file name when using driver-specific options 2013-03-22 17:51:32 +01:00
blockjob.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
bt-host.c MinGW: Replace setsockopt by qemu_setsocketopt 2013-03-22 13:14:48 +01:00
bt-vhci.c softmmu: move remaining include files to include/ subdirectories 2012-12-19 08:32:46 +01:00
Changelog fix some common typos 2012-05-14 07:27:24 +02:00
cmd.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
cmd.h Delete useless 'extern' qualifiers for functions 2011-01-23 16:21:20 +00:00
CODING_STYLE Replace Qemu by QEMU in internal documentation 2012-04-07 13:58:25 +00:00
configure Add top level changes for moxie 2013-03-23 14:25:42 +00:00
COPYING
COPYING.LIB
coroutine-gthread.c block: move include files to include/block/ 2012-12-19 08:31:31 +01:00
coroutine-sigaltstack.c Merge remote-tracking branch 'kwolf/for-anthony' into staging 2013-02-26 07:44:39 -06:00
coroutine-ucontext.c Merge remote-tracking branch 'kwolf/for-anthony' into staging 2013-02-26 07:44:39 -06:00
coroutine-win32.c block: move include files to include/block/ 2012-12-19 08:31:31 +01:00
cpu-exec.c target-i386: Don't modify env->eflags around cpu_dump_state 2013-03-23 14:30:12 +00:00
cpus.c cpu: Pass CPUState to cpu_interrupt() 2013-03-12 10:35:55 +01:00
cputlb.c cpu: Move current_tb field to CPUState 2013-02-16 14:51:00 +01:00
device-hotplug.c hw: move device-hotplug.o to toplevel, compile it once 2013-03-01 13:57:13 +01:00
device_tree.c softmmu: move include files to include/sysemu/ 2012-12-19 08:32:45 +01:00
disas.c Add moxie disassembler 2013-03-23 14:25:41 +00:00
dma-helpers.c softmmu: move include files to include/sysemu/ 2012-12-19 08:32:45 +01:00
dump-stub.c softmmu: move include files to include/sysemu/ 2012-12-19 08:32:45 +01:00
dump.c cpu: Move host_tid field to CPUState 2013-02-16 14:50:59 +01:00
exec.c Merge remote-tracking branch 'afaerber/qom-cpu' into staging 2013-03-14 14:50:58 -05:00
gdbstub.c Merge branch 'ppc-for-upstream' of git://github.com/agraf/qemu 2013-03-22 21:43:57 +01:00
HACKING HACKING: List areas where we may rely on impdef C behaviour 2012-12-08 14:27:40 +00:00
hmp-commands.hx Revert "hmp: Disable chardev-add and chardev-remove" 2013-03-13 10:27:47 +01:00
hmp.c migration: do not sent zero pages in bulk stage 2013-03-26 13:32:33 +01:00
hmp.h Support for TPM command line options 2013-03-12 13:40:11 -05:00
iohandler.c iohandler: switch to GPollFD 2013-02-21 16:17:31 -06:00
ioport.c exec: move include files to include/exec/ 2012-12-19 08:31:31 +01:00
kvm-all.c cpu: Pass CPUState to cpu_interrupt() 2013-03-12 10:35:55 +01:00
kvm-stub.c kvm: Pass CPUState to kvm_on_sigbus_vcpu() 2013-01-28 16:57:56 +01:00
LICENSE LICENSE: There is no libqemu.a anymore 2011-12-09 11:25:22 +00:00
main-loop.c main-loop: add qemu_get_aio_context() 2013-03-15 16:07:50 +01:00
MAINTAINERS Add top level changes for moxie 2013-03-23 14:25:42 +00:00
Makefile Fix TAGS creation 2013-03-15 11:36:49 -05:00
Makefile.objs Support for TPM command line options 2013-03-12 13:40:11 -05:00
Makefile.target build: always link device_tree.o into emulators if libfdt available 2013-03-01 15:01:19 +01:00
memory.c memory: fix a bug of detection of memory region collision 2013-03-22 13:21:28 +01:00
memory_mapping-stub.c softmmu: move include files to include/sysemu/ 2012-12-19 08:32:45 +01:00
memory_mapping.c exec: change RAM list to a TAILQ 2012-12-20 23:08:47 +01:00
migration-exec.c migration: eliminate s->migration_file 2013-03-11 13:32:03 +01:00
migration-fd.c migration: eliminate s->migration_file 2013-03-11 13:32:03 +01:00
migration-tcp.c migration: eliminate s->migration_file 2013-03-11 13:32:03 +01:00
migration-unix.c migration: eliminate s->migration_file 2013-03-11 13:32:03 +01:00
migration.c migration: do not sent zero pages in bulk stage 2013-03-26 13:32:33 +01:00
monitor.c Merge branch 'ppc-for-upstream' of git://github.com/agraf/qemu 2013-03-22 21:43:57 +01:00
nbd.c nbd: Remove unused functions 2013-03-22 17:51:32 +01:00
os-posix.c softmmu: move include files to include/sysemu/ 2012-12-19 08:32:45 +01:00
os-win32.c softmmu: move include files to include/sysemu/ 2012-12-19 08:32:45 +01:00
page_cache.c page_cache: dup memory on insert 2013-03-11 13:32:03 +01:00
qapi-schema-test.json qapi: add struct-errors test case to test-qmp-output-visitor 2012-03-27 09:11:00 -03:00
qapi-schema.json migration: do not sent zero pages in bulk stage 2013-03-26 13:32:33 +01:00
qdev-monitor.c hw: move qdev-monitor.o to toplevel directory 2013-03-01 13:54:10 +01:00
qdict-test-data.txt Introduce QDict test data file 2009-09-04 09:37:34 -05:00
qemu-bridge-helper.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
qemu-char.c char: Fix return type of qemu_chr_fe_add_watch() 2013-03-19 07:56:07 -05:00
qemu-coroutine-io.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
qemu-coroutine-lock.c coroutine: use AioContext for CoQueue BH 2013-03-15 16:07:51 +01:00
qemu-coroutine-sleep.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
qemu-coroutine.c coroutine: move pooling to common code 2013-02-22 21:21:10 +01:00
qemu-doc.texi sheepdog: add support for connecting to unix domain socket 2013-03-04 09:54:17 +01:00
qemu-img-cmds.hx qemu-img: Add compare subcommand 2013-02-22 21:21:10 +01:00
qemu-img.c block: Add options QDict to bdrv_open() prototype 2013-03-15 16:07:49 +01:00
qemu-img.texi qemu-img: Add compare subcommand 2013-02-22 21:21:10 +01:00
qemu-io.c block: Add options QDict to bdrv_file_open() prototypes 2013-03-22 17:51:31 +01:00
qemu-log.c qemu-log: default to stderr for logging output 2013-02-26 13:31:47 -06:00
qemu-nbd.c block: Add options QDict to bdrv_open() prototype 2013-03-15 16:07:49 +01:00
qemu-nbd.texi qemu-nbd: add --discard option 2013-02-22 21:29:43 +01:00
qemu-options-wrapper.h vl.c: In qemu -h output, only print options for the arch we are running as 2011-12-19 10:27:33 -06:00
qemu-options.h vl.c: Move option generation logic into a wrapper file 2011-12-19 10:27:33 -06:00
qemu-options.hx Fix typos and misspellings 2013-03-22 13:25:07 +01:00
qemu-seccomp.c softmmu: move include files to include/sysemu/ 2012-12-19 08:32:45 +01:00
qemu-tech.texi qemu-tech.texi: update implemented xtensa features list 2012-11-29 13:00:52 -06:00
qemu-timer.c softmmu: move include files to include/sysemu/ 2012-12-19 08:32:45 +01:00
qemu.sasl
qmp-commands.hx migration: do not sent zero pages in bulk stage 2013-03-26 13:32:33 +01:00
qmp.c softmmu: move remaining include files to include/ subdirectories 2012-12-19 08:32:46 +01:00
qtest.c qtest: Add MMIO support 2013-02-18 08:39:10 -06:00
readline.c readline: Fix unchecked strdup() by converting to g_strdup() 2013-01-30 11:14:46 +01:00
README Update README 2011-12-11 17:50:43 -06:00
rules.mak rules/mak: make clean should blow away timestamp files 2013-01-30 01:31:08 +02:00
savevm.c savevm: Add VMSTATE_FLOAT64 helpers 2013-03-26 13:30:49 +01:00
spice-qemu-char.c spice-qemu-char: Remove dead debugging code 2013-03-14 09:46:18 +01:00
tcg-runtime.c tcg: Implement multiword multiply helpers 2013-02-23 17:25:28 +00:00
tci.c exec: move include files to include/exec/ 2012-12-19 08:31:31 +01:00
thread-pool.c threadpool: drop global thread pool 2013-03-15 16:07:51 +01:00
thunk.c exec: move include files to include/exec/ 2012-12-19 08:31:31 +01:00
trace-events console: rework DisplaySurface handling [vga emu side] 2013-03-18 10:21:58 +01:00
translate-all.c tcg: Fix occasional TCG broken problem when ldst optimization enabled 2013-03-22 21:38:21 +01:00
translate-all.h cputlb: Pass CPUState to cpu_unlink_tb() 2013-02-16 14:51:00 +01:00
user-exec.c Replace all setjmp()/longjmp() with sigsetjmp()/siglongjmp() 2013-02-23 16:11:19 +00:00
VERSION Open up 1.5 development tree 2013-02-15 17:40:56 -06:00
version.rc mingw: add version information to the executables 2010-09-26 16:07:57 +00:00
vl.c add a boot option to do strict boot 2013-03-19 08:00:10 -05:00
xbzrle.c Move XBZRLE encoding code to a separate file to allow testing 2013-02-01 08:32:20 +01:00
xen-all.c cpu: Move halted and interrupt_request fields to CPUState 2013-03-12 10:35:55 +01:00
xen-mapcache.c softmmu: move include files to include/sysemu/ 2012-12-19 08:32:45 +01:00
xen-stub.c exec: move include files to include/exec/ 2012-12-19 08:31:31 +01:00

Read the documentation in qemu-doc.html or on http://wiki.qemu.org

- QEMU team