[Lustre-discuss] Lustre Client - Memory Issue
Andreas Dilger
andreas.dilger at oracle.com
Mon Apr 19 21:04:02 PDT 2010
On 2010-04-19, at 11:16, Jagga Soorma wrote:
> What is the known problem with the DLM LRU size?
It is mostly a problem on the server, actually.
> Here is what my slabinfo/meminfo look like on one of the clients.
> I don't see anything out of the ordinary:
>
> (then again there are no jobs currently running on this system)
>
> slabinfo - version: 2.1
> # name <active_objs> <num_objs> <objsize> <objperslab>
> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> :
> slabdata <active_slabs> <num_slabs> <sharedavail>
> ll_async_page 326589 328572 320 12 1 : tunables 54
> 27 8 : slabdata 27381 27381 0
This shows you have 326589 pages in the lustre filesystem cache, or
about 1275MB of data. That shouldn't be too much for a system with
192GB of RAM...
> lustre_inode_cache 769 772 896 4 1 : tunables 54
> 27 8 : slabdata 193 193 0
> ldlm_locks 2624 3688 512 8 1 : tunables 54
> 27 8 : slabdata 461 461 0
> ldlm_resources 2002 3340 384 10 1 : tunables 54
> 27 8 : slabdata 334 334 0
Only about 2600 locks on 770 files is fine (this is what the DLM LRU
size would affect, if it were out of control, which it isn't).
> ll_obdo_cache 0 452282156 208 19 1 : tunables
> 120 60 8 : slabdata 0 23804324 0
This is really out of whack. The "obdo" struct should normally only
be allocated for a short time and then freed again, but here you have
452M of them using over 90GB of RAM. It looks like a leak of some
kind, which is a bit surprising since we have fairly tight checking
for memory leaks in the Lustre code.
Are you running some unusual workload that is maybe walking an unusual
code path? What you can do to track down memory leaks is enable
Lustre memory tracing, increase the size of the debug buffer to catch
enough tracing to be useful, and then run your job to see what is
causing the leak, dump the kernel debug log, and then run leak-
finder.pl (attached, and also in Lustre sources):
client# lctl set_param debug=+malloc
client# lctl set_param debug_mb=256
client$ {run job}
client# sync
client# lctl dk /tmp/debug
client# perl leak-finder.pl < /tmp/debug 2>&1 | grep "Leak.*oa"
client# lctl set_param debug=-malloc
client# lctl set_param debug_mb=32
Since this is a running system, it will report spurious leaks for some
kinds of allocations that remain in memory for some time (e.g. cached
pages, inodes, etc), but with the exception of uncommitted RPCs (of
which there should be none after the sync) there should not be any
leaked obdo.
> On 2010-04-19, at 10:43, Jagga Soorma <jagga13 at gmail.com> wrote:
>> My users are reporting some issues with memory on our lustre 1.8.1
>> clients. It looks like when they submit a single job at a time the
>> run time was about 4.5 minutes. However, when they ran multiple
>> jobs (10 or less) on a client with 192GB of memory on a single node
>> the run time for each job was exceeding 3-4X the run time for the
>> single process. They also noticed that the swap space kept
>> climbing even though there was plenty of free memory on the
>> system. Could this possibly be related to the lustre client? Does
>> it reserve any memory that is not accessible by any other process
>> even though it might not be in use?
>
Cheers, Andreas
--
Andreas Dilger
Principal Engineer, Lustre Group
Oracle Corporation Canada Inc.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: leak_finder.pl
Type: text/x-perl-script
Size: 2809 bytes
Desc: not available
URL: <http://lists.lustre.org/pipermail/lustre-discuss-lustre.org/attachments/20100419/0682f3f8/attachment.bin>
More information about the lustre-discuss
mailing list