Welcome to the main channel on the development of MoarVM, a virtual machine for NQP and Rakudo (moarvm.org). This channel is being logged for historical purposes. Set by lizmat on 24 May 2021. |
|||
00:02
reportable6 left
01:02
sourceable6 left,
squashable6 left,
statisfiable6 left,
quotable6 left,
nativecallable6 left,
coverable6 left,
bisectable6 left,
unicodable6 left,
releasable6 left,
notable6 left,
tellable6 left,
evalable6 left,
committable6 left,
benchable6 left,
shareable6 left,
linkable6 left,
bloatable6 left,
greppable6 left
01:03
coverable6 joined
01:04
shareable6 joined,
statisfiable6 joined,
squashable6 joined,
releasable6 joined,
nativecallable6 joined
01:05
unicodable6 joined,
reportable6 joined,
sourceable6 joined,
tellable6 joined,
notable6 joined
|
|||
timo | when i "perf record -g rakudo fannkuch.p6" my computer immediately freezes :( | 01:28 | |
02:03
benchable6 joined,
bloatable6 joined,
greppable6 joined
02:04
quotable6 joined,
bisectable6 joined,
linkable6 joined
02:05
committable6 joined
03:16
coverable6 left,
linkable6 left,
bloatable6 left,
greppable6 left,
unicodable6 left,
nativecallable6 left,
bisectable6 left,
shareable6 left,
sourceable6 left,
notable6 left,
squashable6 left,
tellable6 left,
committable6 left,
benchable6 left,
statisfiable6 left,
releasable6 left,
quotable6 left,
reportable6 left
03:17
quotable6 joined,
linkable6 joined,
greppable6 joined
03:18
reportable6 joined,
statisfiable6 joined,
benchable6 joined,
tellable6 joined
03:19
releasable6 joined,
shareable6 joined,
committable6 joined
04:18
sourceable6 joined
04:19
nativecallable6 joined
05:05
evalable6 joined
05:17
coverable6 joined,
squashable6 joined,
bloatable6 joined
05:18
unicodable6 joined
06:02
reportable6 left
06:03
reportable6 joined
06:19
notable6 joined
|
|||
Geth | MoarVM/new-disp: 449656ef17 | (Daniel Green)++ | src/spesh/inline.c Handle sp_runbytecode_[ins] in rewrite_obj_return Implemented by changing return_to_set into return_to_op and passing in the needed op. |
07:17 | |
MoarVM/new-disp: 52cbd533ce | MasterDuke17++ (committed using GitHub Web editor) | src/spesh/inline.c Merge pull request #1524 from MasterDuke17/new-disp_plus_sp_runbytecode_s_fix_in_rewrite_obj_return Handle sp_runbytecode_[ins] in rewrite_obj_return |
|||
07:19
linkable6 left,
evalable6 left
|
|||
MasterDuke | timo: is fannkuch.p6 available somewhere to test with? | 07:20 | |
nine | Ah, the day shift has arrived :D | ||
07:21
linkable6 joined
|
|||
Nicholas | 24/7 morning requires shift working | 07:22 | |
08:17
bisectable6 joined
|
|||
nine | Inline::Perl5's git master now works just fine on new-disp :) | 09:32 | |
lizmat | wow! | 09:34 | |
nine | Turns out that rebasing the new-disp branches onto their respective masters is quite trivial. Only conflicts are in _REVISION files and one with the nqp-configure subrepository | 11:14 | |
With that done, there are just 8 spectest files failing. And one of them is due to a bug that's also in master (which is just better at hiding it) | 11:18 | ||
11:18
patrickb joined
|
|||
nine | That's including the S01-perl-5-integration tests which all pass | 11:19 | |
(needs the just released Inline::Perl5 0.54) | |||
12:02
reportable6 left
12:21
evalable6 joined
|
|||
dogbert17 | oops, a SEGV | 12:23 | |
all I have right now is this, gist.github.com/dogbert17/08ff0599...3d8924bed, and the fact that it was t/spec/S07-hyperrace/for.t which failed | 12:26 | ||
I have now updated the gist. Looks like 'tss' is busted. | 12:42 | ||
to repro run 'while ./rakudo-m -Ilib t/spec/S07-hyperrace/for.t; do :; done'. I have MVM_GC_DEBUG=1 and a 128k nursery, dunno if that's necessary. | 12:44 | ||
it seems to be the last test (#6) in the file which messes things up | 12:48 | ||
13:03
reportable6 joined
|
|||
jnthnwrthngtn | nine: I'm really glad to hear Inline::Perl5 already works. :) | 13:07 | |
nine | jnthnwrthngtn: so you don't have to dig into my horrible code :D | 13:08 | |
jnthnwrthngtn: though at some point I'd like to discuss options for using new-disp to my advantage there | |||
jnthnwrthngtn | nine: More that I worried it'd be poking into a lot of things that have changed and be a real pain to fix up | ||
Yes, that and also how to do much better at NativeCall ;) | 13:09 | ||
Which will help...no small number of things including Inline::Perl5 | |||
nine | I did try my very best to be forwards compatible when poking into internals. I fell just short of the goal | 13:10 | |
jnthnwrthngtn | About the rebases: there'll never be a perfect time to push them, but if you've done the work anyway now is probably alright. I have no outstanding local work that I'll have to juggle. | ||
nine | pushed | ||
Geth seems to have missed pushes to MoarVM and rakudo though | 13:11 | ||
jnthnwrthngtn | Hmm | 13:13 | |
After the Rakudo becase I run Configure and: | |||
===SORRY!=== | |||
Unknown macro insert_list | |||
wow, s/becase/rebase/ :D | 13:14 | ||
nine | jnthnwrthngtn: please pull again | ||
jnthnwrthngtn | That was quick! Fixed, thanks. | ||
nine | Looks like the rebase left the submodule update as a local change, despite me resolving the merge conflict. Submodules will always be weird I'm afraid | 13:15 | |
MasterDuke | would now be a good time to re-run update_ops and re-bootstrap to get the smaller files? | 13:17 | |
nine | Are smaller files by themselves useful? | 13:18 | |
jnthnwrthngtn | MasterDuke: Personally I'd wait a bit longer, until we fully eliminate legacy method caches and invocation protocl | ||
*protocol | |||
MasterDuke | well, i assume it'd help keep more stuff in cache | 13:19 | |
jnthnwrthngtn: sure, np | |||
jnthnwrthngtn | MasterDuke: Since that will need a rebootstrap also before we can totally drop it in MoarVM | ||
MasterDuke | ah yeah, then no reason to do it before then | ||
jnthnwrthngtn | As a heads up for everyone wondering about new-disp scheduling: next week is the last week I'll be about here doing new-disp stuff before vacation, then I'll be away for 2 weeks. | 13:20 | |
Also I still have to finish my talks for RakuConf :P | 13:21 | ||
MasterDuke | speaking of, are most of the people here attending? | ||
jnthnwrthngtn | m: say 1340 / 1349 | 13:33 | |
camelia | 0.993328 | ||
jnthnwrthngtn | Nice :) | ||
I should decide how to fix the signature unpacking based multi dispatch | |||
MasterDuke | that and the X::Multi::NoMatch seems like it might get to a passing spectest | 13:35 | |
nine | dogbert17: I only saw that segfault once, before I compiled with debug symbols. Trying to reproduce it in rr, I run into deadlocks if anything | 13:36 | |
dogbert17 | nine: that's annoying. I assume that the gist is of limited help | 13:50 | |
nine | dogbert17: I guess fixing a dead lock is as important as fixing a segfault :) | 13:57 | |
dogbert17 | I can only agree :) | ||
nine | And I happen to know where the deadlock is coming from | ||
dogbert17 | that was fast | ||
nine | In github.com/MoarVM/MoarVM/blob/mast.../log.c#L37 we're marking the thread blocked while holding the sl->body.block_mutex. In github.com/MoarVM/MoarVM/blob/mast...ker.c#L196 we're trying to lock the sl->body.block_mutex without the thread being marked blocked for GC. | 14:00 | |
Now if some other thread at that point has decided that a GC run is in order, send_log will wait for the GC run. But the GC run cannot start until the spesh thread joins in. Which will never happen, since that's still waiting for the sl->body.block_mutex | 14:01 | ||
dogbert17 | oops | 14:02 | |
easy fix? | 14:04 | ||
nine | looks like | 14:17 | |
Gah...cought a segfault now, but probably a different one. Caused by an object getting collected prematurely | 14:21 | ||
dogbert17 | once again you're falling into a rabbit hole :) | 14:29 | |
nine | Hey, that's not funny :D | ||
Geth | MoarVM/fix_spesh_log_gc_deadlock: d4a8093ebc | (Stefan Seifert)++ | src/spesh/worker.c Fix deadlock by untimely GC in multi-threaded programs In send_log we're marking the thread blocked while holding the sl->body.block_mutex. In the spesh worker we're trying to lock the sl->body.block_mutex without the thread being marked blocked for GC. Now if some other thread at that point has decided that a GC run is in order, send_log will wait for the GC run. But the GC run cannot start until the spesh ... (5 more lines) |
14:36 | |
MoarVM: niner++ created pull request #1526: Fix deadlock by untimely GC in multi-threaded programs |
|||
MasterDuke | nine: has your current work on mutexes inspired any better solutions re gist.github.com/MasterDuke17/e74be...8ce02e4547 | 14:43 | |
? | 14:44 | ||
15:12
evalable6 left,
linkable6 left
|
|||
nine | Not yet :/ | 15:12 | |
MasterDuke | likewise, sadly | 15:33 | |
nine | MasterDuke: so, I see two ways of moving forward: first, check if we actually need to hold both mutexes in that place. Maybe that's just a side effect of how the code is factored and can be avoided. If we need them, turn the single ex_release_mutex pointer into a static array with 2 slots. Only check the 2nd one if the 1st one is occupied. | 16:05 | |
So in the common case of no mutex acquired at all, we still only need to check one pointer | |||
MasterDuke | yeah, i was wondering if a variable size array was really necessary | 16:07 | |
nine | I seriously hope its not | 16:08 | |
16:15
evalable6 joined
16:19
Kaiepi left
|
|||
[Coke] | Let me know when I should re-try the windows build; didn't see a commit specifically about the dynamic array alloc. | 16:34 | |
17:24
Kaiepi joined
17:51
squashable6 left,
squashable6 joined
18:02
reportable6 left
18:49
Geth left,
Geth joined
19:14
linkable6 joined
|
|||
MasterDuke | [Coke]: you could try this patch gist.github.com/MasterDuke17/213ff...4083e02bac | 19:15 | |
20:05
reportable6 joined
|
|||
MasterDuke | Nicholas: is it possible that MVM_uni_hash_demolish doesn't completely free the hash? | 20:18 | |
i just looked a `valgrind --leak-check=full` report of compiling CORE.e with `--full-cleanup` and it shows a bunch of leaks from hashes, even ones that are explicitly demolished in MVM_vm_destroy_instance | 20:25 | ||
21:31
patrickb left
21:39
raydiak_ joined
|
|||
timo | it's kinda difficult to figure out stuff going on in a callgrind recording because all the jit frames are just memory addresses, though perhaps if you also output the perf map you can map them by hand? | 22:48 | |
23:02
linkable6 left,
evalable6 left
23:03
evalable6 joined
|
|||
[Coke] | next windows build failure after masterdukes patch: | 23:45 | |
gist.github.com/coke/8bffe7f4823e2...cf07f7d782 - err-2.out | 23:46 | ||
doesn't seem to like that syntax at all. | 23:48 |