From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758801Ab0JFNcv (ORCPT ); Wed, 6 Oct 2010 09:32:51 -0400 Received: from e31.co.us.ibm.com ([32.97.110.149]:44824 "EHLO e31.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757376Ab0JFNcu (ORCPT ); Wed, 6 Oct 2010 09:32:50 -0400 Date: Wed, 6 Oct 2010 19:02:44 +0530 From: Balbir Singh To: Greg Thelen Cc: Andrew Morton , linux-kernel@vger.kernel.org, linux-mm@kvack.org, containers@lists.osdl.org, Andrea Righi , KAMEZAWA Hiroyuki , Daisuke Nishimura Subject: Re: [PATCH 08/10] memcg: add cgroupfs interface to memcg dirty limits Message-ID: <20101006133244.GF4195@balbir.in.ibm.com> Reply-To: balbir@linux.vnet.ibm.com References: <1286175485-30643-1-git-send-email-gthelen@google.com> <1286175485-30643-9-git-send-email-gthelen@google.com> <20101006133024.GE4195@balbir.in.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <20101006133024.GE4195@balbir.in.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org * Balbir Singh [2010-10-06 19:00:24]: > * Greg Thelen [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 > > Signed-off-by: Greg Thelen > > --- > > 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 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 --- 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