Re: stack hogs in kernel

From: Randall Stewart <rrs_at_cisco.com>
Date: Wed, 16 Apr 2008 09:27:13 -0400
Jeff Roberson wrote:
> On Tue, 15 Apr 2008, Andrew Reilly wrote:
> 
>> On Sat, Apr 12, 2008 at 08:16:01PM +0200, Roman Divacky wrote:
>>> On Sat, Apr 12, 2008 at 07:14:21PM +0100, Robert Watson wrote:
>>>>
>>>> On Fri, 11 Apr 2008, Julian Elischer wrote:
>>>>
>>>>> 0xc05667e3 kldstat [kernel]:                2100
>>>>> 0xc07214f8 sendsig [kernel]:                1416
>>>>> 0xc04fb426 ugenread [kernel]:                1200
>>>>> 0xc070616b ipmi_smbios_identify [kernel]:        1136
>>>>> 0xc050bd26 usbd_new_device [kernel]:            1128
>>>>> 0xc0525a83 pfs_readlink [kernel]:            1092
>>>>> 0xc04fb407 ugenwrite [kernel]:                1056
>>>>> 0xc055ea33 prison_enforce_statfs [kernel]:        1044
>>>>
>>>> This one, at least, is due to an issue Roman pointed out on hackers_at_ 
>>>> in the
>>>> last 24 hours -- a MAXPATHLEN sized buffer on the stack.  Looks like
>>>> pfs_readlink() has the same issue.
>>>
>>> I plan to look at some of the MAXPATHLEN usage... I guess we can 
>>> shave a few
>>> tens of KBs from the kernel (static size and runtime size).
>>
>> Why are single-digit kilobytes of memory space interesting, in this
>> context?  Is the concern about L1 data cache footprint, for performance
>> reasons?  If that is the case, the MAXPATHLEN bufffer will only really
>> occupy the amount of cache actually touched.
>>
>> I've long wondered about the seemingly fanatical stack size concern in
>> kernel space.  In other domains (where I have more experience) you can
>> get good performance benefits from the essentially free memory management
>> and good cache re-use that comes from putting as much into the
>> stack/call-frame as possible.
> 
> There is a small fixed kernel stack per-thread.  It has to be allocated 
> up-front out of kernel memory.  There isn't really enough KVA to just 
> allow kernel stacks to grow unbounded.  Also consider that most of the 
> time this memory is just unused.
> 
> Right now on amd64 we allocate 4 pages for kernel stacks!  This is just 
> huge.  It makes allocation slower and more likely to fail since we have 
> to find 5 contiguous pages (one for a guard page).
> 

Ahh, so we are different depending on the arch ... interesting.. I guess
that makes sense.. probably in mips we should have more too :-)

R

-- 
Randall Stewart
NSSTG - Cisco Systems Inc.
803-345-0369 <or> 803-317-4952 (cell)
Received on Wed Apr 16 2008 - 11:36:38 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:29 UTC