2017-07-28 10:26 GMT+02:00 Esteban Lorenzano <[email protected]>:

>
>
> On 28 Jul 2017, at 10:15, Denis Kudriashov <[email protected]> wrote:
>
> 6ms startup:true a ClassSessionHandler(ExternalObject)
>
>
> Most time here is taken by ExternalAddress startUp logic:
>
> ExternalAddress>>startUp: resuming
>
> ...
>
> instances := self allInstances.
>
> wordSize ~= Smalltalk wordSize
> ifTrue: "Implement nulling by becomming all existing instances to new (and
> hence null) pointers of the right size."
> [wordSize := Smalltalk wordSize.
> instances elementsForwardIdentityTo: (instances collect: [:ea| self
> basicNew: wordSize])]
> ifFalse:
> [instances do: [:addr| addr beNull]]]
>
>
> It scans all instances which is very expensive. And I thing it can lead to
> much more time in bigger images.
> Maybe we can perform this cleanup at "prepare for production" script and
> add special flag in image that all externals are already clean.
>
>
> Sorry but no :)
>
This will lead to all kind of pain since a lot of functionality depends on
> that. I played with moving the clean up to shutdown instead (which would be
> a better approach) but there were also problems.
> If you want to play in that sense, is cool. But ExternalAddress needs to
> be cleaned and each new session needs to be started and find instances of
> EA nulled.
>

Imaging that I deploy Seaside application. Why my image should spend time
for this useless check while fast server startup is very important?
I understand that current logic simplifies a lot of things when we do
development with many image saves. But production image can be safe enough
for such kind optimization.


>
> Esteban
>
>
>
> 2017-07-27 14:49 GMT+02:00 Sven Van Caekenberghe <[email protected]>:
>
>> Hi,
>>
>> I instrumented WorkingSession with a log collection that holds timing
>> info for each #startUp: executed. In a clean Pharo 6 image, 62 were run.
>> Most of them resulted in a 0ms execution time (#millisecondsToRun: i.e.
>> they were faster than 1ms). Here is the list of the non zero ones:
>>
>> 1ms startup:true a ClassSessionHandler(ProcessorScheduler)
>> 1ms startup:true a ClassSessionHandler(OSPlatform)
>> 6ms startup:true a ClassSessionHandler(ExternalObject)
>> 1ms startup:true a ClassSessionHandler(DiskStore)
>> 5ms startup:true a ClassSessionHandler(SmalltalkImage)
>> 9ms startup:true a ClassSessionHandler(DisplayScreen)
>> 1ms startup:true a ClassSessionHandler(Cursor)
>> 41ms startup:true a ClassSessionHandler(FT2Handle)
>> 238ms startup:true a ClassSessionHandler(FreeTypeSettings)
>> 1ms startup:true a ClassSessionHandler(WorldMorph)
>> 14ms startup:true a ClassSessionHandler(OmSessionStore)
>>
>> For a total of 318ms
>>
>> I think being able to inspect the WorkingSession and see this list
>> (ordered, with timing info) would be generally useful (and low cost). Even
>> headless, we could access the list using eval.
>>
>> Sven
>>
>> PS: The code of SessionManager/WorkingSession was very readable, well
>> done Christophe !
>>
>>
>>
>>
>>
>

Reply via email to