Breaking the 4GB barrier with Pharo 6 64-bit

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
57 messages Options
123
Reply | Threaded
Open this post in threaded view
|

Breaking the 4GB barrier with Pharo 6 64-bit

Sven Van Caekenberghe-2
OK, I am quite excited about the future possibilities of 64-bit Pharo. So I played a bit more with the current test version [1], trying to push the limits. In the past, it was only possible to safely allocate about 1.5GB of memory even though a 32-bit process' limit is theoretically 4GB (the OS and the VM need space too).

Allocating a couple of 1GB ByteArrays is one way to push memory use, but it feels a bit silly. So I loaded a bunch of projects (including Seaside) to push the class/method counts (7K classes, 100K methods) and wrote a script [2] that basically copies part of the class/method metadata including 2 copies of each's methods source code as well as its AST (bypassing the cache of course). This feels more like a real object graph.

I had to create no less than 7 (SEVEN) copies (each kept open in an inspector) to break through the mythical 4GB limit (real allocated & used memory).


I also have the impression that the image shrinking problem is gone (closing everything frees memory, saving the image has it return to its original size, 100MB in this case).

Great work, thank you. Bright future again.

Sven

PS: Yes, GC is slower; No, I did not yet try to save such a large image.

[1]


[2]

| meta |
ASTCache reset.
meta := Dictionary new.
Smalltalk allClassesAndTraits do: [ :each | | classMeta methods |
  (classMeta := Dictionary new)
    at: #name put: each name asSymbol;
    at: #comment put: each comment;
    at: #definition put: each definition;
    at: #object put: each.
  methods := Dictionary new.
  classMeta at: #methods put: methods.
  each methodsDo: [ :method | | methodMeta |
    (methodMeta := Dictionary new)
      at: #name put: method selector;
      at: #source put: method sourceCode;
      at: #ast put: method ast;
      at: #args put: method argumentNames asArray;
      at: #formatted put: method ast formattedCode;
      at: #comment put: (method comment ifNotNil: [ :str | str withoutQuoting ]);
      at: #object put: method.
    methods at: method selector put: methodMeta ].
  meta at: each name asSymbol put: classMeta ].
meta.



--
Sven Van Caekenberghe
Proudly supporting Pharo
http://pharo.org
http://association.pharo.org
http://consortium.pharo.org




Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

Max Leske
Very nice! Thanks for the heads up Sven.


On 9 Nov 2016, at 12:06, Sven Van Caekenberghe <[hidden email]> wrote:

OK, I am quite excited about the future possibilities of 64-bit Pharo. So I played a bit more with the current test version [1], trying to push the limits. In the past, it was only possible to safely allocate about 1.5GB of memory even though a 32-bit process' limit is theoretically 4GB (the OS and the VM need space too).

Allocating a couple of 1GB ByteArrays is one way to push memory use, but it feels a bit silly. So I loaded a bunch of projects (including Seaside) to push the class/method counts (7K classes, 100K methods) and wrote a script [2] that basically copies part of the class/method metadata including 2 copies of each's methods source code as well as its AST (bypassing the cache of course). This feels more like a real object graph.

I had to create no less than 7 (SEVEN) copies (each kept open in an inspector) to break through the mythical 4GB limit (real allocated & used memory).

<Screen Shot 2016-11-09 at 11.25.28.png>

I also have the impression that the image shrinking problem is gone (closing everything frees memory, saving the image has it return to its original size, 100MB in this case).

Great work, thank you. Bright future again.

Sven

PS: Yes, GC is slower; No, I did not yet try to save such a large image.

[1]


[2]

| meta |
ASTCache reset.
meta := Dictionary new.
Smalltalk allClassesAndTraits do: [ :each | | classMeta methods |
  (classMeta := Dictionary new)
    at: #name put: each name asSymbol;
    at: #comment put: each comment;
    at: #definition put: each definition;
    at: #object put: each.
  methods := Dictionary new.
  classMeta at: #methods put: methods.
  each methodsDo: [ :method | | methodMeta |
    (methodMeta := Dictionary new)
      at: #name put: method selector;
      at: #source put: method sourceCode;
      at: #ast put: method ast;
      at: #args put: method argumentNames asArray;
      at: #formatted put: method ast formattedCode;
      at: #comment put: (method comment ifNotNil: [ :str | str withoutQuoting ]);
      at: #object put: method.
    methods at: method selector put: methodMeta ].
  meta at: each name asSymbol put: classMeta ].
meta.



--
Sven Van Caekenberghe
Proudly supporting Pharo
http://pharo.org
http://association.pharo.org
http://consortium.pharo.org





Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

kilon.alios

OK, I am quite excited about the future possibilities of 64-bit Pharo. So I played a bit more with the current test version [1], trying to push the limits. In the past, it was only possible to safely allocate about 1.5GB of memory even though a 32-bit process' limit is theoretically 4GB (the OS and the VM need space too).


The limit for 32 bit is 2GB apart from some exceptions 


This happens because the OS reserve some of the memory 1GB or more depending the OS for the smooth running of applications. You dont want to run out of physical memory, there is a bug in XCODE with indexing files that eats away all of my physical memory and the whole system comes to a crawl the moment free memory reaches 700mb , by crawl I mean that it takes 10 seconds to move the mouse from point a to point b and another 10 to click. 

I don't have an SSD , probably in that case would be still crawl but much better.

In any case if you decide to push the computer to its limits always remember to have backups because running out of memory is the worst thing that can happen to an OS. 

Viruses used to crash computer by filling the memory with useless information which I suspect is the reason why the OSes no longer allow a single process to capture the entire free memory . 

But then if you have your backups , hack away.  

I will play the devils advocate here and I will say that Pharo would be ok loading a couple of GBs it but processing probably will send it to snail speeds. That assumption is based on benchmark for Visualworks that show it as around 50 times slower than an average C application. 

But even C applications have a hard time keeping up when you go above MACH1 aka 1GB, the 3d cover I rendered for PBE is around 2GBs mainly because the ocean is around 4 million polygons and Blender does not use just CPU it uses also GPU to accelerate. 

None the less its a big improvement for Pharo and congratulation are deserved for anyone involved and of course a thank you :) 
Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

philippe.back@highoctane.be
In reply to this post by Sven Van Caekenberghe-2

Anyone having tested such 64 bit goodness on a Linux box?

Phil


Le 9 nov. 2016 12:07, "Sven Van Caekenberghe" <[hidden email]> a écrit :
OK, I am quite excited about the future possibilities of 64-bit Pharo. So I played a bit more with the current test version [1], trying to push the limits. In the past, it was only possible to safely allocate about 1.5GB of memory even though a 32-bit process' limit is theoretically 4GB (the OS and the VM need space too).

Allocating a couple of 1GB ByteArrays is one way to push memory use, but it feels a bit silly. So I loaded a bunch of projects (including Seaside) to push the class/method counts (7K classes, 100K methods) and wrote a script [2] that basically copies part of the class/method metadata including 2 copies of each's methods source code as well as its AST (bypassing the cache of course). This feels more like a real object graph.

