[Kimchi-devel] [v2] UI: CPU Topology
Christy Perez
christy at linux.vnet.ibm.com
Fri Nov 21 17:00:09 UTC 2014
This looks great. There are still two small things:
1. It looks like the CPU field is still on the General tab. The label
for it is gone, though.
2. Instead of: "cpu_info":{"sockets":1,"cores":1,"threads":2}, it should
be "cpu_info":{"topology": {"sockets":1,"cores":1,"threads":2}}.
In case anyone is thinking this seems like a extra layer -- when I did
the backend parts I was leaving room for other cpu features, like model
or numa, etc. See https://libvirt.org/formatdomain.html#elementsCPU for
future items kimchi might want to add under cpu_info.
Thanks,
- Christy
On 11/21/2014 03:00 AM, huoyuxin at linux.vnet.ibm.com wrote:
> From: Yu Xin Huo <huoyuxin at linux.vnet.ibm.com>
>
> Signed-off-by: Yu Xin Huo <huoyuxin at linux.vnet.ibm.com>
> ---
> ui/css/theme-default/template-edit.css | 28 ++++++++++++++++++-
> ui/js/src/kimchi.api.js | 14 +++++++++
> ui/js/src/kimchi.template_edit_main.js | 47 +++++++++++++++++++++++++++++++-
> ui/pages/template-edit.html.tmpl | 16 ++++++++---
> 4 files changed, 99 insertions(+), 6 deletions(-)
>
> diff --git a/ui/css/theme-default/template-edit.css b/ui/css/theme-default/template-edit.css
> index 094e909..7abee7c 100644
> --- a/ui/css/theme-default/template-edit.css
> +++ b/ui/css/theme-default/template-edit.css
> @@ -142,4 +142,30 @@
>
> #edit-template-tabs .hide {
> display: none;
> -}
> \ No newline at end of file
> +}
> +
> +#form-template-processor select,
> +#form-template-processor input[type="text"] {
> + margin-left: 10px;
> +}
> +
> +#form-template-processor input[type="checkbox"] {
> + margin-right: 5px;
> +}
> +
> +#form-template-processor .manual {
> + margin-top: 10px;
> + margin-left: -3px;
> +}
> +
> +#form-template-processor .topology {
> + margin: 10px 30px;
> +}
> +
> +#form-template-processor .topology div {
> + margin-bottom: 10px;
> +}
> +
> +#form-template-processor .topology select {
> + width: 80px;
> +}
> diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js
> index 78c6d66..7a239c0 100644
> --- a/ui/js/src/kimchi.api.js
> +++ b/ui/js/src/kimchi.api.js
> @@ -1260,5 +1260,19 @@ var kimchi = {
> kimchi.message.error(data.responseJSON.reason);
> }
> });
> + },
> +
> + getCPUInfo : function(suc, err) {
> + kimchi.requestJSON({
> + url : kimchi.url + 'host/cpuinfo',
> + type : 'GET',
> + contentType : 'application/json',
> + dataType : 'json',
> + resend : true,
> + success : suc,
> + error : err ? err : function(data) {
> + kimchi.message.error(data.responseJSON.reason);
> + }
> + });
> }
> };
> diff --git a/ui/js/src/kimchi.template_edit_main.js b/ui/js/src/kimchi.template_edit_main.js
> index d4e19c2..9536ab7 100644
> --- a/ui/js/src/kimchi.template_edit_main.js
> +++ b/ui/js/src/kimchi.template_edit_main.js
> @@ -200,8 +200,44 @@ kimchi.template_edit_main = function() {
> });
> });
> };
> + var initProcessor = function(){
> + var setCPUValue = function(){
> + if(!$('#cores').hasClass("invalid-field")&&$('#cores').val()!=""){
> + $("#cpus").val(parseInt($("#cores").val())*parseInt($("#threads").val()));
> + }else{
> + $("#cpus").val('');
> + }
> + };
> + $("input:text", "#form-template-processor").on('keyup', function(){
> + $(this).toggleClass("invalid-field", !$(this).val().match('^[0-9]*$'));
> + if($(this).prop('id')=='cores') setCPUValue();
> + });
> + $("input:checkbox", "#form-template-processor").click(function(){
> + $(".topology", "#form-template-processor").toggleClass("hide", !$(this).prop("checked"));
> + $("#cpus").attr("disabled", $(this).prop("checked"));
> + setCPUValue();
> + });
> + $('select', '#form-template-processor').change(function(){
> + setCPUValue();
> + });
> + kimchi.getCPUInfo(function(data){
> + var options = "";
> + 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>";
> + }
> + $('select', '#form-template-processor').append(options);
> + if(template.cpus) $("#cpus").val(template.cpus);
> + if(template.cpu_info.cores) $("#cores").val(template.cpu_info.cores);
> + if(template.cpu_info.threads){
> + $('select', '#form-template-processor').val(template.cpu_info.threads);
> + $("input:checkbox", "#form-template-processor").trigger('click');
> + }
> + });
> + };
> kimchi.listNetworks(initInterface);
> kimchi.listStoragePools(initStorage);
> + initProcessor();
> };
> kimchi.retrieveTemplate(kimchi.selectedTemplate, initTemplate);
>
> @@ -241,7 +277,16 @@ kimchi.template_edit_main = function() {
> }
> });
> data['memory'] = Number(data['memory']);
> - data['cpus'] = Number(data['cpus']);
> + data['cpus'] = parseInt($('#cpus').val());
> + if($("input:checkbox", "#form-template-processor").prop("checked")){
> + data['cpu_info'] = {
> + sockets: 1,
> + cores: parseInt($("#cores").val()),
> + threads: parseInt($("#threads").val()),
> + };
> + }else{
> + data['cpu_info'] = {};
> + }
> var networks = $('.template-tab-body .item', '#form-template-interface');
> var networkForUpdate = new Array();
> $.each(networks, function(index, networkEntities) {
> diff --git a/ui/pages/template-edit.html.tmpl b/ui/pages/template-edit.html.tmpl
> index 90a6256..f43b9c0 100644
> --- a/ui/pages/template-edit.html.tmpl
> +++ b/ui/pages/template-edit.html.tmpl
> @@ -40,6 +40,9 @@
> <li>
> <a href="#form-template-interface">$_("Interface")</a>
> </li>
> + <li>
> + <a href="#form-template-processor">$_("Processor")</a>
> + </li>
> </ul>
> <form id="form-template-general">
> <div class="form-template-inline-wrapper">
> @@ -53,9 +56,6 @@
> <label for="template-edit-version-textbox">$_("Version")</label>
> </div>
> <div class="template-edit-wrapper-label">
> - <label for="template-edit-cpu-textbox">$_("CPU Number")</label>
> - </div>
> - <div class="template-edit-wrapper-label">
> <label for="template-edit-memory-textbox">$_("Memory (MB)")</label>
> </div>
> <div class="template-edit-wrapper-label templ-edit-cdrom">
> @@ -120,6 +120,14 @@
> </div>
> <div class="template-tab-body"></div>
> </form>
> + <form id="form-template-processor">
> + <div>$_("CPU Number"):<input type="text" value="1" id="cpus"></div>
> + <div class="manual"><input type="checkbox">$_("Manually set CPU topology")</div>
> + <div class="topology hide">
> + <div>$_("Cores"):<input type="text" value="1" id="cores"></div>
> + <div>$_("Threads"):<select id="threads"></select></div>
> + </div>
> + </form>
> </div>
> </div>
> <footer>
> @@ -157,4 +165,4 @@
> <button class="delete"></button>
> </span>
> </div>
> -</script>
> \ No newline at end of file
> +</script>
>
More information about the Kimchi-devel
mailing list