On Thu, Sep 8, 2016 at 11:37 AM, Ben Coman <b...@openinworld.com> wrote:
> - 9989 tallies, 10003 msec.
>
> **Tree**
> --------------------------------
> Process: other processes
> --------------------------------
> 99.2% {9928ms} ProcessorScheduler class>>startUp
>   99.2% {9928ms} ProcessorScheduler class>>idleProcess
> **Leaves**
> 99.2% {9928ms} ProcessorScheduler class>>idleProcess
>
> **Memory**
> old +0 bytes
> young -223,912 bytes
> used -223,912 bytes
> free +223,912 bytes
>
> **GCs**
> full 0 totalling 0ms (0.0% uptime)
> incr 2 totalling 6ms (0.0% uptime), avg 3.0ms
> tenures 0
> root table 0 overflows
>
> On Thu, Sep 8, 2016 at 9:44 AM, Vitor Medina Cruz <vitormc...@gmail.com> 
> wrote:
>> Hello,
>>
>> While profiling some I/O code that takes ~20 seconds to execute under my
>> local image, the report says that about ~13 seconds is waste on
>> OtherProcesses -> ProcessorScheduler class>>idleProcess. I could not
>> understand what this idleProcess do by looking at the code. First I thought
>> this could be time waiting the I/O operation to terminate, but that don't
>> make much sense because I have the same code on a Digital Ocean Doplet and
>> it takes ~6 seconds to execute.
>>
>> Can someone help me understand what does this time on idleProcess means?
>
> I don't have an exact answer for you, but a comparative example...
>
> Tools > Time Profiler...
>      10 seconds wait
> Full report...
> ==========================================
>  - 9989 tallies, 10003 msec.
>
> **Tree**
> --------------------------------
> Process: other processes
> --------------------------------
> 99.2% {9928ms} ProcessorScheduler class>>startUp
>   99.2% {9928ms} ProcessorScheduler class>>idleProcess
> **Leaves**
> 99.2% {9928ms} ProcessorScheduler class>>idleProcess
>
> **Memory**
> old +0 bytes
> young -223,912 bytes
> used -223,912 bytes
> free +223,912 bytes
>
> **GCs**
> full 0 totalling 0ms (0.0% uptime)
> incr 2 totalling 6ms (0.0% uptime), avg 3.0ms
> tenures 0
> root table 0 overflows
> ==========================================
>
> Now over that time, Windows 7 Task Manager showed Pharo process CPU load of 
> 0%,
> indicating the 9.9 seconds spent in idleProcess has no impact on performance.
> Or put another way, for 99.2% of that 10 seconds Pharo was *not* busy.
>
> Applying that to your results, I would guess that for 73.3% of that 20
> seconds you were waiting on I/O.
>
> To find your performance issues, follow down the percentages for where
> there are big jumps without splits.
> That is, ignore jumps where the splits add up to the parent.
> For example 14.3 + 10.8 ==> 25.1 - so no lost performance here...
>   25.0% {4656ms} TweetsServiceRestConsumer>>fetchLastTweetsUpTo:fromHandler:
>     14.3% {2653ms} OAuthProvider>>httpGet:
>       |
>     10.8% {2002ms} NeoJSONObject class>>fromString:
>
> Your biggest loss in a linear line seems to be...
> 5.6% {1041ms} NeoJSONReader>>parseValue
> to
> 1.5% {285ms} NeoJSONReader>>parseMap
>
>
> I am curious about the recursive calls to
> ZdcSecureSocketStream(ZdcSimpleSocketStream)>>fillReadBuffer
> and multiple accumulations from DelayExperimentalSpinScheduler>>unschedule:
> but that method doesn't really do a  lot. I wouldn't expect the
> whileTrue loop to be spinning much, but you could examine that by
>
>
> You might try another scheduler...
> World>System>Settings>System>Delay Scheduler

Another experiment might try could be divide-and-conquer by examining
a sample of what is returned by...
   10.8% {2002ms} NeoJSONObject class>>fromString:

and return a similar constant.

cheers -ben

Reply via email to