I had to create no less than 7 (SEVEN) copies (each kept open in an inspector) to break through the mythical 4GB limit (real allocated & used memory).


I also have the impression that the image shrinking problem is gone (closing everything frees memory, saving the image has it return to its original size, 100MB in this case).

Great work, thank you. Bright future again.

Sven

PS: Yes, GC is slower; No, I did not yet try to save such a large image.

[1]


[2]

| meta |
ASTCache reset.
meta := Dictionary new.
Smalltalk allClassesAndTraits do: [ :each | | classMeta methods |
  (classMeta := Dictionary new)
    at: #name put: each name asSymbol;
    at: #comment put: each comment;
    at: #definition put: each definition;
    at: #object put: each.
  methods := Dictionary new.
  classMeta at: #methods put: methods.
  each methodsDo: [ :method | | methodMeta |
    (methodMeta := Dictionary new)
      at: #name put: method selector;
      at: #source put: method sourceCode;
      at: #ast put: method ast;
      at: #args put: method argumentNames asArray;
      at: #formatted put: method ast formattedCode;
      at: #comment put: (method comment ifNotNil: [ :str | str withoutQuoting ]);
      at: #object put: method.
    methods at: method selector put: methodMeta ].
  meta at: each name asSymbol put: classMeta ].
meta.



--
Sven Van Caekenberghe
Proudly supporting Pharo
http://pharo.org
http://association.pharo.org
http://consortium.pharo.org




Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

Thierry Goubier


2016-11-09 15:23 GMT+01:00 [hidden email] <[hidden email]>:

Anyone having tested such 64 bit goodness on a Linux box?

Only as a professional demo for code developped up to the very last moment on Pharo 32 bits. So I didn't try to explose the available RAM on my laptop (yet).

Thierry

 

Phil


Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

philippeback
Ok, I'll try that in the coming days on my desktop box.
I've got 32GB on that box, so it will be interesting.

What would be a good way to stress test the GC?

Phil

On Wed, Nov 9, 2016 at 3:59 PM, Thierry Goubier <[hidden email]> wrote:


2016-11-09 15:23 GMT+01:00 [hidden email] <[hidden email]>:

Anyone having tested such 64 bit goodness on a Linux box?

Only as a professional demo for code developped up to the very last moment on Pharo 32 bits. So I didn't try to explose the available RAM on my laptop (yet).

Thierry

 

Phil



Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

Sven Van Caekenberghe-2
I ran a similar test [1] on a 16GB Ubuntu box:

# uname -a
Linux ubuntu-m-16gb-nyc3-01 4.4.0-45-generic #66-Ubuntu SMP Wed Oct 19 14:12:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

# cat /etc/issue
Ubuntu 16.04.1 LTS

# ./bin/pharo -vm-display-null pharo-64.image st --quit memtest.st >& out.log &

Which gave the following (abbreviated) output:

uptime                  0h0m0s
memory                  70,918,144 bytes
        old                     61,966,112 bytes (87.4%)
        young           2,781,608 bytes (3.9000000000000004%)
        used            46,301,016 bytes (65.3%)
        free            18,446,704 bytes (26.0%)
GCs                             1 (207ms between GCs)
        full                    0 totalling 0ms (0.0% uptime)
        incr            1 totalling 0ms (0.0% uptime), avg 0.0ms
        tenures         0


Iteration 1
...

Iteration 8
...

uptime                  0h12m44s
memory                  5,238,300,672 bytes
        old                     5,229,348,640 bytes (99.80000000000001%)
        young           1,054,128 bytes (0.0%)
        used            5,207,806,800 bytes (99.4%)
        free            22,595,968 bytes (0.4%)
GCs                             23,509 (33ms between GCs)
        full                    19 totalling 147,969ms (19.400000000000002% uptime), avg 7787.8ms
        incr            23490 totalling 143,396ms (18.8% uptime), avg 6.1000000000000005ms
        tenures         107,267,532 (avg 0 GCs/tenure)
Since last view 23,508 (33ms between GCs)
        uptime          764.4000000000001s
        full                    19 totalling 147,969ms (19.400000000000002% uptime), avg 7787.8ms
        incr            23489 totalling 143,396ms (18.8% uptime), avg 6.1000000000000005ms
        tenures         107,267,532 (avg 0 GCs/tenure)

# free -m
              total        used        free      shared  buff/cache   available
Mem:          16047        4632       10647           3         768       11129
Swap:             0           0           0


So, yes, it works on Linux too.

Sven

[1]

| meta hold |

NonInteractiveTranscript stdout install.

Transcript crShow: SmalltalkImage current vm statisticsReport; cr.

hold := (1 to: 8) collect: [ :i |

Transcript crShow: 'Iteration ', i asString.

ASTCache reset.
meta := Dictionary new.
Smalltalk allClassesAndTraits do: [ :each | | classMeta methods |
(classMeta := Dictionary new)
at: #name put: each name asSymbol;
at: #comment put: each comment;
at: #definition put: each definition;
at: #object put: each.
methods := Dictionary new.
classMeta at: #methods put: methods.
each methodsDo: [ :method | | methodMeta |
(methodMeta := Dictionary new)
at: #name put: method selector;
at: #source put: method sourceCode;
at: #ast put: method ast;
at: #args put: method argumentNames asArray;
at: #formatted put: method ast formattedCode;
at: #comment put: (method comment ifNotNil: [ :str | str withoutQuoting ]);
at: #object put: method.
methods at: method selector put: methodMeta ].
meta at: each name asSymbol put: classMeta ].
meta.

].

3 timesRepeat: [ Smalltalk garbageCollect ].

Transcript crShow: SmalltalkImage current vm statisticsReport; cr.


On 9 Nov 2016, at 17:18, [hidden email] wrote:

Ok, I'll try that in the coming days on my desktop box.
I've got 32GB on that box, so it will be interesting.

What would be a good way to stress test the GC?

Phil

On Wed, Nov 9, 2016 at 3:59 PM, Thierry Goubier <[hidden email]> wrote:


2016-11-09 15:23 GMT+01:00 [hidden email] <[hidden email]>:
Anyone having tested such 64 bit goodness on a Linux box?

Only as a professional demo for code developped up to the very last moment on Pharo 32 bits. So I didn't try to explose the available RAM on my laptop (yet).

Thierry

 
Phil




Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

Nicolas Cellier


2016-11-09 23:20 GMT+01:00 Sven Van Caekenberghe <[hidden email]>:
I ran a similar test [1] on a 16GB Ubuntu box:

# uname -a
Linux ubuntu-m-16gb-nyc3-01 4.4.0-45-generic #66-Ubuntu SMP Wed Oct 19 14:12:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

# cat /etc/issue
Ubuntu 16.04.1 LTS

# ./bin/pharo -vm-display-null pharo-64.image st --quit memtest.st >& out.log &

