| dalek | arVM: 5de8e14 | jnthn++ | src/core/continuation.c: Simplify frame refcount handling in continuations. Avoid a couple of seemingly unrequired fiddles. Doesn't help with the frame leak, but simpler/cleaner. |
00:23 | |
| arVM: 8d2fe21 | jnthn++ | src/6model/reprs/MVMContinuation.c: Fix a source of frame leaks in continuations. When we GC a continuation that sliced off some active handlers, and those handlers still reference frames, make sure we decrement the frame reference count. Can happen for a gather/take that does not ever complete its execution. So, not the big leak affecting all of the gather/takes, but a needed fix anyway. |
|||
| jnthn | OK, I have a clue. | 00:27 | |
| 44-try-catch.t leaks a frame. | 00:28 | ||
| Commenting out the test that resumes from an exception seems to remove the frame leak. | |||
| And gather/take uses resumable exceptions. | |||
| timotimo | that seems conclusive | ||
| jnthn | Well, it's certainly suggestive, yeah. | ||
| Looking at resumption now. | 00:29 | ||
| oh, yeah... | |||
| timotimo is expecting an "oh, how was this ever supposed to work?" :) | |||
| ah, there it is! :) | |||
| jnthn | Well, I think I see what's wrong. | ||
| /* Clear the current active handler. */ | |||
| ah = tc->active_handlers; | |||
| tc->active_handlers = ah->next_handler; | |||
| free(ah); | |||
| That's correct in terms of "will work" | |||
| But when we make an active handler record, it takes a ref to the frame. | 00:30 | ||
| yeah... | |||
| /* Install active handler record. */ | |||
| ah->frame = MVM_frame_inc_ref(tc, lh.frame); | |||
| timotimo | and there's no dec_ref there? | ||
| i mean ... yeah, there's no dec_ref there :) | 00:32 | ||
| jnthn | I think that fixes the 44-try-catch.t leak... | 00:33 | |
| TimToady | pity my test case is so big :) | 00:34 | |
| jnthn | One line of Perl 6 can do a lot :P | 00:35 | |
| Turns out that t/moar/01-continuations.t exhibits the leak also. | 00:36 | ||
| And still has it after the fix I just did. | |||
| So that wasn't the entire problem. | |||
| TimToady waits for the declaration that all our current behavior depends on a bug | 00:38 | ||
| timotimo | perlāÆ6 is just the result of the undefined behavior of a small subroutine in the computer that was built by Deep Thought to figure out the question to which the answer is 42 | 00:40 | |
| jnthn | Well, currently working my way through the continuations tests, seeing what I have to uncomment to get a leak... | 00:41 | |
| timotimo | and i'm still wondering why and how i got the libpath problem in my moarvm :\ | 00:44 | |
| (but that seems to be gone now, so ...) | 01:12 | ||
| TimToady suspects jnthn++ has passed out :) | 01:20 | ||
| timotimo | drowned from all the leak | 01:22 | |
| jnthn | TimToady: Nah. Got it reduced down to something pretty small by now. :) | 01:35 | |
| TimToady | it's probably the thing that makes one statement happen after the previous one :) | 01:38 | |
| either that, or the thing that makes the next statement happen after this one... | 01:43 | ||
|
01:45
benabik joined
|
|||
| jnthn | OK, time to cross fingers... | 02:13 | |
| jnthn does an optimized build and spectests the patch. | 02:14 | ||
| TimToady | alas, there is no unicode glyph for crossed fingers | 02:17 | |
| crossed swords, or crossed flags | |||
|
02:18
benabik joined,
FROGGS_ joined
|
|||
| dalek | arVM: 5d0209e | jnthn++ | src/core/exceptions.c: Missing frame dec ref on exception resume. Active handler's frame reference goes away, so decrement. |
02:21 | |
| japhb__ disbelieves that statement ... but is not actually planning to check. | |||
| dalek | arVM: 7a2652c | jnthn++ | src/core/continuation.c: Fix "on stack" continuation ref-count handling. When a frame is on the current call stack, it gets its reference count incremented by 1 to indicate it's active at the very least as a result of currently being running. When we take a continuation, to make sure frame lifetimes are handled correctly, we just decrement this count as we slice frames away. Similarly, continuation invoke should re-instate the count as we splice the frames back onto the active call stack. Fixes gather/take memory leak reported by TimToady++. |
||
| TimToady | \o/ | 02:23 | |
| jnthn | TimToady: perl6-m -e "my @bar = (gather take 42) while 1;" # now memory stays constant | ||
| timotimo | 151.68user 0.70system 2:33.51elapsed 99%CPU (0avgtext+0avgdata 1650512maxresident)k | 02:24 | |
| japhb__ | timotimo: Any more improvement in maxresident for the setting build on your machine now? | ||
| timotimo | this is parrot, btw | ||
| japhb__ | Ah, you were already on it. :-) | ||
| jnthn | japhb__: The setting compile doesn't gather/take, afaik. | ||
| msvc++ # debug malloc can find leaks | 02:25 | ||
| japhb__ | jnthn: You had other fixes since the last time he reported in channel. | 02:26 | |
| timotimo | the timing is on my desktop vs my laptop, btw | ||
| so don't compare those. | |||
| japhb__ | I just didn't want to ask until you'd done all the fixes. | ||
| jnthn | japhb__: ah, k | ||
| japhb__ | Was it nwc10 who tried r-m builds on a Raspberry Pi? | 02:28 | |
| timotimo | that would be an impressive feat | ||
| given it took like 0.75 gigabytes of ram | |||
| where the fattest raspi has half a gig in total | |||
| jnthn | We're down to 0.6something now, though :) | 02:29 | |
| japhb__ | We're getting close with swap, I should think, depending on how many of those resident K are touched continuously. | ||
| timotimo | 65.74user 0.18system 1:06.21elapsed 99%CPU (0avgtext+0avgdata 619072maxresident)k | ||
| hardly any measurable memory saving from the frame reference counting improvements | |||
| japhb__ | Another 224K | ||
| timotimo | not necessarily. it fluctuates quite a bit. | ||
| but it's still more than twice as fast as parrot | 02:30 | ||
| and takes more than 1 gig less ram. | |||
| though IIUC parrot will just keep memory it once allocated around forever, rather than freeing it | |||
| so it's hard to tell if the memory usage is really that more dramatic | |||
| japhb__ | Ah, I misunderstood, I thought you meant the maxresident didn't change when you said they were "quite stable" -- you just meant not multiple MB change, I take it? | ||
| timotimo | about 1 megabyte from run to run | 02:31 | |
| japhb__ | Ah, OK | ||
| japhb__ wonders where that variance comes from. | |||
| timotimo | let me verify | ||
| jnthn too :) | |||
| timotimo | yeah, fluctuations of about 0.75 megabyte | 02:32 | |
| could be ordering of things going on in the uv event loop that throws off gc timings or maybe hash randomization? | 02:35 | ||
| 1 megabyte of fluctuation for that amount is about 1/6th of 1% | |||
| dalek | arVM: e9b018f | jnthn++ | src/mast/compiler.c: Some missing cleanup in MAST compiler. |
03:05 | |
| jnthn | Guess I should sleep a bit :) | ||
| 'night o/ | |||
| JimmyZ | good night jnthn++ | 03:06 | |
|
08:22
tgt joined
08:49
ggoebel11110 joined
09:14
lue joined
|
|||
| dalek | arVM: 10785df | svatsan++ | build/probe.pm: Update probe.pm Using the newer 'make_path' and 'remove_tree' causes build/configure to bail out on older versions of File::Path (especially those shipped with perl v5.10). Please see [File::Path#APIChanges][1] [1]: metacpan.org/pod/File::Path#API-CHANGES |
09:21 | |
| arVM: eae662b | (Tobias Leich)++ | build/probe.pm: Merge pull request #79 from svatsan/patch-1 Update probe.pm |
|||
|
09:28
camelia joined
09:32
FROGGS_ joined
09:37
camelia joined
09:41
tgt joined
10:34
cognominal joined
10:46
tgt joined
11:47
tgt joined
|
|||
| dalek | arVM: 537a176 | jnthn++ | src/6model/reprs/MVMCallCapture.c: Don't leak named_used in MVMCallCapture. This caused over 300,000 1-byte leaks in CORE.setting compilation. |
12:18 | |
| arVM: 054c086 | jnthn++ | src/io/fileops.c: Don't leak C string in library lookup. |
|||
| arVM: adfa8fc | jnthn++ | src/core/loadbytecode.c: Don't leak C string in bytecode loading. |
|||
| jnthn | There's more to be had, but this'll do me for now :) | 12:26 | |
| Eyeballing it, seems I just got a setting build in under 600MB. | 12:28 | ||
| JimmyZ wonders how to build a moarvm with crt dmalloc | 12:51 | ||
|
12:51
tgt joined
|
|||
| timotimo | \o/ | 12:57 | |
| jnthn | JimmyZ: msdn.microsoft.com/en-us/library/e5...s.90).aspx | 12:59 | |
| timotimo | 68.67user 0.24system 1:09.43elapsed 99%CPU (0avgtext+0avgdata 606624maxresident)k | ||
| so another 13 megabytes less | |||
| JimmyZ | jnthn: thanks | 13:00 | |
| jnthn | Not bad :) | ||
| timotimo | considering one of the leaks you fixed was a single byte big :) | 13:02 | |
| jnthn | Yeah, but I bet tracking that allocation had overhead... | ||
| timotimo | yeah | ||
| hm. wasn't nqp-m -e 'say(1)' once at 10 megabytes? or am i misremembering? | 13:08 | ||
| because it's at 20 right now | |||
| jnthn | Misremembering, I think. | 13:14 | |
| Turns out rt.perl.org/Public/Bug/Display.html?id=121298 golfs further | 13:21 | ||
| FROGGS[mobile] | how much further? | 13:47 | |
| I am eager to see the solution, though I think I probably won't unterstand it | 13:48 | ||
| jnthn | I don't have one yet :( | ||
| Constants.pm golfs to | |||
| module MoarMoneyMoarProblems::Constants; | |||
| our sub get-value { say 'ok' } | |||
| The other pm golfs to: | 13:49 | ||
| need MoarMoneyMoarProblems::Constants; | |||
| And then test.p6 is just | |||
| use MoarMoneyMoarProblems; | |||
| say MoarMoneyMoarProblems::Constants::get-value; | |||
| FROGGS[mobile]: Here's a patch, if you have time to try it: gist.github.com/jnthn/9431169 | 14:16 | ||
| With that the original code now outputs the correct value | 14:17 | ||
| FROGGS compiles | 14:18 | ||
| jnthn | spectests look fine with it | 14:28 | |
| FROGGS | jnthn: it seems to fir it for moar but not for jvm, right? | 14:37 | |
| I get a NPE for jvm with the snippets you posted | |||
| perl6-j test.p6 | 14:38 | ||
| java.lang.NullPointerException | |||
| in sub get-value at lib/MoarMoneyMoarProblems/Constants.pm:2 | |||
| and it also only fails when using precompiled modules | 14:40 | ||
| jnthn | Aww, too bad. I'd hoped it'd maybe fix it for both. | ||
| I guess when JVM adopts the same closure model as Moar then it fixes it... | |||
| Still, good it helps on Moar. Does it help URI? | 14:41 | ||
| FROGGS | let my try | ||
| jnthn | ok. btw, the bug wasn't to do with the data structure; it was about the our-scoped sub... | 14:46 | |
| Gonna take a walk while the weather's nice :) bbl | 14:47 | ||
| FROGGS | yes, that was my guess too :o) | ||
| have fun | |||
| jnthn: ==> Successfully installed URI | |||
| timotimo | i'll go on a little jog while the weather is so lovely :) | ||
| jnthn | yay! | ||
| FROGGS: And that failed before, yes? | 14:48 | ||
| FROGGS | jnthn: I think so | ||
| jnthn | k | ||
| & | |||
| timotimo | that's something very nice for the weekly changes :) | 14:57 | |
| along with the memory leak removals | |||
| jnthn | aye :) | 15:33 | |
| wow, so sun | |||
| masak | much bright | 15:38 | |
| jnthn figures he can get back to concurrency stuff now he fixed some leaks and the SC bug :) | 15:41 | ||
| timotimo | aye! :D | 15:42 | |
| dalek | Heuristic branch merge: pushed 43 commits to MoarVM/moar-conc by jnthn | 16:07 | |
| timotimo | jnthn: what's next on the plan for moar-conc? | 16:24 | |
| jnthn | Refactor Promises to use cond ars | 16:25 | |
| uh, cond vars | |||
| timotimo | i like the sound of that :) | ||
| jnthn | And then provide those on Moar too | ||
| And then get promises to work on Moar. | |||
| TimToady | promises, promises... | ||
| jnthn | :P | 16:26 | |
| timotimo | does the thread pool scheduler come directly after that? or did i miss it and it's already done? | ||
| jnthn | It's there for non-time-based things. | 16:27 | |
| The time-based scheduling is NYI | |||
| timotimo | ah, i remember even writing about that | ||
| jnthn | I'll probably do the time-based stuff after getting the rest going... | ||
| timotimo | what is missing for that, ooc? | 16:28 | |
| jnthn | Me figuring out how to implement it :P | ||
| Not quite sure how it should be factored yet. | 16:29 | ||
| timotimo | hehe. ok | ||
|
17:31
hoelzro joined
20:53
remiznik joined
21:57
denysenko joined
|
|||
| dalek | arVM/moar-conc: b77debf | jnthn++ | / (12 files): Implement condition variables. |
22:24 | |
| arVM/moar-conc: 75edce9 | jnthn++ | src/6model/reprs/ConditionVariable.c: Fix pointer-o. |
22:40 | ||
|
23:08
woolfy1 joined
|
|||
| dalek | arVM/moar-conc: 13706df | jnthn++ | / (8 files): Implement queuepoll. |
23:12 | |
|
23:19
grekspb joined
|
|||
| [Coke] | jnthn++ | 23:25 | |
|
23:30
lizmat joined
|
|||