* Balbir Singh <bal...@linux.vnet.ibm.com> [2010-10-06 19:00:24]:

> * Greg Thelen <gthe...@google.com> [2010-10-03 23:58:03]:
> 
> > Add cgroupfs interface to memcg dirty page limits:
> >   Direct write-out is controlled with:
> >   - memory.dirty_ratio
> >   - memory.dirty_bytes
> > 
> >   Background write-out is controlled with:
> >   - memory.dirty_background_ratio
> >   - memory.dirty_background_bytes
> > 
> > Signed-off-by: Andrea Righi <ari...@develer.com>
> > Signed-off-by: Greg Thelen <gthe...@google.com>
> > ---
> 
> The added interface is not uniform with the rest of our write
> operations. Does the patch below help? I did a quick compile and run
> test.

here is a version with my signed-off-by


Make writes to memcg dirty tunables more uniform

From: Balbir Singh <bal...@linux.vnet.ibm.com>

We today support 'M', 'm', 'k', 'K', 'g' and 'G' suffixes for
general memcg writes. This patch provides the same functionality
for dirty tunables.

Signed-off-by: Balbir Singh <bal...@linux.vnet.ibm.com>
---

 mm/memcontrol.c |   47 +++++++++++++++++++++++++++++++++++++----------
 1 files changed, 37 insertions(+), 10 deletions(-)


diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 2d45a0a..116fecd 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -4323,6 +4323,41 @@ static u64 mem_cgroup_dirty_read(struct cgroup *cgrp, 
struct cftype *cft)
 }
 
 static int
+mem_cgroup_dirty_write_string(struct cgroup *cgrp, struct cftype *cft,
+                               const char *buffer)
+{
+       struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp);
+       int type = cft->private;
+       int ret = -EINVAL;
+       unsigned long long val;
+
+       if (cgrp->parent == NULL)
+               return ret;
+
+       switch (type) {
+       case MEM_CGROUP_DIRTY_BYTES:
+               /* This function does all necessary parse...reuse it */
+               ret = res_counter_memparse_write_strategy(buffer, &val);
+               if (ret)
+                       break;
+               memcg->dirty_param.dirty_bytes = val;
+               memcg->dirty_param.dirty_ratio  = 0;
+               break;
+       case MEM_CGROUP_DIRTY_BACKGROUND_BYTES:
+               ret = res_counter_memparse_write_strategy(buffer, &val);
+               if (ret)
+                       break;
+               memcg->dirty_param.dirty_background_bytes = val;
+               memcg->dirty_param.dirty_background_ratio = 0;
+               break;
+       default:
+               BUG();
+               break;
+       }
+       return ret;
+}
+
+static int
 mem_cgroup_dirty_write(struct cgroup *cgrp, struct cftype *cft, u64 val)
 {
        struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp);
@@ -4338,18 +4373,10 @@ mem_cgroup_dirty_write(struct cgroup *cgrp, struct 
cftype *cft, u64 val)
                memcg->dirty_param.dirty_ratio = val;
                memcg->dirty_param.dirty_bytes = 0;
                break;
-       case MEM_CGROUP_DIRTY_BYTES:
-               memcg->dirty_param.dirty_bytes = val;
-               memcg->dirty_param.dirty_ratio  = 0;
-               break;
        case MEM_CGROUP_DIRTY_BACKGROUND_RATIO:
                memcg->dirty_param.dirty_background_ratio = val;
                memcg->dirty_param.dirty_background_bytes = 0;
                break;
-       case MEM_CGROUP_DIRTY_BACKGROUND_BYTES:
-               memcg->dirty_param.dirty_background_bytes = val;
-               memcg->dirty_param.dirty_background_ratio = 0;
-               break;
        default:
                BUG();
                break;
@@ -4429,7 +4456,7 @@ static struct cftype mem_cgroup_files[] = {
        {
                .name = "dirty_bytes",
                .read_u64 = mem_cgroup_dirty_read,
-               .write_u64 = mem_cgroup_dirty_write,
+               .write_string = mem_cgroup_dirty_write_string,
                .private = MEM_CGROUP_DIRTY_BYTES,
        },
        {
@@ -4441,7 +4468,7 @@ static struct cftype mem_cgroup_files[] = {
        {
                .name = "dirty_background_bytes",
                .read_u64 = mem_cgroup_dirty_read,
-               .write_u64 = mem_cgroup_dirty_write,
+               .write_string = mem_cgroup_dirty_write_string,
                .private = MEM_CGROUP_DIRTY_BACKGROUND_BYTES,
        },
 };

-- 
        Three Cheers,
        Balbir
_______________________________________________
Containers mailing list
contain...@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
Devel@openvz.org
https://openvz.org/mailman/listinfo/devel

Reply via email to