Which gave the following (abbreviated) output:

uptime                  0h0m0s
memory                  70,918,144 bytes
        old                     61,966,112 bytes (87.4%)
        young           2,781,608 bytes (3.9000000000000004%)
I see yet another bad usage of round:/roundTo: --------------^
Ah, but it was another thread ;)
 
        used            46,301,016 bytes (65.3%)
        free            18,446,704 bytes (26.0%)
GCs                             1 (207ms between GCs)
        full                    0 totalling 0ms (0.0% uptime)
        incr            1 totalling 0ms (0.0% uptime), avg 0.0ms
        tenures         0


Iteration 1
...

Iteration 8
...

uptime                  0h12m44s
memory                  5,238,300,672 bytes
        old                     5,229,348,640 bytes (99.80000000000001%)
        young           1,054,128 bytes (0.0%)
        used            5,207,806,800 bytes (99.4%)
        free            22,595,968 bytes (0.4%)
GCs                             23,509 (33ms between GCs)
        full                    19 totalling 147,969ms (19.400000000000002% uptime), avg 7787.8ms
        incr            23490 totalling 143,396ms (18.8% uptime), avg 6.1000000000000005ms
        tenures         107,267,532 (avg 0 GCs/tenure)
Since last view 23,508 (33ms between GCs)
        uptime          764.4000000000001s
        full                    19 totalling 147,969ms (19.400000000000002% uptime), avg 7787.8ms
        incr            23489 totalling 143,396ms (18.8% uptime), avg 6.1000000000000005ms
        tenures         107,267,532 (avg 0 GCs/tenure)

# free -m
              total        used        free      shared  buff/cache   available
Mem:          16047        4632       10647           3         768       11129
Swap:             0           0           0


So, yes, it works on Linux too.

Sven

[1]

| meta hold |

NonInteractiveTranscript stdout install.

Transcript crShow: SmalltalkImage current vm statisticsReport; cr.

hold := (1 to: 8) collect: [ :i |

Transcript crShow: 'Iteration ', i asString.

ASTCache reset.
meta := Dictionary new.
Smalltalk allClassesAndTraits do: [ :each | | classMeta methods |
(classMeta := Dictionary new)
at: #name put: each name asSymbol;
at: #comment put: each comment;
at: #definition put: each definition;
at: #object put: each.
methods := Dictionary new.
classMeta at: #methods put: methods.
each methodsDo: [ :method | | methodMeta |
(methodMeta := Dictionary new)
at: #name put: method selector;
at: #source put: method sourceCode;
at: #ast put: method ast;
at: #args put: method argumentNames asArray;
at: #formatted put: method ast formattedCode;
at: #comment put: (method comment ifNotNil: [ :str | str withoutQuoting ]);
at: #object put: method.
methods at: method selector put: methodMeta ].
meta at: each name asSymbol put: classMeta ].
meta.

].

3 timesRepeat: [ Smalltalk garbageCollect ].

Transcript crShow: SmalltalkImage current vm statisticsReport; cr.


On 9 Nov 2016, at 17:18, [hidden email] wrote:

Ok, I'll try that in the coming days on my desktop box.
I've got 32GB on that box, so it will be interesting.

What would be a good way to stress test the GC?

Phil

On Wed, Nov 9, 2016 at 3:59 PM, Thierry Goubier <[hidden email]> wrote:


2016-11-09 15:23 GMT+01:00 [hidden email] <[hidden email]>:
Anyone having tested such 64 bit goodness on a Linux box?

Only as a professional demo for code developped up to the very last moment on Pharo 32 bits. So I didn't try to explose the available RAM on my laptop (yet).

Thierry

 
Phil





Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

Igor Stasenko
In reply to this post by Sven Van Caekenberghe-2
Nice progress, indeed. 
Now i hope at the end of the day, the guys who doing data mining/statistical analysis will finally shut up and happily be able
to work with more bloat without need of learning a ways to properly manage memory & resources, and implement them finally. 
But i guess, that won't be long silence, before they again start screaming in despair: please help, my bloat doesn't fits into memory... :)

On 9 November 2016 at 12:06, Sven Van Caekenberghe <[hidden email]> wrote:
OK, I am quite excited about the future possibilities of 64-bit Pharo. So I played a bit more with the current test version [1], trying to push the limits. In the past, it was only possible to safely allocate about 1.5GB of memory even though a 32-bit process' limit is theoretically 4GB (the OS and the VM need space too).

Allocating a couple of 1GB ByteArrays is one way to push memory use, but it feels a bit silly. So I loaded a bunch of projects (including Seaside) to push the class/method counts (7K classes, 100K methods) and wrote a script [2] that basically copies part of the class/method metadata including 2 copies of each's methods source code as well as its AST (bypassing the cache of course). This feels more like a real object graph.

I had to create no less than 7 (SEVEN) copies (each kept open in an inspector) to break through the mythical 4GB limit (real allocated & used memory).


I also have the impression that the image shrinking problem is gone (closing everything frees memory, saving the image has it return to its original size, 100MB in this case).

Great work, thank you. Bright future again.

Sven

PS: Yes, GC is slower; No, I did not yet try to save such a large image.

[1]


[2]

| meta |
ASTCache reset.
meta := Dictionary new.
Smalltalk allClassesAndTraits do: [ :each | | classMeta methods |
  (classMeta := Dictionary new)
    at: #name put: each name asSymbol;
    at: #comment put: each comment;
    at: #definition put: each definition;
    at: #object put: each.
  methods := Dictionary new.
  classMeta at: #methods put: methods.
  each methodsDo: [ :method | | methodMeta |
    (methodMeta := Dictionary new)
      at: #name put: method selector;
      at: #source put: method sourceCode;
      at: #ast put: method ast;
      at: #args put: method argumentNames asArray;
      at: #formatted put: method ast formattedCode;
      at: #comment put: (method comment ifNotNil: [ :str | str withoutQuoting ]);
      at: #object put: method.
    methods at: method selector put: methodMeta ].
  meta at: each name asSymbol put: classMeta ].
meta.



--
Sven Van Caekenberghe
Proudly supporting Pharo
http://pharo.org
http://association.pharo.org
http://consortium.pharo.org







--
Best regards,
Igor Stasenko.
Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

Tudor Girba-2
Hi Igor,

Please refrain from speaking down on people.

If you have a concrete solution for how to do things, please feel free to share it with us. We would be happy to learn from it.

Cheers,
Tudor


