CONFIG_DEBUG_STACKOVERFLOW hurts
Gilboa Davara
gilboad at gmail.com
Mon Sep 17 16:42:27 UTC 2007
On Sat, 2007-09-15 at 17:45 -0500, Eric Sandeen wrote:
> Gilboa Davara wrote:
>
> >> I was looking at this from a slightly different angle, which is that the
> >> stack overflow warning is largely pointless - no matter how much you
> >> lighten up the dump_stack path, it will add something to the stack depth
> >> of the current process, effectively *reducing* the available stack for
> >> all processes, and increasing the risk that you'll actually overflow.
> >> (if you take an interrupt towards the end of the stack, the warning will
> >> go off and use the last bit - so you can't count on that stack space to
> >> be available).
> >
> > While it is true,
> > A. If adding ~40 bytes to the kernel's stack usage is critical, we're
> > already passed the all-doom-and-gloom-point.
>
> Though, just to play devil's advocate, say your absolute worst case
> stack depth goes to within 35 bytes of the end. The warning (even if
> trimmed down to 40 bytes) now renders your system unstable in the long
> run. Why waste it?
True.
... Though being the devil's advocate, if you don't have enough stack
space to dump_strace, do_IRQ should -really- call BUG() and halt
everything before things turn really ugly.
>
> > B. We can always calculate the available stack size, and if stack_remain
> > is bigger then say, 80 bytes, call dump_stack.
>
> That seems reasonable. Today, the dump_stack depth ~= the warning
> threshold, so it's just broken and pointless as it stands.
Hopefully my patch will get admitted, reducing the stack usage to ~<80
bytes. (I need to recalculate the callstack usage)
Speaking of which, who's the maintainer of kernel/*syms*?
The (second) patch [1] seemed to have passed the LKML without any
(negative) comments, so I'll try my luck with the actual code
maintainer. (I couldn't find anyone in MAINTAINERS)
>
> > Yeah, but at least to me, as a developer, having a warning before
> > all-hell-breaks-lose, is a good thing (tm).
>
> Perhaps. The current warning is fairly random, anyway, since it only
> fires on an IRQ. If you randomly get the warning at your max stack
> excursion, but never go so far as to actually blow the stack, then you
> really didn't need the warning, did you? If you get the warning at
> maybe 85% of your stack excursion, then your thread continues post-IRQ
> and blows the stack, you get a nice backtrace anyway and the warning
> didn't help much. I'm still not convinced that it's that useful.
I'm usually afraid of the randomness of things.
A minor stack over run can only show it's nasty head -long- -long- after
the actual trash took place making it next to impossible to pin-point
the original source of the problem.
>
> I like the CONFIG_DEBUG_STACKUSAGE which accurately tells you what your
> max stack excursions have been. I just wish it could tell you what the
> callchain *was* (not really possible, as it's written) - and making it
> resettable would be nice too (easy).
/me adds a note to self to lookup the CONFIG_DEBUG_STACKUSAGE code so
I'll know what you're talking about ;)
>
> -Eric
- Gilboa
[1] http://lkml.org/lkml/2007/9/15/159
More information about the Fedora-kernel-list
mailing list