1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-04-02 10:50:07 +03:00

F #1439: Add IO Burst Attributes for KVM

Author: juanmont <jjmontiel@opennebula.systems>
This commit is contained in:
juanmont 2018-05-04 10:39:23 +02:00 committed by Ruben S. Montero
parent 41a167e24f
commit cd288c349b
7 changed files with 399 additions and 148 deletions

View File

@ -775,11 +775,23 @@ 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/TOTAL_BYTES_SEC_MAX"
VM_RESTRICTED_ATTR = "DISK/READ_BYTES_SEC"
VM_RESTRICTED_ATTR = "DISK/READ_BYTES_SEC_MAX_LENGTH"
VM_RESTRICTED_ATTR = "DISK/READ_BYTES_SEC_MAX"
VM_RESTRICTED_ATTR = "DISK/WRITE_BYTES_SEC"
VM_RESTRICTED_ATTR = "DISK/WRITE_BYTES_SEC_MAX_LENGTH"
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/TOTAL_IOPS_SEC_MAX"
VM_RESTRICTED_ATTR = "DISK/READ_IOPS_SEC"
VM_RESTRICTED_ATTR = "DISK/READ_IOPS_SEC_MAX_LENGTH"
VM_RESTRICTED_ATTR = "DISK/READ_IOPS_SEC_MAX"
VM_RESTRICTED_ATTR = "DISK/WRITE_IOPS_SEC"
VM_RESTRICTED_ATTR = "DISK/WRITE_IOPS_SEC_MAX_LENGTH"
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"

View File

@ -998,11 +998,23 @@ 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/TOTAL_BYTES_SEC_MAX"
VM_RESTRICTED_ATTR = "DISK/READ_BYTES_SEC"
VM_RESTRICTED_ATTR = "DISK/READ_BYTES_SEC_MAX_LENGTH"
VM_RESTRICTED_ATTR = "DISK/READ_BYTES_SEC_MAX"
VM_RESTRICTED_ATTR = "DISK/WRITE_BYTES_SEC"
VM_RESTRICTED_ATTR = "DISK/WRITE_BYTES_SEC_MAX_LENGTH"
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/TOTAL_IOPS_SEC_MAX"
VM_RESTRICTED_ATTR = "DISK/READ_IOPS_SEC"
VM_RESTRICTED_ATTR = "DISK/READ_IOPS_SEC_MAX_LENGTH"
VM_RESTRICTED_ATTR = "DISK/READ_IOPS_SEC_MAX"
VM_RESTRICTED_ATTR = "DISK/WRITE_IOPS_SEC"
VM_RESTRICTED_ATTR = "DISK/WRITE_IOPS_SEC_MAX_LENGTH"
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"

View File

