An extension to output the memory update speed of a VM
C C++ Python Haxe Assembly Perl Other
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
QMP
audio
block
bsd-user
default-configs
docs
fpu
fsdev
gdb-xml
hw
include/qemu
libcacard
linux-headers
linux-user
net
pc-bios
qapi
qga
qom
roms
scripts
slirp
sysconfigs/target
target-alpha
target-arm
target-cris
target-i386
target-lm32
target-m68k
target-microblaze
target-mips
target-ppc
target-s390x
target-sh4
target-sparc
target-unicore32
target-xtensa
tcg
tests
trace
ui
.gitignore
.gitmodules
.mailmap
CODING_STYLE
COPYING
COPYING.LIB
Changelog
HACKING
LICENSE
MAINTAINERS
Makefile
Makefile.dis
Makefile.hw
Makefile.objs
Makefile.target
Makefile.user
README
README.md
TODO
VERSION
a.out.h
acl.c
acl.h
aes.c
aes.h
aio.c
alpha-dis.c
alpha.ld
arch_init.c
arch_init.h
arm-dis.c
arm-semi.c
arm.ld
async.c
balloon.c
balloon.h
bitmap.c
bitmap.h
bitops.c
bitops.h
block-migration.c
block-migration.h
block.c
block.h
block_int.h
blockdev.c
blockdev.h
bswap.h
bt-host.c
bt-host.h
bt-vhci.c
buffered_file.c
buffered_file.h
cache-utils.c
cache-utils.h
cmd.c
cmd.h
compatfd.c
compatfd.h
compiler.h
config.h
configure
console.c
console.h
coroutine-gthread.c
coroutine-sigaltstack.c
coroutine-ucontext.c
coroutine-win32.c
cpu-all.h
cpu-common.h
cpu-defs.h
cpu-exec.c
cpus.c
cpus.h
cputlb.c
cputlb.h
cris-dis.c
cursor.c
cursor_hidden.xpm
cursor_left_ptr.xpm
cutils.c
def-helper.h
device_tree.c
device_tree.h
dirty-page-tracking-extension.c
dis-asm.h
disas.c
disas.h
dma-helpers.c
dma.h
dyngen-exec.h
elf.h
envlist.c
envlist.h
error.c
error.h
error_int.h
event_notifier.c
event_notifier.h
exec-all.h
exec-memory.h
exec-obsolete.h
exec.c
gdbstub.c
gdbstub.h
gen-icount.h
hmp-commands.hx
hmp.c
hmp.h
host-utils.c
host-utils.h
hppa-dis.c
hppa.ld
i386-dis.c
i386.ld
ia64-dis.c
ia64.ld
input.c
int128.h
iohandler.c
ioport-user.c
ioport.c
ioport.h
iorange.h
iov.c
iov.h
json-lexer.c
json-lexer.h
json-parser.c
json-parser.h
json-streamer.c
json-streamer.h
kvm-all.c
kvm-stub.c
kvm.h
libfdt_env.h
linux-aio.c
lm32-dis.c
m68k-dis.c
m68k-semi.c
m68k.ld
main-loop.c
main-loop.h
memory.c
memory.h
microblaze-dis.c
migration-exec.c
migration-fd.c
migration-postcopy-stub.c
migration-postcopy.c
migration-tcp.c
migration-unix.c
migration.c
migration.h
mips-dis.c
mips.ld
module.c
module.h
monitor.c
monitor.h
nbd.c
nbd.h
net.c
net.h
notify.c
notify.h
os-posix.c
os-win32.c
osdep.c
osdep.h
oslib-posix.c
oslib-win32.c
path.c
pci-ids.txt
pflib.c
pflib.h
poison.h
posix-aio-compat.c
ppc-dis.c
ppc.ld
ppc64.ld
qapi-schema-guest.json
qapi-schema-test.json
qapi-schema.json
qbool.c
qbool.h
qdict-test-data.txt
qdict.c
qdict.h
qemu-aio.h
qemu-barrier.h
qemu-bridge-helper.c
qemu-char.c
qemu-char.h
qemu-common.h
qemu-config.c
qemu-config.h
qemu-coroutine-int.h
qemu-coroutine-io.c
qemu-coroutine-lock.c
qemu-coroutine-sleep.c
qemu-coroutine.c
qemu-coroutine.h
qemu-doc.texi
qemu-error.c
qemu-error.h
qemu-file.h
qemu-ga.c
qemu-img-cmds.hx
qemu-img.c
qemu-img.texi
qemu-io.c
qemu-lock.h
qemu-log.h
qemu-nbd.c
qemu-nbd.texi
qemu-objects.h
qemu-option.c
qemu-option.h
qemu-options-wrapper.h
qemu-options.h
qemu-options.hx
qemu-os-posix.h
qemu-os-win32.h
qemu-progress.c
qemu-queue.h
qemu-sockets.c
qemu-tech.texi
qemu-thread-posix.c
qemu-thread-posix.h
qemu-thread-win32.c
qemu-thread-win32.h
qemu-thread.h
qemu-timer-common.c
qemu-timer.c
qemu-timer.h
qemu-tls.h
qemu-tool.c
qemu-user.c
qemu-x509.h
qemu-xattr.h
qemu.sasl
qemu_socket.h
qerror.c
qerror.h
qfloat.c
qfloat.h
qint.c
qint.h
qjson.c
qjson.h
qlist.c
qlist.h
qmp-commands.hx
qmp.c
qobject.h
qstring.c
qstring.h
qtest.c
qtest.h
range.h
readline.c
readline.h
rules.mak
s390-dis.c
s390.ld
savevm.c
sh4-dis.c
softmmu-semi.h
softmmu_defs.h
softmmu_exec.h
softmmu_header.h
softmmu_template.h
sparc-dis.c
sparc.ld
sparc64.ld
spice-qemu-char.c
sysemu.h
targphys.h
tcg-runtime.c
tci-dis.c
tci.c
thunk.c
thunk.h
trace-events
translate-all.c
uboot_image.h
umem.c
umem.h
user-exec.c
version.rc
vgafont.h
vl.c
vmstate.h
x86_64.ld
xen-all.c
xen-mapcache.c
xen-mapcache.h
xen-stub.c
xtensa-semi.c

