|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 13/15] xl: enable getting and setting soft
On Fri, 2013-11-22 at 19:58 +0100, Dario Faggioli wrote:
> Getting happens via `xl vcpu-list', which now looks like this:
>
> # xl vcpu-list -s
> Name ID VCPU CPU State Time(s) Affinity (Hard / Soft)
> Domain-0 0 0 11 -b- 5.4 8-15 / all
> Domain-0 0 1 11 -b- 1.0 8-15 / all
> Domain-0 0 14 13 -b- 1.4 8-15 / all
> Domain-0 0 15 8 -b- 1.6 8-15 / all
> vm-test 3 0 4 -b- 2.5 0-12 / 0-7
> vm-test 3 1 0 -b- 3.2 0-12 / 0-7
>
> Setting happens by adding a '-s'/'--soft' switch to `xl vcpu-pin'.
>
> xl manual page is updated accordingly.
>
> Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx>
> ---
> Changes from v3:
> * fix typos in doc, rephrased the help message and changed
> the title of the column for hard/soft affinity, as suggested
> during review.
>
> Changes from v2:
> * this patch folds what in v2 were patches 13 and 14;
> * `xl vcpu-pin' always shows both had and soft affinity,
> without the need of passing '-s'.
> ---
> docs/man/xl.pod.1 | 24 +++++++++++++++
> tools/libxl/xl_cmdimpl.c | 70
> +++++++++++++++++++++++++++------------------
> tools/libxl/xl_cmdtable.c | 3 +-
> 3 files changed, 67 insertions(+), 30 deletions(-)
>
> diff --git a/docs/man/xl.pod.1 b/docs/man/xl.pod.1
> index e7b9de2..b738ca2 100644
> --- a/docs/man/xl.pod.1
> +++ b/docs/man/xl.pod.1
> @@ -619,7 +619,7 @@ after B<vcpu-set>, go to B<SEE ALSO> section for
> information.
> Lists VCPU information for a specific domain. If no domain is
> specified, VCPU information for all domains will be provided.
>
> -=item B<vcpu-pin> I<domain-id> I<vcpu> I<cpus>
> +=item B<vcpu-pin> [I<OPTIONS>] I<domain-id> I<vcpu> I<cpus>
>
> Pins the VCPU to only run on the specific CPUs. The keyword
> B<all> can be used to apply the I<cpus> list to all VCPUs in the
> @@ -630,6 +630,28 @@ different run state is appropriate. Pinning can be used
> to restrict
> this, by ensuring certain VCPUs can only run on certain physical
> CPUs.
>
> +B<OPTIONS>
> +
> +=over 4
> +
> +=item B<-s>, B<--soft>
> +
> +The same as above, but affect I<soft affinity> rather than pinning
> +(also called I<hard affinity>).
> +
> +Normally, VCPUs just wander among the CPUs where it is allowed to
s/it is/they are/
I'd usually avoid terms such as "wander" in formal writing. Perhaps:
"A VCPUs is normally scheduled among a set of PCPUs."
> +run (either all the CPUs or the ones to which it is pinned, as said
> +for B<vcpu-list>). Soft affinity offers a means to specify one or
s/, as said for B<vcpu-list>// unless you think that adds something? I
can't see why vcpu-list is relevant though.
Or just "(subject to pinning)" would be a less wordy way to get the
message across.
> +more I<preferred> CPUs. Basically, among the ones where it can run,
> +the VCPU the VCPU will greatly prefer to execute on one of these
> +CPUs, whenever that is possible.
"...one or more I<preferred> CPUs where the VCPU will prefer to run
whenever possible".
> +
> +Notice that, in order for soft affinity to actually work, it needs
> +special support in the scheduler. Right now, only credit1 provides
> +that.
> +
> +=back
> +
> =item B<vm-list>
>
> Prints information about guests. This list excludes information about
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index 17fffdd..d6fda26 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -4630,23 +4649,29 @@ static int vcpupin(uint32_t domid, const char *vcpu,
> char *cpu)
> }
>
> if (vcpuid != -1) {
> - if (libxl_set_vcpuaffinity(ctx, domid, vcpuid, &cpumap, NULL)) {
> - fprintf(stderr, "Could not set affinity for vcpu `%u'.\n",
> vcpuid);
> + if (!soft_affinity &&
> + libxl_set_vcpuaffinity(ctx, domid, vcpuid, &cpumap, NULL)) {
> + fprintf(stderr, "Could not set hard affinity for vcpu `%u'.\n",
> + vcpuid);
> + goto out;
> + } else if (soft_affinity &&
> + libxl_set_vcpuaffinity(ctx, domid, vcpuid, NULL,
> &cpumap)) {
> + fprintf(stderr, "Could not set soft affinity for vcpu `%u'.\n",
> + vcpuid);
I think I would have written this as:
libxl_bitmap *soft = NULL, *hard = NULL;
if (soft_affinity)
soft = &cpumap
else
hard = &cpumap
The in both of the branches "if (vcpu != -1)":
libxl_set_vcpuaffinity(..., hard, soft)
error handling
I think you can omit the soft/hard from the log message other logging
and/or the fact that they know what they asked for will cover the
distinction. If you really wanted the const char *what = soft_affinity ?
"soft" : "hard" to use.
Is there no option to set both?
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |