[pve-devel] [PATCH qemu-server] add discard_granularity to 4M for rbd storage

Alexandre DERUMIER aderumier at odiso.com
Thu Jun 28 17:53:22 CEST 2018


>>In my opinion it would be better to have Qemu figure it out automagically or 
>>use the discard config option to add the granularity. 

qemu seem to be able to get the value

in qemu block/rbd.c

static int qemu_rbd_getinfo(BlockDriverState *bs, BlockDriverInfo *bdi)
 {
    BDRVRBDState *s = bs->opaque;
     rbd_image_info_t info;
     int r;
  
      r = rbd_stat(s->image, &info, sizeof(info));
      if (r < 0) {
          return r;
      }
  
      bdi->cluster_size = info.obj_size;
      return 0;
}




or with rbd command:

# rbd info vm-788-disk-1
rbd image 'vm-788-disk-1':
	size 15360 MB in 3840 objects
	order 22 (4096 kB objects)
	block_name_prefix: rbd_data.caf396b8b4567
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
	flags: 



----- Mail original -----
De: "Alwin Antreich" <a.antreich at proxmox.com>
À: "pve-devel" <pve-devel at pve.proxmox.com>
Envoyé: Jeudi 28 Juin 2018 14:56:32
Objet: Re: [pve-devel] [PATCH qemu-server] add discard_granularity to 4M for rbd storage

On Thu, Jun 28, 2018 at 10:08:45AM +0200, Alexandre Derumier wrote: 
> when we have snapshots on rbd and do a trim, the space is increasing 
> http://tracker.ceph.com/issues/18352 
> 
> we need to trim a full object (4MB by default), to be able to free space. 
> 
> test: 
> 
> without discard_granularity 
> --------------------------- 
> vm-107-disk-1 20480M 2500M 
> vm-107-disk-1 20480M 2500M 
> 
> vm-107-disk-1 at snap1 20480M 2500M 
> vm-107-disk-1 20480M 90112k 
> 
> vm-107-disk-1 at snap1 20480M 2500M 
> vm-107-disk-1 20480M 1020M 
> 
> with discard_granularity=4M 
> --------------------------- 
> vm-107-disk-1 20480M 2500M 
> vm-107-disk-1 20480M 2500M 
> 
> vm-107-disk-1 at snap1 20480M 2500M 
> vm-107-disk-1 20480M 90112k 
> 
> vm-107-disk-1 at snap1 20480M 2500M 
> vm-107-disk-1 20480M 144M 
> --- 
> PVE/QemuServer.pm | 5 +++++ 
> 1 file changed, 5 insertions(+) 
> 
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm 
> index 6a355f8..fd9754c 100644 
> --- a/PVE/QemuServer.pm 
> +++ b/PVE/QemuServer.pm 
> @@ -1695,6 +1695,11 @@ sub print_drivedevice_full { 
> $device .= ",serial=$serial"; 
> } 
> 
> + my $volid = $drive->{file}; 
> + if($volid && $drive->{discard}) { 
> + my $storage_name = PVE::Storage::parse_volume_id($volid); 
> + $device .= ",discard_granularity=4194304" if $storecfg->{ids}->{$storage_name}->{type} eq 'rbd'; 
> + } 
In my opinion it would be better to have Qemu figure it out automagically or 
use the discard config option to add the granularity. 

As example: discard=on / discard=4194304 (is on with granularity). 

This way it is configurable per disk image and can be set according to the 
needs of the storage (eg. zvol; 8K). 

For Ceph, the object size can be set when an image is created (--object-size). 

> 
> return $device; 
> } 
> -- 
> 2.11.0 
-- 
Cheers, 
Alwin 

_______________________________________________ 
pve-devel mailing list 
pve-devel at pve.proxmox.com 
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel 



More information about the pve-devel mailing list