2009/8/23 Daniel Lezcano <span dir="ltr"><<a href="mailto:daniel.lezcano@free.fr">daniel.lezcano@free.fr</a>></span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="h5">Krzysztof Taraszka wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
2009/8/23 Krzysztof Taraszka <<a href="mailto:krzysztof.taraszka@gnuhosting.net" target="_blank">krzysztof.taraszka@gnuhosting.net</a>><br>
<br>
  <br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
2009/8/23 Krzysztof Taraszka <<a href="mailto:krzysztof.taraszka@gnuhosting.net" target="_blank">krzysztof.taraszka@gnuhosting.net</a>><br>
<br>
    <br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
2009/8/23 Daniel Lezcano <<a href="mailto:daniel.lezcano@free.fr" target="_blank">daniel.lezcano@free.fr</a>><br>
<br>
      <br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Krzysztof Taraszka wrote:<br>
<br>
        <br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
2009/8/23 Daniel Lezcano <<a href="mailto:daniel.lezcano@free.fr" target="_blank">daniel.lezcano@free.fr</a>><br>
<br>
 Krzysztof Taraszka wrote:<br>
          <br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
 Hello,<br>
            <br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I am running lxc on my debian unstable sandbox and I have a few<br>
question<br>
about memory managament inside linux containers based on lxc project.<br>
<br>
I have got linux kernel 2.6.30.5 with enabled :<br>
<br>
+Resource counter<br>
++ Memory Resource Controller for Control Groups<br>
 +++ Memory Resource Controller Swap Extension(EXPERIMENTAL)<br>
<br>
lxc-checkconfig pass all checks.<br>
<br>
I read about cgroups memory managament<br>
(Documentation/cgroups/memory.txt)<br>
and I tried to pass those value to my debian sandbox.<br>
<br>
And...<br>
'free -m' and 'top/htop' still show all available memory inside<br>
container<br>
(also If I set 32M for lxc.cgroup.memory.limit_in_bytes and<br>
lxc.cgroup.memory.usage_in_bytes; and 64M for<br>
lxc.cgroup.memory.memsw.usage_in_bytes and<br>
lxc.cgroup.memory.memsw.limit_in_bytes free and top show all<br>
resources).<br>
<br>
What I did wrong? Does the container always show all available memory<br>
resources  without cgroup limitations?<br>
<br>
 At the first glance I would say the configuration is correct.<br>
              <br>
</blockquote>
But AFAIR, the memory cgroup is not isolated, if you specify 32MB you<br>
will<br>
see all the memory available on the system either if you are not<br>
allowed to<br>
use more than 32MB. If you create a program which allocates 64MB within<br>
a<br>
container configured with 32MB, and you "touch" the pages (may be that<br>
can<br>
be done with one mmap call with the MAP_POPULATE option), you should<br>
see the<br>
application swapping and the "memory.failcnt" increasing.<br>
<br>
IMHO, showing all the memory available for the system instead of<br>
showing<br>
the allowed memory with the cgroup is weird but maybe there is a good<br>
reason<br>
to do that.<br>
<br>
<br>
<br>
            <br>
</blockquote>
Thank you Daniel for your reply.<br>
I think that LXC should isolate memory available for containers like<br>
Vserver<br>
or FreeVPS do (memory + swap) if .cgroup.memory.* and<br>
lxc.cgroup.memory.memsw.* is set.<br>
Is there any possibility to make a patch for linux kernel / lxc-tools to<br>
show the limitations inside cointainers propertly? I think is a good<br>
idea<br>
and it should be apply as soon as possible.<br>
<br>
          <br>
</blockquote>
Maybe a solution can be to add a new memory.meminfo file in the same<br>
format than /proc/meminfo, so it will be possible to mount --bind<br>
/cgroup/foo/memory.meminfo to /proc/meminfo for the container.<br>
<br>
        <br>
</blockquote>
Yes, I thought the same. This should allow the user-space tools based on<br>
/proc/meminfo (such as comand line "free") show limited information :)<br>
<br>
      <br>
</blockquote>
Hmmm... does the memory.stat is a good start point for make new one object<br>
memory.meminfo similar to /proc/meminfo? If so, I can play by my self with<br>
lxc-tools code.<br>
<br>
    <br>
</blockquote>
<br>
<br>
Hmmm... Daniel, I have got a question (that do I thinking in the right way).<br>
here is an output from /proc/meminfo from openvz:<br>
<br>
<br>
MemTotal:             262144 kB<br>
MemFree:            232560 kB<br>
Buffers:             0 kB<br>
Cached:            0 kB<br>
SwapCached:        0 kB<br>
Active:            0 kB<br>
Inactive:            0 kB<br>
HighTotal:            0 kB<br>
HighFree:            0 kB<br>
LowTotal:             262144 kB<br>
LowFree:            232560 kB<br>
SwapTotal:        0 kB<br>
SwapFree:        0 kB<br>
Dirty:             0 kB<br>
Writeback:        0 kB<br>
AnonPages:        0 kB<br>
Mapped:            0 kB<br>
Slab:                0 kB<br>
SReclaimable:            0 kB<br>
SUnreclaim:              0 kB<br>
PageTables:              0 kB<br>
NFS_Unstable:           0 kB<br>
Bounce:                  0 kB<br>
WritebackTmp:            0 kB<br>
CommitLimit:             0 kB<br>
Committed_AS:            0 kB<br>
VmallocTotal:            0 kB<br>
VmallocUsed:             0 kB<br>
VmallocChunk:            0 kB<br>
HugePages_Total:    0<br>
HugePages_Free:    0<br>
HugePages_Rsvd:   0<br>
HugePages_Surp:    0<br>
Hugepagesize:         2048 kB<br>
<br>
most of values are 0.<br>
<br>
I have an question about SwapTotal and SwapFree for LXC.<br>
As I thinking that:<br>
<br>
MemTotal might be: hierarchical_memory_limit<br>
MemFree might be: hierarchical_memory_limit - cache<br>
  <br>
</blockquote></div></div>
I am not a memory expert, but isn't MemFree : hierarchical_memory_limit - rss ?<div class="im"><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
the<br>
<br>
SwapTotal might be: hierarchical_memsw_limit<br>
SwapFree might be: hierarchical_memsw_limit - rss<br>
<br>
rss - # of bytes of anonymous and swap cache memory<br>
I don't know at all that hierarchical_memsw_limit is an good value for swap<br>
total, because as I read it is a mem+swap at all.<br>
<br>
Does the lxc memory.meminfo might look like above? Where can I get the<br>
Hugepagesize?<br>
  <br>
</blockquote></div>
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.<br>

<br>
<br>
</blockquote></div><br>Hmm..<br>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.<br>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.<br>
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.<br>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? :)<br>
<br>-- <br>Krzysztof Taraszka<br>