> On Nov 10, 2016, at 4:11 AM, Igor Stasenko <[hidden email]> wrote:
>
> Nice progress, indeed.
> Now i hope at the end of the day, the guys who doing data mining/statistical analysis will finally shut up and happily be able
> to work with more bloat without need of learning a ways to properly manage memory & resources, and implement them finally.
> But i guess, that won't be long silence, before they again start screaming in despair: please help, my bloat doesn't fits into memory... :)
>
> On 9 November 2016 at 12:06, Sven Van Caekenberghe <[hidden email]> wrote:
> OK, I am quite excited about the future possibilities of 64-bit Pharo. So I played a bit more with the current test version [1], trying to push the limits. In the past, it was only possible to safely allocate about 1.5GB of memory even though a 32-bit process' limit is theoretically 4GB (the OS and the VM need space too).
>
> Allocating a couple of 1GB ByteArrays is one way to push memory use, but it feels a bit silly. So I loaded a bunch of projects (including Seaside) to push the class/method counts (7K classes, 100K methods) and wrote a script [2] that basically copies part of the class/method metadata including 2 copies of each's methods source code as well as its AST (bypassing the cache of course). This feels more like a real object graph.
>
> I had to create no less than 7 (SEVEN) copies (each kept open in an inspector) to break through the mythical 4GB limit (real allocated & used memory).
>
> <Screen Shot 2016-11-09 at 11.25.28.png>
>
> I also have the impression that the image shrinking problem is gone (closing everything frees memory, saving the image has it return to its original size, 100MB in this case).
>
> Great work, thank you. Bright future again.
>
> Sven
>
> PS: Yes, GC is slower; No, I did not yet try to save such a large image.
>
> [1]
>
> VM here: http://bintray.com/estebanlm/pharo-vm/build#files/
> Image here: http://files.pharo.org/get-files/60/pharo-64.zip
>
> [2]
>
> | meta |
> ASTCache reset.
> meta := Dictionary new.
> Smalltalk allClassesAndTraits do: [ :each | | classMeta methods |
>   (classMeta := Dictionary new)
>     at: #name put: each name asSymbol;
>     at: #comment put: each comment;
>     at: #definition put: each definition;
>     at: #object put: each.
>   methods := Dictionary new.
>   classMeta at: #methods put: methods.
>   each methodsDo: [ :method | | methodMeta |
>     (methodMeta := Dictionary new)
>       at: #name put: method selector;
>       at: #source put: method sourceCode;
>       at: #ast put: method ast;
>       at: #args put: method argumentNames asArray;
>       at: #formatted put: method ast formattedCode;
>       at: #comment put: (method comment ifNotNil: [ :str | str withoutQuoting ]);
>       at: #object put: method.
>     methods at: method selector put: methodMeta ].
>   meta at: each name asSymbol put: classMeta ].
> meta.
>
>
>
> --
> Sven Van Caekenberghe
> Proudly supporting Pharo
> http://pharo.org
> http://association.pharo.org
> http://consortium.pharo.org
>
>
>
>
>
>
>
> --
> Best regards,
> Igor Stasenko.

--
www.tudorgirba.com
www.feenk.com

"We can create beautiful models in a vacuum.
But, to get them effective we have to deal with the inconvenience of reality."


Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

NorbertHartl


> Am 10.11.2016 um 07:27 schrieb Tudor Girba <[hidden email]>:
>
> Hi Igor,
>
> Please refrain from speaking down on people.
+1

> If you have a concrete solution for how to do things, please feel free to share it with us. We would be happy to learn from it.
>
+10

Norbert

> Cheers,
> Tudor
>
>
>> On Nov 10, 2016, at 4:11 AM, Igor Stasenko <[hidden email]> wrote:
>>
>> Nice progress, indeed.
>> Now i hope at the end of the day, the guys who doing data mining/statistical analysis will finally shut up and happily be able
>> to work with more bloat without need of learning a ways to properly manage memory & resources, and implement them finally.
>> But i guess, that won't be long silence, before they again start screaming in despair: please help, my bloat doesn't fits into memory... :)
>>
>> On 9 November 2016 at 12:06, Sven Van Caekenberghe <[hidden email]> wrote:
>> OK, I am quite excited about the future possibilities of 64-bit Pharo. So I played a bit more with the current test version [1], trying to push the limits. In the past, it was only possible to safely allocate about 1.5GB of memory even though a 32-bit process' limit is theoretically 4GB (the OS and the VM need space too).
>>
>> Allocating a couple of 1GB ByteArrays is one way to push memory use, but it feels a bit silly. So I loaded a bunch of projects (including Seaside) to push the class/method counts (7K classes, 100K methods) and wrote a script [2] that basically copies part of the class/method metadata including 2 copies of each's methods source code as well as its AST (bypassing the cache of course). This feels more like a real object graph.
>>
>> I had to create no less than 7 (SEVEN) copies (each kept open in an inspector) to break through the mythical 4GB limit (real allocated & used memory).
>>
>> <Screen Shot 2016-11-09 at 11.25.28.png>
>>
>> I also have the impression that the image shrinking problem is gone (closing everything frees memory, saving the image has it return to its original size, 100MB in this case).
>>
>> Great work, thank you. Bright future again.
>>
>> Sven
>>
>> PS: Yes, GC is slower; No, I did not yet try to save such a large image.
>>
>> [1]
>>
>> VM here: http://bintray.com/estebanlm/pharo-vm/build#files/
>> Image here: http://files.pharo.org/get-files/60/pharo-64.zip
>>
>> [2]
>>
>> | meta |
>> ASTCache reset.
>> meta := Dictionary new.
>> Smalltalk allClassesAndTraits do: [ :each | | classMeta methods |
>>  (classMeta := Dictionary new)
>>    at: #name put: each name asSymbol;
>>    at: #comment put: each comment;
>>    at: #definition put: each definition;
>>    at: #object put: each.
>>  methods := Dictionary new.
>>  classMeta at: #methods put: methods.
>>  each methodsDo: [ :method | | methodMeta |
>>    (methodMeta := Dictionary new)
>>      at: #name put: method selector;
>>      at: #source put: method sourceCode;
>>      at: #ast put: method ast;
>>      at: #args put: method argumentNames asArray;
>>      at: #formatted put: method ast formattedCode;
>>      at: #comment put: (method comment ifNotNil: [ :str | str withoutQuoting ]);
>>      at: #object put: method.
>>    methods at: method selector put: methodMeta ].
>>  meta at: each name asSymbol put: classMeta ].
>> meta.
>>
>>
>>
>> --
>> Sven Van Caekenberghe
>> Proudly supporting Pharo
>> http://pharo.org
>> http://association.pharo.org
>> http://consortium.pharo.org
>>
>>
>>
>>
>>
>>
>>
>> --
>> Best regards,
>> Igor Stasenko.
>
> --
> www.tudorgirba.com
> www.feenk.com
>
> "We can create beautiful models in a vacuum.
> But, to get them effective we have to deal with the inconvenience of reality."
>
>


Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

Igor Stasenko
In reply to this post by Tudor Girba-2

On 10 November 2016 at 07:27, Tudor Girba <[hidden email]> wrote:
Hi Igor,

Please refrain from speaking down on people.


Hi, Doru!
I just wanted to hear you :)
 
If you have a concrete solution for how to do things, please feel free to share it with us. We would be happy to learn from it.


