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

Max Leske maxleske at gmail.com
Fri Nov 12 18:56:05 CET 2010


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
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
> 
> 
> 
> 
> 
> 





More information about the Pharo-project mailing list