QEMU With E2K User Support
Go to file
Fam Zheng c6ac36e145 vmdk: Optimize cluster allocation
This drops the unnecessary bdrv_truncate() from, and also improves,
cluster allocation code path.

Before, when we need a new cluster, get_cluster_offset truncates the
image to bdrv_getlength() + cluster_size, and returns the offset of
added area, i.e. the image length before truncating.

This is not efficient, so it's now rewritten as:

  - Save the extent file length when opening.

  - When allocating cluster, use the saved length as cluster offset.

  - Don't truncate image, because we'll anyway write data there: just
    write any data at the EOF position, in descending priority:

    * New user data (cluster allocation happens in a write request).

    * Filling data in the beginning and/or ending of the new cluster, if
      not covered by user data: either backing file content (COW), or
      zero for standalone images.

One major benifit of this change is, on host mounted NFS images, even
over a fast network, ftruncate is slow (see the example below). This
change significantly speeds up cluster allocation. Comparing by
converting a cirros image (296M) to VMDK on an NFS mount point, over
1Gbe LAN:

    $ time qemu-img convert cirros-0.3.1.img /mnt/a.raw -O vmdk

    Before:
        real    0m21.796s
        user    0m0.130s
        sys     0m0.483s

    After:
        real    0m2.017s
        user    0m0.047s
        sys     0m0.190s

We also get rid of unchecked bdrv_getlength() and bdrv_truncate(), and
get a little more documentation in function comments.

Tested that this passes qemu-iotests for all VMDK subformats.