README.md

Qemu-DPT

Qemu-DPT (Dirty Page Tracking) is a tool to measure the memory update speed of your VM. It is a small extension to Qemu/KVM. This tool itself was developed in the Yabusame project of AIST around 2012.

Background

To accurately simulate the behavior of an IaaS cloud system, you may want to obtain the memory update intensity of VMs through Qemu-DPT. This information will be one of the input parameters to your simulation program.

At the time of writing, SimGrid is the only simulation framework with an accurate precopy-based live migration model. It implements the precopy algorithm used in hypervisors. It can correctly simulates the duration of live migrations and the amount of transferred data, considering memory update speeds of VMs and resource contention of CPU and network.

If you use Qemu-DPT for your research, please cite the below paper in your publication.

Adding a Live Migration Model into SimGrid,
Takahiro Hirofuchi, Adrien Lèbre, Laurent Pouilloux,
Proceedings of the 5th IEEE International Conference on Cloud Computing Technology and Services 2013 (CloudCom2013), pp.96-103, Dec 2013
DOI: 10.1109/CloudCom.2013.20

SimGrid VM: Virtual Machine Support for a Simulation Framework of Distributed Systems,
Takahiro Hirofuchi, Adrien Lèbre, Laurent Pouilloux,
IEEE Transactions on Cloud Computing, 2015 (To appear)
DOI: 10.1109/TCC.2015.2481422

@inproceedings{SimGridVM:CloudCom2013,
	author = {Takahiro Hirofuchi and Adrien Lèbre and Laurent Pouilloux},
	title = {Adding a Live Migration Model into SimGrid: One More Step Toward the Simulation of Infrastructure-as-a-Service Concerns},
	booktitle = {Proceedings of the 2013 IEEE International Conference on Cloud Computing Technology and Science (CloudCom2013)},
	year = {2013},
	pages = {96--103},
	publisher = {IEEE Computer Society},
}

@article{SimGridVM:IEEETCC2015,
	author = {Takahiro Hirofuchi and Adrien Lèbre and Laurent Pouilloux},
	title = {{SimGrid VM}: Virtual Machine Support for a Simulation Framework of Distributed Systems},
	booktitle = {IEEE Transactions on Cloud Computing (To appear)},
	year = {2015},
	pages = {x--x},
	publisher = {IEEE},
	ISSN = {2168-7161}
}

Compile

$ git clone https://github.com/grivon/yabusame-qemu-dpt.git
$ CC=gcc CFLAGS=-lrt ./configure --target-list=x86_64-softmmu --disable-docs
$ make -j 8

Usage

Through the Qemu monitor interface, you can start and stop dirty page tracking. While dirty page tracking is active, Qemu periodically outputs memory update speed to stderr.

$ ./x86_64-softmmu/qemu-system-x86_64 -m 4g -machine accel=kvm -hda your-vm-disk.img -monitor stdio
phys_dirty is reallocated. old size 0, new size 1048576
phys_dirty is reallocated. old size 1048576, new size 1048608
phys_dirty is reallocated. old size 1048608, new size 1048640
phys_dirty is reallocated. old size 1048640, new size 1050688
phys_dirty is reallocated. old size 1050688, new size 1050704
phys_dirty is reallocated. old size 1050704, new size 1050736
QEMU 1.0.91 monitor - type 'help' for more information
(qemu)


(qemu) dpt_start
create bitmap /tmp/qemu.bm-14528.1434530585 (131344 bytes), dirty 54 / 1050736 (0.211 MB/s)
create bitmap /tmp/qemu.bm-14528.1434530586 (131344 bytes), dirty 45 / 1050736 (0.176 MB/s)
create bitmap /tmp/qemu.bm-14528.1434530587 (131344 bytes), dirty 74 / 1050736 (0.289 MB/s)
create bitmap /tmp/qemu.bm-14528.1434530588 (131344 bytes), dirty 37 / 1050736 (0.145 MB/s)
create bitmap /tmp/qemu.bm-14528.1434530589 (131344 bytes), dirty 71 / 1050736 (0.277 MB/s)
create bitmap /tmp/qemu.bm-14528.1434530590 (131344 bytes), dirty 64 / 1050736 (0.250 MB/s)
create bitmap /tmp/qemu.bm-14528.1434530591 (131344 bytes), dirty 58 / 1050736 (0.227 MB/s)

(qemu) dpt_stop

Author and Contact

Takahiro Hirofuchi, Senior researcher of AIST

Copyright (c) 2011-2015 National Institute of Advanced Industrial Science and Technology