[Pharo-project] Howto measure memory footprints of functions/objects/libraries in Pharo?

Alexandre Bergel alexandre at bergel.eu
Sat Nov 13 13:03:36 CET 2010


Ok, I will check.

Alexandre


On 12 Nov 2010, at 17:40, Max Leske wrote:

> Hi Alexandre
> 
> The weird behaviour seems to be related to inline compilation in workspaces. I moved the execution into a method, now everything's back to normal.
> 
> In the meantime I verified the previously described scenarios with a fresh one-click image (Pharo 1.1).
> One really dramatic example is this:
> 	
> 	repo := FSGitRepository on: FSDiskFilesystem current working / 'foo'.
> 	MessageTally spyOn: [ repo tagNames ]
> 	
> 	---> 3ms for a huge repository with 10 tags.
> 
> 	
> 	MemoryProfiler
> 		viewProfiling: [ repo tagNames ]
> 
> 	---> low space warning (same repository etc.)
> 
> 
> I hope you might have an idea what's going wrong.
> 
> Cheers,
> Max
> 
> 
> 
> 
> Hi again.
> Please ignore the last e-mail for the moment. There's something weird going on in my image. I'll run some tests on a fresh official image first and then post back.
> Max
> 
> 
> ---------------------------------
> Thanks Alexandre.
> Now I tried out your example and they worked perfectly. I have run into two problem though which I don't know how to deal with:
> 1. When I run anything else than what you suggested, I do get the window for the profiling view but it is empty. E.g when I run this:
> 		
> 	MemoryProfiler
> 		viewProfiling: [ 1 to: 100000 do: [ :i |
> 			(FSMemoryFilesystem new root / ('foo', i asString))
> 				writeStreamDo: [ :stream | stream nextPutAll: 'foo' ] ] ]
> 2. When I run the code I am actually interested I get a low space warning. Example:
> 	repo := FSGitRepository on: FSMemoryFilesystem new root / 'foo'
> 	MemoryProfiler
> 		viewProfiling: [ repo head ]
> 
> I'll be happy to run any tests you suggest. If you'd like to run the code yourself, get the packages from Gofer:
> 	Gofer new
> 		squeaksource: 'GitFS';
> 		package: 'FS-Git';
> 		package: 'Filesystem';
> 		load.
> Cheers,
> Max
> 
> 
> On 09.11.2010, at 22:42, Alexandre Bergel wrote:
>> Hi Max,
>> 
>>> Um... I should be able to get a visualisation by running somthing like this right (I only installed it, didn't subclass anything)?
>>> 
>>> MemoryProfiler
>>> 	
>> viewProfiling: [ FSDiskFilesystem current working / foo ].
>>> 
>>> I get a window but there's nothing in it...
>> 
>> The piece of code you want to profile needs is executed twice, and it needs "to be time consuming" (~ 1 second).
>> For example, try:
>> 
>> 	MemoryProfiler
>> 		viewProfiling: [
>> 			| view |
>> 
>> 			view := MOViewRenderer new.
>> 			view nodes: (1 to: 5000).
>> 			view root applyLayout ]
>> 
>> or
>> 
>> 	MemoryProfiler
>> 		viewProfiling: [ (1 to: 2) collect: [ :i | ConfigurationOfMetacello project currentVersion ] ]
>> 
>> to get a nice picture
>> 
>>> Also, is selecting the expression in the block above, right clicking and selecting "memory profile it" equivalent to sending #viewProfiling: ?
>> 
>> yes
>> 
>>> Reading your paper I get the idea that this should work, when looking at the instructions on the moose site it rather seems that I need to subclass MemoryProfiler to actually profile anything.
>> 
>> No need to subclass.
>> 
>> Cheers,
>> Alexandre
>> 
>>> 
>>> 
>>> 
>>> On 09.11.2010, at 15:02, Alexandre Bergel wrote:
>>> 
>>>> Ok, but please, provide feedback.
>>>> 
>>>> Alexandre
>>>> 
>>>> 
>>>> On 9 Nov 2010, at 10:40, Max Leske wrote:
>>>> 
>>>>> Sounds like what I just needed! I'll try it out.
>>>>> 
>>>>> Cheers,
>>>>> Max
>>>>> 
>>>>> 
>>>>> On 09.11.2010, at 12:42, Alexandre Bergel wrote:
>>>>> 
>>>>>> Hi Guido,
>>>>>> 
>>>>>> We wrote a profiler to keep track of memory consumption.
>>>>>> 
>>>>>> http://bergel.eu/download/papers/Berg10g-MemoryProfiling.pdf
>>>>>> 
>>>>>> It will be presented at Smalltalks next week.
>>>>>> 
>>>>>> Cheers,
>>>>>> Alexandre
>>>>>> 
>>>>>> On 8 Nov 2010, at 23:47, Guido Stepken wrote:
>>>>>> 
>>>>>>> E.g.: Three different solutions for a Euler problem:
>>>>>>> 
>>>>>>> (1 to: 999) inject: 0 into: [:sum :i | (i \\ 3 = 0) | (i \\ 5 = 0)
>>>>>>> 	
>> 	ifTrue: [sum + i]
>>>>>>> 	
>> 	ifFalse: [sum]]
>>>>>>> 
>>>>>>> 
>>>>>>> (1 to: 999) detectSum: [:i | (i \\ 3 = 0) | (i \\ 5 = 0) ifTrue: [i] ifFalse: [0]]
>>>>>>> 
>>>>>>> (1 to: 999) detectSum: [:i | i * (#(0 0 1 0 1 1 0 0 1 1 0 1 0 0 1) atWrap: i)]
>>>>>>> 
>>>>>>> How do i measure the exact memory footprint of each solution?
>>>>>>> 
>>>>>>> Pharo claims having reduced memory footprint at many places. Can that be proofed, e.g. with one comparable demo app, once run in old squeak, once in Pharo 1.1/1.2?
>>>>>>> 
>>>>>>> And no, MessageTally spyOn: does not do right!
>>>>>>> 
>>>>>>> Tnx in advance, Guido Stepken
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> --
>>>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>>>> Alexandre Bergel  http://www.bergel.eu
>>>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> --
>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>> Alexandre Bergel  http://www.bergel.eu
>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>> 
>>> 
>> 
>> --
>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>> Alexandre Bergel  http://www.bergel.eu
>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>> 
>> 
>> 
>> 
>> 
>> 
> 

-- 
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.









More information about the Pharo-project mailing list