Autodesk smoke. rendering speed. bottleneck
by Sameer Shrivastava on Sep 28, 2012 at 11:03:38 am
Hi
I am using MBP i7, 17" early 2011 with amd 6750M graphics. with the following config
1. 750 gb hdd with dedicated 160gb osx partition(read write above 80 MBPS). free over 100GB
2. SSD drive for media storage. (read above 450 MBPS, write above 325MBPS)
3. 2TB thunderbolt Lacie little big disk (read above 180MBPd, write above 180MBPS)
4. 16 gb ram
5. another source media hdd connected via esata(@express card. with io of 110 read and 80MBPS write.
6. Sytem with 8 core processor
the source footage is 10bit MOV file.
when i process/render on autodesk smoke. the
CPU USAGE is abt 30-40% max
hdd io is 20-30 mbps max
ram lot of inactive memory ( above 6-8 gb). hardly any page ins or out or swap usage
gpu memory usage around 15-20%
so where is bottleneck. why is not my system used at full potential. I use my system with power adapter attached.
like cpu 100%, or io near limit or ram near limit.
attached pic shows the above bottleneck
1. source footage soft imported from SSD drive OCZ
2. rendering to thunderbolt drive (two samsung disks in raid0)
Re: Autodesk smoke. rendering speed. bottleneck by Steve Modica on Sep 28, 2012 at 2:33:05 pm
I'm going to guess it's the Lacie. I would expect a single SATA drive to do about 40MB/sec sequential and the output of this operation might not be entirely sequential. The 180MB/sec number sounds high unless those are SSDs.
If you open a terminal and run "iopending" (you'll need to be root) how big does your IO queue get while this is going on? I imagine you'll see lots of IOs sitting in the queue.
Re: Autodesk smoke. rendering speed. bottleneck by Sameer Shrivastava on Sep 28, 2012 at 3:51:19 pm
HI,
Thnx for the reply. it doenst seems so. i just ran a quick test. the source media on the SSD (internal drive @ 6gbps) and rendering also on the same SSD. Result 11mbps read and 8mbps write.
Lacie is raid0 thunderbolt drive. benchmarks IO are around 180MBPS.
Re: Autodesk smoke. rendering speed. bottleneck by Steve Modica on Sep 28, 2012 at 5:18:17 pm
Try this then:
Open a terminal and get into a root shell:
sudo bash
(enter password)
Run ps -ef and find the process that's doing the rendering. Get the PID number
Run dtruss to see what calls it's making:
# dtruss -p PID -f (-f tells it to follow forks)
The output should be a lot of system calls. I'm curious if it's calling into the openCL framework to use the GPU. That seems to be the one resource we can't monitor. Maybe the GPU is saturated? Maybe the app is just very inefficient? I've seen cases where apps read very little, work on it, then read more. This results in inefficient IO.
Re: Autodesk smoke. rendering speed. bottleneck by Sameer Shrivastava on Sep 28, 2012 at 6:04:41 pm
Hi Steve,
Thnx for ur replies.
I tried finding the PID
I guess u meant to find the pid of autodesk smoke. as that seems to be relevant. I also found PID of wiretap gateway.
Smoke pid 651
Re: Autodesk smoke. rendering speed. bottleneck by Steve Modica on Sep 28, 2012 at 8:37:53 pm
Those are just synchronization calls. errno 60 is "timed out". So it's likely the calls are made to sleep for a specific amount of time and then wakeup to do something.
Assuming these threads were the busy ones (using all your CPU), they were operating in user space. So you don't see any system calls. So they next step would be to dig in further with dtrace (which is what dtruss uses) to start pulling out sample stack traces to see what they are doing.
Watch this video
You can skip about the first 10 minutes, but this guy gives some great simple commands you can do to see what's going on. dtrace is extremely powerful.
Re: Autodesk smoke. rendering speed. bottleneck by Steve Modica on Oct 1, 2012 at 5:25:58 pm
This result implies one of two things.
Either the app is waiting around for IO to complete (you'd see iopending showing lots of stuff in the queue) or the app is waiting for some user threads to synchronize.
In the past, I've seen weird things like this where the app kicked off 16 threads (because there were 16 cpus), but one cpu was busy. So each "clock", 15 threads would run, then sleep waiting for 16 to run. He'd get a cpu once the others finished. This had the effect of serializing the entire thing and making it very slow.
I don't know much about how this things tunes itself, but imagine it counts hyperthreading as independent CPUS. IO usually doesn't allow hyperthreading, so that might cause the issue.
Re: Autodesk smoke. rendering speed. bottleneck by Steve Modica on Oct 1, 2012 at 5:58:21 pm
What looks relevant to me is the load average. the IO doesn't look backed up. The load average shows the number of threads waiting to run (a little like the io queue, but threads waiting to get a cpu).
19 is a pretty high number. How many cpus are being used? How many threads does autodesk have going? (You can see by looking at the "Threads" column next to the process in the Activity Monitor.
Re: Autodesk smoke. rendering speed. bottleneck by Brian Mulligan on Oct 1, 2012 at 6:29:33 pm
this is a great thread... I might point out that some effects are GPU processed. Not sure how that effects what you are doing overall.
I did ask the same question early on, and never got a satisfactory answer.
Brian Mulligan
Senior Editor - Autodesk Smoke
WTHR-TV Indianapolis,IN, USA
Twitter: @bkmeditor
Re: Autodesk smoke. rendering speed. bottleneck by Steve Modica on Oct 1, 2012 at 6:45:57 pm
When IO is involved, the virtual cores usually can't be used.
My best guess is that the threads running are cpu bound (using all of their 2 cpus) and so there's a lot of waiting for things to finish before IO can occur. As Brian points out, it could also be waiting for the GPUS.
I don't know if there's a utility to show us GPU activity.
I'd really like something that would show me GPU and RAID controller activity. Those are usually both black boxes :(
Re: Autodesk smoke. rendering speed. bottleneck by Sameer Shrivastava on Oct 1, 2012 at 7:27:47 pm
Hi Steve,
Thnx for your suggestions. Ill try to digout more.
When I did dtrace "as posted above" for what smoke is doing. I didnt find any gpu calls. Atleast what i can make out from my limited Knowledge.
Another thing when i try to use "Burn" option to render the action setup, it reports " Cannot burn. Rendering this action setup requires a GPU". Maybe Smoke is unable to access or use the GPU for some reason.
To point out there are two GPU in the system and smoke only runs on AMD 6750M. I have to disable GPU switching and force the system to only use AMD. Otherwise smoke App doesn't start.
And i can only monitor its memory usage till now. which vary between 20-50%.
But gfx card status application reports AMD 6750 being used with dependancies of smoke pid.
I couldn't find a way to monitor gpu activity till yet. Can dtrace help on that.
One odd thing is when i see console during smoke startup is that intel HD Graphics 3000 driver being loaded.
01/10/12 11:28:14.629 PM [0x0-0x2c12c1].com.autodesk.smoke: Workstation: MacBookPro8,3
01/10/12 11:28:14.629 PM [0x0-0x2c12c1].com.autodesk.smoke: CPU: 1 Intel Core i7 @ 2.2 GHz, 4 cores
01/10/12 11:28:14.629 PM [0x0-0x2c12c1].com.autodesk.smoke: RAM: 16 GB of RAM
01/10/12 11:28:14.629 PM [0x0-0x2c12c1].com.autodesk.smoke: Graphics: Intel HD Graphics 3000 Driver:
01/10/12 11:28:14.629 PM [0x0-0x2c12c1].com.autodesk.smoke: OS: Mac OS X 10.7.4 (11E53)
01/10/12 11:28:14.630 PM [0x0-0x2c12c1].com.autodesk.smoke: Kernel: Darwin 11.4.0
01/10/12 11:28:14.699 PM [0x0-0x2c12c1].com.autodesk.smoke: MENU : /usr/discreet/smoke_2012.SP3/menu/default.menu
But when i run autodesk qualification report
Current operating system version:Mac OS X 10.7.4 (11E53) unknown more details
CPU type: Intel processor found Intel Core i7, recommended
Current platform name:MacBookPro8,3 unknown more details
Number of cores (minimum 2, recommended 8 or more): found 8 cores, recommended
Internal memory (recommended: 12 GB or more): found 16.00 gigabytes, recommended
Graphics card #1, verification: found AMD Radeon HD 6750M unknown more details
Graphics card #2, verification: found Intel HD Graphics 3000 unknown more details
Monitor #1 Color LCD: main window @ 1920x1200, recommended
Available system disk space (Minimum 500M needed for install):found 98G free, recommended
Re: Autodesk smoke. rendering speed. bottleneck by Steve Modica on Oct 1, 2012 at 8:23:35 pm
If you watch some more of the dtrace video, you'll see a section where he looks at the ustack output of the processes. You need to do that. The users stack should show GPU calls.
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonipc.dylib`CoLock::get()+0x57
libDLcommonipc.dylib`CoFifoLock::dequeue()+0x15
smoke`virtual thunk to SWX_MultiThreadedStreamingService::processNext()+0x1222a
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x480b7
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x484c4
libDLcommonthreads.dylib`CoThreadPthread::execute()+0x94
libDLcommonthreads.dylib`CoThreadPthread::executeCb(void*)+0x6e
libsystem_c.dylib`_pthread_start+0x14f
libsystem_c.dylib`thread_start+0xd
16
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonipc.dylib`CoLock::get()+0x57
libDLcommonipc.dylib`CoFifoLock::dequeue()+0x15
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x1cf54
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x1d15f
smoke`non-virtual thunk to VolumeManager::VolumeFrameAccessImpl::~VolumeFrameAccessImpl()+0x57ff
smoke`non-virtual thunk to EdluControlUI::~EdluControlUI()+0x3b940
smoke`non-virtual thunk to EdluControlUI::~EdluControlUI()+0x3bd2a
smoke`non-virtual thunk to VideoMedia::~VideoMedia()+0x8e9
smoke`non-virtual thunk to Media::isOffline(int, int) const+0x84f
smoke`non-virtual thunk to Media::allocateExtend(FS_Ctx const&)+0x55a
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x52588
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x52918
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x16f1
smoke`non-virtual thunk to CoSurface::~CoSurface()+0x1d95f
smoke`0x1003e7173
smoke`0x1003e7211
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x7a01
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x1b222
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x20602
16
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonipc.dylib`CoLock::get()+0x57
libDLcommonipc.dylib`CoFifoLock::dequeue()+0x15
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x1cf54
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x1d15f
smoke`non-virtual thunk to VolumeManager::VolumeFrameAccessImpl::~VolumeFrameAccessImpl()+0x571f
smoke`non-virtual thunk to EdluControlUI::~EdluControlUI()+0x3b4a0
smoke`non-virtual thunk to EdluControlUI::~EdluControlUI()+0x3b71a
smoke`non-virtual thunk to EdluControlUI::~EdluControlUI()+0x3be55
smoke`non-virtual thunk to VideoMedia::~VideoMedia()+0x5478
smoke`non-virtual thunk to Media::isOffline(int, int) const+0x7df
smoke`non-virtual thunk to Media::allocateExtend(FS_Ctx const&)+0x1aa
smoke`non-virtual thunk to CwSecMatteObj::resizeTo(PxlFormat)+0x164631
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x51f01
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x6f786
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x6f8b9
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x74250
smoke`virtual thunk to VMActionView::drawToTexture()+0x963a
smoke`non-virtual thunk to MModuleUI::isCurrentSubMenuNode() const+0x2a2
smoke`non-virtual thunk to DynamicUI::HiddenButton::~HiddenButton()+0x42b78
16
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonipc.dylib`CoLock::get()+0x57
libDLcommonipc.dylib`CoFifoLock::dequeue()+0x15
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x1cf54
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x1d15f
smoke`virtual thunk to SWX_MultiThreadedStreamingService::processNext()+0x122ef
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x480b7
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x484c4
libDLcommonthreads.dylib`CoThreadPthread::execute()+0x94
libDLcommonthreads.dylib`CoThreadPthread::executeCb(void*)+0x6e
libsystem_c.dylib`_pthread_start+0x14f
libsystem_c.dylib`thread_start+0xd
16
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonipc.dylib`CoLock::get()+0x57
libDLcommonthreads.dylib`CoThreadPthread::equal(CoThread*) const+0x26
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x1ffd9
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x216dd
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x2183b
smoke`non-virtual thunk to ModuleStateBase::~ModuleStateBase()+0x667541
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x249a9
libDLcommonthreads.dylib`CoThreadPthread::execute()+0x94
libDLcommonthreads.dylib`CoThreadPthread::executeCb(void*)+0x6e
libsystem_c.dylib`_pthread_start+0x14f
libsystem_c.dylib`thread_start+0xd
18
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonipc.dylib`CoLock::get()+0x57
libDLcommonthreads.dylib`CoThreadPthread::equal(CoThread*) const+0x26
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x1ffd9
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x216dd
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x2183b
smoke`non-virtual thunk to ModuleStateBase::~ModuleStateBase()+0x4f6fa
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x249a9
libDLcommonthreads.dylib`CoThreadPthread::execute()+0x94
libDLcommonthreads.dylib`CoThreadPthread::executeCb(void*)+0x6e
libsystem_c.dylib`_pthread_start+0x14f
libsystem_c.dylib`thread_start+0xd
28
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonipc.dylib`CoLock::get()+0x57
libDLcommonipc.dylib`CoFixedSizeFifo::dequeue()+0x15
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x4809c
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x484c4
libDLcommonthreads.dylib`CoThreadPthread::execute()+0x94
libDLcommonthreads.dylib`CoThreadPthread::executeCb(void*)+0x6e
libsystem_c.dylib`_pthread_start+0x14f
libsystem_c.dylib`thread_start+0xd
48
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonimg.dylib`CoUnitExec::exec_resume(int, CoJob&)+0x1e8
libDLcommonimg.dylib`CoJobExec::Imp::execute(CoJob&)+0x309
libDLcommonimg.dylib`IP_ImgConvert_Soft_MP(FrameHeader_s const*, FrameHeader_s*)+0x1ca
libDLcommonimg.dylib`IpFunctionFlavour::callFunction(char const*, int, __va_list_tag*)+0xf13
libDLcommonimg.dylib`IpFunction::callFunction(FunctionFlavour, IpContext*, int, __va_list_tag*)+0x22e
libDLcommonimg.dylib`IpSelectionEngine::myCallFunction(char const*, FunctionFlavour, IpContext*, int, __va_list_tag*)+0x115
libDLcommonimg.dylib`IpSelectionEngine::callFunction(char const*, unsigned int, int, ...)+0x149
libDLcommonimg.dylib`IP_Unpack(unsigned char const*, FrameHeader_s*, PxlFormat)+0x68
smoke`non-virtual thunk to EdluControlUI::~EdluControlUI()+0x3b4f6
smoke`non-virtual thunk to EdluControlUI::~EdluControlUI()+0x3b855
smoke`non-virtual thunk to EdluControlUI::~EdluControlUI()+0x3bda6
smoke`non-virtual thunk to VideoMedia::~VideoMedia()+0x8e9
smoke`non-virtual thunk to Media::isOffline(int, int) const+0x84f
smoke`non-virtual thunk to Media::allocateExtend(FS_Ctx const&)+0x55a
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x52588
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x52918
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x16f1
smoke`non-virtual thunk to CoSurface::~CoSurface()+0x1d95f
smoke`0x1003e7173
80
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonipc.dylib`CoLock::get()+0x57
libDLcommonthreads.dylib`CoThreadPthread::equal(CoThread*) const+0x26
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x1ffd9
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x216dd
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x2183b
smoke`non-virtual thunk to ModuleStateBase::~ModuleStateBase()+0x4d0ed
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x1f068
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x249a9
libDLcommonthreads.dylib`CoThreadPthread::execute()+0x94
libDLcommonthreads.dylib`CoThreadPthread::executeCb(void*)+0x6e
libsystem_c.dylib`_pthread_start+0x14f
libsystem_c.dylib`thread_start+0xd
86
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonipc.dylib`CoLock::get()+0x57
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x210de
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x21f7b
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x24d2f
smoke`non-virtual thunk to ModuleStateBase::~ModuleStateBase()+0x98c44e
libDLcommonimg.dylib`IpFunctionFlavour::callFunction(char const*, int, __va_list_tag*)+0xd8d
libDLcommonimg.dylib`IpFunction::callFunction(FunctionFlavour, IpContext*, int, __va_list_tag*)+0x22e
libDLcommonimg.dylib`IpSelectionEngine::myCallFunction(char const*, FunctionFlavour, IpContext*, int, __va_list_tag*)+0x115
libDLcommonimg.dylib`IpSelectionEngine::callFunction(char const*, unsigned int, int, ...)+0x149
smoke`non-virtual thunk to ModuleStateBase::~ModuleStateBase()+0x98e6c6
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x1ab0b
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x1b336
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x20602
smoke`non-virtual thunk to CoSurface::~CoSurface()+0x1d95f
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x1feb9
smoke`non-virtual thunk to CoGlossMap::~CoGlossMap()+0x253d
smoke`non-virtual thunk to CoGlossMap::~CoGlossMap()+0x3bb9
smoke`virtual thunk to VMActionView::drawToTexture()+0xa3a3
smoke`virtual thunk to VMActionView::drawToTexture()+0xc479
90
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonimg.dylib`CoUnitExec::exec_resume(int, CoJob&)+0x1e8
libDLcommonimg.dylib`CoJobExec::Imp::execute(CoJob&)+0x309
libDLcommonimg.dylib`IP_ImgConvert_Soft_MP(FrameHeader_s const*, FrameHeader_s*)+0x1ca
libDLcommonimg.dylib`IpFunctionFlavour::callFunction(char const*, int, __va_list_tag*)+0xf13
libDLcommonimg.dylib`IpFunction::callFunction(FunctionFlavour, IpContext*, int, __va_list_tag*)+0x22e
libDLcommonimg.dylib`IpSelectionEngine::myCallFunction(char const*, FunctionFlavour, IpContext*, int, __va_list_tag*)+0x115
libDLcommonimg.dylib`IpSelectionEngine::callFunction(char const*, unsigned int, int, ...)+0x149
libDLcommonimg.dylib`IP_Pack(FrameHeader_s const*, unsigned char*, PxlFormat)+0x65
smoke`non-virtual thunk to EdluControlUI::~EdluControlUI()+0x3b266
smoke`non-virtual thunk to EdluControlUI::~EdluControlUI()+0x3b6a5
smoke`non-virtual thunk to EdluControlUI::~EdluControlUI()+0x3b74f
smoke`non-virtual thunk to EdluControlUI::~EdluControlUI()+0x3be55
smoke`non-virtual thunk to VideoMedia::~VideoMedia()+0x5478
smoke`non-virtual thunk to Media::isOffline(int, int) const+0x7df
smoke`non-virtual thunk to Media::allocateExtend(FS_Ctx const&)+0x1aa
smoke`non-virtual thunk to CwSecMatteObj::resizeTo(PxlFormat)+0x164631
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x51f01
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x6f786
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x6f8b9
100
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonipc.dylib`CoLock::get()+0x57
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x210de
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x21f7b
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x2209f
smoke`non-virtual thunk to ModuleStateBase::~ModuleStateBase()+0x4b07e
smoke`non-virtual thunk to ModuleStateBase::~ModuleStateBase()+0x51e07
smoke`non-virtual thunk to ModuleStateBase::~ModuleStateBase()+0x5420d
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x45503
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x456f7
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x46613
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x4d50
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x80f0
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x8442
smoke`non-virtual thunk to CoSurface::~CoSurface()+0x1d95f
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x7c7c
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x1b222
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x20602
smoke`non-virtual thunk to CoSurface::~CoSurface()+0x1d95f
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x1feb9
113
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonipc.dylib`CoLock::get()+0x57
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x210de
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x21f7b
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x2209f
smoke`non-virtual thunk to ModuleStateBase::~ModuleStateBase()+0x4b19e
smoke`non-virtual thunk to ModuleStateBase::~ModuleStateBase()+0x53c3e
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x45503
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x456f7
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x46613
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x4d50
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x80f0
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x8442
smoke`non-virtual thunk to CoSurface::~CoSurface()+0x1d95f
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x7c7c
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x1b222
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x20602
smoke`non-virtual thunk to CoSurface::~CoSurface()+0x1d95f
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x1feb9
smoke`non-virtual thunk to CoGlossMap::~CoGlossMap()+0x253d
115
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonipc.dylib`CoLock::get()+0x57
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x210de
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x21f7b
smoke`non-virtual thunk to DmProjectNode::~DmProjectNode()+0x2209f
smoke`non-virtual thunk to ModuleStateBase::~ModuleStateBase()+0x4b07e
smoke`non-virtual thunk to ModuleStateBase::~ModuleStateBase()+0x51e07
smoke`non-virtual thunk to ModuleStateBase::~ModuleStateBase()+0x54926
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x45503
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x456f7
smoke`non-virtual thunk to PvListViewEntry::~PvListViewEntry()+0x46613
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x4d50
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x80f0
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x8442
smoke`non-virtual thunk to CoSurface::~CoSurface()+0x1d95f
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x7c7c
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x1b222
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x20602
smoke`non-virtual thunk to CoSurface::~CoSurface()+0x1d95f
smoke`non-virtual thunk to ActionClip::~ActionClip()+0x1feb9
124
libsystem_kernel.dylib`__psynch_cvwait+0xa
libDLcommonimg.dylib`CoUnitExec::exec_resume(int, CoJob&)+0x1e8
libDLcommonimg.dylib`CoJobExec::Imp::execute(CoJob&)+0x309
libDLcommonimg.dylib`IM_CommonQuickTime::getImageFrame(IM_BitsPerChannel, int, void*, void*, bool, FrameResolution const&, bool)+0x231
libDLcommonimg.dylib`IM_LibQuickTime::getImageFrame(IM_BitsPerChannel, int, void*, void*, bool, FrameResolution const&, bool)+0x208
smoke`virtual thunk to SWX_MultiThreadedStreamingService::processNext()+0x262ec
smoke`virtual thunk to SWX_MultiThreadedStreamingService::~SWX_MultiThreadedStreamingService()+0x369
smoke`virtual thunk to SWX_Video::processTask(SWMessage&)+0x74
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x480b7
smoke`non-virtual thunk to CW_Editor::OnDirtyChannel(PoChannel*)+0x484c4
libDLcommonthreads.dylib`CoThreadPthread::execute()+0x94
libDLcommonthreads.dylib`CoThreadPthread::executeCb(void*)+0x6e
libsystem_c.dylib`_pthread_start+0x14f
libsystem_c.dylib`thread_start+0xd
484
I'm wondering about this lock. Just about all of the threads are going through this code. I wonder if it's a common lock and it's getting over used. If it's a sleeping lock, you would see just what you're seeing. Lots of waiting processes, not a lot of cpu and not a lot of useful work being done.
Apple has "lockstat". It's a tool that will profile all the kernel locks on the system. I don't know if it can do user space locks. I'd like to know how often that lock is getting locked and unlocked/second. I believe lockstat comes with Xcode.
This is the sort of thing you might want to open a call with Autodesk for. When you have interesting data, that usually gets someone's attention.
I think the scheduling instrument (part of Xcode) might be another tool to prove this theory. IF you are seeing 10,000 or more context switches a second, it's likely the processes are mostly fighting over that lock and not getting any real work done.
Re: Autodesk smoke. rendering speed. bottleneck by Sameer Shrivastava on Oct 4, 2012 at 6:38:09 pm
Hi
Here is the Answer from an Autodesk Support
"
Hi all.
There are a few reasons that could explain what you are seeing but first it’s important understand what Activity Monitor is showing in the P;U column. The total sum of all % in the P;U column is 100 * (number of CPUs * number of cores per CPU) * 2 if hyper threading is enabled.
For example, on a single CPU, quad core Mac Book Pro with hyper threading enabled the maximum would be 100 * (1 * 4 * 2) = 800%.
Therefore, theoretically a process using all the CPU resources of that particular machine would read ~800% in the P;U column and the other processes would read ~0%. If you see a process reading 100% in the P;U column it’s not using all the available CPU resources. Another way to visualize this is to open the CPU usage window from the Window menu of Activity Monitor.
That being explained here are a few reasons that could explain what you are seeing:
1- Smoke is doing most of its processing using the GPU and not the CPU. Therefore, if most/all effects you are rendering are doing their processing on the GPU it’s normal that the CPU usage is low. When this is the case Smoke will show P;U < 100% in Activity Monitor because the CPU is only used to send/read the image to process to/from the GPU.
2- Not all effects that process on the CPU are written to use more than one CPU. When this is the case Smoke will usually show a P;U ~100% in Activity Monitor.
3- The bottleneck might with the speed at which Smoke can read/write the image from/to your disk or network.
In your particular case, since you mentioned that you are testing rendering an Action in CFX, you are most likely being faced with point 1.
Action does almost all its rendering on the GPU and this is the case both if you create a project in CPU or GPU mode.
I hope this helps.
Robert.