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] 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 |
Very nice! Thanks for the heads up Sven.
|
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 :) |
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 :
|
2016-11-09 15:23 GMT+01:00 [hidden email] <[hidden email]>:
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
|
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:
|
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 # history | grep wget 5 wget http://files.pharo.org/get-files/60/pharo-64.zip 6 wget http://files.pharo.org/sources/PharoV50.sources.zip 7 wget https://bintray.com/estebanlm/pharo-vm/download_file?file_path=pharo-linux-x86_64threaded.0a4ccdf.zip # ./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: |
2016-11-09 23:20 GMT+01:00 Sven Van Caekenberghe <[hidden email]>:
I see yet another bad usage of round:/roundTo: --------------^ Ah, but it was another thread ;)
|
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:
Best regards,
Igor Stasenko. |
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." |
> 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." > > |
In reply to this post by Tudor Girba-2
On 10 November 2016 at 07:27, Tudor Girba <[hidden email]> wrote: Hi Igor, 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, Best regards,
Igor Stasenko. |
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, |
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:
|
In reply to this post by Nicolas Cellier
2016-11-09 23:30 GMT+01:00 Nicolas Cellier <[hidden email]>:
It just printed float :). I think anybody round values in this statistics. |
In reply to this post by Igor Stasenko
Hi Igor. 2016-11-10 9:12 GMT+01:00 Igor Stasenko <[hidden email]>:
(it is of course question to others and to Eliot). |
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: |
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." |
In reply to this post by philippeback
2016-11-10 9:49 GMT+01:00 [hidden email] <[hidden email]>:
Problem that server image will anyway perform GC. And it will be slow if server image is big which will stop all world. |
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." |
Free forum by Nabble | Edit this page |