[pve-devel] [PATCH] update proxmox patches to qemu 2.4
Wolfgang Bumiller
w.bumiller at proxmox.com
Wed Jul 1 08:14:17 CEST 2015
I'll merge this into my 2.4 branch.
I've already started the branch for 2.4 after finishing the 2.3 patches,
but then decided to wait for qemu's hard-freeze on 2015-07-07 (see
<http://wiki.qemu.org/Planning/2.4>) before finishing it off.
(I probably should have just posted the patch for reviewing anyway.)
My branch doesn't include your new patches yet.
I'll send my current diff in a minute. It seems to overlap a bit
On Tue, Jun 30, 2015 at 06:17:35PM +0200, Alexandre Derumier wrote:
> fixme :
> -internal-snapshot-async.patch
>
> - backups : seem that they are lot of changes with bitmap support add (backup_start have new arguments for example)
>
> blockdev.c:2486:7: error: conflicting types for ‘qmp_backup’
> char *qmp_backup(const char *backup_file, bool has_format,
> ^
> In file included from blockdev.c:49:0:
> qmp-commands.h:111:11: note: previous declaration of ‘qmp_backup’ was here
> UuidInfo *qmp_backup(const char *backup_file, bool has_format, BackupFormat format, bool has_config_file, const char *config_file, bool has_devlist, const char *devlist, bool has_speed, int64_t speed, Error **errp);
> ^
> blockdev.c: In function ‘qmp_backup’:
> blockdev.c:2520:37: error: ‘QERR_DEVICE_IS_READ_ONLY’ undeclared (first use in this function)
> error_set(errp, QERR_DEVICE_IS_READ_ONLY, *d);
> ^
> blockdev.c:2520:37: note: each undeclared identifier is reported only once for each function it appears in
> blockdev.c:2524:21: error: incompatible type for argument 2 of ‘error_set’
> error_set(errp, QERR_DEVICE_HAS_NO_MEDIUM, *d);
> ^
> In file included from /var/lib/vz/proxmox2/pve-qemu-kvm2.4/qemu-kvm/include/sysemu/block-backend.h:17:0,
> from blockdev.c:33:
> /var/lib/vz/proxmox2/pve-qemu-kvm2.4/qemu-kvm/include/qapi/error.h:30:6: note: expected ‘ErrorClass’ but argument is of type ‘const char *’
> void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
> ^
> blockdev.c:2531:33: error: ‘QERR_DEVICE_NOT_FOUND’ undeclared (first use in this function)
> error_set(errp, QERR_DEVICE_NOT_FOUND, *d);
> ^
> blockdev.c:2707:9: error: incompatible type for argument 7 of ‘backup_start’
> backup_start(di->bs, di->target, speed, MIRROR_SYNC_MODE_FULL,
> ^
> In file included from /var/lib/vz/proxmox2/pve-qemu-kvm2.4/qemu-kvm/include/block/throttle-groups.h:29:0,
> from blockdev.c:37:
> /var/lib/vz/proxmox2/pve-qemu-kvm2.4/qemu-kvm/include/block/block_int.h:650:6: note: expected ‘BlockdevOnError’ but argument is of type ‘int (*)(void *, struct BlockDriverState *, int64_t, int, unsigned char *)’
> void backup_start(BlockDriverState *bs, BlockDriverState *target,
> ^
> blockdev.c:2709:41: warning: passing argument 8 of ‘backup_start’ from incompatible pointer type
> pvebackup_dump_cb, pvebackup_complete_cb, di,
> ^
> In file included from /var/lib/vz/proxmox2/pve-qemu-kvm2.4/qemu-kvm/include/block/throttle-groups.h:29:0,
> from blockdev.c:37:
> /var/lib/vz/proxmox2/pve-qemu-kvm2.4/qemu-kvm/include/block/block_int.h:650:6: note: expected ‘int (*)(void *, struct BlockDriverState *, int64_t, int, unsigned char *)’ but argument is of type ‘void (*)(void *, int)’
> void backup_start(BlockDriverState *bs, BlockDriverState *target,
> ^
> blockdev.c:2709:64: warning: passing argument 9 of ‘backup_start’ from incompatible pointer type
> pvebackup_dump_cb, pvebackup_complete_cb, di,
> ^
> In file included from /var/lib/vz/proxmox2/pve-qemu-kvm2.4/qemu-kvm/include/block/throttle-groups.h:29:0,
> from blockdev.c:37:
> /var/lib/vz/proxmox2/pve-qemu-kvm2.4/qemu-kvm/include/block/block_int.h:650:6: note: expected ‘void (*)(void *, int)’ but argument is of type ‘struct PVEBackupDevInfo *’
> void backup_start(BlockDriverState *bs, BlockDriverState *target,
> ^
> blockdev.c:2710:22: warning: passing argument 10 of ‘backup_start’ makes pointer from integer without a cast
> true, &local_err);
> ^
> In file included from /var/lib/vz/proxmox2/pve-qemu-kvm2.4/qemu-kvm/include/block/throttle-groups.h:29:0,
> from blockdev.c:37:
> /var/lib/vz/proxmox2/pve-qemu-kvm2.4/qemu-kvm/include/block/block_int.h:650:6: note: expected ‘void *’ but argument is of type ‘int’
> void backup_start(BlockDriverState *bs, BlockDriverState *target,
> ^
> blockdev.c:2710:22: warning: the address of ‘local_err’ will always evaluate as ‘true’ [-Waddress]
> true, &local_err);
> ^
> blockdev.c:2707:9: error: too few arguments to function ‘backup_start’
> backup_start(di->bs, di->target, speed, MIRROR_SYNC_MODE_FULL,
> ^
> In file included from /var/lib/vz/proxmox2/pve-qemu-kvm2.4/qemu-kvm/include/block/throttle-groups.h:29:0,
> from blockdev.c:37:
> /var/lib/vz/proxmox2/pve-qemu-kvm2.4/qemu-kvm/include/block/block_int.h:650:6: note: declared here
> void backup_start(BlockDriverState *bs, BlockDriverState *target,
> ^
> /var/lib/vz/proxmox2/pve-qemu-kvm2.4/qemu-kvm/rules.mak:57: recipe for target 'blockdev.o' failed
>
> Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
> ---
> debian/patches/add-qmp-get-link-status.patch | 15 ++-
> .../patches/backup-add-pve-monitor-commands.patch | 4 +-
> debian/patches/backup-modify-job-api.patch | 24 +++--
> debian/patches/internal-snapshot-async.patch | 2 +-
> debian/patches/jemalloc.patch | 112 ++++++++++++++++++---
> debian/patches/modify-query-machines.patch | 2 +-
> debian/patches/modify-query-spice.patch | 2 +-
> debian/patches/series | 2 -
> debian/patches/virtio-balloon-fix-query.patch | 4 +-
> 9 files changed, 129 insertions(+), 38 deletions(-)
>
> diff --git a/debian/patches/add-qmp-get-link-status.patch b/debian/patches/add-qmp-get-link-status.patch
> index 105d415..850188a 100644
> --- a/debian/patches/add-qmp-get-link-status.patch
> +++ b/debian/patches/add-qmp-get-link-status.patch
> @@ -2,11 +2,20 @@ Index: new/qapi-schema.json
> ===================================================================
> --- new.orig/qapi-schema.json 2014-12-10 09:15:50.890262765 +0100
> +++ new/qapi-schema.json 2014-12-11 09:20:31.072561486 +0100
> -@@ -1366,6 +1366,22 @@
> +@@ -1366,6 +1366,31 @@
> ##
> { 'command': 'set_link', 'data': {'name': 'str', 'up': 'bool'} }
>
> -+
> ++##
> ++# @LinkStatus:
> ++#
> ++# Nic LinkStatus information.
> ++#
> ++# @status: the status of the nic
> ++#
> ++##
> ++{ 'struct': 'LinkStatus', 'data': {'status': 'int'} }
> ++
> +##
> +# @get_link_status
> +#
> @@ -20,7 +29,7 @@ Index: new/qapi-schema.json
> +#
> +# Notes: this is an Proxmox VE extension and not offical part of Qemu.
> +##
> -+{ 'command': 'get_link_status', 'data': {'name': 'str'}, 'returns': 'int'}
> ++{ 'command': 'get_link_status', 'data': {'name': 'str'}, 'returns': 'LinkStatus' }
> +
> ##
> # @balloon:
> diff --git a/debian/patches/backup-add-pve-monitor-commands.patch b/debian/patches/backup-add-pve-monitor-commands.patch
> index e58033e..26b2548 100644
> --- a/debian/patches/backup-add-pve-monitor-commands.patch
> +++ b/debian/patches/backup-add-pve-monitor-commands.patch
> @@ -650,7 +650,7 @@ Index: new/qapi-schema.json
> +# @uuid: #optional uuid for this backup job
> +#
> +##
> -+{ 'type': 'BackupStatus',
> ++{ 'struct': 'BackupStatus',
> + 'data': {'*status': 'str', '*errmsg': 'str', '*total': 'int',
> + '*transferred': 'int', '*zero-bytes': 'int',
> + '*start-time': 'int', '*end-time': 'int',
> @@ -690,7 +690,7 @@ Index: new/qapi-schema.json
> + '*format': 'BackupFormat',
> + '*config-file': 'str',
> + '*devlist': 'str', '*speed': 'int' },
> -+ 'returns': 'str' }
> ++ 'returns': 'UuidInfo' }
> +
> +##
> +# @query-backup
> diff --git a/debian/patches/backup-modify-job-api.patch b/debian/patches/backup-modify-job-api.patch
> index f5e81a7..4f1649f 100644
> --- a/debian/patches/backup-modify-job-api.patch
> +++ b/debian/patches/backup-modify-job-api.patch
> @@ -125,8 +125,8 @@ Index: new/block/backup.c
> return;
> }
>
> -@@ -397,12 +415,15 @@ in backup_start
> - return;
> +@@ -529,12 +529,15 @@ void backup_start(BlockDriverState *bs, BlockDriverState *target,
> + goto error;
> }
>
> - bdrv_op_block_all(target, job->common.blocker);
> @@ -139,28 +139,29 @@ Index: new/block/backup.c
> job->target = target;
> job->sync_mode = sync_mode;
> + job->common.paused = paused;
> + job->sync_bitmap = sync_mode == MIRROR_SYNC_MODE_DIRTY_BITMAP ?
> + sync_bitmap : NULL;
> job->common.len = len;
> - job->common.co = qemu_coroutine_create(backup_run);
> - qemu_coroutine_enter(job->common.co, job);
> +
> Index: new/blockdev.c
> ===================================================================
> --- new.orig/blockdev.c 2014-11-20 07:55:31.000000000 +0100
> +++ new/blockdev.c 2014-11-20 08:48:02.000000000 +0100
> -@@ -2223,7 +2223,7 @@ qmp_drive_backup
> - bdrv_set_aio_context(target_bs, aio_context);
> +@@ -2575,7 +2575,7 @@ void qmp_drive_backup(const char *device, const char *target,
>
> - backup_start(bs, target_bs, speed, sync, on_source_error, on_target_error,
> + backup_start(bs, target_bs, speed, sync, bmap,
> + on_source_error, on_target_error,
> - block_job_cb, bs, &local_err);
> + NULL, block_job_cb, bs, false, &local_err);
> if (local_err != NULL) {
> bdrv_unref(target_bs);
> error_propagate(errp, local_err);
> -@@ -2284,7 +2284,7 @@ qmp_blockdev_backup
> +@@ -2636,7 +2636,7 @@ void qmp_blockdev_backup(const char *device, const char *target,
> bdrv_ref(target_bs);
> bdrv_set_aio_context(target_bs, aio_context);
> - backup_start(bs, target_bs, speed, sync, on_source_error, on_target_error,
> -- block_job_cb, bs, &local_err);
> -+ NULL, block_job_cb, bs, false, &local_err);
> + backup_start(bs, target_bs, speed, sync, NULL, on_source_error,
> +- on_target_error, block_job_cb, bs, &local_err);
> ++ on_target_error, NULL, block_job_cb, bs, false, &local_err);
> if (local_err != NULL) {
> bdrv_unref(target_bs);
> error_propagate(errp, local_err);
> @@ -180,6 +181,7 @@ Index: new/include/block/block_int.h
> int64_t offset;
> @@ -583,7 +586,9 @@
> int64_t speed, MirrorSyncMode sync_mode,
> + BdrvDirtyBitmap *sync_bitmap,
> BlockdevOnError on_source_error,
> BlockdevOnError on_target_error,
> + BackupDumpFunc *dump_cb,
> diff --git a/debian/patches/internal-snapshot-async.patch b/debian/patches/internal-snapshot-async.patch
> index e6d8a13..280830d 100644
> --- a/debian/patches/internal-snapshot-async.patch
> +++ b/debian/patches/internal-snapshot-async.patch
> @@ -267,7 +267,7 @@ Index: new/qapi-schema.json
> +#
> +# Since: 1.3
> +##
> -+{ 'type': 'SaveVMInfo',
> ++{ 'struct': 'SaveVMInfo',
> + 'data': {'*status': 'str', '*error': 'str',
> + '*total-time': 'int', '*bytes': 'int'} }
> +
> diff --git a/debian/patches/jemalloc.patch b/debian/patches/jemalloc.patch
> index b5dba0d..449cb61 100644
> --- a/debian/patches/jemalloc.patch
> +++ b/debian/patches/jemalloc.patch
> @@ -1,16 +1,95 @@
> +From patchwork Fri Jun 19 10:56:58 2015
> +Content-Type: text/plain; charset="utf-8"
> +MIME-Version: 1.0
> +Content-Transfer-Encoding: 7bit
> +Subject: configure: Add support for jemalloc
> +From: Alexandre DERUMIER <aderumier at odiso.com>
> +X-Patchwork-Id: 486671
> +Message-Id: <1434711418-20429-1-git-send-email-aderumier at odiso.com>
> +To: qemu-devel at nongnu.org
> +Cc: Alexandre Derumier <aderumier at odiso.com>
> +Date: Fri, 19 Jun 2015 12:56:58 +0200
> +
> +This adds "--enable-jemalloc" and "--disable-jemalloc" to allow linking
> +to jemalloc memory allocator.
> +
> +We have already tcmalloc support,
> +but it seem to not working well with a lot of iothreads/disks.
> +
> +The main problem is that tcmalloc use a shared thread cache of 16MB
> +by default.
> +With more threads, this cache is shared, and some bad garbage collections
> +can occur if the cache is too low.
> +
> +It's possible to tcmalloc cache increase it with a env var:
> +TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES=256MB
> +
> +With default 16MB, performances are really bad with more than 2 disks.
> +Increasing to 256MB, it's helping but still have problem with 16 disks/iothreads.
> +
> +Jemalloc don't have performance problem with default configuration.
> +
> +Here the benchmark results in iops of 1 qemu vm randread 4K iodepth=32,
> +with rbd block backend (librbd is doing a lot of memory allocation),
> +1 iothread by disk
> +
> +glibc malloc
> +------------
> +
> +1 disk 29052
> +2 disks 55878
> +4 disks 127899
> +8 disks 240566
> +15 disks 269976
> +
> +jemalloc
> +--------
> +
> +1 disk 41278
> +2 disks 75781
> +4 disks 195351
> +8 disks 294241
> +15 disks 298199
> +
> +tcmalloc 2.2.1 default 16M cache
> +--------------------------------
> +
> +1 disk 37911
> +2 disks 67698
> +4 disks 41076
> +8 disks 43312
> +15 disks 37569
> +
> +tcmalloc : 256M cache
> +---------------------------
> +
> +1 disk 33914
> +2 disks 58839
> +4 disks 148205
> +8 disks 213298
> +15 disks 218383
> +
> +Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
> +Reviewed-by: Fam Zheng <famz at redhat.com>
> +---
> + configure | 29 +++++++++++++++++++++++++++++
> + 1 file changed, 29 insertions(+)
> +
> +diff --git a/configure b/configure
> +index 222694f..2fe1e05 100755
> --- a/configure
> +++ b/configure
> -@@ -336,6 +336,7 @@ libssh2=""
> - vhdx=""
> +@@ -336,6 +336,7 @@ vhdx=""
> quorum=""
> numa=""
> + tcmalloc="no"
> +jemalloc="no"
>
> # parse CC options first
> for opt do
> -@@ -1134,6 +1135,10 @@ for opt do
> +@@ -1147,6 +1148,10 @@ for opt do
> ;;
> - --enable-numa) numa="yes"
> + --enable-tcmalloc) tcmalloc="yes"
> ;;
> + --disable-jemalloc) jemalloc="no"
> + ;;
> @@ -19,16 +98,19 @@
> *)
> echo "ERROR: unknown option $opt"
> echo "Try '$0 --help' for more information"
> -@@ -1407,6 +1412,8 @@ Advanced options (experts only):
> - --enable-quorum enable quorum block filter support
> - --disable-numa disable libnuma support
> - --enable-numa enable libnuma support
> -+ --disable-jemalloc disable jemalloc support
> -+ --enable-numa enable jemalloc support
> +@@ -3344,6 +3351,11 @@ EOF
> + fi
> + fi
> +
> ++if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
> ++ echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
> ++ exit 1
> ++fi
> ++
> + ##########################################
> + # tcmalloc probe
>
> - NOTE: The object files are built at the place where configure is launched
> - EOF
> -@@ -3325,6 +3332,22 @@ EOF
> +@@ -3361,6 +3373,22 @@ EOF
> fi
>
> ##########################################
> @@ -51,10 +133,10 @@
> # signalfd probe
> signalfd="no"
> cat > $TMPC << EOF
> -@@ -4435,6 +4458,7 @@ echo "lzo support $lzo"
> - echo "snappy support $snappy"
> +@@ -4499,6 +4527,7 @@ echo "snappy support $snappy"
> echo "bzip2 support $bzip2"
> echo "NUMA host support $numa"
> + echo "tcmalloc support $tcmalloc"
> +echo "jemalloc support $jemalloc"
>
> if test "$sdl_too_old" = "yes"; then
> diff --git a/debian/patches/modify-query-machines.patch b/debian/patches/modify-query-machines.patch
> index d028e3e..5edcdd2 100644
> --- a/debian/patches/modify-query-machines.patch
> +++ b/debian/patches/modify-query-machines.patch
> @@ -13,7 +13,7 @@ Index: new/qapi-schema.json
> #
> @@ -2400,7 +2402,7 @@
> ##
> - { 'type': 'MachineInfo',
> + { 'struct': 'MachineInfo',
> 'data': { 'name': 'str', '*alias': 'str',
> - '*is-default': 'bool', 'cpu-max': 'int' } }
> + '*is-default': 'bool', '*is-current': 'bool', 'cpu-max': 'int' } }
> diff --git a/debian/patches/modify-query-spice.patch b/debian/patches/modify-query-spice.patch
> index c485b03..4e5222d 100644
> --- a/debian/patches/modify-query-spice.patch
> +++ b/debian/patches/modify-query-spice.patch
> @@ -35,7 +35,7 @@ Index: new/qapi-schema.json
> +#
> # Since: 0.14.0
> ##
> - { 'type': 'SpiceInfo',
> + { 'struct': 'SpiceInfo',
> 'data': {'enabled': 'bool', 'migrated': 'bool', '*host': 'str', '*port': 'int',
> '*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str',
> + '*ticket': 'str',
> diff --git a/debian/patches/series b/debian/patches/series
> index 1105537..664e3f1 100644
> --- a/debian/patches/series
> +++ b/debian/patches/series
> @@ -30,6 +30,4 @@ backup-vma-extract-add-block-driver-type.patch
> glusterfs-daemonize.patch
> gluster-backupserver.patch
> add-qmp-get-link-status.patch
> -0001-friendlier-ai_flag-hints-for-ipv6-hosts.patch
> -0001-vvfat-add-a-label-option.patch
> jemalloc.patch
> diff --git a/debian/patches/virtio-balloon-fix-query.patch b/debian/patches/virtio-balloon-fix-query.patch
> index 236a624..741e44f 100644
> --- a/debian/patches/virtio-balloon-fix-query.patch
> +++ b/debian/patches/virtio-balloon-fix-query.patch
> @@ -116,8 +116,8 @@ Index: new/qapi-schema.json
> +#
> +# Since: 0.14.0
> ##
> --{ 'type': 'BalloonInfo', 'data': {'actual': 'int' } }
> -+{ 'type': 'BalloonInfo',
> +-{ 'struct': 'BalloonInfo', 'data': {'actual': 'int' } }
> ++{ 'struct': 'BalloonInfo',
> + 'data': {'actual': 'int', '*last_update': 'int', '*mem_swapped_in': 'int',
> + '*mem_swapped_out': 'int', '*major_page_faults': 'int',
> + '*minor_page_faults': 'int', '*free_mem': 'int',
> --
> 2.1.4
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
More information about the pve-devel
mailing list