@ -690,11 +690,23 @@ function get_source_xml {
# * DISK_IO
# * ORDER
# * TOTAL_BYTES_SEC
# * TOTAL_BYTES_SEC_MAX
# * TOTAL_BYTES_SEC_MAX_LENGTH
# * READ_BYTES_SEC
# * READ_BYTES_SEC_MAX
# * READ_BYTES_SEC_MAX_LENGTH
# * WRITE_BYTES_SEC
# * WRITE_BYTES_SEC_MAX
# * WRITE_BYTES_SEC_MAX_LENGTH
# * TOTAL_IOPS_SEC
# * TOTAL_IOPS_SEC_MAX
# * TOTAL_IOPS_SEC_MAX_LENGTH
# * READ_IOPS_SEC
# * READ_IOPS_SEC_MAX
# * READ_IOPS_SEC_MAX_LENGTH
# * WRITE_IOPS_SEC
# * WRITE_IOPS_SEC_MAX
# * WRITE_IOPS_SEC_MAX_LENGTH
# * 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 +753,23 @@ function get_disk_information {
$DISK_XPATH/IO \
$DISK_XPATH/ORDER \
$DISK_XPATH/TOTAL_BYTES_SEC \
$DISK_XPATH/TOTAL_BYTES_SEC_MAX \
$DISK_XPATH/TOTAL_BYTES_SEC_MAX_LENGTH \
$DISK_XPATH/READ_BYTES_SEC \
$DISK_XPATH/READ_BYTES_SEC_MAX \
$DISK_XPATH/READ_BYTES_SEC_MAX_LENGTH \
$DISK_XPATH/WRITE_BYTES_SEC \
$DISK_XPATH/WRITE_BYTES_SEC_MAX \
$DISK_XPATH/WRITE_BYTES_SEC_MAX_LENGTH \
$DISK_XPATH/TOTAL_IOPS_SEC \
$DISK_XPATH/TOTAL_IOPS_SEC_MAX \
$DISK_XPATH/TOTAL_IOPS_SEC_MAX_LENGTH \
$DISK_XPATH/READ_IOPS_SEC \
$DISK_XPATH/WRITE_IOPS_SEC)
$DISK_XPATH/READ_IOPS_SEC_MAX \
$DISK_XPATH/READ_IOPS_SEC_MAX_LENGTH \
$DISK_XPATH/WRITE_IOPS_SEC \
$DISK_XPATH/WRITE_IOPS_SEC_MAX \
$DISK_XPATH/WRITE_IOPS_SEC_MAX_LENGTH )
VMID="${XPATH_ELEMENTS[j++]}"
DRIVER="${XPATH_ELEMENTS[j++]:-$DEFAULT_TYPE}"
@ -770,11 +794,23 @@ function get_disk_information {
DISK_IO="${XPATH_ELEMENTS[j++]}"
ORDER="${XPATH_ELEMENTS[j++]}"
TOTAL_BYTES_SEC="${XPATH_ELEMENTS[j++]}"
TOTAL_BYTES_SEC_MAX="${XPATH_ELEMENTS[j++]}"
TOTAL_BYTES_SEC_MAX_LENGTH="${XPATH_ELEMENTS[j++]}"
READ_BYTES_SEC="${XPATH_ELEMENTS[j++]}"
READ_BYTES_SEC_MAX="${XPATH_ELEMENTS[j++]}"
READ_BYTES_SEC_MAX_LENGTH="${XPATH_ELEMENTS[j++]}"
WRITE_BYTES_SEC="${XPATH_ELEMENTS[j++]}"
WRITE_BYTES_SEC_MAX="${XPATH_ELEMENTS[j++]}"
WRITE_BYTES_SEC_MAX_LENGTH="${XPATH_ELEMENTS[j++]}"
TOTAL_IOPS_SEC="${XPATH_ELEMENTS[j++]}"
TOTAL_IOPS_SEC_MAX="${XPATH_ELEMENTS[j++]}"
TOTAL_IOPS_SEC_MAX_LENGTH="${XPATH_ELEMENTS[j++]}"
READ_IOPS_SEC="${XPATH_ELEMENTS[j++]}"
READ_IOPS_SEC_MAX="${XPATH_ELEMENTS[j++]}"
READ_IOPS_SEC_MAX_LENGTH="${XPATH_ELEMENTS[j++]}"
WRITE_IOPS_SEC="${XPATH_ELEMENTS[j++]}"
WRITE_IOPS_SEC_MAX="${XPATH_ELEMENTS[j++]}"
WRITE_IOPS_SEC_MAX_LENGTH="${XPATH_ELEMENTS[j++]}"
TYPE=$(echo "$TYPE"|tr A-Z a-z)
READONLY=$(echo "$READONLY"|tr A-Z a-z)

View File

@ -126,39 +126,115 @@
</div>
{{/unless}}
</div>
<div class="row vm_param">
<div class="medium-6 columns hypervisor only_kvm">
<fieldset>
<legend>{{tr "IO throttling (bytes/s)"}}</legend>
<label for="TOTAL_BYTES_SEC">
{{tr "Total (read+write) bytes/s"}}
</label>
<input wizard_field="TOTAL_BYTES_SEC" type="number" min="0" id="TOTAL_BYTES_SEC" name="TOTAL_BYTES_SEC" />
<label for="READ_BYTES_SEC">
{{tr "Read bytes/s"}}
</label>
<input wizard_field="READ_BYTES_SEC" type="number" min="0" id="READ_BYTES_SEC" name="READ_BYTES_SEC" />
<label for="WRITE_BYTES_SEC">
{{tr "Write bytes/s"}}
</label>
<input wizard_field="WRITE_BYTES_SEC" type="number" min="0" id="WRITE_BYTES_SEC" name="WRITE_BYTES_SEC" />
</fieldset>
<fieldset>
<legend>{{tr "Throttling Bytes/s"}}</legend>
<div class="row vm_param">
<div class="medium-4 columns hypervisor only_kvm">
<fieldset>
<legend>{{tr "TOTAL (R+W)"}}</legend>
<label for="TOTAL_BYTES_SEC">
{{tr "Value"}}
</label>
<input wizard_field="TOTAL_BYTES_SEC" type="number" min="0" id="TOTAL_BYTES_SEC" name="TOTAL_BYTES_SEC" />
<label for="TOTAL_BYTES_SEC_MAX">
{{tr "Maximum"}}
</label>
<input wizard_field="TOTAL_BYTES_SEC_MAX" type="number" min="0" id="TOTAL_BYTES_SEC_MAX" name="TOTAL_BYTES_SEC_MAX" />
<label for="TOTAL_BYTES_SEC_MAX_LENGTH">
{{tr "Maximum length"}}
</label>
<input wizard_field="TOTAL_BYTES_SEC_MAX_LENGTH" type="number" min="0" id="TOTAL_BYTES_SEC_MAX_LENGTH" name="TOTAL_BYTES_SEC_MAX_LENGTH" />
</fieldset>
</div>
<div class="medium-4 columns hypervisor only_kvm">
<fieldset>
<legend>{{tr "READ"}}</legend>
<label for="READ_BYTES_SEC">
{{tr "Value"}}
</label>
<input wizard_field="READ_BYTES_SEC" type="number" min="0" id="READ_BYTES_SEC" name="READ_BYTES_SEC" />
<label for="READ_BYTES_SEC_MAX">
{{tr "Maximum"}}
</label>
<input wizard_field="READ_BYTES_SEC_MAX" type="number" min="0" id="READ_BYTES_SEC_MAX" name="READ_BYTES_SEC_MAX" />
<label for="READ_BYTES_SEC_MAX_LENGTH">
{{tr "Maximum length"}}
</label>
<input wizard_field="READ_BYTES_SEC_MAX_LENGTH" type="number" min="0" id="READ_BYTES_SEC_MAX_LENGTH" name="READ_BYTES_SEC_MAX_LENGTH" />
</fieldset>
</div>
<div class="medium-4 columns hypervisor only_kvm">
<fieldset>
<legend>{{tr "WRITE"}}</legend>
<label for="WRITE_BYTES_SEC">
{{tr "Value"}}
</label>
<input wizard_field="WRITE_BYTES_SEC" type="number" min="0" id="WRITE_BYTES_SEC" name="WRITE_BYTES_SEC" />
<label for="WRITE_BYTES_SEC_MAX">
{{tr "Maximum"}}
</label>
<input wizard_field="WRITE_BYTES_SEC_MAX" type="number" min="0" id="WRITE_BYTES_SEC_MAX" name="WRITE_BYTES_SEC_MAX" />
<label for="WRITE_BYTES_SEC_MAX_LENGTH">
{{tr "Maximum length"}}
</label>
<input wizard_field="WRITE_BYTES_SEC_MAX_LENGTH" type="number" min="0" id="WRITE_BYTES_SEC_MAX_LENGTH" name="WRITE_BYTES_SEC_MAX_LENGTH" />
</fieldset>
</div>
</div>
<div class="medium-6 columns hypervisor only_kvm">
<fieldset>
<legend>{{tr "IO throttling (IOPS)"}}</legend>
<label for="TOTAL_IOPS_SEC">
{{tr "Total (read+write) IOPS"}}
</label>
<input wizard_field="TOTAL_IOPS_SEC" type="number" min="0" id="TOTAL_IOPS_SEC" name="TOTAL_IOPS_SEC" />
<label for="READ_IOPS_SEC">
{{tr "Read IOPS"}}
</label>
<input wizard_field="READ_IOPS_SEC" type="number" min="0" id="READ_IOPS_SEC" name="READ_IOPS_SEC" />
<label for="WRITE_IOPS_SEC">
{{tr "Write IOPS Sec"}}
</label>
<input wizard_field="WRITE_IOPS_SEC" type="number" min="0" id="WRITE_IOPS_SEC" name="WRITE_IOPS_SEC" />
</fieldset>
</fieldset>
<fieldset>
<legend>{{tr "Throttling IOPS Sec"}}</legend>
<div class="row vm_param">
<div class="medium-4 columns hypervisor only_kvm">
<fieldset>
<legend>{{tr "TOTAL (R+W)"}}</legend>
<label for="TOTAL_IOPS_SEC">
{{tr "Value"}}
</label>
<input wizard_field="TOTAL_IOPS_SEC" type="number" min="0" id="TOTAL_IOPS_SEC" name="TOTAL_IOPS_SEC" />
<label for="TOTAL_IOPS_SEC_MAX">
{{tr "Maximum"}}
</label>
<input wizard_field="TOTAL_IOPS_SEC_MAX" type="number" min="0" id="TOTAL_IOPS_SEC_MAX" name="TOTAL_IOPS_SEC_MAX" />
<label for="TOTAL_IOPS_SEC_MAX_LENGTH">
{{tr "Maximum length"}}
</label>
<input wizard_field="TOTAL_IOPS_SEC_MAX_LENGTH" type="number" min="0" id="TOTAL_IOPS_SEC_MAX_LENGTH" name="TOTAL_IOPS_SEC_MAX_LENGTH" />
</fieldset>
</div>
<div class="medium-4 columns hypervisor only_kvm">
<fieldset>
<legend>{{tr "READ"}}</legend>
<label for="READ_IOPS_SEC">
{{tr "Value"}}
</label>
<input wizard_field="READ_IOPS_SEC" type="number" min="0" id="READ_IOPS_SEC" name="READ_IOPS_SEC" />
<label for="READ_IOPS_SEC_MAX">
{{tr "Maximum"}}
</label>
<input wizard_field="READ_IOPS_SEC_MAX" type="number" min="0" id="READ_IOPS_SEC_MAX" name="READ_IOPS_SEC_MAX" />
<label for="READ_IOPS_SEC_MAX_LENGTH">
{{tr "Maximum length"}}
</label>
<input wizard_field="READ_IOPS_SEC_MAX_LENGTH" type="number" min="0" id="READ_IOPS_SEC_MAX_LENGTH" name="READ_IOPS_SEC_MAX_LENGTH" />
</fieldset>
</div>
<div class="medium-4 columns hypervisor only_kvm">
<fieldset>
<legend>{{tr "WRITE"}}</legend>
<label for="WRITE_IOPS_SEC">
{{tr "Value"}}
</label>
<input wizard_field="WRITE_IOPS_SEC" type="number" min="0" id="WRITE_IOPS_SEC" name="WRITE_IOPS_SEC" />
<label for="WRITE_IOPS_SEC_MAX">
{{tr "Maximum"}}
</label>
<input wizard_field="WRITE_IOPS_SEC_MAX" type="number" min="0" id="WRITE_IOPS_SEC_MAX" name="WRITE_IOPS_SEC_MAX" />
<label for="WRITE_IOPS_SEC_MAX_LENGTH">
{{tr "Maximum length"}}
</label>
<input wizard_field="WRITE_IOPS_SEC_MAX_LENGTH" type="number" min="0" id="WRITE_IOPS_SEC_MAX_LENGTH" name="WRITE_IOPS_SEC_MAX_LENGTH" />
</fieldset>
</div>
</div>
</div>
</fieldset>

View File

@ -30,6 +30,8 @@ const int LibVirtDriver::GLUSTER_DEFAULT_PORT = 24007;
const int LibVirtDriver::ISCSI_DEFAULT_PORT = 3260;
#define set_sec_default(v, dv) if (v.empty() && !dv.empty()){v = dv;}
/**
* This function generates the <host> element for network disks
*/
@ -82,6 +84,35 @@ static void do_network_hosts(ofstream& file,
file << "\t\t\t</source>" << endl;
}
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
static void insert_sec(ofstream& file, const string& base, const string& s,
const string& sm, const string& sml)
{
if (!s.empty())
{
file << "\t\t\t\t<" << base << "_sec>"
<< one_util::escape_xml(s)
<<"</" << base << "_sec>\n";
}
if (!sm.empty())
{
file << "\t\t\t\t<" << base << "_sec_max>"
<< one_util::escape_xml(sm)
<< "</" << base << "_sec_max>\n";
if (!sml.empty())
{
file << "\t\t\t\t<" << base << "_sec_max_length>"
<< one_util::escape_xml(sml)
<< "</" << base << "_sec_max_length>\n";
}
}
}
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
@ -142,19 +173,43 @@ 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 total_bytes_sec_max = "";
string read_bytes_sec = "";
string read_bytes_sec_max_length = "";
string read_bytes_sec_max = "";
string write_bytes_sec = "";
string write_bytes_sec_max_length = "";
string write_bytes_sec_max = "";
string total_iops_sec = "";
string total_iops_sec_max_length = "";
string total_iops_sec_max = "";
string read_iops_sec = "";
string read_iops_sec_max_length = "";
string read_iops_sec_max = "";
string write_iops_sec = "";
string write_iops_sec_max_length = "";
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_total_bytes_sec_max = "";
string default_read_bytes_sec = "";
string default_read_bytes_sec_max_length = "";
string default_read_bytes_sec_max = "";
string default_write_bytes_sec = "";
string default_write_bytes_sec_max_length = "";
string default_write_bytes_sec_max = "";
string default_total_iops_sec = "";
string default_total_iops_sec_max_length = "";
string default_total_iops_sec_max = "";
string default_read_iops_sec = "";
string default_read_iops_sec_max_length = "";
string default_read_iops_sec_max = "";
string default_write_iops_sec = "";
string default_write_iops_sec_max_length = "";
string default_write_iops_sec_max = "";
int disk_id;
int order;
@ -461,12 +516,30 @@ 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", default_total_bytes_sec_max);
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", default_read_bytes_sec_max);
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", "WRITE_BYTES_SEC_MAX_LENGTH", default_write_bytes_sec_max_length);
get_default("DISK", "TOTAL_IOPS_SEC", default_total_iops_sec);
get_default("DISK", "TOTAL_IOPS_SEC_MAX", default_total_iops_sec_max);
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", default_read_iops_sec_max);
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);
get_default("DISK", "WRITE_IOPS_SEC_MAX_LENGTH", default_write_iops_sec_max_length);
// ------------------------------------------------------------------------
@ -474,67 +547,80 @@ int LibVirtDriver::deployment_description_kvm(
for (int i=0; i < num ;i++)
{
type = disk[i]->vector_value("TYPE");
disk_type = disk[i]->vector_value("DISK_TYPE");
target = disk[i]->vector_value("TARGET");
ro = disk[i]->vector_value("READONLY");
driver = disk[i]->vector_value("DRIVER");
cache = disk[i]->vector_value("CACHE");
disk_io = disk[i]->vector_value("IO");
discard = disk[i]->vector_value("DISCARD");
source = disk[i]->vector_value("SOURCE");
clone = disk[i]->vector_value("CLONE");
type = disk[i]->vector_value("TYPE");
disk_type = disk[i]->vector_value("DISK_TYPE");
target = disk[i]->vector_value("TARGET");
ro = disk[i]->vector_value("READONLY");
driver = disk[i]->vector_value("DRIVER");
cache = disk[i]->vector_value("CACHE");
disk_io = disk[i]->vector_value("IO");
discard = disk[i]->vector_value("DISCARD");
source = disk[i]->vector_value("SOURCE");
clone = disk[i]->vector_value("CLONE");
ceph_host = disk[i]->vector_value("CEPH_HOST");
ceph_secret = disk[i]->vector_value("CEPH_SECRET");
ceph_user = disk[i]->vector_value("CEPH_USER");
pool_name = disk[i]->vector_value("POOL_NAME");
ceph_host = disk[i]->vector_value("CEPH_HOST");
ceph_secret = disk[i]->vector_value("CEPH_SECRET");
ceph_user = disk[i]->vector_value("CEPH_USER");
pool_name = disk[i]->vector_value("POOL_NAME");
iscsi_host = disk[i]->vector_value("ISCSI_HOST");
iscsi_user = disk[i]->vector_value("ISCSI_USER");
iscsi_usage = disk[i]->vector_value("ISCSI_USAGE");
iscsi_iqn = disk[i]->vector_value("ISCSI_IQN");
iscsi_host = disk[i]->vector_value("ISCSI_HOST");
iscsi_user = disk[i]->vector_value("ISCSI_USER");
iscsi_usage = disk[i]->vector_value("ISCSI_USAGE");
iscsi_iqn = disk[i]->vector_value("ISCSI_IQN");
gluster_host = disk[i]->vector_value("GLUSTER_HOST");
gluster_volume = disk[i]->vector_value("GLUSTER_VOLUME");
gluster_host = disk[i]->vector_value("GLUSTER_HOST");
gluster_volume = disk[i]->vector_value("GLUSTER_VOLUME");
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");
if ( total_bytes_sec.empty() && !default_total_bytes_sec.empty())
{
total_bytes_sec = default_total_bytes_sec;
}
total_bytes_sec = disk[i]->vector_value("TOTAL_BYTES_SEC");
total_bytes_sec_max = disk[i]->vector_value("TOTAL_BYTES_SEC_MAX");
total_bytes_sec_max_length = disk[i]->vector_value("TOTAL_BYTES_SEC_MAX_LENGTH");
if ( read_bytes_sec.empty() && !default_read_bytes_sec.empty())
{
read_bytes_sec = default_read_bytes_sec;
}
read_bytes_sec = disk[i]->vector_value("READ_BYTES_SEC");
read_bytes_sec_max = disk[i]->vector_value("READ_BYTES_SEC_MAX");
read_bytes_sec_max_length = disk[i]->vector_value("READ_BYTES_SEC_MAX_LENGTH");
if ( write_bytes_sec.empty() && !default_write_bytes_sec.empty())
{
write_bytes_sec = default_write_bytes_sec;
}
write_bytes_sec = disk[i]->vector_value("WRITE_BYTES_SEC");
write_bytes_sec_max = disk[i]->vector_value("WRITE_BYTES_SEC_MAX");
write_bytes_sec_max_length = disk[i]->vector_value("WRITE_BYTES_SEC_MAX_LENGTH");
if ( total_iops_sec.empty() && !default_total_iops_sec.empty())
{
total_iops_sec = default_total_iops_sec;
}
total_iops_sec = disk[i]->vector_value("TOTAL_IOPS_SEC");
total_iops_sec_max = disk[i]->vector_value("TOTAL_IOPS_SEC_MAX");
total_iops_sec_max_length = disk[i]->vector_value("TOTAL_IOPS_SEC_MAX_LENGTH");
if ( read_iops_sec.empty() && !default_read_iops_sec.empty())
{
read_iops_sec = default_read_iops_sec;
}
read_iops_sec = disk[i]->vector_value("READ_IOPS_SEC");
read_iops_sec_max = disk[i]->vector_value("READ_IOPS_SEC_MAX");
read_iops_sec_max_length = disk[i]->vector_value("READ_IOPS_SEC_MAX_LENGTH");
if ( write_iops_sec.empty() && !default_write_iops_sec.empty())
{
write_iops_sec = default_write_iops_sec;
}
write_iops_sec = disk[i]->vector_value("WRITE_IOPS_SEC");
write_iops_sec_max = disk[i]->vector_value("WRITE_IOPS_SEC_MAX");
write_iops_sec_max_length = disk[i]->vector_value("WRITE_IOPS_SEC_MAX_LENGTH");
set_sec_default(read_bytes_sec, default_read_bytes_sec);
set_sec_default(read_bytes_sec_max, default_read_bytes_sec_max);
set_sec_default(read_bytes_sec_max_length, default_read_bytes_sec_max_length);
set_sec_default(write_bytes_sec, default_write_bytes_sec);
set_sec_default(write_bytes_sec_max, default_write_bytes_sec_max);
set_sec_default(write_bytes_sec_max_length, default_write_bytes_sec_max_length);
set_sec_default(total_bytes_sec, default_total_bytes_sec);
set_sec_default(total_bytes_sec_max, default_total_bytes_sec_max);
set_sec_default(total_bytes_sec_max_length, default_total_bytes_sec_max_length);
set_sec_default(read_iops_sec, default_read_iops_sec);
set_sec_default(read_iops_sec_max, default_read_iops_sec_max);
set_sec_default(read_iops_sec_max_length, default_read_iops_sec_max_length);
set_sec_default(write_iops_sec, default_write_iops_sec);
set_sec_default(write_iops_sec_max, default_write_iops_sec_max);
set_sec_default(write_iops_sec_max_length, default_write_iops_sec_max_length);
set_sec_default(total_iops_sec, default_total_iops_sec);
set_sec_default(total_iops_sec_max, default_total_iops_sec_max);
set_sec_default(total_iops_sec_max_length, default_total_iops_sec_max_length);
disk[i]->vector_value_str("DISK_ID", disk_id);
@ -790,53 +876,38 @@ int LibVirtDriver::deployment_description_kvm(
// ---- I/O Options ----
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()))
if (!(total_bytes_sec.empty() &&
total_bytes_sec_max.empty() &&
read_bytes_sec.empty() &&
read_bytes_sec_max.empty() &&
write_bytes_sec.empty() &&
write_bytes_sec_max.empty() &&
total_iops_sec.empty() &&
total_iops_sec_max.empty() &&
read_iops_sec.empty() &&
read_iops_sec_max.empty() &&
write_iops_sec.empty() &&
write_iops_sec_max.empty()))
{
file << "\t\t\t<iotune>" << endl;
if ( !total_bytes_sec.empty() )
{
file << "\t\t\t\t<total_bytes_sec>"
<< one_util::escape_xml(total_bytes_sec)
<< "</total_bytes_sec>\n";
}
insert_sec(file, "read_bytes", read_bytes_sec ,
read_bytes_sec_max , read_bytes_sec_max_length);
if ( !read_bytes_sec.empty() )
{
file << "\t\t\t\t<read_bytes_sec>"
<< one_util::escape_xml(read_bytes_sec)
<< "</read_bytes_sec>\n";
}
insert_sec(file, "write_bytes", write_bytes_sec ,
write_bytes_sec_max , write_bytes_sec_max_length);
if ( !write_bytes_sec.empty() )
{
file << "\t\t\t\t<write_bytes_sec>"
<< one_util::escape_xml(write_bytes_sec)
<< "</write_bytes_sec>\n";
}
insert_sec(file, "total_bytes", total_bytes_sec ,
total_bytes_sec_max , total_bytes_sec_max_length);
if ( !total_iops_sec.empty() )
{
file << "\t\t\t\t<total_iops_sec>"
<< one_util::escape_xml(total_iops_sec)
<< "</total_iops_sec>\n";
}
insert_sec(file, "read_iops", read_iops_sec ,
read_iops_sec_max , read_iops_sec_max_length);
if ( !read_iops_sec.empty() )
{
file << "\t\t\t\t<read_iops_sec>"
<< one_util::escape_xml(read_iops_sec)
<< "</read_iops_sec>\n";
}
insert_sec(file, "write_iops", write_iops_sec ,
write_iops_sec_max , write_iops_sec_max_length);
if ( !write_iops_sec.empty() )
{
file << "\t\t\t\t<write_iops_sec>"
<< one_util::escape_xml(write_iops_sec)
<< "</write_iops_sec>\n";
}
insert_sec(file, "total_iops", total_iops_sec ,
total_iops_sec_max , total_iops_sec_max_length);
file << "\t\t\t</iotune>" << endl;
}

View File

@ -29,17 +29,49 @@ DRV_ACTION="$5"
get_disk_information "ATTACH='YES'"
function insert_sec() {
base=$1
s=$2
sm=$3
sml=$4
if [ -n "${s}" ]; then
XML+=" <${name}_sec>$(xml_esc "${s}")</${name}_sec>"
fi
if [ -n "${sm}" ]; then
XML+=" <${name}_sec_max>$(xml_esc "${sm}")</${name}_sec_max>"
if [ -n "${sml}" ]; then
XML+=" <${name}_sec_max_length>$(xml_esc "${sml}")</${name}_sec_max_length>"
fi
fi
}
# defaults
CACHE=${CACHE:-${DEFAULT_ATTACH_CACHE}}
CACHE=${CACHE:-default} # https://github.com/OpenNebula/one/blob/c0d081917224f1d467582b8d8ac052a48040ec00/src/vmm/LibVirtDriverKVM.cc#L459
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}}
TOTAL_BYTES_SEC_MAX=${TOTAL_BYTES_SEC_MAX:-${DEFAULT_ATTACH_TOTAL_BYTES_SEC_MAX}}
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}}
READ_BYTES_SEC_MAX=${READ_BYTES_SEC_MAX:-${DEFAULT_ATTACH_READ_BYTES_SEC_MAX}}
WRITE_BYTES_SEC=${WRITE_BYTES_SEC:-${DEFAULT_ATTACH_WRITE_BYTES_SEC}}
WRITE_BYTES_SEC_MAX_LENGTH=${WRITE_BYTES_SEC_MAX_LENGTH:-${DEFAULT_ATTACH_WRITE_BYTES_SEC_MAX_LENGTH}}
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}}
TOTAL_IOPS_SEC_MAX=${TOTAL_IOPS_SEC_MAX:-${DEFAULT_ATTACH_TOTAL_IOPS_SEC_MAX}}
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}}
READ_IOPS_SEC_MAX=${READ_IOPS_SEC_MAX:-${DEFAULT_ATTACH_READ_IOPS_SEC_MAX}}
WRITE_IOPS_SEC=${WRITE_IOPS_SEC:-${DEFAULT_ATTACH_WRITE_IOPS_SEC}}
WRITE_IOPS_SEC_MAX_LENGTH=${WRITE_IOPS_SEC_MAX_LENGTH:-${DEFAULT_ATTACH_WRITE_IOPS_SEC_MAX_LENGTH}}
WRITE_IOPS_SEC_MAX=${WRITE_IOPS_SEC_MAX:-${DEFAULT_ATTACH_WRITE_IOPS_SEC_MAX}}
# disk XML
XML=''
@ -63,23 +95,23 @@ XML+=" <target dev='$(xml_esc "${TARGET}")'/>"
[ "${READONLY}" = 'yes' ] && XML+=" <readonly/>"
if [ -n "${TOTAL_BYTES_SEC}${READ_BYTES_SEC}${WRITE_BYTES_SEC}" ] || \
[ -n "${TOTAL_IOPS_SEC}${READ_IOPS_SEC}${WRITE_IOPS_SEC}" ];
[ -n "${TOTAL_BYTES_SEC_MAX}${READ_BYTES_SEC_MAX}${WRITE_BYTES_SEC_MAX}" ] || \
[ -n "${TOTAL_IOPS_SEC}${READ_IOPS_SEC}${WRITE_IOPS_SEC}" ] || \
[ -n "${TOTAL_IOPS_SEC_MAX}${READ_IOPS_SEC_MAX}${WRITE_IOPS_SEC_MAX}" ];
then
XML+=" <iotune>"
[ -n "${TOTAL_BYTES_SEC}" ] && \
XML+=" <total_bytes_sec>$(xml_esc "${TOTAL_BYTES_SEC}")</total_bytes_sec>"
[ -n "${READ_BYTES_SEC}" ] && \
XML+=" <read_bytes_sec>$(xml_esc "${READ_BYTES_SEC}")</read_bytes_sec>"
[ -n "${WRITE_BYTES_SEC}" ] && \
XML+=" <write_bytes_sec>$(xml_esc "${WRITE_BYTES_SEC}")</write_bytes_sec>"
insert_sec "read_bytes" $READ_BYTES_SEC $READ_BYTES_SEC_MAX $READ_BYTES_SEC_MAX_LENGTH
[ -n "${TOTAL_IOPS_SEC}" ] && \
XML+=" <total_iops_sec>$(xml_esc "${TOTAL_IOPS_SEC}")</total_iops_sec>"
[ -n "${READ_IOPS_SEC}" ] && \
XML+=" <read_iops_sec>$(xml_esc "${READ_IOPS_SEC}")</read_iops_sec>"
[ -n "${WRITE_IOPS_SEC}" ] && \
XML+=" <write_iops_sec>$(xml_esc "${WRITE_IOPS_SEC}")</write_iops_sec>"
insert_sec "write_bytes" $WRITE_BYTES_SEC $WRITE_BYTES_SEC_MAX $WRITE_BYTES_SEC_MAX_LENGTH
insert_sec "total_bytes" $TOTAL_BYTES_SEC $TOTAL_BYTES_SEC_MAX $TOTAL_BYTES_SEC_MAX_LENGTH
insert_sec "read_iops" $READ_IOPS_SEC $READ_IOPS_SEC_MAX $READ_IOPS_SEC_MAX_LENGTH
insert_sec "write_iops" $WRITE_IOPS_SEC $WRITE_IOPS_SEC_MAX $WRITE_IOPS_SEC_MAX_LENGTH
insert_sec "total_iops" $TOTAL_IOPS_SEC $TOTAL_IOPS_SEC_MAX $TOTAL_IOPS_SEC_MAX_LENGTH
XML+=" </iotune>"
fi

View File

@ -52,11 +52,23 @@ 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=
#DEFAULT_ATTACH_TOTAL_BYTES_SEC_MAX_LENGTH=
#DEFAULT_ATTACH_READ_BYTES_SEC=
#DEFAULT_ATTACH_READ_BYTES_SEC_MAX=
#DEFAULT_ATTACH_READ_BYTES_SEC_MAX_LENGTH=
#DEFAULT_ATTACH_WRITE_BYTES_SEC=
#DEFAULT_ATTACH_WRITE_BYTES_SEC_MAX=
#DEFAULT_ATTACH_WRITE_BYTES_SEC_MAX_LENGTH=
#DEFAULT_ATTACH_TOTAL_IOPS_SEC=
#DEFAULT_ATTACH_TOTAL_IOPS_SEC_MAX=
#DEFAULT_ATTACH_TOTAL_IOPS_SEC_MAX_LENGTH=
#DEFAULT_ATTACH_READ_IOPS_SEC=
#DEFAULT_ATTACH_READ_IOPS_SEC_MAX=
#DEFAULT_ATTACH_READ_IOPS_SEC_MAX_LENGTH=
#DEFAULT_ATTACH_WRITE_IOPS_SEC=
#DEFAULT_ATTACH_WRITE_IOPS_SEC_MAX=
#DEFAULT_ATTACH_WRITE_IOPS_SEC_MAX_LENGTH=
# This parameters will set the default NIC model and filter for
# the hot-attached interfaces.