OpenVZ Forum - RDF feed
type: channel
items: [-mm PATCH 0/9] Memory controller introduction (v6)
items: [-mm PATCH 1/9] Memory controller resource counters (v6)
items: [-mm PATCH 2/9] Memory controller containers setup (v6)
items: [-mm PATCH 3/9] Memory controller accounting setup (v6)
items: [-mm PATCH 4/9] Memory controller memory accounting (v6)
items: [-mm PATCH 5/9] Memory controller task migration (v6)
items: [-mm PATCH 6/9] Memory controller add per container LRU and reclaim (v6)
items: [-mm PATCH 7/9] Memory controller OOM handling (v6)
items: [-mm PATCH 8/9] Memory controller add switch to control what type of pages to limit (v6)
items: [-mm PATCH 9/9] Memory controller make page_referenced() container aware (v6)
items: Re: [-mm PATCH 0/9] Memory controller introduction (v6)
items: Re: [-mm PATCH 1/9] Memory controller resource counters (v6)

[-mm PATCH 0/9] Memory controller introduction (v6)
type: item
description: Here's version 6 of the memory controller (against 2.6.23-rc2-mm2). The tests that were run has been included in the _Test Results section_ below. Changelog since version 5 1. Ported to 2.6.23-rc2-mm2 2. Added a css_put() in the case of race between allocation of page_containers (YAMAMOTO Takashi) Changelog since version 4 1. Renamed meta_page to page_container (Nick Piggin) 2. Moved locking from page flags to last bit of the page_container pointer (Nick Piggin) 3. Fixed a rare race in mem_container_isolate_pages (YAMAMOTO Takashi) Changelog since version 3 1. Ported to v11 of the containers patchset (2.6.23-rc1-mm1). Paul Menage helped immensely with a detailed review of v3 2. Reclaim is retried to allow reclaim of pages coming in as a result of mapped pages reclaim (swap cache growing as a result of RSS reclaim) 3. page_referenced() is now container aware. During container reclaim, references from other containers do not prevent a page from being reclaimed from a non-referencing container 4. Fixed a possible race condition spotted by YAMAMOTO Takashi Changelog since version 2 1. Improved error handling in mm/memory.c (spotted by YAMAMOTO Takashi) 2. Test results included 3. try_to_free_mem_container_pages() bug fix (sc->may_writepage is now set to !laptop_mode) Changelog since version 1 1. Fixed some compile time errors (in mm/migrate.c from Vaidyanathan S) 2. Fixed a panic seen when LIST_DEBUG is enabled 3. Added a mechanism to control whether we track page cache or both page cache and mapped pages (as requested by Pavel) 4. Dave Hansen provided detail review comments on the code. This patchset implements another version of the memory controller. These patches have been through a big churn, the first set of patches were posted last year and earlier this year at http://lkml.org/lkml/2007/2/19/10 This patchset draws from the patches listed above and from some of the contents of the patches posted by Vaidyanathan for page cache control. http://lkml.org/lkml/2007/6/2…
creator: Balbir Singh
date: 2007-08-17T08:42:28-00:00

[-mm PATCH 1/9] Memory controller resource counters (v6)
type: item
description: From: Pavel Emelianov <xemul@openvz.org> Introduce generic structures and routines for resource accounting. Each resource accounting container is supposed to aggregate it, container_subsystem_state and its resource-specific members within. Signed-off-by: Pavel Emelianov <xemul@openvz.org> Signed-off-by: <balbir@linux.vnet.ibm.com> --- include/linux/res_counter.h | 102 +++++++++++++++++++++++++++++++++++++ init/Kconfig | 7 ++ kernel/Makefile | 1 kernel/res_counter.c | 120 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 230 insertions(+) diff -puN /dev/null include/linux/res_counter.h --- /dev/null 2007-06-01 20:42:04.000000000 +0530 +++ linux-2.6.23-rc2-mm2-balbir/include/linux/res_counter.h 2007-08-17 13:14:18.000000000 +0530 @@ -0,0 +1,102 @@ +#ifndef __RES_COUNTER_H__ +#define __RES_COUNTER_H__ + +/* + * Resource Counters + * Contain common data types and routines for resource accounting + * + * Copyright 2007 OpenVZ SWsoft Inc + * + * Author: Pavel Emelianov <xemul@openvz.org> + * + */ + +#include <linux/container.h> + +/* + * The core object. the container that wishes to account for some + * resource may include this counter into its structures and use + * the helpers described beyond + */ + +struct res_counter { + /* + * the current resource consumption level + */ + unsigned long usage; + /* + * the limit that usage cannot exceed + */ + unsigned long limit; + /* + * the number of unsuccessful attempts to consume the resource + */ + unsigned long failcnt; + /* + * the lock to protect all of the above. + * the routines below consider this to be IRQ-safe + */ + spinlock_t lock; +}; + +/* + * Helpers to interact with userspace + * res_counter_read/_write - put/get the specified fields from the + * res_counter struct to/from the user + * + * @counter: the counter in question + * @member: the field to work with (see RES_xxx below) + * @buf: the buffer to opeate on,... + * @nbytes: its size... + * @pos: and the offset. + */ + +ssize_t res_counter_read(st…
creator: Balbir Singh
date: 2007-08-17T08:42:38-00:00

[-mm PATCH 2/9] Memory controller containers setup (v6)
type: item
description: Changelong 1. use depends instead of select in init/Kconfig 2. Port to v11 3. Clean up the usage of names (container files) for v11 Setup the memory container and add basic hooks and controls to integrate and work with the container. Signed-off-by: <balbir@linux.vnet.ibm.com> --- include/linux/container_subsys.h | 6 + include/linux/memcontrol.h | 21 ++++++ init/Kconfig | 7 ++ mm/Makefile | 1 mm/memcontrol.c | 127 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 162 insertions(+) diff -puN include/linux/container_subsys.h~mem-control-setup include/linux/container_subsys.h --- linux-2.6.23-rc2-mm2/include/linux/container_subsys.h~mem-control-setup 2007-08-17 13:14:19.000000000 +0530 +++ linux-2.6.23-rc2-mm2-balbir/include/linux/container_subsys.h 2007-08-17 13:14:19.000000000 +0530 @@ -30,3 +30,9 @@ SUBSYS(ns) #endif /* */ + +#ifdef CONFIG_CONTAINER_MEM_CONT +SUBSYS(mem_container) +#endif + +/* */ diff -puN /dev/null include/linux/memcontrol.h --- /dev/null 2007-06-01 20:42:04.000000000 +0530 +++ linux-2.6.23-rc2-mm2-balbir/include/linux/memcontrol.h 2007-08-17 13:14:19.000000000 +0530 @@ -0,0 +1,21 @@ +/* memcontrol.h - Memory Controller + * + * Copyright IBM Corporation, 2007 + * Author Balbir Singh <balbir@linux.vnet.ibm.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _LINUX_MEMCONTROL_H +#define _LINUX_MEMCONTROL_H + +#endif /* _LINUX_MEMCONTROL_H */ + diff -puN init/Kconfig~mem-control-setup init/Kconfig --- linux-2.6.23-rc2-mm2/init/Kconfig~mem-control-setup 2007-08-17 13:14:19…
creator: Balbir Singh
date: 2007-08-17T08:42:48-00:00

[-mm PATCH 3/9] Memory controller accounting setup (v6)
type: item
description: From: Pavel Emelianov <xemul@openvz.org> Changelog for v5 1. Remove inclusion of memcontrol.h from mm_types.h Changelog As per Paul's review comments 1. Drop css_get() for the root memory container 2. Use mem_container_from_task() as an optimization instead of using mem_container_from_cont() along with task_container. Basic setup routines, the mm_struct has a pointer to the container that it belongs to and the the page has a page_container associated with it. Signed-off-by: Pavel Emelianov <xemul@openvz.org> Signed-off-by: <balbir@linux.vnet.ibm.com> --- include/linux/memcontrol.h | 36 ++++++++++++++++++++++++++++ include/linux/mm_types.h | 6 ++++ include/linux/sched.h | 1 kernel/fork.c | 11 ++++++-- mm/memcontrol.c | 57 +++++++++++++++++++++++++++++++++++++++++---- 5 files changed, 104 insertions(+), 7 deletions(-) diff -puN include/linux/memcontrol.h~mem-control-accounting-setup include/linux/memcontrol.h --- linux-2.6.23-rc2-mm2/include/linux/memcontrol.h~mem-control-accounting-setup 2007-08-17 13:14:19.000000000 +0530 +++ linux-2.6.23-rc2-mm2-balbir/include/linux/memcontrol.h 2007-08-17 13:14:19.000000000 +0530 @@ -3,6 +3,9 @@ * Copyright IBM Corporation, 2007 * Author Balbir Singh <balbir@linux.vnet.ibm.com> * + * Copyright 2007 OpenVZ SWsoft Inc + * Author: Pavel Emelianov <xemul@openvz.org> + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -17,5 +20,38 @@ #ifndef _LINUX_MEMCONTROL_H #define _LINUX_MEMCONTROL_H +struct mem_container; +struct page_container; + +#ifdef CONFIG_CONTAINER_MEM_CONT + +extern void mm_init_container(struct mm_struct *mm, struct task_struct *p); +extern void mm_free_container(struct mm_struct *mm); +extern void page_assign_page_container(struct page *page, + struct page_container *pc); +extern struct page_container *page_get_page_container(struct page *page); + +#else /* …
creator: Balbir Singh
date: 2007-08-17T08:42:59-00:00

[-mm PATCH 4/9] Memory controller memory accounting (v6)
type: item
description: Changelog for v6 1. Do a css_put() in the case of a race in allocating page containers (YAMAMOTO Takashi) Changelog for v5 1. Rename meta_page to page_container 2. Remove PG_metapage and use the lower bit of the page_container pointer for locking Changelog for v3 1. Fix a probable leak with meta_page's (pointed out by Paul Menage) 2. Introduce a wrapper around mem_container_uncharge for uncharging pages mem_container_uncharge_page() Changelog 1. Improved error handling, uncharge on errors and check to see if we are leaking pages (review by YAMAMOTO Takashi) Add the accounting hooks. The accounting is carried out for RSS and Page Cache (unmapped) pages. There is now a common limit and accounting for both. The RSS accounting is accounted at page_add_*_rmap() and page_remove_rmap() time. Page cache is accounted at add_to_page_cache(), __delete_from_page_cache(). Swap cache is also accounted for. Each page's page_container is protected with the last bit of the page_container pointer, this makes handling of race conditions involving simultaneous mappings of a page easier. A reference count is kept in the page_container to deal with cases where a page might be unmapped from the RSS of all tasks, but still lives in the page cache. Credits go to Vaidyanathan Srinivasan for helping with reference counting work of the page container. Almost all of the page cache accounting code has help from Vaidyanathan Srinivasan. Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> Signed-off-by: <balbir@linux.vnet.ibm.com> --- include/linux/memcontrol.h | 20 +++++ mm/filemap.c | 12 ++- mm/memcontrol.c | 166 ++++++++++++++++++++++++++++++++++++++++++++- mm/memory.c | 43 ++++++++++- mm/migrate.c | 6 + mm/page_alloc.c | 3 mm/rmap.c | 17 ++++ mm/swap_state.c | 12 ++- mm/swapfile.c | 41 ++++++----- 9 files changed, 293 insertions(+), 27 deletions(-) diff -puN include/linux/memcontrol.h~mem-control-accounting include/linux/memcontrol.h --- linux-2.6.23-rc2-mm2/include/linux/memcon…
creator: Balbir Singh
date: 2007-08-17T08:43:09-00:00

[-mm PATCH 5/9] Memory controller task migration (v6)
type: item
description: Allow tasks to migrate from one container to the other. We migrate mm_struct's mem_container only when the thread group id migrates. Signed-off-by: <balbir@linux.vnet.ibm.com> --- mm/memcontrol.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff -puN mm/memcontrol.c~mem-control-task-migration mm/memcontrol.c --- linux-2.6.23-rc2-mm2/mm/memcontrol.c~mem-control-task-migration 2007-08-17 13:14:19.000000000 +0530 +++ linux-2.6.23-rc2-mm2-balbir/mm/memcontrol.c 2007-08-17 13:14:19.000000000 +0530 @@ -326,11 +326,46 @@ static int mem_container_populate(struct ARRAY_SIZE(mem_container_files)); } +static void mem_container_move_task(struct container_subsys *ss, + struct container *cont, + struct container *old_cont, + struct task_struct *p) +{ + struct mm_struct *mm; + struct mem_container *mem, *old_mem; + + mm = get_task_mm(p); + if (mm == NULL) + return; + + mem = mem_container_from_cont(cont); + old_mem = mem_container_from_cont(old_cont); + + if (mem == old_mem) + goto out; + + /* + * Only thread group leaders are allowed to migrate, the mm_struct is + * in effect owned by the leader + */ + if (p->tgid != p->pid) + goto out; + + css_get(&mem->css); + rcu_assign_pointer(mm->mem_container, mem); + css_put(&old_mem->css); + +out: + mmput(mm); + return; +} + struct container_subsys mem_container_subsys = { .name = "memory", .subsys_id = mem_container_subsys_id, .create = mem_container_create, .destroy = mem_container_destroy, .populate = mem_container_populate, + .attach = mem_container_move_task, .early_init = 1, }; _ -- Warm Regards, Balbir Singh Linux Technology Center IBM, ISTL _______________________________________________ Containers mailing list Containers@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/containers
creator: Balbir Singh
date: 2007-08-17T08:43:20-00:00

[-mm PATCH 6/9] Memory controller add per container LRU and reclaim (v6)
type: item
description: Changelog since v3 1. Added reclaim retry logic to avoid being OOM'ed due to pages from swap cache (coming in due to reclaim) don't overwhelm the container. Changelog 1. Fix probable NULL pointer dereference based on review comments by YAMAMOTO Takashi Add the page_container to the per container LRU. The reclaim algorithm has been modified to make the isolate_lru_pages() as a pluggable component. The scan_control data structure now accepts the container on behalf of which reclaims are carried out. try_to_free_pages() has been extended to become container aware. Signed-off-by: Pavel Emelianov <xemul@openvz.org> Signed-off-by: <balbir@linux.vnet.ibm.com> --- include/linux/memcontrol.h | 12 +++ include/linux/res_counter.h | 23 +++++++ include/linux/swap.h | 3 mm/memcontrol.c | 135 +++++++++++++++++++++++++++++++++++++++++++- mm/swap.c | 2 mm/vmscan.c | 126 ++++++++++++++++++++++++++++++++--------- 6 files changed, 275 insertions(+), 26 deletions(-) diff -puN include/linux/memcontrol.h~mem-control-lru-and-reclaim include/linux/memcontrol.h --- linux-2.6.23-rc2-mm2/include/linux/memcontrol.h~mem-control-lru-and-reclaim 2007-08-17 13:14:20.000000000 +0530 +++ linux-2.6.23-rc2-mm2-balbir/include/linux/memcontrol.h 2007-08-17 13:14:20.000000000 +0530 @@ -32,6 +32,13 @@ extern void page_assign_page_container(s extern struct page_container *page_get_page_container(struct page *page); extern int mem_container_charge(struct page *page, struct mm_struct *mm); extern void mem_container_uncharge(struct page_container *pc); +extern void mem_container_move_lists(struct page_container *pc, bool active); +extern unsigned long mem_container_isolate_pages(unsigned long nr_to_scan, + struct list_head *dst, + unsigned long *scanned, int order, + int mode, struct zone *z, + struct mem_container *mem_cont, + int active); static inline void mem_container_uncharge_page(struct page *page) { @@ -71,6 +78,11 @@ static inline void mem_container_uncharg { } +static inline void mem_container_move_l…
creator: Balbir Singh
date: 2007-08-17T08:43:30-00:00

[-mm PATCH 7/9] Memory controller OOM handling (v6)
type: item
description: From: Pavel Emelianov <xemul@openvz.org> Out of memory handling for containers over their limit. A task from the container over limit is chosen using the existing OOM logic and killed. TODO: 1. As discussed in the OLS BOF session, consider implementing a user space policy for OOM handling. Signed-off-by: Pavel Emelianov <xemul@openvz.org> Signed-off-by: <balbir@linux.vnet.ibm.com> --- include/linux/memcontrol.h | 1 + mm/memcontrol.c | 1 + mm/oom_kill.c | 42 ++++++++++++++++++++++++++++++++++++++---- 3 files changed, 40 insertions(+), 4 deletions(-) diff -puN include/linux/memcontrol.h~mem-control-out-of-memory include/linux/memcontrol.h --- linux-2.6.23-rc2-mm2/include/linux/memcontrol.h~mem-control-out-of-memory 2007-08-17 13:14:20.000000000 +0530 +++ linux-2.6.23-rc2-mm2-balbir/include/linux/memcontrol.h 2007-08-17 13:14:20.000000000 +0530 @@ -39,6 +39,7 @@ extern unsigned long mem_container_isola int mode, struct zone *z, struct mem_container *mem_cont, int active); +extern void mem_container_out_of_memory(struct mem_container *mem); static inline void mem_container_uncharge_page(struct page *page) { diff -puN mm/memcontrol.c~mem-control-out-of-memory mm/memcontrol.c --- linux-2.6.23-rc2-mm2/mm/memcontrol.c~mem-control-out-of-memory 2007-08-17 13:14:20.000000000 +0530 +++ linux-2.6.23-rc2-mm2-balbir/mm/memcontrol.c 2007-08-17 13:14:20.000000000 +0530 @@ -322,6 +322,7 @@ int mem_container_charge(struct page *pa } css_put(&mem->css); + mem_container_out_of_memory(mem); goto free_pc; } diff -puN mm/oom_kill.c~mem-control-out-of-memory mm/oom_kill.c --- linux-2.6.23-rc2-mm2/mm/oom_kill.c~mem-control-out-of-memory 2007-08-17 13:14:20.000000000 +0530 +++ linux-2.6.23-rc2-mm2-balbir/mm/oom_kill.c 2007-08-17 13:14:20.000000000 +0530 @@ -25,6 +25,7 @@ #include <linux/cpuset.h> #include <linux/module.h> #include <linux/notifier.h> +#include <linux/memcontrol.h> int sysctl_panic_on_oom; /* #define DEBUG */ @@ -48,7 +49,8 @@ int sysctl_panic_on_oom; * of least surprise ... (…
creator: Balbir Singh
date: 2007-08-17T08:43:41-00:00

[-mm PATCH 8/9] Memory controller add switch to control what type of pages to limit (v6)
type: item
description: Choose if we want cached pages to be accounted or not. By default both are accounted for. A new set of tunables are added. echo -n 1 > mem_control_type switches the accounting to account for only mapped pages echo -n 3 > mem_control_type switches the behaviour back Signed-off-by: <balbir@linux.vnet.ibm.com> --- include/linux/memcontrol.h | 9 ++++ mm/filemap.c | 2 mm/memcontrol.c | 92 +++++++++++++++++++++++++++++++++++++++++++++ mm/swap_state.c | 2 4 files changed, 103 insertions(+), 2 deletions(-) diff -puN include/linux/memcontrol.h~mem-control-choose-rss-vs-rss-and-pagecache include/linux/memcontrol.h --- linux-2.6.23-rc2-mm2/include/linux/memcontrol.h~mem-control-choose-rss-vs-rss-and-pagecache 2007-08-17 13:14:20.000000000 +0530 +++ linux-2.6.23-rc2-mm2-balbir/include/linux/memcontrol.h 2007-08-17 13:14:20.000000000 +0530 @@ -20,6 +20,8 @@ #ifndef _LINUX_MEMCONTROL_H #define _LINUX_MEMCONTROL_H +#include <linux/mm.h> + struct mem_container; struct page_container; @@ -40,6 +42,7 @@ extern unsigned long mem_container_isola struct mem_container *mem_cont, int active); extern void mem_container_out_of_memory(struct mem_container *mem); +extern int mem_container_cache_charge(struct page *page, struct mm_struct *mm); static inline void mem_container_uncharge_page(struct page *page) { @@ -84,6 +87,12 @@ static inline void mem_container_move_li { } +static inline int mem_container_cache_charge(struct page *page, + struct mm_struct *mm) +{ + return 0; +} + #endif /* CONFIG_CONTAINER_MEM_CONT */ #endif /* _LINUX_MEMCONTROL_H */ diff -puN mm/filemap.c~mem-control-choose-rss-vs-rss-and-pagecache mm/filemap.c --- linux-2.6.23-rc2-mm2/mm/filemap.c~mem-control-choose-rss-vs-rss-and-pagecache 2007-08-17 13:14:20.000000000 +0530 +++ linux-2.6.23-rc2-mm2-balbir/mm/filemap.c 2007-08-17 13:14:20.000000000 +0530 @@ -445,7 +445,7 @@ int add_to_page_cache(struct page *page, if (error == 0) { - error = mem_container_charge(page, current->mm); + error = mem_container_cache_charge(page,…
creator: Balbir Singh
date: 2007-08-17T08:43:51-00:00

[-mm PATCH 9/9] Memory controller make page_referenced() container aware (v6)
type: item
description: Make page_referenced() container aware. Without this patch, page_referenced() can cause a page to be skipped while reclaiming pages. This patch ensures that other containers do not hold pages in a particular container hostage. It is required to ensure that shared pages are freed from a container when they are not actively referenced from the container that brought them in Signed-off-by: <balbir@linux.vnet.ibm.com> --- include/linux/memcontrol.h | 6 ++++++ include/linux/rmap.h | 5 +++-- mm/memcontrol.c | 5 +++++ mm/rmap.c | 30 ++++++++++++++++++++++++------ mm/vmscan.c | 4 ++-- 5 files changed, 40 insertions(+), 10 deletions(-) diff -puN include/linux/rmap.h~mem-control-per-container-page-referenced include/linux/rmap.h --- linux-2.6.23-rc2-mm2/include/linux/rmap.h~mem-control-per-container-page-referenced 2007-08-17 13:14:20.000000000 +0530 +++ linux-2.6.23-rc2-mm2-balbir/include/linux/rmap.h 2007-08-17 13:14:20.000000000 +0530 @@ -8,6 +8,7 @@ #include <linux/slab.h> #include <linux/mm.h> #include <linux/spinlock.h> +#include <linux/memcontrol.h> /* * The anon_vma heads a list of private "related" vmas, to scan if @@ -86,7 +87,7 @@ static inline void page_dup_rmap(struct /* * Called from mm/vmscan.c to handle paging out */ -int page_referenced(struct page *, int is_locked); +int page_referenced(struct page *, int is_locked, struct mem_container *cnt); int try_to_unmap(struct page *, int ignore_refs); /* @@ -114,7 +115,7 @@ int page_mkclean(struct page *); #define anon_vma_prepare(vma) (0) #define anon_vma_link(vma) do {} while (0) -#define page_referenced(page,l) TestClearPageReferenced(page) +#define page_referenced(page,l,cnt) TestClearPageReferenced(page) #define try_to_unmap(page, refs) SWAP_FAIL static inline int page_mkclean(struct page *page) diff -puN mm/rmap.c~mem-control-per-container-page-referenced mm/rmap.c --- linux-2.6.23-rc2-mm2/mm/rmap.c~mem-control-per-container-page-referenced 2007-08-17 13:14:20.000000000 +0530 +++ linux-2.6.23-rc2-mm2-balbir/mm/…
creator: Balbir Singh
date: 2007-08-17T08:44:01-00:00

Re: [-mm PATCH 0/9] Memory controller introduction (v6)
type: item
description: On Fri, Aug 17, 2007 at 02:12:28PM +0530, Balbir Singh wrote: Hi Andrew, > The code was also tested on a power box with regular machine usage scenarios, > the config disabled and with a stress suite that touched all the memory > in the system and was limited in a container. > > Dhaval ran several tests on v6 and gave his thumbs up to the controller > (a hard to achieve goal :-) ). > I've been running v6 on x86 and there are a few things I've tried. Most of those results Balbir has already posted. > Run kernbench stress > -------------------- > Three simultaneously and with one inside a container of 800 MB. > The idea here was to create pressure inside the container while having global pressure. > > Kernbench results running within the container of 800 MB > -------------------------------------------------------- > > Thu Aug 16 22:34:59 IST 2007 > 2.6.23-rc2-mm2-mem-v6 > Average Half load -j 4 Run (std deviation): > Elapsed Time 466.548 (47.6014) > User Time 876.598 (10.5273) > System Time 223.136 (1.29247) > Percent CPU 237.2 (23.2744) > Context Switches 146351 (6539.91) > Sleeps 174003 (5031.94) > > Average Optimal load -j 32 Run (std deviation): > Elapsed Time 423.496 (60.625) > User Time 897.285 (23.0391) > System Time 228.836 (6.11205) > Percent CPU 257.1 (40.9022) > Context Switches 262134 (123397) > Sleeps 270815 (103597) > > > Kernbench results running within the default container > ------------------------------------------------------ > > Thu Aug 16 22:34:33 IST 2007 > 2.6.23-rc2-mm2-mem-v6 > Average Half load -j 4 Run (std deviation): > Elapsed Time 424.17 (3.45908) > User Time 841.992 (5.40178) > System Time 213.01 (0.706258) > Percent CPU 248.2 (0.83666) > Context Switches 134254 (9535.83) > Sleeps 167359 (6858.45) > > Average Optimal load -j 32 Run (std deviation): > Elapsed Time 407.092 (108.932) > User Time 878.493 (38.6575) > System Time 222.155 (9.77127) > Percent CPU 278.4 (91.5826) > Context Switches 253836 (127708) > Sleeps 263760 (103468) > > > …
creator: Dhaval Giani
date: 2007-08-17T15:49:51-00:00

Re: [-mm PATCH 1/9] Memory controller resource counters (v6)
type: item
description: On Fri, Aug 17, 2007 at 02:12:38PM +0530, Balbir Singh wrote: > --- /dev/null > +++ linux-2.6.23-rc2-mm2-balbir/kernel/res_counter.c > +void res_counter_init(struct res_counter *counter) > +{ > + spin_lock_init(&counter->lock); > + counter->limit = (unsigned long)LONG_MAX; why cast? > +int res_counter_charge_locked(struct res_counter *counter, unsigned long val) > +{ > + if (counter->usage > (counter->limit - val)) { () aren't needed. > + counter->failcnt++; > + return -ENOMEM; > + } > + > + counter->usage += val; > + return 0; > +} > + > +int res_counter_charge(struct res_counter *counter, unsigned long val) > +{ > + int ret; > + unsigned long flags; > + > + spin_lock_irqsave(&counter->lock, flags); > + ret = res_counter_charge_locked(counter, val); > + spin_unlock_irqrestore(&counter->lock, flags); > + return ret; > +} > + > +void res_counter_uncharge_locked(struct res_counter *counter, unsigned long val) > +{ > + if (WARN_ON(counter->usage < val)) > + val = counter->usage; explicit if and WARN_ON(1) is clearer. I should send a patch banning such type of usage soon. > + > + counter->usage -= val; > +} > + > +void res_counter_uncharge(struct res_counter *counter, unsigned long val) > +{ > + unsigned long flags; > + > + spin_lock_irqsave(&counter->lock, flags); > + res_counter_uncharge_locked(counter, val); > + spin_unlock_irqrestore(&counter->lock, flags); > +} > +ssize_t res_counter_write(struct res_counter *counter, int member, > + const char __user *userbuf, size_t nbytes, loff_t *pos) > +{ > + int ret; > + char *buf, *end; > + unsigned long tmp, *val; > + > + buf = kmalloc(nbytes + 1, GFP_KERNEL); please, switch to fixed buffer, allocating memory depending on size told by userspace will beat later. Ditto for other proc writing functions. > + ret = -ENOMEM; > + if (buf == NULL) > + goto out; > + > + buf[nbytes] = '\0'; > + ret = -EFAULT; > + if (copy_from_user(buf, userbuf, nbytes)) > + goto out_free; > + > + ret = -EINVAL; > + tmp = simple_strtoul(buf, &end, 10…
creator: Alexey Dobriyan
date: 2007-08-20T08:20:54-00:00

Re: [-mm PATCH 1/9] Memory controller resource counters (v6)
type: item
description: Alexey Dobriyan wrote: > On Fri, Aug 17, 2007 at 02:12:38PM +0530, Balbir Singh wrote: >> --- /dev/null >> +++ linux-2.6.23-rc2-mm2-balbir/kernel/res_counter.c >> +void res_counter_init(struct res_counter *counter) >> +{ >> + spin_lock_init(&counter->lock); >> + counter->limit = (unsigned long)LONG_MAX; > > why cast? > These patches come from Pavel. They add to readability since limit is unsigned long. >> +int res_counter_charge_locked(struct res_counter *counter, unsigned long val) >> +{ >> + if (counter->usage > (counter->limit - val)) { > > () aren't needed. > it makes the code more readable >> + if (WARN_ON(counter->usage < val)) >> + val = counter->usage; > > explicit if and WARN_ON(1) is clearer. I should send a patch banning such > type of usage soon. > We had a WARN_ON(1) before, but we changed it in v2 or v3 based on review comments from Dave. I think WARN_ON(cond) is more readable than WARN_ON(1) for the same reason as BUG_ON(cond) vs BUG_ON(1) >> + buf = kmalloc(nbytes + 1, GFP_KERNEL); > > please, switch to fixed buffer, allocating memory depending on size > told by userspace will beat later. Ditto for other proc writing > functions. > I agree with you in part, but the size of user input is not fixed. Setting a fixed limit seems artificial, I'll see how this can be improved. Thanks for the detailed review comments, -- Balbir Singh Linux Technology Center IBM, ISTL _______________________________________________ Containers mailing list Containers@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/containers
creator: Balbir Singh
date: 2007-08-20T09:01:51-00:00

Re: [-mm PATCH 1/9] Memory controller resource counters (v6)
type: item
description: Hi Balbir/Pavel, As I mentioned to you directly at the kernel summit, I think it might be cleaner to integrate resource counters more closely with control groups. So rather than controllers such as the memory controller having to create their own boilerplate cf_type structures and read/write functions, it should be possible to just call a function something like control_group_add_rescounter(struct cgroup *cg, struct cgroup_subsys *ss, struct res_counter *res, const char *name) and have it handle all the userspace API. This would simplify the task of keeping a consistent userspace API between different controllers using the resource counter abstraction. Paul On 8/17/07, Balbir Singh <balbir@linux.vnet.ibm.com> wrote: > From: Pavel Emelianov <xemul@openvz.org> > > Introduce generic structures and routines for resource accounting. > > Each resource accounting container is supposed to aggregate it, > container_subsystem_state and its resource-specific members within. > > Signed-off-by: Pavel Emelianov <xemul@openvz.org> > Signed-off-by: <balbir@linux.vnet.ibm.com> > --- > > include/linux/res_counter.h | 102 +++++++++++++++++++++++++++++++++++++ > init/Kconfig | 7 ++ > kernel/Makefile | 1 > kernel/res_counter.c | 120 ++++++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 230 insertions(+) > > diff -puN /dev/null include/linux/res_counter.h > --- /dev/null 2007-06-01 20:42:04.000000000 +0530 > +++ linux-2.6.23-rc2-mm2-balbir/include/linux/res_counter.h 2007-08-17 13:14:18.000000000 +0530 > @@ -0,0 +1,102 @@ > +#ifndef __RES_COUNTER_H__ > +#define __RES_COUNTER_H__ > + > +/* > + * Resource Counters > + * Contain common data types and routines for resource accounting > + * > + * Copyright 2007 OpenVZ SWsoft Inc > + * > + * Author: Pavel Emelianov <xemul@openvz.org> > + * > + */ > + > +#include <linux/container.h> > + > +/* > + * The core object. the container that wishes to account for some > + * resource may include this counter into its structures and use > + * t…
creator: Paul Menage
date: 2007-09-11T00:42:20-00:00

Re: [-mm PATCH 1/9] Memory controller resource counters (v6)
type: item
description: Paul Menage wrote: > Hi Balbir/Pavel, > > As I mentioned to you directly at the kernel summit, I think it might > be cleaner to integrate resource counters more closely with control > groups. So rather than controllers such as the memory controller > having to create their own boilerplate cf_type structures and > read/write functions, it should be possible to just call a function > something like > > control_group_add_rescounter(struct cgroup *cg, struct cgroup_subsys *ss, > struct res_counter *res, > const char *name) > > and have it handle all the userspace API. This would simplify the task > of keeping a consistent userspace API between different controllers > using the resource counter abstraction. > > Paul > Yes, I remember discussing it with you. I would expect res_counters definition to be dynamic (to be able to add the guarantee, soft limit, etc) for expansion in the future. In the future, I would also like to do hierarchical resource groups, the hierarchy would represent the current filesystem hierarchy. -- Warm Regards, Balbir Singh Linux Technology Center IBM, ISTL _______________________________________________ Containers mailing list Containers@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/containers
creator: Balbir Singh
date: 2007-09-12T10:05:14-00:00