> On 10 Feb 2015, at 09:51, Norbert Hartl <[email protected]> wrote:
> 
> 
>> Am 10.02.2015 um 09:23 schrieb Clément Bera <[email protected]>:
>> 
>> Hello,
>> 
>> About the Morphic rendering loop, the delay between rendering is handled in 
>> WorldState>>#interCyclePause:. The best solution to reduce the cost of the 
>> Morphic rendering loop is to put it in server mode by executing in Pharo: 
>> WorldState serverMode: true. In squeak you have to set that in the 
>> Preferences.
>> 
> I'll play with it and see what can be gained.

I tried the following on an otherwise idle DigitalOcean VM running Ubuntu 13.10

$ mkdir pharo4
$ curl get.pharo.org/40+vm | bash
$ ./pharo Pharo.image save Server

First patch (slower event handling, extra delay of 50ms):

$ ./pharo Server.image eval --save 'WorldState serverMode: true'

Second patch (give time back to OS while idle for 10ms instead of for 1ms):

$ cat ProcessorScheduler-class-idleProcess.st 
'From Pharo4.0 of 18 March 2013 [Latest update: #40484] on 10 February 2015 at 
9:49:15.412839 am!ProcessorScheduler class methodsFor: 'background process' 
stamp: 'SvenVanCaekenberghe 2/10/2015idleProc[true] w[self 
relinquishProcessorForMicroseconds: 10000]! !

$ ./pharo Server.image eval "'ProcessorScheduler-class-idleProcess.st' 
asFileReference fileIn"
$ ./pharo Server.image eval '(ProcessorScheduler class>>#idleProcess) 
sourceCode'
'idleProcess
        "A default background process which is invisible."

        [true] whileTrue:
                [self relinquishProcessorForMicroseconds: 10000]'

Run an image with a basic Zn HTTP server in background:

$ ./pharo Server.image eval --no-quit 'ZnServer startDefaultOn: 1701' &
$ curl http://localhost:1701

Overall load is 0.01% but this is virtual/shared hardware, so who knows.

CPU load of the pharo process hovers around a couple of %, I am not seeing much 
difference, maybe it is a bit lower, but that might be wishful thinking.

>> But as it was discussed, the cpu consumption most probably does not come 
>> from Morphic but comes from the idle loop, which can be solved by doing an 
>> event-driven VM. 
>> 
>> I am particularly willing to have an event-driven VM because it then means 
>> that the VM performance would then be directly proportional to the cpu 
>> consumption. For example, theoretically, with an event-driven VM, having the 
>> VM twice faster with Spur would also mean that the VM consumes twice less 
>> energy. Go Green IT :-)
>> 
> That is exactly my point. While consumed energy is turned into heat the act 
> of saving energy is the same as having a cool device (pun intended). 
> 
> So I would like to take my consortium hat to state my upvote on this.
> 
> Norbert
>  
>> 2015-02-10 8:00 GMT+01:00 Eliot Miranda <[email protected]>:
>> 
>> 
>> 
>> On Feb 9, 2015, at 10:41 PM, Sven Van Caekenberghe <[email protected]> wrote:
>> 
>> >
>> >> On 10 Feb 2015, at 01:55, Eliot Miranda <[email protected]> wrote:
>> >>
>> >> Hi Sven,
>> >>
>> >> On Mon, Feb 9, 2015 at 1:43 PM, Sven Van Caekenberghe <[email protected]> 
>> >> wrote:
>> >> There is some timer thread between the image and the vm that ticks every 
>> >> millisecond, that is the cause. I don't know what it does but it is 
>> >> apparently needed.
>> >>
>> >> Anyway, that is how I understood it from Igor and Eliot, long ago.
>> >>
>> >> So basically, the VM is always slightly busy.
>> >>
>> >> Yet the VM is always slightly busy with the heartbeat thread, but this is 
>> >> very cheap.  The actual idle cost comes form the idle loop in the 
>> >> background process that sends relinquishProcessorForMicroseconds:, which 
>> >> is a primitive that eventually calls the select system call.  This is the 
>> >> source of the cost.
>> >
>> > Can we change something about that ?
>> > Maybe just as an experiment to prove your point ?
>> 
>> What do you think halving or doubling the argument to 
>> relinquishProcessorForMicroseconds: should do if this is the major source of 
>> overhead?  Processor usage at idle should be closely inversely proportional 
>> right?
>> 
>> >
>> >>> On 09 Feb 2015, at 21:11, Norbert Hartl <[email protected]> wrote:
>> >>>
>> >>> I have an installation where a pharo powered hardware is used in a 
>> >>> closed case. Over time that collects quite some heat. One reason for 
>> >>> this is that the pharo vm is taking approx. 6% CPU all the time. The 
>> >>> only thing that happens is network/sockets. I suspended the ui thread in 
>> >>> the image but on this platform it doesn't help.
>> >>> Are there any tweaks to lower the polling and the activity of the 
>> >>> image/vm even more?
>> >>>
>> >>> thanks,
>> >>>
>> >>> Norbert
>> >> --
>> >> best,
>> >> Eliot
>> >
>> >
>> 
>> 
> 


Reply via email to