Signed-off-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2014-08-15 15:07:14 +02:00
audio audio: Drop superfluous conditionals around g_free() 2014-06-13 12:34:54 +02:00
backends rng-random: NULL check not needed before g_free() 2014-06-24 20:01:24 +04:00
block vmdk: Optimize cluster allocation 2014-08-15 15:07:14 +02:00
bsd-user bsd-user: Fix syscall format, add strace support for more syscalls 2014-06-11 00:25:06 +01:00
default-configs pc: implement pc-dimm device abstraction 2014-06-19 16:41:47 +03:00
disas disas/libvixl: prepend the include path of libvixl header files 2014-07-08 12:45:57 +01:00
docs docs/multiple-iothreads.txt: add documentation on IOThread programming 2014-08-15 15:07:13 +02:00
dtc@bc895d6d09
fpu fpu: softfloat: drop INLINE macro 2014-06-23 11:00:12 -04:00
fsdev virtfs-proxy-helper: fix call to accept 2014-04-28 08:55:32 +04:00
gdb-xml
hw xen_disk: fix possible null-ptr dereference 2014-08-15 15:07:13 +02:00
include block: New bdrv_nb_sectors() 2014-08-15 15:07:12 +02:00
libcacard vscclient: Add required headers to fix build on FreeBSD 2014-06-24 20:01:24 +04:00
libdecnumber libdecnumber: Fix decNumberSetBCD 2014-06-16 13:24:29 +02:00
linux-headers linux-headers: update linux headers to kvm/next 2014-06-16 13:24:41 +02:00
linux-user linux-user: use TARGET_SA_ONSTACK in get_sigframe 2014-07-15 17:08:41 +03:00
net tap-bsd: implement a FreeBSD only version of tap_open 2014-08-01 15:57:48 +00:00
pc-bios pc-bios/s390-ccw: update binary 2014-07-08 15:08:03 +02:00
pixman@97336fad32
po po: update Italian translation 2014-07-29 13:23:33 +01:00
qapi block: add backing-file option to block-stream 2014-07-01 10:47:01 +02:00
qga qga: Add missing 'static' attribute 2014-07-18 17:45:37 +04:00
qobject json-lexer: fix escaped backslash in single-quoted string 2014-06-23 11:01:24 -04:00
qom qom: object: Ignore refs/unrefs of NULL 2014-07-01 10:20:41 +02:00
roms pseries: Update SLOF firmware image to qemu-slof-20140630 2014-07-08 12:10:36 +02:00
scripts checker: ignore fields marked unused 2014-08-04 15:02:37 +05:30
slirp Increase maximum number of session of the internal TFTP server. 2014-06-24 20:01:24 +04:00
stubs Merge remote-tracking branch 'remotes/qmp-unstable/queue/qmp' into staging 2014-06-24 13:06:13 +01:00
sysconfigs/target
target-alpha softmmu: introduce cpu_ldst.h 2014-06-05 16:10:33 +02:00
target-arm target-arm: A64: fix TLB flush instructions 2014-08-04 14:41:56 +01:00
target-cris target-cris/translate.c: Remove _t_gen_mov_TN_env and _t_gen_mov_env_TN 2014-06-09 01:04:44 +02:00
target-i386 target-i386: Allow execute from user mode when SMEP is enabled. 2014-07-15 18:43:14 +02:00
target-lm32 vl: allow other threads to do qemu_system_vmstop_request 2014-06-23 16:36:13 +08:00
target-m68k softmmu: introduce cpu_ldst.h 2014-06-05 16:10:33 +02:00
target-microblaze target-microblaze: Delete unused sign_extend() function 2014-06-10 19:39:34 +04:00
target-mips target-mips/translate.c: Free TCG in OPC_DINSV 2014-07-28 23:37:15 +02:00
target-moxie softmmu: introduce cpu_ldst.h 2014-06-05 16:10:33 +02:00
target-openrisc openrisc: fix comment 2014-06-29 18:59:06 +03:00
target-ppc spapr: Move RMA memory region registration code 2014-07-15 16:11:59 +02:00
target-s390x s390x/kvm: synchronize guest floating point registers 2014-07-14 09:15:38 +02:00
target-sh4 softmmu: introduce cpu_ldst.h 2014-06-05 16:10:33 +02:00
target-sparc softmmu: introduce cpu_ldst.h 2014-06-05 16:10:33 +02:00
target-unicore32 target-unicore: Remove unused functions 2014-06-24 20:01:24 +04:00
target-xtensa softmmu: introduce cpu_ldst.h 2014-06-05 16:10:33 +02:00
tcg tcg/ppc: Fix support for 64-bit PPC MacOSX hosts 2014-06-29 11:38:50 +01:00
tests qemu-iotests: Add data pattern in version3 VMDK sample image in 059 2014-08-15 15:07:13 +02:00
trace glib-compat.h: add new thread API emulation on top of pre-2.31 API 2014-06-10 07:44:01 +02:00
ui vnc update fix 2014-07-25 09:43:31 +02:00
util module: Don't complain when a module is absent 2014-07-18 14:57:35 +02:00
.exrc
.gitignore qapi: ignore generated event files 2014-06-27 09:27:55 -04:00
.gitmodules PPC: Add u-boot firmware for e500 2014-06-16 13:24:35 +02:00
.mailmap
.travis.yml trace: Multi-backend tracing 2014-06-09 15:43:40 +02:00
aio-posix.c AioContext: speed up aio_notify 2014-07-09 15:50:11 +02:00
aio-win32.c block: drop aio functions that operate on the main AioContext 2014-07-09 15:50:11 +02:00
arch_init.c migration: catch unknown flags in ram_load 2014-06-16 04:55:27 +02:00
async.c AioContext: speed up aio_notify 2014-07-09 15:50:11 +02:00
balloon.c qapi event: convert BALLOON_CHANGE 2014-06-23 11:12:28 -04:00
block-migration.c block: Use bdrv_nb_sectors() where sectors, not bytes are wanted 2014-08-15 15:07:13 +02:00
block.c block: Avoid bdrv_get_geometry() where errors should be detected 2014-08-15 15:07:13 +02:00
blockdev-nbd.c nbd: Shutdown socket before closing. 2014-06-30 12:50:12 +02:00
blockdev.c block: add backing-file option to block-stream 2014-07-01 10:47:01 +02:00
blockjob.c block: prefer aio_poll to qemu_aio_wait 2014-07-09 15:50:11 +02:00
bt-host.c
bt-vhci.c
Changelog
CODING_STYLE CODING_STYLE: Section about mixed declarations 2014-03-27 19:22:49 +04:00
configure configure: explicitly state version requirements to devel packages 2014-08-15 15:07:13 +02:00
COPYING
COPYING.LIB
coroutine-gthread.c glib-compat.h: add new thread API emulation on top of pre-2.31 API 2014-06-10 07:44:01 +02:00
coroutine-sigaltstack.c
coroutine-ucontext.c
coroutine-win32.c coroutine-win32.c: Add noinline attribute to work around gcc bug 2014-06-26 14:08:14 +01:00
cpu-exec.c cpu: make CPU_INTERRUPT_RESET available on all targets 2014-05-13 13:21:51 +02:00
cpus.c qapi event: convert STOP 2014-06-23 11:01:25 -04:00
cputlb.c softmmu: introduce cpu_ldst.h 2014-06-05 16:10:33 +02:00
device_tree.c
device-hotplug.c blockdev: Remove unused DriveInfo reference count 2014-06-16 17:23:19 +08:00
disas.c monitor: QEMU Monitor Instruction Disassembly Incorrect for PowerPC LE Mode 2014-06-16 13:24:26 +02:00
dma-helpers.c dma-helpers: Fix too long qiov 2014-07-14 12:03:21 +02:00
dump.c dump: Make DumpState and endian conversion routines available for arch-specific dump code 2014-06-16 13:24:36 +02:00
exec.c exec: fix migration with devices that use address_space_rw 2014-07-22 10:38:50 +02:00
gdbstub.c exec: Change cpu_breakpoint_{insert,remove{,_by_ref,_all}} argument 2014-03-13 19:20:48 +01:00
HACKING
hmp-commands.hx Add the vhost-user netdev backend to the command line 2014-06-19 18:44:18 +03:00
hmp.c block: add backing-file option to block-stream 2014-07-01 10:47:01 +02:00
hmp.h hmp: add info memdev 2014-06-19 18:44:21 +03:00
iohandler.c iohandler.c: Properly initialize sigaction struct 2014-05-24 00:07:29 +04:00
ioport.c
iothread.c AioContext: do not rely on aio_poll(ctx, true) result to end a loop 2014-07-14 12:03:20 +02:00
kvm-all.c kvm-all: Use 'tmpcpu' instead of 'cpu' in sub-looping to avoid 'cpu' be NULL 2014-07-22 12:38:17 +02:00
kvm-stub.c Add kvm_eventfds_enabled function 2014-06-19 16:41:54 +03:00
LICENSE
main-loop.c block: drop aio functions that operate on the main AioContext 2014-07-09 15:50:11 +02:00
MAINTAINERS MAINTAINERS: add Stefan Hajnoczi to IDE maintainers 2014-07-07 09:15:29 +02:00
Makefile PPC: e500: Actually install u-boot.e500 2014-07-08 12:10:37 +02:00
Makefile.objs qapi script: add event support 2014-06-23 11:01:25 -04:00
Makefile.target configure: Fix -lm test, so that tools can be compiled on hosts that require -lm 2014-07-01 10:36:28 +02:00
memory_mapping.c
memory.c memory: MemoryRegion: Add size property 2014-07-01 10:20:41 +02:00
migration-exec.c
migration-fd.c
migration-rdma.c rdma: bug fixes 2014-06-23 19:09:50 +02:00
migration-tcp.c Coverity: Fix failure path for qemu_accept in migration 2014-05-05 22:15:03 +02:00
migration-unix.c Coverity: Fix failure path for qemu_accept in migration 2014-05-05 22:15:03 +02:00
migration.c migration: catch unknown flags in ram_load 2014-06-16 04:55:27 +02:00
module-common.c module: implement module loading 2014-02-20 13:14:18 +01:00
monitor.c serial: poll the serial console with G_IO_HUP 2014-06-30 15:04:34 +02:00
nbd.c nbd: Handle NBD_OPT_LIST option. 2014-06-30 12:50:17 +02:00
numa.c numa: check for busy memory backend 2014-07-06 09:13:53 +03:00
os-posix.c oslib-posix: Fix build on FreeBSD 2014-03-13 14:34:16 +00:00
os-win32.c util: Split out exec_dir from os_find_datadir 2014-02-20 13:12:54 +01:00
page_cache.c migration: Plug memory leak in migrate-set-cache-size command 2014-06-10 19:54:43 +04:00
qapi-schema.json mc146818rtc: add rtc-reset-reinjection QMP command 2014-06-29 18:59:35 +03:00
qdev-monitor.c qdev-monitor: include QOM properties in -device FOO, help output 2014-08-15 15:07:13 +02:00
qdict-test-data.txt
qemu-bridge-helper.c qemu-bridge-helper: Fix fd leak in main() 2014-06-27 10:39:10 +02:00
qemu-char.c qemu-char: ignore flow control if a PTY's slave is not connected 2014-07-25 14:36:07 +02:00
qemu-coroutine-io.c
qemu-coroutine-lock.c
qemu-coroutine-sleep.c
qemu-coroutine.c
qemu-doc.texi doc: slirp supports ICMP echo if enabled in Linux 2014-07-18 17:45:37 +04:00
qemu-file.c Make qemu_peek_buffer loop until it gets it's data 2014-05-05 22:15:03 +02:00
qemu-img-cmds.hx
qemu-img.c block: Avoid bdrv_get_geometry() where errors should be detected 2014-08-15 15:07:13 +02:00
qemu-img.texi Fix nocow typos in manpage 2014-07-07 09:15:29 +02:00
qemu-io-cmds.c block: prefer aio_poll to qemu_aio_wait 2014-07-09 15:50:11 +02:00
qemu-io.c trace: Multi-backend tracing 2014-06-09 15:43:40 +02:00
qemu-log.c
qemu-nbd.c nbd: Shutdown socket before closing. 2014-06-30 12:50:12 +02:00
qemu-nbd.texi nbd: Miscellaneous typo fixes. 2014-05-24 00:07:29 +04:00
qemu-options-wrapper.h
qemu-options.h
qemu-options.hx qemu-options: fix another allows-to for -net l2tpv3 2014-07-26 11:16:44 +04:00
qemu-seccomp.c seccomp: add shmctl(), mlock(), and munlock() to the syscall whitelist 2014-04-25 14:52:03 -03:00
qemu-tech.texi
qemu-timer.c vl.c: remove init_clocks call from main 2014-05-09 20:57:32 +02:00
qemu.nsi
qemu.sasl sasl: Avoid 'Could not find keytab file' in syslog 2014-03-15 13:54:18 +04:00
qmp-commands.hx block: add backing-file option to block-stream 2014-07-01 10:47:01 +02:00
qmp.c qmp: hide "hotplugged" device property from device-list-properties 2014-08-15 15:07:13 +02:00
qtest.c qtest: fix hex2nib for capital characters 2014-06-10 19:39:34 +04:00
README
rules.mak build-sys: introduce install-prog macro to install&strip binaries and use it 2014-06-24 20:01:24 +04:00
savevm.c savevm: check vmsd for migratability status 2014-06-25 23:54:57 +02:00
softmmu_template.h softmmu: move softmmu_template.h out of include/ 2014-06-05 16:10:33 +02:00
spice-qemu-char.c qemu-char: introduce qemu_chr_alloc 2014-06-23 11:12:28 -04:00
tcg-runtime.c tcg: Push tcg-runtime routines into exec/helper-* 2014-05-28 09:33:54 -07:00
tci.c Merge remote-tracking branch 'remotes/bonzini/softmmu-smap' into staging 2014-06-05 21:06:14 +01:00
thread-pool.c aio: Fix use-after-free in cancellation path 2014-05-28 14:28:46 +02:00
thunk.c
tpm.c Use error_is_set() only when necessary 2014-02-17 11:57:23 -05:00
trace-events trace: add qemu_system_powerdown_request and qemu_system_shutdown_request trace events 2014-07-01 10:56:13 +02:00
translate-all.c Fix new typos (found by codespell) 2014-06-24 20:01:24 +04:00
translate-all.h translate-all: Change tb_check_watchpoint() argument to CPUState 2014-03-13 19:20:48 +01:00
user-exec.c softmmu: introduce cpu_ldst.h 2014-06-05 16:10:33 +02:00
VERSION Open 2.2 development tree 2014-08-01 18:30:08 +01:00
version.rc
vl.c machine: Replace underscores in machine's property names 2014-07-21 18:58:36 +02:00
vmstate.c vmstate: Add preallocation for migrating arrays (VMS_ALLOC flag) 2014-06-27 13:48:27 +02:00
xbzrle.c xbzrle.c: Avoid undefined behaviour with signed arithmetic 2014-04-18 10:33:36 +04:00
xen-common-stub.c xen: factor out common functions 2014-05-07 16:16:43 +00:00
xen-common.c xen: factor out common functions 2014-05-07 16:16:43 +00:00
xen-hvm-stub.c xen-hvm: Fix xen_hvm_init() to adjust pc memory layout 2014-06-23 17:50:04 +03:00
xen-hvm.c xen: fix usage of ENODATA 2014-08-01 15:57:28 +00:00
xen-mapcache.c xen: build on ARM 2014-07-07 10:37:40 +00:00

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

- QEMU team