Well, there's so many solutions, that i even don't know what to offer, and given the potential of smalltalk, i wonder why
you are not employing any. But in overall it is a quesition of storing most of your data on disk, and only small portion of it
in image (in most optimal cases - only the portion that user sees/operates with).
As i said to you before, you will hit this wall inevitably, no matter how much memory is available.
So, what stops you from digging in that direction?
Because even if you can fit all data in memory, consider how much time it takes for GC to scan 4+ Gb of memory, comparing to
100 MB or less.
I don't think you'll find it convenient to work in environment where you'll have 2-3 seconds pauses between mouse clicks.
So, of course, my tone is not acceptable, but its pain to see how people remain helpless without even thinking about 
doing what they need. We have Fuel for how many years now? 
So it can't be as easy as it is, just serialize the data and purge it from image, till it will be required again.
Sure it will require some effort, but it is nothing comparing to day to day pain that you have to tolerate because of lack of solution.
 
Cheers,
Tudor


> On Nov 10, 2016, at 4:11 AM, Igor Stasenko <[hidden email]> wrote:
>
> Nice progress, indeed.
> Now i hope at the end of the day, the guys who doing data mining/statistical analysis will finally shut up and happily be able
> to work with more bloat without need of learning a ways to properly manage memory & resources, and implement them finally.
> But i guess, that won't be long silence, before they again start screaming in despair: please help, my bloat doesn't fits into memory... :)
>
> On 9 November 2016 at 12:06, Sven Van Caekenberghe <[hidden email]> wrote:
> OK, I am quite excited about the future possibilities of 64-bit Pharo. So I played a bit more with the current test version [1], trying to push the limits. In the past, it was only possible to safely allocate about 1.5GB of memory even though a 32-bit process' limit is theoretically 4GB (the OS and the VM need space too).
>
> Allocating a couple of 1GB ByteArrays is one way to push memory use, but it feels a bit silly. So I loaded a bunch of projects (including Seaside) to push the class/method counts (7K classes, 100K methods) and wrote a script [2] that basically copies part of the class/method metadata including 2 copies of each's methods source code as well as its AST (bypassing the cache of course). This feels more like a real object graph.
>
> I had to create no less than 7 (SEVEN) copies (each kept open in an inspector) to break through the mythical 4GB limit (real allocated & used memory).
>
> <Screen Shot 2016-11-09 at 11.25.28.png>
>
> I also have the impression that the image shrinking problem is gone (closing everything frees memory, saving the image has it return to its original size, 100MB in this case).
>
> Great work, thank you. Bright future again.
>
> Sven
>
> PS: Yes, GC is slower; No, I did not yet try to save such a large image.
>
> [1]
>
> VM here: http://bintray.com/estebanlm/pharo-vm/build#files/
> Image here: http://files.pharo.org/get-files/60/pharo-64.zip
>
> [2]
>
> | meta |
> ASTCache reset.
> meta := Dictionary new.
> Smalltalk allClassesAndTraits do: [ :each | | classMeta methods |
>   (classMeta := Dictionary new)
>     at: #name put: each name asSymbol;
>     at: #comment put: each comment;
>     at: #definition put: each definition;
>     at: #object put: each.
>   methods := Dictionary new.
>   classMeta at: #methods put: methods.
>   each methodsDo: [ :method | | methodMeta |
>     (methodMeta := Dictionary new)
>       at: #name put: method selector;
>       at: #source put: method sourceCode;
>       at: #ast put: method ast;
>       at: #args put: method argumentNames asArray;
>       at: #formatted put: method ast formattedCode;
>       at: #comment put: (method comment ifNotNil: [ :str | str withoutQuoting ]);
>       at: #object put: method.
>     methods at: method selector put: methodMeta ].
>   meta at: each name asSymbol put: classMeta ].
> meta.
>
>
>
> --
> Sven Van Caekenberghe
> Proudly supporting Pharo
> http://pharo.org
> http://association.pharo.org
> http://consortium.pharo.org
>
>
>
>
>
>
>
> --
> Best regards,
> Igor Stasenko.

--
www.tudorgirba.com
www.feenk.com

"We can create beautiful models in a vacuum.
But, to get them effective we have to deal with the inconvenience of reality."





--
Best regards,
Igor Stasenko.
Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

philippeback
In reply to this post by Tudor Girba-2
Tudor,

Igor still has a point here. I was talking yesterday with a data science guy and he was indeed more interested in lamenting than working out solutions for his problems.

Which weren't that hard to begin with as all it took is an hour of work to get his results. But I think he felt better complaining and self aggrandizing than actually making things work and move on to the next challenge.

Example of his "issues": 

Him:"I have a looooot of data"
Me: "Like what, more or less than 1TB?"
Him: "Less than that"
Me: "kay, can you give me a sample set of this hard disk?"
Him: "Yeah, but no, well, I need to get it first"
Me: "Let's sit tomorrow over lunch so that we can ingest it all and work it out"
Him: "Let me come back to you..."

I think he was more interested in uttering things like "Spark 2.0" "Lots of data" "Star schema" (and saying it loud so that people could hear it) than solving anything real.

Overgeneralizing yes, speaking down, heh, not so much. There are indeed super smart/efficient/effective people in data science. But there is also a crowd that is quite, how to say... more interested in the Egyptian-style grand priest status than in the actual problems.

Phil



On Thu, Nov 10, 2016 at 7:27 AM, Tudor Girba <[hidden email]> wrote:
Hi Igor,

Please refrain from speaking down on people.

If you have a concrete solution for how to do things, please feel free to share it with us. We would be happy to learn from it.

Cheers,
Tudor


