Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-26 Thread Rick McGuire
Ok, now I'm getting the expected out-of-memory error. Reworked a bit how the live stack is managed and also added some predictive code to collection class allocations to try to predict ahead of time how large the live stack should be, which allows allocations error to (mostly) be handled as regular

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-26 Thread Enrico Sorichetti via Oorexx-devel
here are my results ( slightly modified the script ) [enrico@enrico-mbp oorexx.tests]$./gc2.rx grabbed10gb 21:40:58.682841 grabbed20gb 21:41:05.994087 grabbed30gb 21:41:13.765010 grabbed40gb 21:41:21.462267 grabbed50gb 21:41:29.247617 grabbed60gb 21:41:36.993362

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-26 Thread Rick McGuire
I’m guessing that we were getting eom failures earlier with the old code so we never reached the point of getting a livestock allocation failure. On Sun, Aug 26, 2018 at 1:23 PM Erich Steinböck wrote: > I wonder why this is popping up only now. Wouldn't we always have had a > good chance that t

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-26 Thread Erich Steinböck
I wonder why this is popping up only now. Wouldn't we always have had a good chance that the liveStack needed expansion (because we now have more active objects than before) when a terminal out-of-memory exception triggered a GC? Why then did this work until now? On Sun, Aug 26, 2018 at 7:00 PM

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-26 Thread Rick McGuire
Yes, I understand, but the root cause of this problem is a failure trying to expand the liveStack during a garbage collection. The call to reportException() at that time causes a recursive allocation failure, resulting in the eventual out-of-stack condition. I suspect the only real way to handle th

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-26 Thread Erich Steinböck
The actual failure is stack overflow (due the the infinite recursion it goes into) Unhandled exception at 0x07FED88162FC (rexx.dll) in rexx.exe: 0xC0FD: Stack overflow (parameters: 0x0001, 0x000D3FC0).

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-26 Thread Rick McGuire
Ah good, this confirms my suspicions about one of the things I need to fix. It's actually amazing that this is the first time an issue has occurred here in 25 years. Rick On Sun, Aug 26, 2018 at 9:40 AM Erich Steinböck wrote: > By reserving some memory in a program outside of the debugger befor

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-26 Thread Rick McGuire
Ok, I was able to find the issue. With an object like a very big array that holds lots of objects, it is necessary to expand the marking stack size during the GC process. The failure was happening because this expansion was failing. It looks like Windows terminated things because Windows itself was

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-26 Thread Erich Steinböck
> > devenv /debugexe rexx.exe myprog.rex > And just start it running by hitting F5 > This works for the typical script, but for me running above memory exhaust script will almost consistently take down devenv itself. After trying repeatedly, the debugger once showed an exception in LiveStack::reall

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-26 Thread Rick McGuire
Start the process in the debugger first. There are events that don't always show up as traps. Do this using devenv /debugexe rexx.exe myprog.rex And just start it running by hitting F5. It will break if there is some sort of terminating event. Rick On Sun, Aug 26, 2018 at 8:07 AM Erich Steinböc

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-26 Thread Erich Steinböck
> > It still just runs to completion for me on Windows > Here's a version that should show the issue on any platform (it does for me): ~~~ m = .Array~new(100) chunk = 500e6 signal on syntax -- grab memory chunks until almost exhausted loop m~append(.MutableBuffer~new(, chunk)) .stdout~charOut

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-26 Thread Rick McGuire
It still just runs to completion for me on Windows. If this is dying to for you, run it in the debugger to see why it is terminating. Rick On Sun, Aug 26, 2018 at 6:05 AM Erich Steinböck wrote: > The issue is about what happens when the loop *doesn't* complete, not > when it *does*. > If you've

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-26 Thread Erich Steinböck
The issue is about what happens when the loop *doesn't* complete, not when it *does*. If you've got 16 GB free, just add `m = .MutableBuffer~new(, 15e9)` as the first statement and then run the loop. When it doesn't complete due to lack of memory, with the latest 64-bit trunk on Windows 7, Windows

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-25 Thread Rick McGuire
I tried a similar experiment on Windows 10, same result. Each GC cycle took longer because of the larger numbers of large objects in the array, but it eventually completed. Rick On Sat, Aug 25, 2018 at 7:08 PM Enrico Sorichetti via Oorexx-devel < oorexx-devel@lists.sourceforge.net> wrote: > > >

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-25 Thread Enrico Sorichetti via Oorexx-devel
> I notice that below code now just ends without any indication on Windows and > will get automatically killed on Ubuntu after about 7 mio iterations (this is > on 64-bit builds on some specific machines; you might need to tweak n > depending on your system/memory configuration). > … … ... run

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-25 Thread Rick McGuire
It runs all the way to completion for me on Windows (64-bit) without an error. Could it be possible that Ubuntu is killing it because it is hitting some per-process memory limit rather than returning a NULL for the memory failure. This program really should have been much affected by the new code e

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-25 Thread Erich Steinböck
I notice that below code now just ends without any indication on Windows and will get automatically killed on Ubuntu after about 7 mio iterations (this is on 64-bit builds on some specific machines; you might need to tweak n depending on your system/memory configuration). This used to raise error

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-23 Thread Mike Cowlishaw
On Wed, Aug 22, 2018 at 12:06 PM Mike Cowlishaw wrote: Excellent! Will this affect stems' performance at all? Probably not. This deals mostly with how the storage used for very large objects are managed. Stems are composed of lots of small objects. The effects would more likely be seen

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-22 Thread Rick McGuire
*To:* Open Object Rexx Developer Mailing List > *Subject:* [Oorexx-devel] A simple benchmark result of the new GC code. > > Just ran this simple program that has always caused issues with the > garbage collector. > > str = "This is a test" > add = "This is a test"~

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-22 Thread Mike Cowlishaw
Excellent! Will this affect stems' performance at all? Mike _ From: Rick McGuire [mailto:object.r...@gmail.com] Sent: 21 August 2018 21:24 To: Open Object Rexx Developer Mailing List Subject: [Oorexx-devel] A simple benchmark result of the new GC code. Just ran this s

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-22 Thread Erich Steinböck
I can successfully run regression tests with a "largeobject" build. With my testgroup selection memory footprint shrinks by 25% vs trunk (568 MB vs. 752 MB). To repeat Rony: impressive :-) -- Check out the vibrant tech comm

Re: [Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-22 Thread Rony G. Flatscher
On 21.08.2018 22:24, Rick McGuire wrote: > Just ran this simple program that has always caused issues with the garbage > collector. > > str = "This is a test" > add = "This is a test"~copies(100) > do forever >str = str add >say str~length > end > I let it run on both trunk and and prototy

[Oorexx-devel] A simple benchmark result of the new GC code.

2018-08-21 Thread Rick McGuire
Just ran this simple program that has always caused issues with the garbage collector. str = "This is a test" add = "This is a test"~copies(100)do forever str = str add say str~lengthend I let it run on both trunk and and prototype until the sizes reached about 28Mb per string. On the tru