Dan Smith wrote:
DB> The trouble is then libvirt would be dictating policy to the
host
DB> admin, because once you mount a particular controller, you can't
DB> change the wayu its mounted. So if libvirt mounted each controller
DB> separately, then the admin couldn't have a mount with multiple
DB> controllers active, and vica-verca.
Oh, I see. I had left that out of my quick test. I had assumed that
it would behave as you would expect.
DB> The kernel cgroups interface really sucks in this regard :-(
I was going to go with "surprisingly unideal" ...but yeah.
The interface, when it was designed was designed to allow flexibility of
separating controllers. One might need different resources for tasks, they
should not be forced to share the same set of controllers. Cgroups has the
notion of busy (as in no new groups are created underneath), so it needs to be
not busy for changing the way it is mounted.
This has made our life while working on libcgroup very hard. The other thing
that gets hard is controller interplay and rules. CPUsets for example has rules
about not allowing tasks to attach without adding cpus and mems and other rules
about exclusivity and having certain files just in the root.
DB> At the same time having the controllers mounted is mandatory for
DB> libvirt to work and asking the admin to set things up manually
DB> also sucks. So perhaps we'll need to mount them automatically, but
DB> make this behaviuour configurable in some way, so admin can
DB> override it
Perhaps we can:
- Have a list of controllers we use (memory and devices so far)
- Create each group in all mounts required to satisfy our necessary
controllers
- Select the appropriate mount when setting a cont.key value
I am not sure how libvirt provides thread safety, but I did not see any explicit
coding for that?
It will muck things up a bit, but I think it might be doable.
I would really recommend looking at libcgroup in the long run and using it.
--
Balbir