> On Nov 10, 2016, at 4:11 AM, Igor Stasenko <[hidden email]> wrote:
>
> Nice progress, indeed.
> Now i hope at the end of the day, the guys who doing data mining/statistical analysis will finally shut up and happily be able
> to work with more bloat without need of learning a ways to properly manage memory & resources, and implement them finally.
> But i guess, that won't be long silence, before they again start screaming in despair: please help, my bloat doesn't fits into memory... :)
>
> On 9 November 2016 at 12:06, Sven Van Caekenberghe <[hidden email]> wrote:
> OK, I am quite excited about the future possibilities of 64-bit Pharo. So I played a bit more with the current test version [1], trying to push the limits. In the past, it was only possible to safely allocate about 1.5GB of memory even though a 32-bit process' limit is theoretically 4GB (the OS and the VM need space too).
>
> Allocating a couple of 1GB ByteArrays is one way to push memory use, but it feels a bit silly. So I loaded a bunch of projects (including Seaside) to push the class/method counts (7K classes, 100K methods) and wrote a script [2] that basically copies part of the class/method metadata including 2 copies of each's methods source code as well as its AST (bypassing the cache of course). This feels more like a real object graph.
>
> I had to create no less than 7 (SEVEN) copies (each kept open in an inspector) to break through the mythical 4GB limit (real allocated & used memory).
>
> <Screen Shot 2016-11-09 at 11.25.28.png>
>
> I also have the impression that the image shrinking problem is gone (closing everything frees memory, saving the image has it return to its original size, 100MB in this case).
>
> Great work, thank you. Bright future again.
>
> Sven
>
> PS: Yes, GC is slower; No, I did not yet try to save such a large image.
>
> [1]
>
> VM here: http://bintray.com/estebanlm/pharo-vm/build#files/
> Image here: http://files.pharo.org/get-files/60/pharo-64.zip
>
> [2]
>
> | meta |
> ASTCache reset.
> meta := Dictionary new.
> Smalltalk allClassesAndTraits do: [ :each | | classMeta methods |
>   (classMeta := Dictionary new)
>     at: #name put: each name asSymbol;
>     at: #comment put: each comment;
>     at: #definition put: each definition;
>     at: #object put: each.
>   methods := Dictionary new.
>   classMeta at: #methods put: methods.
>   each methodsDo: [ :method | | methodMeta |
>     (methodMeta := Dictionary new)
>       at: #name put: method selector;
>       at: #source put: method sourceCode;
>       at: #ast put: method ast;
>       at: #args put: method argumentNames asArray;
>       at: #formatted put: method ast formattedCode;
>       at: #comment put: (method comment ifNotNil: [ :str | str withoutQuoting ]);
>       at: #object put: method.
>     methods at: method selector put: methodMeta ].
>   meta at: each name asSymbol put: classMeta ].
> meta.
>
>
>
> --
> Sven Van Caekenberghe
> Proudly supporting Pharo
> http://pharo.org
> http://association.pharo.org
> http://consortium.pharo.org
>
>
>
>
>
>
>
> --
> Best regards,
> Igor Stasenko.

--
www.tudorgirba.com
www.feenk.com

"We can create beautiful models in a vacuum.
But, to get them effective we have to deal with the inconvenience of reality."



Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

philippeback
In reply to this post by Igor Stasenko
Ah, but then it may be more interesting to have a data image (maybe a lot of these) and a front end image.

Isn't Seamless something that could help us here? No need to bring the data back, just manipulate it through proxies.

FWIW, I have 2PB of data. Not going to fit in RAM. But also would takes ages to load anyway, so we work on pieces.

FWIW2: one Hadoop cluster I am managing now will grow by, I think, some 100s of servers in the coming months. 
64bit Pharo is something I can deploy on the boxes, which are 128GB-256GB things with like 32-48 cores.

As I mentioned before, if you want to run something on it with Pharo, be my guest.


Phil

On Thu, Nov 10, 2016 at 9:12 AM, Igor Stasenko <[hidden email]> wrote:

On 10 November 2016 at 07:27, Tudor Girba <[hidden email]> wrote:
Hi Igor,

Please refrain from speaking down on people.


Hi, Doru!
I just wanted to hear you :)
 
If you have a concrete solution for how to do things, please feel free to share it with us. We would be happy to learn from it.


Well, there's so many solutions, that i even don't know what to offer, and given the potential of smalltalk, i wonder why
you are not employing any. But in overall it is a quesition of storing most of your data on disk, and only small portion of it
in image (in most optimal cases - only the portion that user sees/operates with).
As i said to you before, you will hit this wall inevitably, no matter how much memory is available.
So, what stops you from digging in that direction?
Because even if you can fit all data in memory, consider how much time it takes for GC to scan 4+ Gb of memory, comparing to
100 MB or less.
I don't think you'll find it convenient to work in environment where you'll have 2-3 seconds pauses between mouse clicks.
So, of course, my tone is not acceptable, but its pain to see how people remain helpless without even thinking about 
doing what they need. We have Fuel for how many years now? 
So it can't be as easy as it is, just serialize the data and purge it from image, till it will be required again.
Sure it will require some effort, but it is nothing comparing to day to day pain that you have to tolerate because of lack of solution.
 
Cheers,
Tudor


> On Nov 10, 2016, at 4:11 AM, Igor Stasenko <[hidden email]> wrote:
>
> Nice progress, indeed.
> Now i hope at the end of the day, the guys who doing data mining/statistical analysis will finally shut up and happily be able
> to work with more bloat without need of learning a ways to properly manage memory & resources, and implement them finally.
> But i guess, that won't be long silence, before they again start screaming in despair: please help, my bloat doesn't fits into memory... :)
>
> On 9 November 2016 at 12:06, Sven Van Caekenberghe <[hidden email]> wrote:
> OK, I am quite excited about the future possibilities of 64-bit Pharo. So I played a bit more with the current test version [1], trying to push the limits. In the past, it was only possible to safely allocate about 1.5GB of memory even though a 32-bit process' limit is theoretically 4GB (the OS and the VM need space too).
>
> Allocating a couple of 1GB ByteArrays is one way to push memory use, but it feels a bit silly. So I loaded a bunch of projects (including Seaside) to push the class/method counts (7K classes, 100K methods) and wrote a script [2] that basically copies part of the class/method metadata including 2 copies of each's methods source code as well as its AST (bypassing the cache of course). This feels more like a real object graph.
>
> I had to create no less than 7 (SEVEN) copies (each kept open in an inspector) to break through the mythical 4GB limit (real allocated & used memory).
>
> <Screen Shot 2016-11-09 at 11.25.28.png>
>
> I also have the impression that the image shrinking problem is gone (closing everything frees memory, saving the image has it return to its original size, 100MB in this case).
>
> Great work, thank you. Bright future again.
>
> Sven
>
> PS: Yes, GC is slower; No, I did not yet try to save such a large image.
>
> [1]
>
> VM here: http://bintray.com/estebanlm/pharo-vm/build#files/
> Image here: http://files.pharo.org/get-files/60/pharo-64.zip
>
> [2]
>
> | meta |
> ASTCache reset.
> meta := Dictionary new.
> Smalltalk allClassesAndTraits do: [ :each | | classMeta methods |
>   (classMeta := Dictionary new)
>     at: #name put: each name asSymbol;
>     at: #comment put: each comment;
>     at: #definition put: each definition;
>     at: #object put: each.
>   methods := Dictionary new.
>   classMeta at: #methods put: methods.
>   each methodsDo: [ :method | | methodMeta |
>     (methodMeta := Dictionary new)
>       at: #name put: method selector;
>       at: #source put: method sourceCode;
>       at: #ast put: method ast;
>       at: #args put: method argumentNames asArray;
>       at: #formatted put: method ast formattedCode;
>       at: #comment put: (method comment ifNotNil: [ :str | str withoutQuoting ]);
>       at: #object put: method.
>     methods at: method selector put: methodMeta ].
>   meta at: each name asSymbol put: classMeta ].
> meta.
>
>
>
> --
> Sven Van Caekenberghe
> Proudly supporting Pharo
> http://pharo.org
> http://association.pharo.org
> http://consortium.pharo.org
>
>
>
>
>
>
>
> --
> Best regards,
> Igor Stasenko.

