diff --git a/share/doc/xsd/oned.conf b/share/doc/xsd/oned.conf index 173b8d22fe..a13f655303 100644 --- a/share/doc/xsd/oned.conf +++ b/share/doc/xsd/oned.conf @@ -775,11 +775,17 @@ VM_RESTRICTED_ATTR = "NIC_DEFAULT/BRIDGE" #VM_RESTRICTED_ATTR = "NIC/VCENTER_NET_REF" #VM_RESTRICTED_ATTR = "NIC/VCENTER_PORTGROUP_TYPE" VM_RESTRICTED_ATTR = "DISK/TOTAL_BYTES_SEC" +VM_RESTRICTED_ATTR = "DISK/TOTAL_BYTES_SEC_MAX_LENGTH" VM_RESTRICTED_ATTR = "DISK/READ_BYTES_SEC" +VM_RESTRICTED_ATTR = "DISK/READ_BYTES_SEC_MAX_LENGTH" VM_RESTRICTED_ATTR = "DISK/WRITE_BYTES_SEC" +VM_RESTRICTED_ATTR = "DISK/WRITE_BYTES_SEC_MAX" VM_RESTRICTED_ATTR = "DISK/TOTAL_IOPS_SEC" +VM_RESTRICTED_ATTR = "DISK/TOTAL_IOPS_SEC_MAX_LENGTH" VM_RESTRICTED_ATTR = "DISK/READ_IOPS_SEC" +VM_RESTRICTED_ATTR = "DISK/READ_IOPS_SEC_MAX_LENGTH" VM_RESTRICTED_ATTR = "DISK/WRITE_IOPS_SEC" +VM_RESTRICTED_ATTR = "DISK/WRITE_IOPS_SEC_MAX" #VM_RESTRICTED_ATTR = "DISK/OPENNEBULA_MANAGED" #VM_RESTRICTED_ATTR = "DISK/VCENTER_DS_REF" #VM_RESTRICTED_ATTR = "DISK/VCENTER_INSTANCE_ID" diff --git a/share/etc/oned.conf b/share/etc/oned.conf index f4ac603d37..fb93dcc190 100644 --- a/share/etc/oned.conf +++ b/share/etc/oned.conf @@ -998,11 +998,17 @@ VM_RESTRICTED_ATTR = "NIC_DEFAULT/MAC" VM_RESTRICTED_ATTR = "NIC_DEFAULT/VLAN_ID" VM_RESTRICTED_ATTR = "NIC_DEFAULT/BRIDGE" VM_RESTRICTED_ATTR = "DISK/TOTAL_BYTES_SEC" +VM_RESTRICTED_ATTR = "DISK/TOTAL_BYTES_SEC_MAX_LENGTH" VM_RESTRICTED_ATTR = "DISK/READ_BYTES_SEC" +VM_RESTRICTED_ATTR = "DISK/READ_BYTES_SEC_MAX_LENGTH" VM_RESTRICTED_ATTR = "DISK/WRITE_BYTES_SEC" +VM_RESTRICTED_ATTR = "DISK/WRITE_BYTES_SEC_MAX" VM_RESTRICTED_ATTR = "DISK/TOTAL_IOPS_SEC" +VM_RESTRICTED_ATTR = "DISK/TOTAL_IOPS_SEC_MAX_LENGTH" VM_RESTRICTED_ATTR = "DISK/READ_IOPS_SEC" +VM_RESTRICTED_ATTR = "DISK/READ_IOPS_SEC_MAX_LENGTH" VM_RESTRICTED_ATTR = "DISK/WRITE_IOPS_SEC" +VM_RESTRICTED_ATTR = "DISK/WRITE_IOPS_SEC_MAX" VM_RESTRICTED_ATTR = "DISK/OPENNEBULA_MANAGED" VM_RESTRICTED_ATTR = "DISK/VCENTER_DS_REF" VM_RESTRICTED_ATTR = "DISK/VCENTER_INSTANCE_ID" diff --git a/src/mad/sh/scripts_common.sh b/src/mad/sh/scripts_common.sh index a599812cf3..93d6590874 100644 --- a/src/mad/sh/scripts_common.sh +++ b/src/mad/sh/scripts_common.sh @@ -690,11 +690,17 @@ function get_source_xml { # * DISK_IO # * ORDER # * TOTAL_BYTES_SEC +# * TOTAL_BYTES_SEC_MAX_LENGTH # * READ_BYTES_SEC +# * READ_BYTES_SEC_MAX_LENGTH # * WRITE_BYTES_SEC +# * WRITE_BYTES_SEC_MAX # * TOTAL_IOPS_SEC +# * TOTAL_IOPS_SEC_MAX_LENGTH # * READ_IOPS_SEC +# * READ_IOPS_SEC_MAX_LENGTH # * WRITE_IOPS_SEC +# * WRITE_IOPS_SEC_MAX # * TYPE_SOURCE: libvirt xml source name. $TYPE_SOURCE=$SOURCE => file=/my/path # * SOURCE: disk source, can be path, ceph pool/image, device... # * TYPE_XML @@ -741,11 +747,17 @@ function get_disk_information { $DISK_XPATH/IO \ $DISK_XPATH/ORDER \ $DISK_XPATH/TOTAL_BYTES_SEC \ + $DISK_XPATH/TOTAL_BYTES_SEC_MAX_LENGTH \ $DISK_XPATH/READ_BYTES_SEC \ + $DISK_XPATH/READ_BYTES_SEC_MAX_LENGTH \ $DISK_XPATH/WRITE_BYTES_SEC \ + $DISK_XPATH/WRITE_BYTES_SEC_MAX \ $DISK_XPATH/TOTAL_IOPS_SEC \ + $DISK_XPATH/TOTAL_IOPS_SEC_MAX_LENGTH \ $DISK_XPATH/READ_IOPS_SEC \ - $DISK_XPATH/WRITE_IOPS_SEC) + $DISK_XPATH/READ_IOPS_SEC_MAX_LENGTH \ + $DISK_XPATH/WRITE_IOPS_SEC \ + $DISK_XPATH/WRITE_IOPS_SEC_MAX ) VMID="${XPATH_ELEMENTS[j++]}" DRIVER="${XPATH_ELEMENTS[j++]:-$DEFAULT_TYPE}" @@ -770,11 +782,17 @@ function get_disk_information { DISK_IO="${XPATH_ELEMENTS[j++]}" ORDER="${XPATH_ELEMENTS[j++]}" TOTAL_BYTES_SEC="${XPATH_ELEMENTS[j++]}" + TOTAL_BYTES_SEC_MAX_LENGTH="${XPATH_ELEMENTS[j++]}" READ_BYTES_SEC="${XPATH_ELEMENTS[j++]}" + READ_BYTES_SEC_MAX_LENGTH="${XPATH_ELEMENTS[j++]}" WRITE_BYTES_SEC="${XPATH_ELEMENTS[j++]}" + WRITE_BYTES_SEC_MAX="${XPATH_ELEMENTS[j++]}" TOTAL_IOPS_SEC="${XPATH_ELEMENTS[j++]}" + TOTAL_IOPS_SEC_MAX_LENGTH="${XPATH_ELEMENTS[j++]}" READ_IOPS_SEC="${XPATH_ELEMENTS[j++]}" + READ_IOPS_SEC_MAX_LENGTH="${XPATH_ELEMENTS[j++]}" WRITE_IOPS_SEC="${XPATH_ELEMENTS[j++]}" + WRITE_IOPS_SEC_MAX="${XPATH_ELEMENTS[j++]}" TYPE=$(echo "$TYPE"|tr A-Z a-z) READONLY=$(echo "$READONLY"|tr A-Z a-z) diff --git a/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/storage/disk-tab/options.hbs b/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/storage/disk-tab/options.hbs index b005e20940..5f6a302327 100644 --- a/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/storage/disk-tab/options.hbs +++ b/src/sunstone/public/app/tabs/templates-tab/form-panels/create/wizard-tabs/storage/disk-tab/options.hbs @@ -144,6 +144,25 @@ +
+
+ {{tr "Max IO throttling (bytes/s)"}} + + + + + + +
+
+ +
{{tr "IO throttling (IOPS)"}} @@ -161,4 +180,21 @@
+
+
+ {{tr "Max IO throttling (IOPS)"}} + + + + + + +
+
diff --git a/src/vmm/LibVirtDriverKVM.cc b/src/vmm/LibVirtDriverKVM.cc index 592290da9f..94835ad618 100644 --- a/src/vmm/LibVirtDriverKVM.cc +++ b/src/vmm/LibVirtDriverKVM.cc @@ -142,19 +142,31 @@ int LibVirtDriver::deployment_description_kvm( string gluster_host = ""; string gluster_volume = ""; - string total_bytes_sec = ""; - string read_bytes_sec = ""; - string write_bytes_sec = ""; - string total_iops_sec = ""; - string read_iops_sec = ""; - string write_iops_sec = ""; + string total_bytes_sec = ""; + string total_bytes_sec_max_length = ""; + string read_bytes_sec = ""; + string read_bytes_sec_max_length = ""; + string write_bytes_sec = ""; + string write_bytes_sec_max = ""; + string total_iops_sec = ""; + string total_iops_sec_max_length = ""; + string read_iops_sec = ""; + string read_iops_sec_max_length = ""; + string write_iops_sec = ""; + string write_iops_sec_max = ""; - string default_total_bytes_sec = ""; - string default_read_bytes_sec = ""; - string default_write_bytes_sec = ""; - string default_total_iops_sec = ""; - string default_read_iops_sec = ""; - string default_write_iops_sec = ""; + string default_total_bytes_sec = ""; + string default_total_bytes_sec_max_length = ""; + string default_read_bytes_sec = ""; + string default_read_bytes_sec_max_length = ""; + string default_write_bytes_sec = ""; + string default_write_bytes_sec_max = ""; + string default_total_iops_sec = ""; + string default_total_iops_sec_max_length = ""; + string default_read_iops_sec = ""; + string default_read_iops_sec_max_length = ""; + string default_write_iops_sec = ""; + string default_write_iops_sec_max = ""; int disk_id; int order; @@ -462,11 +474,17 @@ int LibVirtDriver::deployment_description_kvm( get_default("DISK", "IO", default_driver_disk_io); get_default("DISK", "DISCARD", default_driver_discard); get_default("DISK", "TOTAL_BYTES_SEC", default_total_bytes_sec); + get_default("DISK", "TOTAL_BYTES_SEC_MAX_LENGTH", default_total_bytes_sec_max_length); get_default("DISK", "READ_BYTES_SEC", default_read_bytes_sec); + get_default("DISK", "READ_BYTES_SEC_MAX_LENGTH", default_read_bytes_sec_max_length); get_default("DISK", "WRITE_BYTES_SEC", default_write_bytes_sec); + get_default("DISK", "WRITE_BYTES_SEC_MAX", default_write_bytes_sec_max); get_default("DISK", "TOTAL_IOPS_SEC", default_total_iops_sec); + get_default("DISK", "TOTAL_IOPS_SEC_MAX_LENGTH", default_total_iops_sec_max_length); get_default("DISK", "READ_IOPS_SEC", default_read_iops_sec); + get_default("DISK", "READ_IOPS_SEC_MAX_LENGTH", default_read_iops_sec_max_length); get_default("DISK", "WRITE_IOPS_SEC", default_write_iops_sec); + get_default("DISK", "WRITE_IOPS_SEC_MAX", default_write_iops_sec_max); // ------------------------------------------------------------------------ @@ -500,42 +518,78 @@ int LibVirtDriver::deployment_description_kvm( sheepdog_host = disk[i]->vector_value("SHEEPDOG_HOST"); total_bytes_sec = disk[i]->vector_value("TOTAL_BYTES_SEC"); - read_bytes_sec = disk[i]->vector_value("READ_BYTES_SEC"); - write_bytes_sec = disk[i]->vector_value("WRITE_BYTES_SEC"); - total_iops_sec = disk[i]->vector_value("TOTAL_IOPS_SEC"); - read_iops_sec = disk[i]->vector_value("READ_IOPS_SEC"); - write_iops_sec = disk[i]->vector_value("WRITE_IOPS_SEC"); + total_bytes_sec_max_length = disk[i]->vector_value("TOTAL_BYTES_SEC_MAX_LENGTH"); + read_bytes_sec = disk[i]->vector_value("READ_BYTES_SEC"); + read_bytes_sec_max_length = disk[i]->vector_value("READ_BYTES_SEC_MAX_LENGTH"); + write_bytes_sec = disk[i]->vector_value("WRITE_BYTES_SEC"); + write_bytes_sec_max = disk[i]->vector_value("WRITE_BYTES_SEC_MAX"); + total_iops_sec = disk[i]->vector_value("TOTAL_IOPS_SEC"); + total_iops_sec_max_length = disk[i]->vector_value("TOTAL_IOPS_SEC_MAX_LENGTH"); + read_iops_sec = disk[i]->vector_value("READ_IOPS_SEC"); + read_iops_sec_max_length = disk[i]->vector_value("READ_IOPS_SEC_MAX_LENGTH"); + write_iops_sec = disk[i]->vector_value("WRITE_IOPS_SEC"); + write_iops_sec_max = disk[i]->vector_value("WRITE_IOPS_SEC_MAX"); if ( total_bytes_sec.empty() && !default_total_bytes_sec.empty()) { total_bytes_sec = default_total_bytes_sec; } + if ( total_bytes_sec_max_length.empty() && !default_total_bytes_sec_max_length.empty()) + { + total_bytes_sec_max_length = default_total_bytes_sec_max_length; + } + if ( read_bytes_sec.empty() && !default_read_bytes_sec.empty()) { read_bytes_sec = default_read_bytes_sec; } + if ( read_bytes_sec_max_length.empty() && !default_read_bytes_sec_max_length.empty()) + { + read_bytes_sec_max_length = default_read_bytes_sec_max_length; + } + if ( write_bytes_sec.empty() && !default_write_bytes_sec.empty()) { write_bytes_sec = default_write_bytes_sec; } + if ( write_bytes_sec_max.empty() && !default_write_bytes_sec_max.empty()) + { + write_bytes_sec_max = default_write_bytes_sec_max; + } + if ( total_iops_sec.empty() && !default_total_iops_sec.empty()) { total_iops_sec = default_total_iops_sec; } + if ( total_iops_sec_max_length.empty() && !default_total_iops_sec_max_length.empty()) + { + total_iops_sec_max_length = default_total_iops_sec_max_length; + } + if ( read_iops_sec.empty() && !default_read_iops_sec.empty()) { read_iops_sec = default_read_iops_sec; } + if ( read_iops_sec_max_length.empty() && !default_read_iops_sec_max_length.empty()) + { + read_iops_sec_max_length = default_read_iops_sec_max_length; + } + if ( write_iops_sec.empty() && !default_write_iops_sec.empty()) { write_iops_sec = default_write_iops_sec; } + if ( write_iops_sec_max.empty() && !default_write_iops_sec_max.empty()) + { + write_iops_sec_max = default_write_iops_sec_max; + } + disk[i]->vector_value_str("DISK_ID", disk_id); if (target.empty()) @@ -792,7 +846,13 @@ int LibVirtDriver::deployment_description_kvm( if (!(total_bytes_sec.empty() && read_bytes_sec.empty() && write_bytes_sec.empty() && total_iops_sec.empty() && - read_iops_sec.empty() && write_iops_sec.empty())) + read_iops_sec.empty() && write_iops_sec.empty() && + total_bytes_sec_max_length.empty() && + read_bytes_sec_max_length.empty() && + write_bytes_sec_max.empty() && + total_iops_sec_max_length.empty() && + read_iops_sec_max_length.empty() && + write_iops_sec_max.empty() )) { file << "\t\t\t" << endl; @@ -803,6 +863,13 @@ int LibVirtDriver::deployment_description_kvm( << "\n"; } + if ( !total_bytes_sec_max_length.empty() ) + { + file << "\t\t\t\t" + << one_util::escape_xml(total_bytes_sec_max_length) + << "\n"; + } + if ( !read_bytes_sec.empty() ) { file << "\t\t\t\t" @@ -810,6 +877,13 @@ int LibVirtDriver::deployment_description_kvm( << "\n"; } + if ( !read_bytes_sec_max_length.empty() ) + { + file << "\t\t\t\t" + << one_util::escape_xml(read_bytes_sec_max_length) + << "\n"; + } + if ( !write_bytes_sec.empty() ) { file << "\t\t\t\t" @@ -817,6 +891,13 @@ int LibVirtDriver::deployment_description_kvm( << "\n"; } + if ( !write_bytes_sec_max.empty() ) + { + file << "\t\t\t\t" + << one_util::escape_xml(write_bytes_sec_max) + << "\n"; + } + if ( !total_iops_sec.empty() ) { file << "\t\t\t\t" @@ -824,6 +905,13 @@ int LibVirtDriver::deployment_description_kvm( << "\n"; } + if ( !total_iops_sec_max_length.empty() ) + { + file << "\t\t\t\t" + << one_util::escape_xml(total_iops_sec_max_length) + << "\n"; + } + if ( !read_iops_sec.empty() ) { file << "\t\t\t\t" @@ -831,6 +919,13 @@ int LibVirtDriver::deployment_description_kvm( << "\n"; } + if ( !read_iops_sec_max_length.empty() ) + { + file << "\t\t\t\t" + << one_util::escape_xml(read_iops_sec_max_length) + << "\n"; + } + if ( !write_iops_sec.empty() ) { file << "\t\t\t\t" @@ -838,6 +933,13 @@ int LibVirtDriver::deployment_description_kvm( << "\n"; } + if ( !write_iops_sec_max.empty() ) + { + file << "\t\t\t\t" + << one_util::escape_xml(write_iops_sec_max) + << "\n"; + } + file << "\t\t\t" << endl; } diff --git a/src/vmm_mad/remotes/kvm/attach_disk b/src/vmm_mad/remotes/kvm/attach_disk index 2aacea9e8e..5ec2c32565 100755 --- a/src/vmm_mad/remotes/kvm/attach_disk +++ b/src/vmm_mad/remotes/kvm/attach_disk @@ -35,11 +35,17 @@ CACHE=${CACHE:-default} # https://github.com/OpenNebula/one/blob/c0d081917224f1 DISCARD=${DISCARD:-${DEFAULT_ATTACH_DISCARD}} DISK_IO=${DISK_IO:-${DEFAULT_ATTACH_IO}} TOTAL_BYTES_SEC=${TOTAL_BYTES_SEC:-${DEFAULT_ATTACH_TOTAL_BYTES_SEC}} +TOTAL_BYTES_SEC_MAX_LENGTH=${TOTAL_BYTES_SEC_MAX_LENGTH:-${DEFAULT_ATTACH_TOTAL_BYTES_SEC_MAX_LENGTH}} READ_BYTES_SEC=${READ_BYTES_SEC:-${DEFAULT_ATTACH_READ_BYTES_SEC}} +READ_BYTES_SEC_MAX_LENGTH=${READ_BYTES_SEC_MAX_LENGTH:-${DEFAULT_ATTACH_READ_BYTES_SEC_MAX_LENGTH}} WRITE_BYTES_SEC=${WRITE_BYTES_SEC:-${DEFAULT_ATTACH_WRITE_BYTES_SEC}} +WRITE_BYTES_SEC_MAX=${WRITE_BYTES_SEC_MAX:-${DEFAULT_ATTACH_WRITE_BYTES_SEC_MAX}} TOTAL_IOPS_SEC=${TOTAL_IOPS_SEC:-${DEFAULT_ATTACH_TOTAL_IOPS_SEC}} +TOTAL_IOPS_SEC_MAX_LENGTH=${TOTAL_IOPS_SEC_MAX_LENGTH:-${DEFAULT_ATTACH_TOTAL_IOPS_SEC_MAX_LENGTH}} READ_IOPS_SEC=${READ_IOPS_SEC:-${DEFAULT_ATTACH_READ_IOPS_SEC}} +READ_IOPS_SEC_MAX_LENGTH=${READ_IOPS_SEC_MAX_LENGTH:-${DEFAULT_ATTACH_READ_IOPS_SEC_MAX_LENGTH}} WRITE_IOPS_SEC=${WRITE_IOPS_SEC:-${DEFAULT_ATTACH_WRITE_IOPS_SEC}} +WRITE_IOPS_SEC_MAX=${WRITE_IOPS_SEC_MAX:-${DEFAULT_ATTACH_WRITE_IOPS_SEC_MAX}} # disk XML XML='' diff --git a/src/vmm_mad/remotes/kvm/kvmrc b/src/vmm_mad/remotes/kvm/kvmrc index 082a18a227..bc4bc31bb3 100644 --- a/src/vmm_mad/remotes/kvm/kvmrc +++ b/src/vmm_mad/remotes/kvm/kvmrc @@ -52,11 +52,17 @@ export SHUTDOWN_TIMEOUT=300 # These parameters set the default DISK I/O throttling attributes # for the new attached disk in case they aren't set. #DEFAULT_ATTACH_TOTAL_BYTES_SEC= +#DEFAULT_ATTACH_TOTAL_BYTES_SEC_MAX_LENGTH= #DEFAULT_ATTACH_READ_BYTES_SEC= +#DEFAULT_ATTACH_READ_BYTES_SEC_MAX_LENGTH= #DEFAULT_ATTACH_WRITE_BYTES_SEC= +#DEFAULT_ATTACH_WRITE_BYTES_SEC_MAX= #DEFAULT_ATTACH_TOTAL_IOPS_SEC= +#DEFAULT_ATTACH_TOTAL_IOPS_SEC_MAX_LENGTH= #DEFAULT_ATTACH_READ_IOPS_SEC= +#DEFAULT_ATTACH_READ_IOPS_SEC_MAX_LENGTH= #DEFAULT_ATTACH_WRITE_IOPS_SEC= +#DEFAULT_ATTACH_WRITE_IOPS_SEC_MAX= # This parameters will set the default NIC model and filter for # the hot-attached interfaces.