It can be helpful if you are using ext-storage (iSCSI) or ceph (RBD) so free space on a SAN is possible. For backward compatibility the 'default' value will not pass any option to qemu.
Signed-off-by: Ansgar Jazdzewski <[email protected]> Signed-off-by: Viktor Bachraty <[email protected]> --- lib/hypervisor/hv_kvm/__init__.py | 12 ++++++++++-- man/gnt-instance.rst | 9 +++++++++ src/Ganeti/Constants.hs | 20 ++++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/lib/hypervisor/hv_kvm/__init__.py b/lib/hypervisor/hv_kvm/__init__.py index 1f4184d61..0735a271e 100644 --- a/lib/hypervisor/hv_kvm/__init__.py +++ b/lib/hypervisor/hv_kvm/__init__.py @@ -488,6 +488,8 @@ class KVMHypervisor(hv_base.BaseHypervisor): hv_base.ParamInSet(True, constants.HT_KVM_VALID_DISK_TYPES), constants.HV_KVM_SCSI_CONTROLLER_TYPE: hv_base.ParamInSet(True, constants.HT_KVM_VALID_SCSI_CONTROLLER_TYPES), + constants.HV_DISK_DISCARD: + hv_base.ParamInSet(False, constants.HT_VALID_DISCARD_TYPES), constants.HV_KVM_CDROM_DISK_TYPE: hv_base.ParamInSet(False, constants.HT_KVM_VALID_DISK_TYPES), constants.HV_USB_MOUSE: @@ -1112,6 +1114,12 @@ class KVMHypervisor(hv_base.BaseHypervisor): aio_val = ",aio=%s" % aio_mode else: aio_val = "" + # discard mode + discard_mode = up_hvp[constants.HV_DISK_DISCARD] + if discard_mode == constants.HV_DISCARD_DEFAULT: + discard_val = "" + else: + discard_val = ",discard=%s" % discard_mode # Cache mode disk_cache = up_hvp[constants.HV_DISK_CACHE] for cfdev, link_name, uri in kvm_disks: @@ -1139,8 +1147,8 @@ class KVMHypervisor(hv_base.BaseHypervisor): drive_uri = _GetDriveURI(cfdev, link_name, uri) - drive_val = "file=%s,format=raw%s%s%s%s" % \ - (drive_uri, if_val, boot_val, cache_val, aio_val) + drive_val = "file=%s,format=raw%s%s%s%s%s" % \ + (drive_uri, if_val, boot_val, cache_val, aio_val, discard_val) # virtio-blk-pci case if device_driver is not None: diff --git a/man/gnt-instance.rst b/man/gnt-instance.rst index 493ae929d..3602dbd76 100644 --- a/man/gnt-instance.rst +++ b/man/gnt-instance.rst @@ -649,6 +649,15 @@ disk\_aio so if not explicitly specified, the native mode will not be used. Possible values are: threads or native. +disk\_discard + Valid for the KVM hypervisor. + + discard is one of "ignore", "unmap" or "default" and controls whether + discard (also known as trim or unmap) requests are ignored or passed + to the filesystem. Some machine types may not support discard requests. + For compatibility with older qemu versions "default" will not pass any + discard option to KVM. + security\_model Valid for the KVM hypervisor. diff --git a/src/Ganeti/Constants.hs b/src/Ganeti/Constants.hs index 4aa5edf63..a1f84d98d 100644 --- a/src/Ganeti/Constants.hs +++ b/src/Ganeti/Constants.hs @@ -1652,6 +1652,9 @@ hvDeviceModel = "device_model" hvDiskCache :: String hvDiskCache = "disk_cache" +hvDiskDiscard :: String +hvDiskDiscard = "disk_discard" + hvDiskType :: String hvDiskType = "disk_type" @@ -1897,6 +1900,7 @@ hvsParameterTypes = Map.fromList , (hvCpuWeight, VTypeInt) , (hvDeviceModel, VTypeString) , (hvDiskCache, VTypeString) + , (hvDiskDiscard, VTypeString) , (hvDiskType, VTypeString) , (hvInitrdPath, VTypeString) , (hvInitScript, VTypeString) @@ -2816,6 +2820,21 @@ htValidCacheTypes = htCacheWback, htCacheWthrough] +htDiscardDefault :: String +htDiscardDefault = "default" + +htDiscardIgnore :: String +htDiscardIgnore = "ignore" + +htDiscardUnmap :: String +htDiscardUnmap = "unmap" + +htValidDiscardTypes :: FrozenSet String +htValidDiscardTypes = + ConstantUtils.mkSet [htDiscardDefault, + htDiscardIgnore, + htDiscardUnmap] + htKvmAioThreads :: String htKvmAioThreads = "threads" @@ -4106,6 +4125,7 @@ hvcDefaults = , (hvUseGuestAgent, PyValueEx False) , (hvUseLocaltime, PyValueEx False) , (hvDiskCache, PyValueEx htCacheDefault) + , (hvDiskDiscard, PyValueEx htDiscardDefault) , (hvSecurityModel, PyValueEx htSmNone) , (hvSecurityDomain, PyValueEx "") , (hvKvmFlag, PyValueEx "") -- 2.11.0.483.g087da7b7c-goog
