[lxc-devel] Memory Resources

Krzysztof Taraszka krzysztof.taraszka at gnuhosting.net
Mon Aug 24 12:22:04 PDT 2009


2009/8/24 Krzysztof Taraszka <krzysztof.taraszka at gnuhosting.net>

> 2009/8/24 Daniel Lezcano <daniel.lezcano at free.fr>
>
>> Krzysztof Taraszka wrote:
>>
>>> 2009/8/24 Daniel Lezcano <daniel.lezcano at free.fr>
>>>
>>>
>>>> [ snip ]
>>>>
>>>>   i think that /proc/meminfo should be mounted after /proc . why? i
>>>>> think
>>>>>
>>>>>> that, because mounting /proc may override /proc/meminfo
>>>>>>> Am I right? :)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>  Ha ! haha ! arrgh ! no way ! You are right :/
>>>>>>
>>>>>>
>>>>>>
>>>>>>  Hehe ;)
>>>>>
>>>>>
>>>>>
>>>>>  In the case of application container, lxc mounts /proc but in the case
>>>>>> of
>>>>>> system container it is the system who do that so after the
>>>>>> /proc/meminfo
>>>>>> has
>>>>>> been mounted.
>>>>>>
>>>>>> Maybe we can look at modifying fs/proc/meminfo.c instead. Let me do a
>>>>>> small
>>>>>> patch for the kernel...
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>  Okey. I am waiting for your patch :)
>>>>>
>>>>>  Quick and dirty patch but at least working. It is no synced on the
>>>> latest
>>>> kernel version.
>>>> I do not really like to touch fs/proc/meminfo.c but it's an example
>>>> here.
>>>>
>>>>
>>>
>>> Hi Daniel,
>>>
>>> I tried to compile my kernel tree (2.6.30.5) with your patch using
>>> gcc-4.4,
>>> gcc-4.3 and gcc-4.2 and i got this error on every gcc when linking
>>> kernel:
>>>
>>> mm/built-in.o: In function `mem_cgroup_info':
>>> (.text+0x27651): undefined reference to `__udivdi3'
>>> mm/built-in.o: In function `mem_cgroup_info':
>>> (.text+0x27678): undefined reference to `__udivdi3'
>>> mm/built-in.o: In function `mem_cgroup_info':
>>> (.text+0x276b0): undefined reference to `__udivdi3'
>>> mm/built-in.o: In function `mem_cgroup_info':
>>> (.text+0x276dd): undefined reference to `__udivdi3'
>>> make: *** [.tmp_vmlinux1] Error 1
>>>
>>> this can be gcc based error. What kernel and gcc did you use for compile
>>> your kernel?
>>>
>>
>> I used a 2.6.30 kernel and
>> gcc (GCC) 4.3.0 20080428 (Red Hat 4.3.0-8)
>> Compiled on a x86_64 host.
>>
>> Do you have any warning at the compile time ?
>>
>>
> No, did not see any warnings when memcontrol.c or fs/meminfo.c was
> compiled.
> Anyway, I will try to build in on the stable (lenny) version of debian
> (right now I am working on unstable debian tree).
> That might be gcc from unstable problem.
>
> I will let you know what exactly problem is.
>
>
ok Daniel,

i found a problem. I am runnning my debian box under vmware 32bit box so
your patch can not be compiled propertly on the 32bit system, so I decided
to make a little change in your patch.
I used shift operation instead of div. in the asm/div64.h is macro do_div()
but using shift instead of div is easier that implementing do_div macro, so
here is a small patch:

--- memcontrol.c.orig    2009-08-24 21:19:36.000000000 +0200
+++ memcontrol.c    2009-08-24 21:20:37.000000000 +0200
@@ -1834,14 +1834,13 @@
         si_swapinfo(info);

     if (limit != LLONG_MAX) {
-        info->totalram = limit / info->mem_unit;
-        info->freeram = (limit - mystat.stat[MCS_RSS]) / info->mem_unit;
+        info->totalram = limit >> info->mem_unit;
+        info->freeram = (limit - mystat.stat[MCS_RSS]) >> info->mem_unit;
     }

     if (memsw_limit != LLONG_MAX) {
-        info->totalswap = memsw_limit / info->mem_unit;
-        info->freeswap = (memsw_limit - swap_in_u) / info->mem_unit;
-
+        info->totalswap = memsw_limit >> info->mem_unit;
+        info->freeswap = (memsw_limit - swap_in_u) >> info->mem_unit;
     }

     return 0;


I hope that simple change won't to break on your 64bit :)

-- 
Krzysztof Taraszka
dzimi at pld-linux.org


More information about the Containers mailing list