
From: Daniel Henrique Barboza <danielhb@linux.vnet.ibm.com> This patch removes the limitation, in both backend and frontend, of the value 'threads' in the topology to be limited by the threads_per_core value of the host. This limitation was put in place to help the user pick a 'threads' value that provides a good performance, but it ended up being a problem to support VMs what were created outside of Kimchi and didn't impose such limitations. To compensate, a help text was added to warn the user about the recommended 'threads' values. Signed-off-by: Daniel Henrique Barboza <danielhb@linux.vnet.ibm.com> --- i18n.py | 1 - model/cpuinfo.py | 2 -- ui/js/src/kimchi.template_edit_main.js | 40 +++++++++++++++------------------- ui/pages/guest-edit.html.tmpl | 6 ++++- ui/pages/i18n.json.tmpl | 1 + ui/pages/template-edit.html.tmpl | 6 ++++- 6 files changed, 29 insertions(+), 27 deletions(-) diff --git a/i18n.py b/i18n.py index 9d0abee..453ede8 100644 --- a/i18n.py +++ b/i18n.py @@ -358,7 +358,6 @@ messages = { "KCHCPUINF0003E": _("This host (or current configuration) does not allow CPU topology."), "KCHCPUINF0004E": _("The maximum number of vCPUs is too large for this system."), "KCHCPUINF0005E": _("When CPU topology is defined, CPUs must be a multiple of the 'threads' number defined."), - "KCHCPUINF0006E": _("The number of threads is too large for this system."), "KCHCPUINF0007E": _("When CPU topology is specified, sockets, cores and threads are required paramaters."), "KCHCPUINF0008E": _("Parameter 'cpu_info' expects an object with fields among: 'vcpus', 'maxvcpus', 'topology'."), "KCHCPUINF0009E": _("Parameter 'topology' expects an object with fields among: 'sockets', 'cores', 'threads'."), diff --git a/model/cpuinfo.py b/model/cpuinfo.py index 5f82320..cfdecaa 100644 --- a/model/cpuinfo.py +++ b/model/cpuinfo.py @@ -134,8 +134,6 @@ class CPUInfoModel(object): if not self.guest_threads_enabled: raise InvalidOperation("KCHCPUINF0003E") - if threads > self.threads_per_core: - raise InvalidParameter("KCHCPUINF0006E") if maxvcpus != sockets * cores * threads: raise InvalidParameter("KCHCPUINF0002E") if vcpus % threads != 0: diff --git a/ui/js/src/kimchi.template_edit_main.js b/ui/js/src/kimchi.template_edit_main.js index ecce151..5aecbdd 100644 --- a/ui/js/src/kimchi.template_edit_main.js +++ b/ui/js/src/kimchi.template_edit_main.js @@ -21,7 +21,9 @@ kimchi.init_processor_tab = function(cpu_info, save_form_button) { var getMaxVCpus = function() { if (!$('#sockets').hasClass("invalid-field") && !$('#cores').hasClass("invalid-field") && - $('#sockets').val() != "" && $('#cores').val() != "") { + !$('#threads').hasClass("invalid-field") && + $('#sockets').val() != "" && $('#cores').val() != "" && + $('#threads').val() != "") { var sockets = parseInt($("#sockets").val()); var cores = parseInt($("#cores").val()); @@ -60,23 +62,19 @@ kimchi.init_processor_tab = function(cpu_info, save_form_button) { save_form_button.prop('disabled', invalid_field); if ($(this).prop('id') == 'sockets' || - $(this).prop('id') == 'cores') { + $(this).prop('id') == 'cores' || + $(this).prop('id') == 'threads') { setCPUValue(); } }); $("input:checkbox", "#form-edit-processor").click(function() { - $('#threads').selectpicker(); $(".topology", "#form-edit-processor").slideToggle(); $("#guest-edit-max-processor-textbox").attr("disabled", $(this).prop("checked")); setCPUValue(); }); - $('#threads').change(function() { - setCPUValue(); - }); - $('#vcpus').change(function() { var computedCpu = getMaxVCpus(); var vcpus = parseInt($('#vcpus').val()); @@ -98,12 +96,8 @@ kimchi.init_processor_tab = function(cpu_info, save_form_button) { var options = ""; var topo = cpu_info.topology; - for (var i = 0; Math.pow(2, i) <= data.threads_per_core; i++) { - var lastOne = Math.pow(2, i + 1) > data.threads_per_core ? " selected" : ""; - options += "<option" + lastOne + ">" + Math.pow(2, i) + "</option>"; - } - - $('#threads').append(options); + var threads_help_text = i18n['KCHVM0004E'].replace('%1', data.threads_per_core); + $('#threads-recommended-values').text(threads_help_text); if (cpu_info.vcpus) { $("#vcpus").val(cpu_info.vcpus); @@ -111,15 +105,17 @@ kimchi.init_processor_tab = function(cpu_info, save_form_button) { if (cpu_info.maxvcpus) { $("#guest-edit-max-processor-textbox").val(cpu_info.maxvcpus); } - if (topo && topo.sockets) { - $("#sockets").val(topo.sockets); - } - if (topo && topo.cores) { - $("#cores").val(topo.cores); - } - if (topo && topo.threads) { - $('#threads').val(topo.threads); - $('#threads').selectpicker(); + + if (topo) { + if (topo.sockets) { + $("#sockets").val(topo.sockets); + } + if (topo.cores) { + $("#cores").val(topo.cores); + } + if (topo.threads) { + $('#threads').val(topo.threads); + } $("input:checkbox", "#form-edit-processor").trigger('click'); } }); diff --git a/ui/pages/guest-edit.html.tmpl b/ui/pages/guest-edit.html.tmpl index 0aa2504..ce63471 100644 --- a/ui/pages/guest-edit.html.tmpl +++ b/ui/pages/guest-edit.html.tmpl @@ -221,7 +221,11 @@ </div> <div class="form-group"> <label for="threads">$_("Threads")</label> - <select id="threads" class="selectpicker col-md-12 col-lg-12"></select> + <input type="text" class="form-control" value="1" id="threads" /> + <p class="help-block"> + <i class="fa fa-info-circle"></i> + <spam class="text" id="threads-recommended-values" /> + </p> </div> </div> </form> diff --git a/ui/pages/i18n.json.tmpl b/ui/pages/i18n.json.tmpl index 9580be1..a627cc3 100644 --- a/ui/pages/i18n.json.tmpl +++ b/ui/pages/i18n.json.tmpl @@ -72,6 +72,7 @@ "KCHVM0001E": "$_("Input is not a number")", "KCHVM0002E": "$_("Memory value cannot be higher than Max Memory value")", "KCHVM0003E": "$_("Current CPUs value cannot be higher than Max CPU value")", + "KCHVM0004E": "$_("For better performance it is recommended a threads per core value not greater than %1.")", "KCHVMCD6001M": "$_("This CDROM will be detached permanently and you can re-attach it. Continue to detach it?")", "KCHVMCD6002M": "$_("Attach")", diff --git a/ui/pages/template-edit.html.tmpl b/ui/pages/template-edit.html.tmpl index 6e7f97b..728ce6d 100644 --- a/ui/pages/template-edit.html.tmpl +++ b/ui/pages/template-edit.html.tmpl @@ -185,7 +185,11 @@ </div> <div class="form-group"> <label for="threads">$_("Threads")</label> - <select id="threads" class="selectpicker col-md-12 col-lg-12"></select> + <input type="text" class="form-control" value="1" id="threads" /> + <p class="help-block"> + <i class="fa fa-info-circle"></i> + <spam class="text" id="threads-recommended-values" /> + </p> </div> </div> </form> -- 2.7.4