--
www.tudorgirba.com
www.feenk.com

"We can create beautiful models in a vacuum.
But, to get them effective we have to deal with the inconvenience of reality."





--
Best regards,
Igor Stasenko.

Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

Denis Kudriashov
In reply to this post by Nicolas Cellier

2016-11-09 23:30 GMT+01:00 Nicolas Cellier <[hidden email]>:
uptime                  0h0m0s
memory                  70,918,144 bytes
        old                     61,966,112 bytes (87.4%)
        young           2,781,608 bytes (3.9000000000000004%)
I see yet another bad usage of round:/roundTo: --------------^

It just printed float :). I think anybody round values in this statistics.
Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

Denis Kudriashov
In reply to this post by Igor Stasenko
Hi Igor.

2016-11-10 9:12 GMT+01:00 Igor Stasenko <[hidden email]>:
Because even if you can fit all data in memory, consider how much time it takes for GC to scan 4+ Gb of memory, comparing to
100 MB or less.

But do you think there is no solution to that. Imaging Pharo as computer model, no files, only objects. No way to implement proper GC  in such environment?
(it is of course question to others and to Eliot).
Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

Sven Van Caekenberghe-2
In reply to this post by Denis Kudriashov

> On 10 Nov 2016, at 10:10, Denis Kudriashov <[hidden email]> wrote:
>
>
> 2016-11-09 23:30 GMT+01:00 Nicolas Cellier <[hidden email]>:
> uptime                  0h0m0s
> memory                  70,918,144 bytes
>         old                     61,966,112 bytes (87.4%)
>         young           2,781,608 bytes (3.9000000000000004%)
> I see yet another bad usage of round:/roundTo: --------------^
>
> It just printed float :). I think anybody round values in this statistics.

Nothing should be rounded. Just compute the percentage and then use #printShowingDecimalPlaces: or #printOn:showingDecimalPlaces:
Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

Tudor Girba-2
In reply to this post by philippeback
Hi,

There is never any point in talking down on people. It never leads to anything except perhaps stifling action and participation.

We want to foster an environment in which people should not be afraid to be a novice at something and ask for help.

Cheers,
Doru

> On Nov 10, 2016, at 9:45 AM, [hidden email] wrote:
>
> Tudor,
>
> Igor still has a point here. I was talking yesterday with a data science guy and he was indeed more interested in lamenting than working out solutions for his problems.
>
> Which weren't that hard to begin with as all it took is an hour of work to get his results. But I think he felt better complaining and self aggrandizing than actually making things work and move on to the next challenge.
>
> Example of his "issues":
>
> Him:"I have a looooot of data"
> Me: "Like what, more or less than 1TB?"
> Him: "Less than that"
> Me: "kay, can you give me a sample set of this hard disk?"
> Him: "Yeah, but no, well, I need to get it first"
> Me: "Let's sit tomorrow over lunch so that we can ingest it all and work it out"
> Him: "Let me come back to you..."
>
> I think he was more interested in uttering things like "Spark 2.0" "Lots of data" "Star schema" (and saying it loud so that people could hear it) than solving anything real.
>
> Overgeneralizing yes, speaking down, heh, not so much. There are indeed super smart/efficient/effective people in data science. But there is also a crowd that is quite, how to say... more interested in the Egyptian-style grand priest status than in the actual problems.
>
> Phil
>
>
>
> On Thu, Nov 10, 2016 at 7:27 AM, Tudor Girba <[hidden email]> wrote:
> Hi Igor,
>
> Please refrain from speaking down on people.
>
> If you have a concrete solution for how to do things, please feel free to share it with us. We would be happy to learn from it.
>
> Cheers,
> Tudor
>
>
> > On Nov 10, 2016, at 4:11 AM, Igor Stasenko <[hidden email]> wrote:
> >
> > Nice progress, indeed.
> > Now i hope at the end of the day, the guys who doing data mining/statistical analysis will finally shut up and happily be able
> > to work with more bloat without need of learning a ways to properly manage memory & resources, and implement them finally.
> > But i guess, that won't be long silence, before they again start screaming in despair: please help, my bloat doesn't fits into memory... :)
> >
> > On 9 November 2016 at 12:06, Sven Van Caekenberghe <[hidden email]> wrote:
> > OK, I am quite excited about the future possibilities of 64-bit Pharo. So I played a bit more with the current test version [1], trying to push the limits. In the past, it was only possible to safely allocate about 1.5GB of memory even though a 32-bit process' limit is theoretically 4GB (the OS and the VM need space too).
> >
> > Allocating a couple of 1GB ByteArrays is one way to push memory use, but it feels a bit silly. So I loaded a bunch of projects (including Seaside) to push the class/method counts (7K classes, 100K methods) and wrote a script [2] that basically copies part of the class/method metadata including 2 copies of each's methods source code as well as its AST (bypassing the cache of course). This feels more like a real object graph.
> >
> > I had to create no less than 7 (SEVEN) copies (each kept open in an inspector) to break through the mythical 4GB limit (real allocated & used memory).
> >
> > <Screen Shot 2016-11-09 at 11.25.28.png>
> >
> > I also have the impression that the image shrinking problem is gone (closing everything frees memory, saving the image has it return to its original size, 100MB in this case).
> >
> > Great work, thank you. Bright future again.
> >
> > Sven
> >
> > PS: Yes, GC is slower; No, I did not yet try to save such a large image.
> >
> > [1]
> >
> > VM here: http://bintray.com/estebanlm/pharo-vm/build#files/
> > Image here: http://files.pharo.org/get-files/60/pharo-64.zip
> >
> > [2]
> >
> > | meta |
> > ASTCache reset.
> > meta := Dictionary new.
> > Smalltalk allClassesAndTraits do: [ :each | | classMeta methods |
> >   (classMeta := Dictionary new)
> >     at: #name put: each name asSymbol;
> >     at: #comment put: each comment;
> >     at: #definition put: each definition;
> >     at: #object put: each.
> >   methods := Dictionary new.
> >   classMeta at: #methods put: methods.
> >   each methodsDo: [ :method | | methodMeta |
> >     (methodMeta := Dictionary new)
> >       at: #name put: method selector;
> >       at: #source put: method sourceCode;
> >       at: #ast put: method ast;
> >       at: #args put: method argumentNames asArray;
> >       at: #formatted put: method ast formattedCode;
> >       at: #comment put: (method comment ifNotNil: [ :str | str withoutQuoting ]);
> >       at: #object put: method.
> >     methods at: method selector put: methodMeta ].
> >   meta at: each name asSymbol put: classMeta ].
> > meta.
> >
> >
> >
> > --
> > Sven Van Caekenberghe
> > Proudly supporting Pharo
> > http://pharo.org
> > http://association.pharo.org
> > http://consortium.pharo.org
> >
> >
> >
> >
> >
> >
> >
> > --
> > Best regards,
> > Igor Stasenko.
>
> --
> www.tudorgirba.com
> www.feenk.com
>
> "We can create beautiful models in a vacuum.
> But, to get them effective we have to deal with the inconvenience of reality."
>
>
>

