[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] tools/python: expose xc_getcpuinfo()
This API can be used to get per physical CPU utilization. Testing: # python >>> import xen.lowlevel.xc >>> xc = xen.lowlevel.xc.xc() >>> xc.getcpuinfo() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: Required argument 'max_cpus' (pos 1) not found >>> xc.getcpuinfo(4) [{'idletime': 109322086128854}, {'idletime': 109336447648802}, {'idletime': 109069270544960}, {'idletime': 109065612611363}] >>> xc.getcpuinfo(100) [{'idletime': 109639015806078}, {'idletime': 109654551195681}, {'idletime': 109382107891193}, {'idletime': 109382057541119}] >>> xc.getcpuinfo(1) [{'idletime': 109682068418798}] >>> xc.getcpuinfo(2) [{'idletime': 109711311201330}, {'idletime': 109728458214729}] >>> xc.getcpuinfo(max_cpus=4) [{'idletime': 109747116214638}, {'idletime': 109764982453261}, {'idletime': 109491373228931}, {'idletime': 109489858724432}] Signed-off-by: Zhigang Wang <zhigang.x.wang@xxxxxxxxxx> --- tools/python/xen/lowlevel/xc/xc.c | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c index 737bdac..cb34446 100644 --- a/tools/python/xen/lowlevel/xc/xc.c +++ b/tools/python/xen/lowlevel/xc/xc.c @@ -1183,6 +1183,40 @@ static PyObject *pyxc_physinfo(XcObject *self) "virt_caps", virt_caps); } +static PyObject *pyxc_getcpuinfo(XcObject *self, PyObject *args, PyObject *kwds) +{ + xc_cpuinfo_t *cpuinfo, *cpuinfo_ptr; + PyObject *cpuinfo_list_obj, *cpuinfo_obj; + int max_cpus, nr_cpus, ret, i; + static char *kwd_list[] = { "max_cpus", NULL }; + static char kwd_type[] = "i"; + + if(!PyArg_ParseTupleAndKeywords(args, kwds, kwd_type, kwd_list, &max_cpus)) + return NULL; + + cpuinfo = malloc(sizeof(xc_cpuinfo_t) * max_cpus); + if (!cpuinfo) + return NULL; + + ret = xc_getcpuinfo(self->xc_handle, max_cpus, cpuinfo, &nr_cpus); + if (ret != 0) { + free(cpuinfo); + return pyxc_error_to_exception(self->xc_handle); + } + + cpuinfo_list_obj = PyList_New(0); + cpuinfo_ptr = cpuinfo; + for (i = 0; i < nr_cpus; i++) { + cpuinfo_obj = Py_BuildValue("{s:k}", "idletime", cpuinfo_ptr->idletime); + PyList_Append(cpuinfo_list_obj, cpuinfo_obj); + cpuinfo_ptr++; + } + + free(cpuinfo); + + return cpuinfo_list_obj; +} + static PyObject *pyxc_topologyinfo(XcObject *self) { #define MAX_CPU_INDEX 255 @@ -2611,6 +2645,13 @@ static PyMethodDef pyxc_methods[] = { "Returns [dict]: information about the hardware" " [None]: on failure.\n" }, + { "getcpuinfo", + (PyCFunction)pyxc_getcpuinfo, + METH_VARARGS | METH_KEYWORDS, "\n" + "Get information about physical CPUs\n" + "Returns [list]: information about physical CPUs" + " [None]: on failure.\n" }, + { "topologyinfo", (PyCFunction)pyxc_topologyinfo, METH_NOARGS, "\n" -- 1.8.3.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |