[PATCH] Flexible vcpu pinning configuration
Neel Natu
neelnatu at gmail.com
Tue Apr 29 16:21:49 UTC 2014
Hi Roman,
On Sun, Apr 27, 2014 at 3:45 AM, Roman Bogorodskiy <novel at freebsd.org> wrote:
> I've created an initial version of the patch which allows more flexible
> vcpu pinning configuration.
>
> Current schema is:
>
> bhyve -p N
>
> pins vcpu i to hostcpu N + i.
>
> The propsed extension is:
>
> bhyve -p N:M .... -p 0:1 -p 3:5
>
> which pins vcpu N to host pcpu M. Option needs to be specified
> individually for each vcpu.
>
> So it works like that for me:
>
> sudo /usr/sbin/bhyve -p 0:0 -p 1:3 -c 2 ...
>
> # sudo cpuset -g -t 100262
> tid 100262 mask: 0
> # sudo cpuset -g -t 100264
> tid 100264 mask: 3
>
> PS I used cpumat_t* array to store these values instead of int, because
> if the idea is OK, I'll extend it to support ranges like e.g. cpuset(1)
> supports, e.g.: "1:2-5".
>
> The questions are:
>
> - Is it OK to chance '-p' arg syntax or it's better to introduce a new
> one?
>
I think we can reuse the "-p" option unless anybody objects vociferously.
> - Is the syntax OK (currently: 'vcpu:pcpu', later
> 'vcpu:pcpuN-pcpuM,pcpuX")?
Yup, I think that works fine.
The patch looks good in general but I have a few comments:
- Scope of 'vcpupmap[]' should be restricted to 'static'.
- usage() and man page need to be updated.
- pincpu_parse():
The option parsing can be made much easier by using:
if (sscanf(str, "%d:%d", &vcpu, &pcpu) == 2) {
/* success */
} else {
return (-1);
}
If the same vcpu is specified multiple times then we should
malloc(sizeof(cpuset_t)) only the first time:
if (vcpumap[vcpu] != NULL)
mask = vcpumap[vcpu];
else
mask = malloc(sizeof(cpuset_t));
We need to range-check 'vcpu' before using it as an index into the
'vcpumap[]' array.
best
Neel
>
> Roman Bogorodskiy
More information about the freebsd-virtualization
mailing list