Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Apr 2014 09:21:48 -0700
From:      Neel Natu <neelnatu@gmail.com>
To:        Roman Bogorodskiy <novel@freebsd.org>
Cc:        "freebsd-virtualization@freebsd.org" <freebsd-virtualization@freebsd.org>
Subject:   Re: [PATCH] Flexible vcpu pinning configuration
Message-ID:  <CAFgRE9FUHEXbnkTSVmpyOP7EMzQh7QEFeNJikVWw6xHRWbvQSw@mail.gmail.com>
In-Reply-To: <20140427104511.GA7804@kloomba>
References:  <20140427104511.GA7804@kloomba>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Roman,

On Sun, Apr 27, 2014 at 3:45 AM, Roman Bogorodskiy <novel@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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFgRE9FUHEXbnkTSVmpyOP7EMzQh7QEFeNJikVWw6xHRWbvQSw>