--
www.tudorgirba.com
www.feenk.com

"One cannot do more than one can do."





Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

Denis Kudriashov
In reply to this post by philippeback

2016-11-10 9:49 GMT+01:00 [hidden email] <[hidden email]>:
Ah, but then it may be more interesting to have a data image (maybe a lot of these) and a front end image.

Isn't Seamless something that could help us here? No need to bring the data back, just manipulate it through proxies.

Problem that server image will anyway perform GC. And it will be slow if server image is big which will stop all world.
Reply | Threaded
Open this post in threaded view
|

Re: Breaking the 4GB barrier with Pharo 6 64-bit

Tudor Girba-2
In reply to this post by Igor Stasenko
Hi Igor,

I am happy to see you getting active again. The next step is to commit code at the rate you reply emails. I’d be even happier :).

To address your point, of course it certainly would be great to have more people work on automated support for swapping data in and out of the image. That was the original idea behind the Fuel work. I have seen a couple of cases on the mailing lists where people are actually using Fuel for caching purposes. I have done this a couple of times, too. But, at this point these are dedicated solutions and would be interesting to see it expand further.

However, your assumption is that the best design is one that deals with small chunks of data at a time. This made a lot of sense when memory was expensive and small. But, these days the cost is going down very rapidly, and sizes of 128+ GB of RAM is nowadays quite cheap, and there are strong signs of super large non-volatile memories become increasingly accessible. The software design should take advantage of what hardware offers, so it is not unreasonable to want to have a GC that can deal with large size.

We should always challenge the assumptions behind our designs, because the world keeps changing and we risk becoming irrelevant, a syndrome that is not foreign to Smalltalk aficionados.

Cheers,
Doru


> On Nov 10, 2016, at 9:12 AM, Igor Stasenko <[hidden email]> wrote:
>
>
> On 10 November 2016 at 07:27, Tudor Girba <[hidden email]> wrote:
> Hi Igor,
>
> Please refrain from speaking down on people.
>
>
> Hi, Doru!
> I just wanted to hear you :)
>  
> If you have a concrete solution for how to do things, please feel free to share it with us. We would be happy to learn from it.
>
>
> Well, there's so many solutions, that i even don't know what to offer, and given the potential of smalltalk, i wonder why
> you are not employing any. But in overall it is a quesition of storing most of your data on disk, and only small portion of it
> in image (in most optimal cases - only the portion that user sees/operates with).
> As i said to you before, you will hit this wall inevitably, no matter how much memory is available.
> So, what stops you from digging in that direction?
> Because even if you can fit all data in memory, consider how much time it takes for GC to scan 4+ Gb of memory, comparing to
> 100 MB or less.
> I don't think you'll find it convenient to work in environment where you'll have 2-3 seconds pauses between mouse clicks.
> So, of course, my tone is not acceptable, but its pain to see how people remain helpless without even thinking about
> doing what they need. We have Fuel for how many years now?
> So it can't be as easy as it is, just serialize the data and purge it from image, till it will be required again.
> Sure it will require some effort, but it is nothing comparing to day to day pain that you have to tolerate because of lack of solution.
>  
> Cheers,
> Tudor
>
>
> > On Nov 10, 2016, at 4:11 AM, Igor Stasenko <[hidden email]> wrote:
> >
> > Nice progress, indeed.
> > Now i hope at the end of the day, the guys who doing data mining/statistical analysis will finally shut up and happily be able
> > to work with more bloat without need of learning a ways to properly manage memory & resources, and implement them finally.
> > But i guess, that won't be long silence, before they again start screaming in despair: please help, my bloat doesn't fits into memory... :)
> >
> > On 9 November 2016 at 12:06, Sven Van Caekenberghe <[hidden email]> wrote:
> > OK, I am quite excited about the future possibilities of 64-bit Pharo. So I played a bit more with the current test version [1], trying to push the limits. In the past, it was only possible to safely allocate about 1.5GB of memory even though a 32-bit process' limit is theoretically 4GB (the OS and the VM need space too).
> >
> > Allocating a couple of 1GB ByteArrays is one way to push memory use, but it feels a bit silly. So I loaded a bunch of projects (including Seaside) to push the class/method counts (7K classes, 100K methods) and wrote a script [2] that basically copies part of the class/method metadata including 2 copies of each's methods source code as well as its AST (bypassing the cache of course). This feels more like a real object graph.
> >
> > I had to create no less than 7 (SEVEN) copies (each kept open in an inspector) to break through the mythical 4GB limit (real allocated & used memory).
> >
> > <Screen Shot 2016-11-09 at 11.25.28.png>
> >
> > I also have the impression that the image shrinking problem is gone (closing everything frees memory, saving the image has it return to its original size, 100MB in this case).
> >
> > Great work, thank you. Bright future again.
> >
> > Sven
> >
> > PS: Yes, GC is slower; No, I did not yet try to save such a large image.
> >
> > [1]
> >
> > VM here: http://bintray.com/estebanlm/pharo-vm/build#files/
> > Image here: http://files.pharo.org/get-files/60/pharo-64.zip
> >
> > [2]
> >
> > | meta |
> > ASTCache reset.
> > meta := Dictionary new.
> > Smalltalk allClassesAndTraits do: [ :each | | classMeta methods |
> >   (classMeta := Dictionary new)
> >     at: #name put: each name asSymbol;
> >     at: #comment put: each comment;
> >     at: #definition put: each definition;
> >     at: #object put: each.
> >   methods := Dictionary new.
> >   classMeta at: #methods put: methods.
> >   each methodsDo: [ :method | | methodMeta |
> >     (methodMeta := Dictionary new)
> >       at: #name put: method selector;
> >       at: #source put: method sourceCode;
> >       at: #ast put: method ast;
> >       at: #args put: method argumentNames asArray;
> >       at: #formatted put: method ast formattedCode;
> >       at: #comment put: (method comment ifNotNil: [ :str | str withoutQuoting ]);
> >       at: #object put: method.
> >     methods at: method selector put: methodMeta ].
> >   meta at: each name asSymbol put: classMeta ].
> > meta.
> >
> >
> >
> > --
> > Sven Van Caekenberghe
> > Proudly supporting Pharo
> > http://pharo.org
> > http://association.pharo.org
> > http://consortium.pharo.org
> >
> >
> >
> >
> >
> >
> >
> > --
> > Best regards,
> > Igor Stasenko.
>
> --
> www.tudorgirba.com
> www.feenk.com
>
> "We can create beautiful models in a vacuum.
> But, to get them effective we have to deal with the inconvenience of reality."
>
>
>
>
>
> --
> Best regards,
> Igor Stasenko.

--
www.tudorgirba.com
www.feenk.com

"Not knowing how to do something is not an argument for how it cannot be done."


123