[pve-devel] [PATCH] update proxmox patches to qemu 2.4

Alexandre Derumier aderumier at odiso.com
Tue Jun 30 18:17:35 CEST 2015


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



More information about the pve-devel mailing list