Closed
Bug 664341
Opened 13 years ago
Closed 13 years ago
Reduce video thread stack size, on 32-bit linux at least
Categories
(Core :: Audio/Video, defect)
Tracking
()
RESOLVED
FIXED
mozilla8
People
(Reporter: n.nethercote, Assigned: cpearce)
Details
(Whiteboard: [MemShrink:P2])
Attachments
(2 files, 1 obsolete file)
7.99 KB,
patch
|
cpearce
:
review+
|
Details | Diff | Splinter Review |
4.33 KB,
patch
|
kinetik
:
review+
|
Details | Diff | Splinter Review |
From bug 592833 comment 9: > Reducing the thread stack size is a good idea, as we reserve 10MB per thread > stack on Linux, which kills us on 32bit Linux. IIRC, we use 1MB thread stacks > on Windows and OSX, so the problem isn't so pronounced there, but we can > probably still make some easy gains by reducing stack size there anyway.
Reporter | ||
Updated•13 years ago
|
Whiteboard: [MemShrink:P2]
How deep do these threads get? If they don't use much of the stack we should shrink windows too ... 1 MB * 3 threads * N audio/video elements is a fair amount of virtual address space. I've seen minidumps with 100s of AV threads.
Comment 2•13 years ago
|
||
Linux is 8MB by default, not 10MB. OS X uses 512kB by default and we haven't seen stack exhaustion there, so we could probably reduce Win32 thread stack sizes safely. Fixing this will require some new API for nsIThread/NS_NewThread.
Comment 3•13 years ago
|
||
libvorbis uses alloca, potentially of several times the largest block size (which is 8192). libtheora requires less than 2kB of stack. I'd need to double-check for libvpx, but I would expect this to be similarly small.
Reporter | ||
Comment 4•13 years ago
|
||
(In reply to comment #1) > 1 MB * 3 threads * N audio/video elements Bug 592833 will avoid the "* 3" term.
Reporter | ||
Comment 5•13 years ago
|
||
Just to clarify: we'd only do this for audio/video threads, right?
Assignee | ||
Comment 6•13 years ago
|
||
Why does Linux need such large stack sizes compared to other platforms in general? bent/cjones?
Summary: Reduce thread stack size, on 32-bit linux at least → Reduce video thread stack size, on 32-bit linux at least
(In reply to comment #6) > Why does Linux need such large stack sizes compared to other platforms in > general? bent/cjones? I don't think it needs them ... that's just the default.
Right. Threads' stack memory isn't committed on alloc, so a large default usually makes sense.
Assignee | ||
Updated•13 years ago
|
Assignee: nobody → chris
Status: NEW → ASSIGNED
Comment 9•13 years ago
|
||
(In reply to comment #8) 8M seems excessive though. Perhaps we should institute a 1M limit for all stacks on all platforms, and try to stay within (eg) 256k so as to leave a good safety margin. If the Linux kernel can get by in an 8K stack, 8M seems wildly extravagant. gcc-4.6.0 at least has a -Wframe-larger-than=<number> Warn if a function's stack frame requires more than <number> bytes which might be useful.
Assignee | ||
Comment 10•13 years ago
|
||
Add an API nsIThreadManager and nsThread to specify the size of thread stacks. This just passes the value through to PR_CreateThread(), which already allows you to set stack size. I have another patch to set the size of thread stacks in the <video>, but I'll wait until this patch gets r+ before posting that.
Attachment #541516 -
Flags: review?(benjamin)
Assignee | ||
Comment 11•13 years ago
|
||
bsmedberg: review ping?
Comment 12•13 years ago
|
||
Comment on attachment 541516 [details] [diff] [review] Patch: Add API to specify amount reserved for thread stack size JS shouldn't be using this API, but you will at least need to fix up test_bug608142.js I'd really like a constant for the stack size, instead of hardcoded 0 (e.g. const unsigned int DEFAULT_STACK_SIZE = 0; in nsIThreadManager) And can you just add a default argument to the existing NS_NewThread instead of declaring another version? r=me with at least the constant
Attachment #541516 -
Flags: review?(benjamin) → review+
Assignee | ||
Comment 13•13 years ago
|
||
With bmsedberg's review comments addressed. Carrying forward r=bsmedberg. I made the stack size argument in nsIThreadManager [optional], so that existing js which uses this API (in our tests) don't need to change. I also added the constant DEFAULT_STACK_SIZE in nsIThreadManager as requested.
Attachment #548350 -
Flags: review+
Assignee | ||
Updated•13 years ago
|
Attachment #541516 -
Attachment is obsolete: true
Assignee | ||
Comment 14•13 years ago
|
||
Specify the media decoder's threads' stacks to reserve 128KB. I found that on my x64 Linux box I needed at least 98KB thread stacks when running mochitests with a debug build (opt builds may use less), so I rounded stack size up to 128KB to give us some wiggle room.
Attachment #548632 -
Flags: review?(kinetik)
Comment 15•13 years ago
|
||
Comment on attachment 548632 [details] [diff] [review] Patch: Specify media threads' stack size Review of attachment 548632 [details] [diff] [review]: ----------------------------------------------------------------- ::: content/media/VideoUtils.h @@ +157,5 @@ > // before being used! > void ScaleDisplayByAspectRatio(nsIntSize& aDisplay, float aAspectRatio); > > +// The amount of virtual memory reserved for thread stacks. > +#if defined(XP_WIN) || defined(XP_MACOSX) || defined(LINUX) XP_LINUX?
Attachment #548632 -
Flags: review?(kinetik) → review+
Assignee | ||
Comment 16•13 years ago
|
||
Nice catch, thanks. MEDIA_THREAD_STACK_SIZE should be nsIThreadManager::DEFAULT_STACK_SIZE too, not 0.
Assignee | ||
Comment 17•13 years ago
|
||
Ooops, XP_LINUX isn't actually defined centrally: http://mxr.mozilla.org/mozilla-central/search?string=XP_LINUX Have to go with using defined(LINUX)
Assignee | ||
Comment 18•13 years ago
|
||
http://hg.mozilla.org/integration/mozilla-inbound/rev/c56067ea7988 http://hg.mozilla.org/integration/mozilla-inbound/rev/685b3762558c
Status: ASSIGNED → RESOLVED
Closed: 13 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla8
Comment 19•13 years ago
|
||
http://hg.mozilla.org/mozilla-central/rev/c56067ea7988 http://hg.mozilla.org/mozilla-central/rev/685b3762558c please don't mark as fixed till bugs are merged to central.
You need to log in
before you can comment on or make changes to this bug.
Description
•