On Wed, Nov 21, 2012 at 12:27:28PM +0400, Glauber Costa wrote:
On 11/20/2012 10:23 PM, David Rientjes wrote:
Anton can correct me if I'm wrong, but I certainly don't think this is where mempressure is headed: I don't think any accounting needs to be done
Yup, I'd rather not do any accounting, at least not in bytes.
and, if it is, it's a design issue that should be addressed now rather than later. I believe notifications should occur on current's mempressure cgroup depending on its level of reclaim: nobody cares if your memcg has a limit of 64GB when you only have 32GB of RAM, we'll want the notification.
My main concern is that to trigger those notifications, one would have to first determine whether or not the particular group of tasks is under pressure.
As far as I understand, the notifications will be triggered by a process that tries to allocate memory. So, effectively that would be a per-process pressure.
So, if one process in a group is suffering, we notify that "a process in a group is under pressure", and the notification goes to a cgroup listener
And to do that, we need to somehow know how much memory we are using, and how much we are reclaiming, etc. On a system-wide level, we have this information. On a grouplevel, this is already accounted by memcg.
In fact, the current code already seems to rely on memcg:
- vmpressure(sc->target_mem_cgroup,
sc->nr_scanned - nr_scanned, nr_reclaimed);
Well, I'm yet unsure about the details, but I guess in "mempressure" cgroup approach, this will be derived from the current->, i.e. a task.
But note that we won't report pressure to a memcg cgroup, we will notify only mempressure cgroup. But a process can be in both of them simultaneously. In the code, the mempressure and memcg will not depend on each other.
Now, let's start simple: Assume we will have a different cgroup. We want per-group pressure notifications for that group. How would you determine that the specific group is under pressure?
If a process that tries to allocate memory & causes reclaim is a part of the cgroup, then cgroup has a pressure.
At least that's very brief understanding of the idea, details to be investigated... But I welcome David to comment whether I got everything correctly. :)
Thanks, Anton.