Jason Wang
2020-Dec-07 04:27 UTC
[RFC PATCH 5/8] vhost: allow userspace to bind vqs to CPUs
On 2020/12/5 ??12:32, Mike Christie wrote:> On 12/4/20 2:09 AM, Jason Wang wrote: >> >> On 2020/12/4 ??3:56, Mike Christie wrote: >>> +static long vhost_vring_set_cpu(struct vhost_dev *d, struct >>> vhost_virtqueue *vq, >>> +??????????????? void __user *argp) >>> +{ >>> +??? struct vhost_vring_state s; >>> +??? int ret = 0; >>> + >>> +??? if (vq->private_data) >>> +??????? return -EBUSY; >>> + >>> +??? if (copy_from_user(&s, argp, sizeof s)) >>> +??????? return -EFAULT; >>> + >>> +??? if (s.num == -1) { >>> +??????? vq->cpu = s.num; >>> +??????? return 0; >>> +??? } >>> + >>> +??? if (s.num >= nr_cpu_ids) >>> +??????? return -EINVAL; >>> + >>> +??? if (!d->ops || !d->ops->get_workqueue) >>> +??????? return -EINVAL; >>> + >>> +??? if (!d->wq) >>> +??????? d->wq = d->ops->get_workqueue(); >>> +??? if (!d->wq) >>> +??????? return -EINVAL; >>> + >>> +??? vq->cpu = s.num; >>> +??? return ret; >>> +} >> >> >> So one question here. Who is in charge of doing this set_cpu? Note >> that?sched_setaffinity(2) requires CAP_SYS_NICE to work, so I wonder >> whether or not it's legal for unprivileged Qemu to do this. > > > I was having qemu do it when it's setting up the vqs since it had the > info there already. > > Is it normally the tool that makes calls into qemu that does the > operations that require CAP_SYS_NICE?My understanding is that it only matter scheduling. And this patch wants to change the affinity which should check that capability.> If so, then I see the interface needs to be changed.Actually, if I read this patch correctly it requires e.g qemu to make the decision instead of the management layer. This may bring some troubles to for e.g the libvirt emulatorpin[1] implementation. Thanks [1] https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_tuning_and_optimization_guide/sect-virtualization_tuning_optimization_guide-numa-numa_and_libvirt