> On 20 ene 2016, at 9:08 a.m., Christophe Demarey > <christophe.dema...@inria.fr> 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). 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 <christophe.dema...@inria.fr >> <mailto:christophe.dema...@inria.fr>>: >> 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 >> <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 >> >> <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 >> >> >