Linux Container Development
 help / color / mirror / Atom feed
From: Daniel Lezcano <daniel.lezcano-GANU6spQydw@public.gmane.org>
To: kt-S89nZTSLPHGGdvJs77BJ7Q@public.gmane.org
Cc: Linux Containers
	<containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org>,
	lxc-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: Re: [lxc-devel] Memory Resources
Date: Sun, 23 Aug 2009 23:00:17 +0200	[thread overview]
Message-ID: <4A91ADE1.9090204@free.fr> (raw)
In-Reply-To: <ac1c4bf20908231318v1586c2ciffd3df5fe1b70c20-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

Krzysztof Taraszka wrote:
> 2009/8/23 Daniel Lezcano <daniel.lezcano-GANU6spQydw@public.gmane.org>
> 
>> Krzysztof Taraszka wrote:
>>
>>> 2009/8/23 Krzysztof Taraszka <krzysztof.taraszka-S89nZTSLPHGGdvJs77BJ7Q@public.gmane.org>
>>>
>>>
>>>
>>>> 2009/8/23 Krzysztof Taraszka <krzysztof.taraszka-S89nZTSLPHGGdvJs77BJ7Q@public.gmane.org>
>>>>
>>>>
>>>>
>>>>> 2009/8/23 Daniel Lezcano <daniel.lezcano-GANU6spQydw@public.gmane.org>
>>>>>
>>>>>
>>>>>
>>>>>> Krzysztof Taraszka wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>> 2009/8/23 Daniel Lezcano <daniel.lezcano-GANU6spQydw@public.gmane.org>
>>>>>>>
>>>>>>>  Krzysztof Taraszka wrote:
>>>>>>>
>>>>>>>
>>>>>>>>  Hello,
>>>>>>>>
>>>>>>>>
>>>>>>>>> I am running lxc on my debian unstable sandbox and I have a few
>>>>>>>>> question
>>>>>>>>> about memory managament inside linux containers based on lxc
>>>>>>>>> project.
>>>>>>>>>
>>>>>>>>> I have got linux kernel 2.6.30.5 with enabled :
>>>>>>>>>
>>>>>>>>> +Resource counter
>>>>>>>>> ++ Memory Resource Controller for Control Groups
>>>>>>>>>  +++ Memory Resource Controller Swap Extension(EXPERIMENTAL)
>>>>>>>>>
>>>>>>>>> lxc-checkconfig pass all checks.
>>>>>>>>>
>>>>>>>>> I read about cgroups memory managament
>>>>>>>>> (Documentation/cgroups/memory.txt)
>>>>>>>>> and I tried to pass those value to my debian sandbox.
>>>>>>>>>
>>>>>>>>> And...
>>>>>>>>> 'free -m' and 'top/htop' still show all available memory inside
>>>>>>>>> container
>>>>>>>>> (also If I set 32M for lxc.cgroup.memory.limit_in_bytes and
>>>>>>>>> lxc.cgroup.memory.usage_in_bytes; and 64M for
>>>>>>>>> lxc.cgroup.memory.memsw.usage_in_bytes and
>>>>>>>>> lxc.cgroup.memory.memsw.limit_in_bytes free and top show all
>>>>>>>>> resources).
>>>>>>>>>
>>>>>>>>> What I did wrong? Does the container always show all available
>>>>>>>>> memory
>>>>>>>>> resources  without cgroup limitations?
>>>>>>>>>
>>>>>>>>>  At the first glance I would say the configuration is correct.
>>>>>>>>>
>>>>>>>>>
>>>>>>>> But AFAIR, the memory cgroup is not isolated, if you specify 32MB you
>>>>>>>> will
>>>>>>>> see all the memory available on the system either if you are not
>>>>>>>> allowed to
>>>>>>>> use more than 32MB. If you create a program which allocates 64MB
>>>>>>>> within
>>>>>>>> a
>>>>>>>> container configured with 32MB, and you "touch" the pages (may be
>>>>>>>> that
>>>>>>>> can
>>>>>>>> be done with one mmap call with the MAP_POPULATE option), you should
>>>>>>>> see the
>>>>>>>> application swapping and the "memory.failcnt" increasing.
>>>>>>>>
>>>>>>>> IMHO, showing all the memory available for the system instead of
>>>>>>>> showing
>>>>>>>> the allowed memory with the cgroup is weird but maybe there is a good
>>>>>>>> reason
>>>>>>>> to do that.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>> Thank you Daniel for your reply.
>>>>>>> I think that LXC should isolate memory available for containers like
>>>>>>> Vserver
>>>>>>> or FreeVPS do (memory + swap) if .cgroup.memory.* and
>>>>>>> lxc.cgroup.memory.memsw.* is set.
>>>>>>> Is there any possibility to make a patch for linux kernel / lxc-tools
>>>>>>> to
>>>>>>> show the limitations inside cointainers propertly? I think is a good
>>>>>>> idea
>>>>>>> and it should be apply as soon as possible.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> Maybe a solution can be to add a new memory.meminfo file in the same
>>>>>> format than /proc/meminfo, so it will be possible to mount --bind
>>>>>> /cgroup/foo/memory.meminfo to /proc/meminfo for the container.
>>>>>>
>>>>>>
>>>>>>
>>>>> Yes, I thought the same. This should allow the user-space tools based on
>>>>> /proc/meminfo (such as comand line "free") show limited information :)
>>>>>
>>>>>
>>>>>
>>>> Hmmm... does the memory.stat is a good start point for make new one
>>>> object
>>>> memory.meminfo similar to /proc/meminfo? If so, I can play by my self
>>>> with
>>>> lxc-tools code.
>>>>
>>>>
>>>>
>>>
>>> Hmmm... Daniel, I have got a question (that do I thinking in the right
>>> way).
>>> here is an output from /proc/meminfo from openvz:
>>>
>>>
>>> MemTotal:             262144 kB
>>> MemFree:            232560 kB
>>> Buffers:             0 kB
>>> Cached:            0 kB
>>> SwapCached:        0 kB
>>> Active:            0 kB
>>> Inactive:            0 kB
>>> HighTotal:            0 kB
>>> HighFree:            0 kB
>>> LowTotal:             262144 kB
>>> LowFree:            232560 kB
>>> SwapTotal:        0 kB
>>> SwapFree:        0 kB
>>> Dirty:             0 kB
>>> Writeback:        0 kB
>>> AnonPages:        0 kB
>>> Mapped:            0 kB
>>> Slab:                0 kB
>>> SReclaimable:            0 kB
>>> SUnreclaim:              0 kB
>>> PageTables:              0 kB
>>> NFS_Unstable:           0 kB
>>> Bounce:                  0 kB
>>> WritebackTmp:            0 kB
>>> CommitLimit:             0 kB
>>> Committed_AS:            0 kB
>>> VmallocTotal:            0 kB
>>> VmallocUsed:             0 kB
>>> VmallocChunk:            0 kB
>>> HugePages_Total:    0
>>> HugePages_Free:    0
>>> HugePages_Rsvd:   0
>>> HugePages_Surp:    0
>>> Hugepagesize:         2048 kB
>>>
>>> most of values are 0.
>>>
>>> I have an question about SwapTotal and SwapFree for LXC.
>>> As I thinking that:
>>>
>>> MemTotal might be: hierarchical_memory_limit
>>> MemFree might be: hierarchical_memory_limit - cache
>>>
>>>
>> I am not a memory expert, but isn't MemFree : hierarchical_memory_limit -
>> rss ?
>>
>>> the
>>>
>>> SwapTotal might be: hierarchical_memsw_limit
>>> SwapFree might be: hierarchical_memsw_limit - rss
>>>
>>> rss - # of bytes of anonymous and swap cache memory
>>> I don't know at all that hierarchical_memsw_limit is an good value for
>>> swap
>>> total, because as I read it is a mem+swap at all.
>>>
>>> Does the lxc memory.meminfo might look like above? Where can I get the
>>> Hugepagesize?
>>>
>>>
>> Right, I agree most of the interesting information to create a
>> memory.meminfo is already there in another file and another format. Probably
>> some informations in memory.stat can be moved to memory.meminfo and this one
>> can be step by step filled with cgroup memory statistic informations. IMO,
>> if the memory controller displays memory statistics like a proc/meminfo file
>> format, that will make consistency for these informations and make trivial
>> the isolation/virtualization with a simple mount-bind.
>>
>>
>>
> Hmm..
> might be. Right now I am looking for and writing new function in
> mm/memcontrol.c file for writing some stats in memory.meminfo file for
> tests.
> Dirty and ugly part of code, but if it will work as we thought (mount-bind)
> and as you wrote above, that will be very simple.
> I am going to look how does the /proc/meminfo is doing by the openvz.
> mm/memcontrol.c was wrote by xemul from openvz and balbir from ibm.
> If I am thinking in the right way, guys from openvz made their own patch for
> meminfo based on the mm/memcontrol.c. If I am wrong - where do they taking
> meminfo data? :)

I did this ugly patch patch for MemTotal/MemFree - maybe wrong :)

Index: linux-2.6/mm/memcontrol.c
===================================================================
--- linux-2.6.orig/mm/memcontrol.c      2009-06-23 12:00:52.000000000 +0200
+++ linux-2.6/mm/memcontrol.c   2009-08-23 22:49:02.000000000 +0200
@@ -2200,6 +2200,27 @@ static int mem_cgroup_swappiness_write(s
  }


+static int mem_cgroup_meminfo(struct cgroup *cgrp, struct cftype *cft,
+                             struct seq_file *seq)
+{
+#define K(x) ((x) << 10)
+
+       struct mem_cgroup *mem_cont = mem_cgroup_from_cont(cgrp);
+       struct mcs_total_stat mystat = { };
+       unsigned long long limit, memsw_limit;
+
+       mem_cgroup_get_local_stat(mem_cont, &mystat);
+       memcg_get_hierarchical_limit(mem_cont, &limit, &memsw_limit);
+
+       seq_printf(seq,
+                  "MemTotal:       %8llu kB\n"
+                  "MemFree:        %8llu kB\n",
+                  limit / 1024, (limit - mystat.stat[MCS_RSS]) / 1024);
+
+       return 0;
+#undef K
+}
+
  static struct cftype mem_cgroup_files[] = {
         {
                 .name = "usage_in_bytes",
@@ -2242,6 +2263,10 @@ static struct cftype mem_cgroup_files[]
                 .read_u64 = mem_cgroup_swappiness_read,
                 .write_u64 = mem_cgroup_swappiness_write,
         },
+       {
+               .name = "meminfo",
+               .read_seq_string = mem_cgroup_meminfo,
+       },
  };

  #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP


With the lxc tools I did:

	lxc-execute -n foo /bin/bash
	echo 268435456 > /cgroup/foo/memory.limit_in_bytes
	mount --bind /cgroup/foo/memory.meminfo /proc/meminfo
	for i in $(seq 1 100); do sleep 3600 & done

And the result for "free" is:

free:

              total       used       free     shared    buffers     cached
Mem:        262144       9692     252452          0          0          0
-/+ buffers/cache:       9692     252452
Swap:            0          0          0


and for "top":

top - 22:57:37 up 8 min,  1 user,  load average: 0.00, 0.02, 0.00
Tasks: 104 total,   1 running, 103 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  1.0%sy,  0.0%ni, 98.4%id,  0.0%wa,  0.0%hi,  0.3%si, 
0.0%st
Mem:    262144k total,     9864k used,   252280k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 

   337 root      20   0 14748 1132  872 R  1.0  0.4   0:00.24 top 

     1 root      20   0  8136  484  408 S  0.0  0.2   0:00.00 lxc-init 

     2 root      20   0 89980 1724 1348 S  0.0  0.7   0:00.70 bash 

    25 root      20   0 86916  612  524 S  0.0  0.2   0:00.00 sleep 

   232 root      20   0 86916  616  524 S  0.0  0.2   0:00.00 sleep 

   233 root      20   0 86916  612  524 S  0.0  0.2   0:00.00 sleep 

   234 root      20   0 86916  612  524 S  0.0  0.2   0:00.00 sleep 

   235 root      20   0 86916  612  524 S  0.0  0.2   0:00.00 sleep 

