Hi Gille,

   I'll respond to the two object spaces message next, but saw the point
about AST interprretation and I have a suggestion

On Wed, Jan 20, 2016 at 4:29 AM, Guillermo Polito <[email protected]
> wrote:

>
> On 20 ene 2016, at 9:08 a.m., Christophe Demarey <
> [email protected]> wrote:
>
> Hi Pavel,
>
> Le 19 janv. 2016 à 19:53, Pavel Krivanek a écrit :
>
> Hi,
>
> amazing! Do you have any idea how to speed up it? The bootstrap process is
> now running on my machine about one and half hour and it is still far from
> finish.
>
>
> The process is indeed far too long (takes around 10 hours) on the CI
> server.
> Reasons are:
> - we use a stack interpreter VM
> - we modified it and is a bit slower than a classical stack VM
>
>
> Not quite so. My measurements did not show that… But I can understand the
> feeling as the StackVM is in general half as fast as the CogVM, which is
> the VM we are used to use since years.
>
> - we use AST interpretation to build the bootstrap and it is very slow.
> Guille already did some speed improvements by avoiding to interpret loops
> by example.
>
> I did not yet spend time on this point because I first wanted to have
> something working.
> Definitely, this problem will be tackled when we will put in production
> the bootstrap.
>
>
> We should really measure because I see three main aspects:
>
> 1) class creation (executes the class builder using AST interpretation)
> 2) method compilation
> 3) method installation  (using AST interpretation to respect trait copying)
>
> My feeling (from what I observe only) is that most of the time is consumed
> in 2) and 3), and that specially it is in 3).
>

The AST interpretation seems to me easily replaced by bytecode
interpretation that should be much faster.  If you added a subclass of
Context, say OzInstallationInterpreter, this could override all methods
that make direct inst var access, such as

Context methods for instruction decoding
pushReceiverVariable: offset
"Simulate the action of bytecode that pushes the contents of the receiver's
instance variable whose index is the argument, index, on the top of the
stack."

self push: (self object: self receiver instVarAt: offset + 1)

with ones that map back from inst var offsets to inst var names, e.g.

OzInstallationInterpreter methods for instruction decoding
pushReceiverVariable: offset
"Simulate the action of bytecode that pushes the contents of the receiver's
instance variable whose index is the argument, index, on the top of the
stack.  Override to ensure that the offset of the named inst var is used."

self push: (self object: self receiver instVarNamed: (self
mapInstVarOffsetToName: offset + 1))

You might even be able to do this just in object:instVarAt:.

But if you move away from AST interpretation you save both the overhead of
interpreting the AST /and/ the cost of parsing the method to the AST, which
I presume is significant, and can simply use the methods extant in the
system.


> And I particularly want to see how the growing of collections perform.
>
>
> Cheers,
> Christophe
>
>
> Cheers,
> -- Pavel
>
> 2016-01-19 15:29 GMT+01:00 Christophe Demarey <[email protected]
> >:
>
>> Hi all,
>>
>> In case you do not know, we work on bootstrapping Pharo, i.e. create a
>> Pharo image from sources, not based on a previous image (well, we use a
>> pharo image to produce it but no code / state from it).
>>
>> This process will allow to define a minimal Pharo kernel (currently 52
>> packages but we could have it far smaller) and to modularize the whole
>> image (currently packages have too much dependencies on packages already
>> loaded into the image).
>> The bootstrap process also allows to write down the recipe to initialize
>> a new image from scratch (some code is missing in the image or is wrong).
>> In addition, I think we will clean a lot of historical objects that are not
>> used anymore.
>>
>> With the amazing work done by Guillermo Polito during his Phd (around
>> Espell, Oz):
>> https://guillep.github.io/files/publications/Poli15Thesis.pdf, *we
>> succeeded to get a first prototype of a bootstraped Pharo 5 image (from
>> 5.392)*.
>> This prototype is able to run an eval command line handler and to log
>> output / errors. Not all classes are yet initialized and you cannot yet
>> save / restart this image but it is a big step forward.
>> It is a 4 mb image (could be half the size without unicode data). You can
>> download it at:
>> http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-bootstrap.zip
>> .
>>
>> Next steps are to have a bootstrapped image fully working, then to load
>> packages on top of it (like network, sunit) to produce a minimal image.
>> Then, we need to implement an Oz VM on top of Spur.
>> After that, we need to work on a reliable way to build the bootstrap (not
>> too sensitive to changes in the image).
>>
>> Christophe.
>>
>> -------
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$
>> ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
>> 2
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$
>> ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
>> 'ab'
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$
>> ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
>> ZeroDivide
>> SmallInteger>>/
>> UndefinedObject>>DoIt
>> OpalCompiler>>evaluate
>> OpalCompiler(AbstractCompiler)>>evaluate:
>> SmalltalkImage>>evaluate:
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>> no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
>> BlockClosure>>on:do:
>> EvaluateCommandLineHandler>>evaluate:
>> EvaluateCommandLineHandler>>evaluateArguments
>> EvaluateCommandLineHandler>>activate
>> EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>> no source in
>> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in
>> Block: no source
>> BlockClosure>>on:do:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate
>> in Block: no source
>> BlockClosure>>on:do:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>activate
>> PharoCommandLineHandler>>activate
>> PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>
>> PharoCommandLineHandler class>>no (source is Undeclared)
>> no source in PharoCommandLineHandler class>>activateWith: in Block: no
>> source
>> NonInteractiveUIManager(UIManager)>>defer:
>> PharoCommandLineHandler class>>activateWith:
>> no source in BasicCommandLineHandler>>activateSubCommand: in Block: no
>> source
>> BlockClosure>>on:do:
>> BasicCommandLineHandler>>activateSubCommand:
>> BasicCommandLineHandler>>handleSubcommand
>> BasicCommandLineHandler>>handleArgument:
>> no source in BasicCommandLineHandler>>activate in Block: no source
>>
>> SmallInteger>>no (source is Undeclared)
>>
>> UndefinedObject>>no (source is Undeclared)
>>
>> AbstractCompiler>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> BlockClosure>>no (source is Undeclared)
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>>
>> CommandLineHandler class>>no (source is Undeclared)
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>>
>> PharoCommandLineHandler>>no (source is Undeclared)
>>
>> UIManager>>no (source is Undeclared)
>>
>> UndefinedObject>>no (source is Undeclared)
>>
>> CommandLineUIManager>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> DelayMicrosecondScheduler>>no (source is Undeclared)
>>
>> BlockClosure>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> WeakArray class>>no (source is Undeclared)
>>
>>
>> ps: source cannot be displayed because there is no formatter available in
>> the bootstrap
>>
>>
>
>
>


-- 
_,,,^..^,,,_
best, Eliot

Reply via email to