|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 12/16] libxl: get and set soft affinity
Dario Faggioli writes ("[PATCH v2 12/16] libxl: get and set soft affinity"):
> which basically means making space for a new cpumap in both
> vcpu_info (for getting soft affinity) and build_info (for setting
> it), along with providing the get/set functions, and wiring them
> to the proper xc calls. Interface is as follows:
>
> * libxl_{get,set}_vcpuaffinity() deals with hard affinity, as it
> always has happened;
> * libxl_get,set}_vcpuaffinity_soft() deals with soft affinity.
In practice, doesn't this API plus these warnings mean that a
toolstack which wants to migrate a domain to a new set of vcpus (or,
worse, a new cpupool) will find it difficult to avoid warnings from
libxl ?
Because the toolstack will want to change both the hard and soft
affinities to new maps, perhaps entirely disjoint from the old ones,
but can only do one at a time. So the system will definitely go
through "silly" states.
This would be solved with an API that permitted setting both sets of
affinities in a single call, even if the underlying libxc and
hypercalls are separate, because libxl would do the check only on the
overall final state.
So perhaps we should have a singe function that can change the
cpupool, hard affinity, and soft affinity, all at once ?
What if the application makes a call to change the cpupool, without
touching the affinities ? Should the affinities be reset
automatically ?
> diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile
> index cf214bb..b7f39bd 100644
> --- a/tools/libxl/Makefile
> +++ b/tools/libxl/Makefile
> @@ -5,6 +5,7 @@
> XEN_ROOT = $(CURDIR)/../..
> include $(XEN_ROOT)/tools/Rules.mk
>
> +#MAJOR = 4.4
> MAJOR = 4.3
> MINOR = 0
Commented out ?
> + if (libxl_cpu_bitmap_alloc(ctx, &ptr->cpumap_soft, 0)) {
> + LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "allocating
> cpumap_soft");
> + return NULL;
> + }
I went and looked at the error handling. Normally in libxl allocators
can't fail but this one wants to do a hypercall to look up the max
cpus.
But, pulling on the thread, I wonder if it would be better to do this
error logging in libxl_cpu_bitmap_alloc rather than all the call
sites. (If we did that in principle we should introduce a new #define
which allows applications to #ifdef out their own logging for this,
but in practice the double-logging isn't likely to be a problem.)
And looking at libxl_cpu_bitmap_alloc, it calls libxl_get_max_cpus and
does something very odd with the return value: libxl_get_max_nodes
ought to return a positive number or a libxl error code.
So I went to look at libxl_get_max_nodes and it just returns whatever
it got from libxc, which is definitely wrong!
Would you mind fixing this as part of this series ?
Thanks,
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |