From: Pavel Emelianov <xemul@openvz.org>
To: Andrew Morton <akpm@osdl.org>,
Balbir Singh <balbir@linux.vnet.ibm.com>,
Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Cc: Linux Containers <containers@lists.osdl.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
devel@openvz.org
Subject: [PATCH 0/8] RSS controller based on process containers (v3.1)
Date: Mon, 04 Jun 2007 17:25:25 +0400 [thread overview]
Message-ID: <466412C5.1060104@openvz.org> (raw)
Adds RSS accounting and control within a container.
Changes from v3
- comments across the code
- git-bisect safe split
- lost places to move the page between active/inactive lists
Ported above Paul's containers V10 with fixes from Balbir.
RSS container includes the per-container RSS accounting
and reclamation, and out-of-memory killer.
Each mapped page has an owning container and is linked into its
LRU lists just like in the global LRU ones. The owner of the page
is the container that touched the page first. As long as the page
stays mapped it holds the container, is accounted into its usage
and lives in its LRU list. When page is unmapped for the last time
it releases the container. The RSS usage is exactly the number of
pages in its booth LRU lists, i.e. the nu,ber of pages used by this
container. When this usage exceeds the limit set some pages are
reclaimed from the owning container. In case no reclamation possible
the OOM killer starts thinning out the container.
Thus the container behaves like a standalone machine - when it runs
out of resources, it tries to reclaim some pages, and if it doesn't
succeed, kills some task.
Signed-off-by: Pavel Emelianov <xemul@openvz.org>
The testing scenario may look like this:
1. Prepare the containers
# mkdir -p /containers/rss
# mount -t container none /containers/rss -o rss
2. Make the new group and move bash into it
# mkdir /containers/rss/0
# echo $$ > /containers/rss/0/tasks
Since now we're in the 0 container.
We can alter the RSS limit
# echo -n 6000 > /containers/rss/0/rss_limit
We can check the usage
# cat /containers/rss/0/rss_usage
25
And do other stuff. To check the reclamation to work we need a
simple program that touches many pages of memory, like this:
#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>
#ifndef PGSIZE
#define PGSIZE 4096
#endif
int main(int argc, char **argv)
{
unsigned long pages;
int i;
char *mem;
if (argc < 2) {
printf("Usage: %s <number_of_pages>\n", argv[0]);
return 1;
}
pages = strtol(argv[1], &mem, 10);
if (*mem != '\0') {
printf("Bad number %s\n", argv[1]);
return 1;
}
mem = mmap(NULL, pages * PGSIZE, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, 0, 0);
if (mem == MAP_FAILED) {
perror("map");
return 2;
}
for (i = 0; i < pages; i++)
mem[i * PGSIZE] = 0;
printf("OK\n");
return 0;
}
next reply other threads:[~2007-06-04 13:21 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-04 13:25 Pavel Emelianov [this message]
2007-06-04 13:28 ` [PATCH 1/8] Resource counters Pavel Emelianov
2007-06-04 13:29 ` [PATCH 2/8] Add container pointer on struct page Pavel Emelianov
2007-06-04 13:31 ` [PATCH 3/8] Add container pointer on mm_struct Pavel Emelianov
2007-06-04 13:33 ` [PATCH 4/8] Scanner changes needed to implement per-container scanner Pavel Emelianov
2007-06-04 13:38 ` [PATCH 5/8] RSS container core Pavel Emelianov
2007-06-04 13:40 ` [PATCH 6/8] Per container OOM killer Pavel Emelianov
2007-06-04 13:41 ` [PATCH 7/8] Per-container pages reclamation Pavel Emelianov
2007-06-04 13:46 ` [PATCH 8/8] RSS accounting hooks over the code Pavel Emelianov
2007-06-08 12:03 ` [PATCH 0/8] RSS controller based on process containers (v3.1) Herbert Poetzl
2007-06-08 12:39 ` Pavel Emelianov
2007-06-08 15:37 ` Herbert Poetzl
2007-06-08 17:07 ` Balbir Singh
2007-06-08 17:44 ` Vaidyanathan Srinivasan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=466412C5.1060104@openvz.org \
--to=xemul@openvz.org \
--cc=akpm@osdl.org \
--cc=balbir@linux.vnet.ibm.com \
--cc=containers@lists.osdl.org \
--cc=devel@openvz.org \
--cc=linux-kernel@vger.kernel.org \
--cc=svaidy@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.