# HG changeset patch # User Rob Hoes CP-1620: Populate Host.cpu_info field on startup This field contains information about the CPUs in the host, including fields for CPU feature masking. Signed-off-by: Rob Hoes diff -r 0e735f437ea3 ocaml/xapi/OMakefile --- a/ocaml/xapi/OMakefile Fri Feb 12 16:07:50 2010 +0000 +++ b/ocaml/xapi/OMakefile Tue Feb 16 10:53:27 2010 +0000 @@ -1,4 +1,4 @@ -OCAMLPACKS = xml-light2 cdrom pciutil sexpr log stunnel http-svr rss +OCAMLPACKS = xml-light2 cdrom pciutil sexpr log stunnel http-svr rss cpuid OCAML_LIBS = ../util/version ../util/vm_memory_constraints ../util/sanitycheck ../util/stats \ ../idl/ocaml_backend/common ../idl/ocaml_backend/client ../idl/ocaml_backend/server ../util/ocamltest OCAMLINCLUDES = ../idl ../idl/ocaml_backend \ @@ -13,6 +13,7 @@ # Since the section didn't work, link against the xen libs for everything if we are building # xen stuff at all. # NB order of libraries is important: OMake cannot determine dependencies between libraries +# (the same holds for OCaml packages) XEN_OCAML_LIBS = ../netdev/netdev ../xenops/xenops ../auth/pam XEN_OCAMLINCLUDES = XEN_OCAMLPACKS = xc xs @@ -22,7 +23,7 @@ OCAMLINCLUDES = $(if $(equal $(COMPILE_XENSTUFF), yes), $(XEN_OCAMLINCLUDES) $(OCAMLINCLUDES), $(OCAMLINCLUDES)) # xc.cma depends on uuid.cma OCAML_LIBS = $(if $(equal $(COMPILE_XENSTUFF), yes), $(OCAML_LIBS) $(XEN_OCAML_LIBS), $(OCAML_LIBS)) -OCAMLPACKS = $(if $(equal $(COMPILE_XENSTUFF), yes), $(OCAMLPACKS) $(XEN_OCAMLPACKS), $(OCAMLPACKS)) +OCAMLPACKS = $(if $(equal $(COMPILE_XENSTUFF), yes), $(XEN_OCAMLPACKS) $(OCAMLPACKS), $(OCAMLPACKS)) # ----------------------------------------------------------------------- # Build the server diff -r 0e735f437ea3 ocaml/xapi/create_misc.ml --- a/ocaml/xapi/create_misc.ml Fri Feb 12 16:07:50 2010 +0000 +++ b/ocaml/xapi/create_misc.ml Tue Feb 16 10:53:27 2010 +0000 @@ -433,12 +433,35 @@ Hashtbl.find tbl "cpu family" in let vendor, modelname, cpu_mhz, flags, stepping, model, family = get_cpuinfo () in - - let host = Helpers.get_localhost ~__context - and number = get_nb_cpus () - and speed = Int64.of_float (float_of_string cpu_mhz) - and model = Int64.of_string model - and family = Int64.of_string family in + let number = get_nb_cpus () in + let host = Helpers.get_localhost ~__context in + + (* Fill in Host.cpu_info *) + + let cpuid = Cpuid.read_cpu_info () in + let features = Cpuid.features_to_string cpuid.Cpuid.features in + let physical_features = Cpuid.features_to_string cpuid.Cpuid.physical_features in + let cpu = [ + "cpu_count", string_of_int number; + "vendor", vendor; + "speed", cpu_mhz; + "modelname", modelname; + "family", family; + "model", model; + "stepping", stepping; + "flags", flags; + "features", features; + "features_after_reboot", features; + "physical_features", physical_features; + "maskable", string_of_bool cpuid.Cpuid.maskable; + ] in + Db.Host.set_cpu_info ~__context ~self:host ~value:cpu; + + (* Recreate all Host_cpu objects *) + + let speed = Int64.of_float (float_of_string cpu_mhz) in + let model = Int64.of_string model in + let family = Int64.of_string family in (* Recreate all Host_cpu objects *) let host_cpus = List.filter (fun (_, s) -> s.API.host_cpu_host = host) (Db.Host_cpu.get_all_records ~__context) in @@ -453,4 +476,4 @@ ~utilisation:0. ~flags ~stepping ~model ~family ~features:"" ~other_config:[]) done - +