All of lore.kernel.org
 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 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.