.....


:)

  parent reply	other threads:[~2009-08-23 21:00 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <ac1c4bf20908230513q383fb338ne02e8f19f6ef18a6@mail.gmail.com>
     [not found] ` <ac1c4bf20908230513q383fb338ne02e8f19f6ef18a6-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-23 16:18   ` [lxc-devel] Memory Resources Daniel Lezcano
     [not found]     ` <4A916BC9.8040905-GANU6spQydw@public.gmane.org>
2009-08-23 16:59       ` Krzysztof Taraszka
     [not found]         ` <ac1c4bf20908230959j4cda58cel3bcf4f3822d50bb1-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-23 18:00           ` Daniel Lezcano
     [not found]             ` <4A9183B2.7090005-GANU6spQydw@public.gmane.org>
2009-08-23 18:17               ` Krzysztof Taraszka
     [not found]                 ` <ac1c4bf20908231117sb180e78q3eed64db3573ec35-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-23 18:38                   ` Krzysztof Taraszka
     [not found]                     ` <ac1c4bf20908231138j2ce7bb48v69a8ac8ede6bc314-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-23 19:22                       ` Krzysztof Taraszka
     [not found]                         ` <ac1c4bf20908231222t182e6ca6u716b98e13d85cbad-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-23 20:05                           ` Daniel Lezcano
     [not found]                             ` <4A91A103.6020207-GANU6spQydw@public.gmane.org>
2009-08-23 20:18                               ` Krzysztof Taraszka
     [not found]                                 ` <ac1c4bf20908231318v1586c2ciffd3df5fe1b70c20-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-23 21:00                                   ` Daniel Lezcano [this message]
     [not found]                                     ` <4A91ADE1.9090204-GANU6spQydw@public.gmane.org>
2009-08-23 21:12                                       ` Krzysztof Taraszka
     [not found]                                         ` <ac1c4bf20908231412m634fdf9h686f6bd24eb95a14-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-24  0:27                                           ` KAMEZAWA Hiroyuki
     [not found]                                             ` <20090824092739.70d56a5b.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2009-08-24  0:40                                               ` Krzysztof Taraszka
2009-08-24  6:17                                               ` [Devel] " Dietmar Maurer
     [not found]                                                 ` <90D306BE6EBC8D428A824FBBA7A3113DE076E221-jRgWbcutxcWenyD9vqZGNUEOCMrvLtNR@public.gmane.org>
2009-08-24  6:58                                                   ` KAMEZAWA Hiroyuki
     [not found]                                                     ` <20090824155835.94f6b88f.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2009-08-24  7:17                                                       ` Balbir Singh
     [not found]                                                         ` <20090824071757.GQ29572-SINUvgVNF2CyUtPGxGje5AC/G2K4zDHf@public.gmane.org>
2009-08-24  7:18                                                           ` KAMEZAWA Hiroyuki
     [not found]                                                             ` <20090824161825.c40a85a2.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2009-08-25  9:46                                                               ` Balbir Singh
2009-08-24  0:48                                       ` Krzysztof Taraszka
2009-08-24  0:58                                       ` Krzysztof Taraszka
     [not found]                                         ` <4A924D11.80002@free.fr>
     [not found]                                           ` <ac1c4bf20908240125q1e126cdq2d2b7659ca167d52@mail.gmail.com>
     [not found]                                             ` <4A924F5C.1000208@fr.ibm.com>
     [not found]                                               ` <ac1c4bf20908240138l67cfabfcid2bb7224a1f6ab24@mail.gmail.com>
     [not found]                                                 ` <4A925794.7050808@free.fr>
     [not found]                                                   ` <ac1c4bf20908240245ydbc1b9bxacfcf2398049505c@mail.gmail.com>
     [not found]                                                     ` <4A92676A.1080609@free.fr>
     [not found]                                                       ` <4A92676A.1080609-GANU6spQydw@public.gmane.org>
2009-08-24 10:58                                                         ` Krzysztof Taraszka
     [not found]                                                       ` <ac1c4bf20908240327u424bd021t8848cf1cafb24ada@mail.gmail.com>
     [not found]                                                         ` <ac1c4bf20908240327u424bd021t8848cf1cafb24ada-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-24 11:13                                                           ` Daniel Lezcano
     [not found]                                                             ` <4A9275CB.7030108-GANU6spQydw@public.gmane.org>
2009-08-24 11:31                                                               ` Krzysztof Taraszka
     [not found]                                                                 ` <ac1c4bf20908240431p1fda5a15qd26629618397696-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-24 14:11                                                                   ` Daniel Lezcano
     [not found]                                                                     ` <4A929F83.80207-GANU6spQydw@public.gmane.org>
2009-08-24 16:26                                                                       ` Krzysztof Taraszka
     [not found]                                                                         ` <ac1c4bf20908240926j401003dft11f50d3be1466f90-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-24 16:30                                                                           ` Daniel Lezcano
     [not found]                                                                             ` <4A92C01E.5010809-GANU6spQydw@public.gmane.org>
2009-08-24 16:36                                                                               ` Krzysztof Taraszka
     [not found]                                                                                 ` <ac1c4bf20908240936t1bee38e3h9388298f435f056c-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-24 19:22                                                                                   ` Krzysztof Taraszka
     [not found]                                                                                     ` <ac1c4bf20908241222w127f9f7em5175213281491a8d-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-24 23:03                                                                                       ` Krzysztof Taraszka
2009-08-26  1:43                                                                       ` KAMEZAWA Hiroyuki
     [not found]                                                                         ` <20090826104312.97ff028f.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2009-08-26 12:11                                                                           ` Daniel Lezcano
     [not found]                                                                             ` <4A952689.9020704-GANU6spQydw@public.gmane.org>
2009-08-26 13:50                                                                               ` Krzysztof Taraszka
     [not found]                                                                                 ` <ac1c4bf20908260650x3311d5d3q44631a30205089b7-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-26 23:25                                                                                   ` Krzysztof Taraszka
     [not found]                                                                                     ` <ac1c4bf20908261625g71dff96cu77190056540cbb7-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-08-28  9:32                                                                                       ` Daniel Lezcano
     [not found]                                                                                         ` <4A97A448.5050506-GANU6spQydw@public.gmane.org>
2009-08-30 23:56                                                                                           ` KAMEZAWA Hiroyuki
     [not found]                                                                                             ` <20090831085606.b7207a76.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2009-08-31  9:24                                                                                               ` Daniel Lezcano
     [not found]                                                                                                 ` <4A9B96B7.9060009-GANU6spQydw@public.gmane.org>
2009-08-31 10:02                                                                                                   ` Dietmar Maurer
2009-08-31 13:40                                                                                           ` Serge E. Hallyn
     [not found]                                                                                             ` <20090831134045.GD4837-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-08-31 14:41                                                                                               ` Daniel Lezcano
     [not found]                                                                                                 ` <4A9BE134.5040804-GANU6spQydw@public.gmane.org>
2009-08-31 14:54                                                                                                   ` Serge E. Hallyn
     [not found]                                                                                                     ` <20090831145423.GA8107-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-08-31 15:18                                                                                                       ` Daniel Lezcano
     [not found]                                                                                                         ` <4A9BE9A9.1080907-GANU6spQydw@public.gmane.org>
2009-08-31 15:47                                                                                                           ` Daniel Lezcano
2009-08-31 16:31                                                                                                           ` Serge E. Hallyn
     [not found]                                                                                                             ` <20090831163114.GA13896-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-09-01 18:37                                                                                                               ` Daniel Lezcano

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=4A91ADE1.9090204@free.fr \
    --to=daniel.lezcano-ganu6spqydw@public.gmane.org \
    --cc=containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org \
    --cc=kt-S89nZTSLPHGGdvJs77BJ7Q@public.gmane.org \
    --cc=lxc-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox