I've posted a macintosh VM that includes the buffered display improvements, changes from Andreas to view certain GC events/features and my changes from last fall to collect GC statistics & alter the VM to bias for growth versus compaction.
I've stuck them on my idisk http://homepage.mac.com/johnmci/FileSharing.html
See the experimental directory and the squeakGarbage sub-directory. or see the following ftp directory for zip files.
ftp://www.smalltalkconsulting.com/squeakGarbage/ ftp://www.smalltalkconsulting.com/
I have not build an os-9 version yet, and I will post a 3.8.6b5 VM in a day after some minor changes to statistical collection and any changes based on feedback I receive.
Folks who are interested should review the VM for any performance improvements in the following areas.
a) Applications that invoke lots of drawing should be faster b) By setting these two VM parms some application may see altered memory growth patterns (better) and faster transaction thruput. Repeatable results are welcome.
Smalltalk setGCBiasToGrowGCLimit: 16*1024*1024. "Set growth limit before full GC to 16MB" Smalltalk setGCBiasToGrow: 1. Set bias to grow upto GCLimit, this can avoid a problem where we attempt to avoid growing but results in thousands of incremental GC events as we approach a knee in a curve of space used versus the growth/compaction decision.
3.8.6b4 has: Ensure VMMaker 3.8b2 - the VM code classes and tools for building a working vm for Squeak version > 3.8-6461. is incorporated. Add Andreas's GC improvement changes for * primitiveIsYoung: This answers the question whether an object currently lives in young or in old space.
* primitiveIsRoot: Answers the question whether any given object is currently a root for young space.
* primitiveRootTable: Answers a snapshot of the current root table. Useful to examine the roots table if the analysis requires complex other operations during which the root table might be modified itself. Note that since this primitive can cause GC there is a small chance that it will give an inaccurate answer.
* primitiveRootTableAt: Answers a single element of the root table (by one-based index). This primitive can be used to quickly scan the root table for certain objects.
* primitiveSetGCSemaphore: Indicates a semaphore (index) to be signaled whenever a garbage collection occurs. I can see at least two uses uses for the GC semaphore: running cleanup actions (for example after full GCs occured) and dynamic parameter tuning for the GC algorithm itself.
Add John's changes for
Smalltalk setGCBiasToGrowGCLimit: 16*1024*1024. "Set growth limit before full GC to 16MB"
Smalltalk setGCBiasToGrow: 1. Set bias to grow upto GCLimit, this can avoid a problem where we attempt to avoid growing but results in thousands of incremental GC events as we approach a knee in a curve of space used versus the growth/compaction decision.
3.8.6b3 Add in logic for become: to fix issues with changes to become: logic.
3.8.6b2 sqMacWindow.c reduce number of lock/unlock pixel events and flush no more than 91 fps, with flush check every 1/50 or 1/60 and 1/5 of a second. this shaves another 50% off making drawing pixels 1.3% of the time originally taken.
3.8.6b1 sqMacWindow.c, sqUIEvents.c, changed logic to flush screen every 125 fps, this makes pixel level drawing complete in 2% of the time originally taken.
-- ======================================================================== === John M. McIntosh johnmci@smalltalkconsulting.com 1-800-477-2659 Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com ======================================================================== ===
squeak-dev@lists.squeakfoundation.org