Messages in this thread | | | Date | Wed, 18 Nov 2015 14:38:22 -0500 | From | Luiz Capitulino <> | Subject | Re: [RFD] CAT user space interface revisited |
| |
On Wed, 18 Nov 2015 19:25:03 +0100 (CET) Thomas Gleixner <tglx@linutronix.de> wrote:
> We really need to make this as configurable as possible from userspace > without imposing random restrictions to it. I played around with it on > my new intel toy and the restriction to 16 COS ids (that's 8 with CDP > enabled) makes it really useless if we force the ids to have the same > meaning on all sockets and restrict it to per task partitioning. > > Even if next generation systems will have more COS ids available, > there are not going to be enough to have a system wide consistent > view unless we have COS ids > nr_cpus. > > Aside of that I don't think that a system wide consistent view is > useful at all.
This is a great writeup! I agree with everything you said.
> So now to the interface part. Unfortunately we need to expose this > very close to the hardware implementation as there are really no > abstractions which allow us to express the various bitmap > combinations. Any abstraction I tried to come up with renders that > thing completely useless. > > I was not able to identify any existing infrastructure where this > really fits in. I chose a directory/file based representation. We > certainly could do the same with a syscall, but that's just an > implementation detail. > > At top level: > > xxxxxxx/cat/max_cosids <- Assume that all CPUs are the same > xxxxxxx/cat/max_maskbits <- Assume that all CPUs are the same > xxxxxxx/cat/cdp_enable <- Depends on CDP availability > > Per socket data: > > xxxxxxx/cat/socket-0/ > ... > xxxxxxx/cat/socket-N/l3_size > xxxxxxx/cat/socket-N/hwsharedbits > > Per socket mask data: > > xxxxxxx/cat/socket-N/cos-id-0/ > ... > xxxxxxx/cat/socket-N/cos-id-N/inuse > /cat_mask > /cdp_mask <- Data mask if CDP enabled > > Per cpu default cos id for the cpus on that socket: > > xxxxxxx/cat/socket-N/cpu-x/default_cosid > ... > xxxxxxx/cat/socket-N/cpu-N/default_cosid > > The above allows a simple cpu based partitioning. All tasks which do > not have a cache partition assigned on a particular socket use the > default one of the cpu they are running on. > > Now for the task(s) partitioning: > > xxxxxxx/cat/partitions/ > > Under that directory one can create partitions > > xxxxxxx/cat/partitions/p1/tasks > /socket-0/cosid > ... > /socket-n/cosid > > The default value for the per socket cosid is COSID_DEFAULT, which > causes the task(s) to use the per cpu default id.
I hope I've got all the details right, but this proposal looks awesome. There's more people who seem to agree with something like this.
Btw, I think it should be possible to implement this with cgroups. But I too don't care that much on cgroups vs. syscalls.
| |