Re: [PATCH] Tweak tracing allocation sizes

Andi Kleen
2008-09-02T06:49:33Z

Lachlan McIlroy <lachlan@sgi.com> writes:

> Dave Chinner wrote:
>> On Tue, Sep 02, 2008 at 03:48:46PM +1000, Lachlan McIlroy wrote:
>>> The size of a single ktrace entry is 16 pointers so 128 bytes. For the case
>>> of XFS_RW_KTRACE_SIZE which is 128 entries this equates to 16KB and on a system
>>> with 4KB pages that is under memory pressure this can stall that process for a
>>> significant time while it hunts for 4 free pages. Cutting this value back to
>>> 32 means it will only need one page.
>> That will effectively render that type of tracing useless - 32
>> entries is not enough history to capture enough
>> read/write/map/invalidate trace events to be meaningful. In the past
>> I've often had to increase this to 256 or 512 entries to be able to
>> capture the events necessary to debug problems...
>
> A system that constantly locks up and/or stalls is useless too. Allocating
> 4 or more pages for every inode just taxes the system. Can you offer an
> alternative - maybe a very large global trace buffer that is allocated at mount
> time and shared by all inodes?

You could use vmalloc(). While that is also not fast it will at least
not stall.

-Andi

--
ak@linux.intel.com