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 00:04 reportable6 joined 00:23 ggoebel_ joined 00:38 linkable6 joined 00:39 evalable6 joined 00:50 ggoebel_ left
timo the post about new-disp doesn't even mention nativecall, which not 100% sure if we'll get much better runtime performance? 01:03
definitely the few bytes off of each frame because we'll use the new-disp / syscall invocation convention now 01:05
01:28 squashable6 left 03:09 coverable6 left, nativecallable6 left, statisfiable6 left, quotable6 left, evalable6 left, bloatable6 left, tellable6 left, linkable6 left, greppable6 left, bisectable6 left, releasable6 left, notable6 left, shareable6 left, reportable6 left, sourceable6 left, benchable6 left, committable6 left, unicodable6 left, linkable6 joined 03:10 statisfiable6 joined, shareable6 joined, coverable6 joined, benchable6 joined, tellable6 joined 03:11 committable6 joined, notable6 joined 03:12 evalable6 joined 03:29 squashable6 joined 04:10 releasable6 joined, unicodable6 joined 04:11 nativecallable6 joined 04:12 quotable6 joined, sourceable6 joined 05:10 greppable6 joined
Nicholas good *, #moarvm 05:10
05:11 reportable6 joined 06:03 reportable6 left 06:04 reportable6 joined 06:11 bisectable6 joined 06:12 bloatable6 joined
nine jnthnwrthngtn: See github.com/rakudo/rakudo/commit/1c...fba874a8cd for why %!quote_lang_cache became an attribute 06:59
jnthnwrthngtn: typo in dereference: "and so also would deference the Scalar and guard its" 07:24
MasterDuke: another answer to why the JIT doesn't root anything: simpliy because the code doesn't have any local variables that need rooting. Look at MVM_interp_run. Only 4 op implementations in total need MVMROOT and only one of those is JITed and that to a plain function call instead to the inlined implementation. 07:38
MasterDuke yeah, i was looking at one of the ones that does need it github.com/MoarVM/MoarVM/blob/mast...2992-L3009 07:39
Nicholas I'd never thought of it that way - effectively the JIT is "hand crafted" implementations of the code in the case statements in MVM_interp_run. No more. 07:40
MasterDuke what do you mean "no more"? 07:45
nine Nicholas: well that's how they get written :) It's really just looking at MVM_interp_run and translating that 07:46
Also how I debugged some of them. Just looking for translation errors. Nothing more indeed. 07:47
MasterDuke nine: see anything obviously wrong in gist.github.com/MasterDuke17/129ca...beeef36731 ? 07:49
i'm getting a segv in MVM_disp_program_run, src/disp/program.c:2872 07:50
where val.o is 0x0 07:51
oh, when i rebuild with --optimize=0, i get it in src/disp/program.c:2802, but it seems to be the same problem 07:52
08:02 ggoebel_ joined
Nicholas valgrind might help 08:16
MasterDuke hm, not giving me any new information 08:22
interesting, only two ops call MVM_malloc in their implementation, settypecache and setboolspec 08:46
nine MasterDuke: you simply never write anything into dst :) 09:21
MasterDuke ha! 09:23
how many times did i switch between interp.c and emit.dasc and not see that? 09:24
nine That's why it's always good to have a second pair of eyes :) 09:33
MasterDuke and i even noticed it when writing the template, because i saw i'd need an explicit `(store \$0 (call (^func &MVM_repr_at_key_o) ...`
jnthnwrthngtn moarning o/ 09:49
nine: Ahh, I see. I wonder if we could somehow share it between EVALs in the same program, though. 09:50
(If it's not an EVAL at BEGIN time, of course)
Nicholas \o 09:51
nine jnthnwrthngtn: I'm pretty sure we could. The only open questions for me would be * how to share it (i.e. how to communicate the cache from one EVAL to the next when there is no outer World) and * how to avoid threading issues with the shared cache. 09:54
jnthnwrthngtn: the World's is_nested method may come in handy when determining whether it's safe to share or not. is_nested is true for BEGIN time EVAL 09:55
09:56 evalable6 left, linkable6 left 09:59 evalable6 joined
jnthnwrthngtn nine: Hmm, OK. Will ponder it, although in the immediate I'll work at making dispatch stuff cope better with the situation. 10:05
sena_kun good morning! 10:43
jnthnwrthngtn, psst, comma ping 10:44
MasterDuke it's mildly annoying that two segfaults are performed when running a spectest 10:46
dogbert17 jnthnwrthngtn: your two recent nqp changes brings the runtime of juerd's regressed test down from 38s -> 13s 10:52
jnthnwrthngtn Yeah, I saw similar. Also looks like a slight CORE.setting parse time reduction and also on installing core modules. 10:54
dogbert17 ha, I was just going to test that :) 10:55
jnthnwrthngtn I need a couple of small additions to dispatch programs to let me properly do the megamorphic-on-type handler 10:56
m: say 1.802 / 2.061 11:10
camelia 0.874333
jnthnwrthngtn m: say 25.757 / 34.961
camelia 0.736735
jnthnwrthngtn Interesting.
(Improvement on test-t vs test-t-20) 11:11
dogbert17 perhaps [Tux] system is heavily loaded atm 11:12
the test-t-20 numbers do indeed look quite good though 11:13
jnthnwrthngtn Well, the other interpretation is that the specializer and cache warmup doesn't really get done soon enough to have such an impact on test-t
That's about 13% improvement, lizmat saw around 20%, it's possible that there's a CPU difference coming into play here 11:14
(The specializer runs on a background threads; cache sizes and such can impact how little impact one thread has on another) 11:15
dogbert17 sounds more than reasonable 11:21
Geth MoarVM: MasterDuke17++ created pull request #1552:
Jit some ops that aren't terribly hot, but do cause bails in a spesh log
11:33 evalable6 left 11:37 squashable6 left 11:38 squashable6 joined 11:57 linkable6 joined 12:02 reportable6 left 12:03 reportable6 joined
Geth MoarVM: 0d1dfb48f9 | (Jonathan Worthington)++ | 4 files
Implement dispatcher-track-how

Allows the creation of dispatch programs that read the meta-object of some other tracked value. No guards are put in place, since every object has a meta-object, and any dispatch program wanting to make the access to the HOW a constant can already easily do so by guarding on the type and then inserting the read HOW as a literal.
12:33 evalable6 joined
MasterDuke ugh, windows failures in github.com/MoarVM/MoarVM/pull/1552 with no useful debugging information 12:33
Geth MoarVM: f07aed4b2e | (Jonathan Worthington)++ | 3 files
Allow non-constant lookup tables in dispatches

So we can read a table out of a meta-object and then look up a method in it. This will allow us to create dispatch programs for method lookups when we are megamorphic on invocant type.
MasterDuke the other ci failure in github.com/MoarVM/MoarVM/pull/1552 was due to failing the check that `raku --full-cleanup -e ''` didn't leak anything, and i can repro that locally 12:41
it's from spesh codegen 12:42
nine: is that one of the things that's known to not be fully cleaned up yet that your asan fixes branch handles? 12:43
only happens under load (spectest running in the background)
timo say, don't our different caches cause types to stick around longer when we have long-running programs that create and later discard new types regularly? 12:52
MasterDuke huh, those resume_inits should be getting freed github.com/MoarVM/MoarVM/blob/mast...date.c#L72 12:54
nine MasterDuke: quite possible, don't have the time right now to check 13:00
MasterDuke think i found the problem 13:01
13:01 ggoebel_ left
nine even better :) 13:01
Geth MoarVM: MasterDuke17++ created pull request #1553:
Fix leak of resume init registers
MoarVM: 729912418b | (Jonathan Worthington)++ | src/disp/program.c
Enforce type/concreteness guard on tracked table

It must always be a concrete thing with VMHash representation, otherwise we cannot safely look up in it.
13:36 frost-lab joined
Geth MoarVM: 8efb75806a | (Jonathan Worthington)++ | src/disp/program.c
Debug dumping of new dispatch program elements
MoarVM: 3c74a0d75c | (Jonathan Worthington)++ | src/disp/program.c
GC marking of HOW values in dispatch recordings
13:44 Altai-man joined 14:02 Altai-man left 14:14 Altai-man joined
Geth MoarVM: 5877af1c01 | (Daniel Green)++ | src/6model/reprs/MVMSpeshCandidate.c
Fix leak of resume init registers

When freeing a spesh candidates resumption inits, also free their init registers.
MoarVM: 2c485cb56b | MasterDuke17++ (committed using GitHub Web editor) | src/6model/reprs/MVMSpeshCandidate.c
Merge pull request #1553 from MasterDuke17/fix_leak_of_resume_init_registers
14:26 frost-lab left
nine Rakudo build on PowerPC fails with: [ 202s] get/bindlex_ng NYI 14:27
[ 202s] at SETTING::src/core.c/traits.pm6:14 (<ephemeral file>:trait_mod:<is>)
timo got the endian swapping wrong perhaps? 14:30
hum, that got pretty far to be failing at endian swapping
nine Exactly the same on s390x, so it does feel like an endianness problem 14:36
timo could be that endian swapping doesn't know about the new "have callsites inside the op and use it to have var args" thing, but again, that would have to explode much earlier, possibly even in nqp already 14:38
nine And nqp's build seems to get stuck on aarch64 build.opensuse.org/package/live_bu...RM/aarch64 14:43
and armv7l build.opensuse.org/package/live_bu...ARM/armv7l
dogbert17 yesterday I manage to build and run spectest on RPi4 14:46
ah, but endianness is the same as on x86_64 14:48
Nicholas I build this on a Pi 2 days ago: This is MoarVM version 2021.09-584-g962e835dc 14:58
at a guess the endianness bug likely will be writing .i32 or .u32 into a union and reading back .i64 or .u64 15:00
or transpose reading and writing
dogbert17 Nicholas: are messages like this suspect: 15:12
src/spesh/disp.c:68:20: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
return (MVMCallsite *)GET_UI64(args, 2);
Nicholas very
dogbert17 there are four in that file
Nicholas um, wait, only fairly
misread it as "cast from pointer to pointer" where they point to different sized integers 15:13
that's the endian killer
dogbert17 there are two variants among the four, the other is 15:16
src/spesh/disp.c:244:35: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
guard->operands[2].lit_ui64 = (MVMuint64)hll;
15:26 squashable6 left 15:27 squashable6 joined
MasterDuke how do i know when i should use `(a|d|q)word` before a `WORK[foo]`? 15:29
nine I think these particular examples are harmless, since the pointer is the thing that's smaller and the integer is used to store a pointer 15:32
15:42 ggoebel joined 16:08 ggoebel left
dogbert17 nine, thx 16:17
Nicholas so, under valgrind on ppc64, CORE.c.setting instead bombs out with 16:54
Attempt to read past end of string heap when locating string
without valgrind, yes, "get/bindlex_ng NYI 16:57
nine Nicholas: is it sensitive to spesh? 17:04
Nicholas ooh, good question
rebuilding currently with different error messages for getlex_ng and bindlex_ng 17:05
nine The most probable cause for the "get/bindlex_ng NYI" message is bytecode getting out of sync. I.e. us jumping to the wrong place in the bytecode and interpreting data as ops 17:06
Nicholas well, it's "getlex_ng NYI 17:10
lizmat confirms MQTT-Client test from 41 seconds -> 14 seconds 17:11
[Coke] gist.github.com/coke/4626a2760c314...794c55f2ac - 4 compiler warnings on windows, latest moarvm 17:12
(I see dogbert17 raised these earlier, oops) 17:13
Nicholas nine: I think we're past the point of the first crash with `export MVM_SPESH_DISABLE=1` 17:15
nine Does a deopt happen right before the crash? 17:16
Nicholas how do I figure that out?
actually, I'm not going to. 17:17
I'm going to see if I can get rakudo built
nine src/spesh/deopt.c:7
Nicholas and if so, enable spesh again
and try to run tests
17:17 Altai-man left, reportable6 left, greppable6 left, sourceable6 left, quotable6 left, nativecallable6 left, unicodable6 left, releasable6 left, discord-raku-bot left, discord-raku-bot joined
Nicholas splitters! 17:17
I built this on a Pi4: Welcome to Rakudo™ v2021.09-228-gdd2b274fd. 17:20
Stage parse : 567.291
(that's the ppc64 build with spesh disabled) 17:21
17:21 [Coke]_ joined 17:22 Altai-man_ joined, reportable6 joined, greppable6 joined, sourceable6 joined, quotable6 joined, nativecallable6 joined, unicodable6 joined, releasable6 joined 17:23 [Coke] left 17:25 squashable6 left
Nicholas tests! with spesh! 17:26
$ ./rakudo-m -Ilib t/02-rakudo/03-cmp-ok.t 17:27
Unhandled exception: if_o/unless_o were superseded by the general dispatch mechanism at SETTING::src/core.c/hash_slice.pm6:6 (/home/nick/Perl/rakudo/blib/CORE.c.setting.moarvm:postcircumfix:<{ }>)
only MVM_SPESH_DISABLE=1 fixes it. 17:34
nine if_o/unless_o have even lower op numbers than get/bindlex_ng 17:35
17:42 kjp_ joined, childlikempress joined 17:44 moon-child left, kjp left, Voldenet left, vrurg left
Nicholas this is a bit daunting 17:44
but at least it's now reduced to "somewhere in spesh"
17:45 vrurg joined 17:49 Voldenet joined
nine tools/jit-bisect.pl --spesh may yield some more information 17:50
japhb MasterDuke: Did you find the answer to your word size question? 17:51
MasterDuke no, i just added some that i thought might be needed and am seeing what CI has to say 17:52
japhb If not: dword == 32-bit integer, qword = 64-bit integer, aword = 32- or 64-bit pointer (*a*ddress word)
AH! 17:53
I see, you weren't asking which each was, you were asking *when they should be used at all*
Nicholas nine: thanks. It's running
japhb I'd say "doesn't hurt to be precise", though the consequences of getting the wrong size are worse than no size, most of the time. (At least, that was true in my old x86 asm days) 17:54
MasterDuke japhb: when was the primary question, but the details about what they mean help with figuring that out
if you feel like looking at asm, i've been working under the assumption that the windows fails in github.com/MoarVM/MoarVM/pull/1552 are due to something i added in emit.dasc 17:55
japhb Woah, couple few commits in that PR? ;-) 17:56
MasterDuke i can't stand how the windows jobs start last, when they take the longest to run
yeah, but now i wish i'd created the PR from the beginning, so maybe i'd have some info to bisect which commit is causing the fail 17:57
Nicholas SPESH Broken frame: 322. 17:59
SPESH Acquiring log: spesh-0322.txt
This type cannot unbox to a native string: P6opaque, Sub
at SETTING::src/core.c/allomorphs.pm6:274 (/home/nick/Perl/rakudo/blib/CORE.c.setting.moarvm:val)
what do I do now?
paste.scsys.co.uk/595922 - spesh-0322.txt 18:01
18:02 reportable6 left
MasterDuke arg, windows is still failing 18:03
anyway, afk for a bit &
18:03 reportable6 joined 18:27 squashable6 joined
Nicholas emit_guard() can either set guard->operands[2].lit_i16 and then guard->operands[3].lit_ui3 18:29
or just guard->operands[2].lit_ui32
no idea if that's suspicious - does the thing that reads from the union know to read the right size?
(will assume "yes" bceause if I change it I get a SEGV) 18:31
sena_kun jnthnwrthngtn, ping? 18:32
japhb MasterDuke: In your PR, why do some of the additions to src/jit/graph.c put register numbers into MVMint16 and others into MVMint32, and also some wrap the argument for an MVM_JIT_REG_VAL in braces, and some do not? 18:38
18:41 coleman-x joined, colemanx left
nine Nicholas: do you by any chance see a deopt in val right before the crash? 18:43
Nicholas I don't know how to answer that. When I stick a breakpoint on that line I get loads of hits 18:44
so I don't know how to answer "right before"
nine Have you enabled MVM_LOG_DEOPTS? 18:47
Nicholas no
nine src/spesh/deopt.c:7 18:48
Nicholas aha
CPU bound on the terminal trying to keep up with the output 18:50
aha, more useful in a file 18:55
Deopt one requested by interpreter in frame 'simple-args-proto' (cuid '196') Will deopt 178 -> 164 Completed deopt_one in 'simple-args-proto' (cuid '196')
Unhandled exception: if_o/unless_o were superseded by the general dispatch mechanism 18:56
(OK, that got mangled by irssi)
If it wasn't obvious, I am completely unfamiliar with this code. 19:01
codesections I'm running into a segfault in some concurrent raku code, but don't (so far) have a golfed example. Would I provide the project any benefit by opening an issue with the (very minimal) output from perl6-gdb-m, or should not open one until/unless I have some golfed code? 19:14
(by "very minimal", I mean it's basically just "__GI___pthread_mutex_destroy (mutex=0x0) at pthread_mutex_destroy.c:32 19:15
32 pthread_mutex_destroy.c: No such file or directory."
jnthnwrthngtn codesections: Does typing "where" produce more output? 19:41
Geth MoarVM: 6b70820317 | (Jonathan Worthington)++ | src/disp/boot.c
Only guard on HLL in lang-meth-call

Not on the type. Otherwise, we make it impossible to add megamorphic method dispatch handlers.
MoarVM: d6c99f1665 | (Jonathan Worthington)++ | src/disp/program.c
Cope with lazy HOW deserialization
dogbert17 jnthnwrthngtn: btw, during the new-disp work, altai-man found a non new-disp related bug in concurrent::stack. Should I report it in the corresponding repo? 19:46
sena_kun jnthnwrthngtn, ping, can you please confirm one Comma-related decision? 19:48
codesections jnthnwrthngtn, it does (another 13 lines). Thanks, I didn't know to do so 19:51
jnthnwrthngtn sena_kun: um...for some reason Slack didn't send my messages to you :S 19:53
dogbert17: Yes, please
sena_kun jnthnwrthngtn, yes, it's the same for me, yet on my phone it works. can you PM me here?
codesections I think Slack has had some issues today status.slack.com/2021-09/06c1e17de93e7dc2 19:54
jnthnwrthngtn codesections: Those would make for a bug report we might be able to figure something out with
codesections Ok, will do
dogbert17 github.com/jnthn/p6-concurrent-stack/issues/4
20:04 camelia left, nine left 20:05 nine joined, timo left, camelia joined 20:08 timo joined
[Coke]_ lizmat et al.: cloudblogs.microsoft.com/opensourc...-projects/ 20:11
20:12 [Coke]_ is now known as [Coke]
nine Nicholas: oh, of course it's a little bit more complicated. The exception handling/reporting code itself also likes to deopt. So to really get the last deopt before the crash it's best to set a break point on the MVM_exception_throw_adhoc call that throws 20:27
Geth MoarVM: 7099cffb87 | (Jonathan Worthington)++ | src/disp/program.c
Allow lookup values to appear in resume init args
20:33 ggoebel joined
jnthnwrthngtn I'm on megamorphic meth plus a patch or two, and the MQTT test is almost back to it's pre-new-disp execution time. 20:52
20:53 ggoebel left
Geth MoarVM: c940e0cbac | (Jonathan Worthington)++ | src/disp/program.c
Be sure to emit guards on HOW and lookup values
jnthnwrthngtn afk for a bit 20:54
timo that was the test that was always disappointingly slow, right?
jnthnwrthngtn Yes
timo here's hoping we can get it faster through new-disp
jnthnwrthngtn The one that went from 7s to 50s or so
21:00 ggoebel joined 21:03 Altai-man_ left
MasterDuke japhb: good questions. copy pasto is the only answer i have 21:11
21:16 childlikempress is now known as moon-child
jnthnwrthngtn Pushed the megamorphic by type handling to NQP master. 22:01
MasterDuke the mqtt test seems a little faster, but now there are 483,564 deopts 22:03
not just seems, is faster 22:04
57.6k `Deopt one requested by interpreter in frame 'BUILDALL' (cuid '36')` 22:12
jnthnwrthngtn On my machine it's now at ~5.2s, whereas before new-disp it was at ~4.5s
When I first measured it after seeing the regresison report it was around 28s 22:13
timo is BUILDALL the stuff we generate?
jnthnwrthngtn Hm, or maybe worse, I can't remember
Depends. We generate it in Rakudo, but not in NQP
timo ah, it could come from that, i see 22:14
jnthnwrthngtn MasterDuke: Hm, I don't see those kind of deopt numbers on the latest profile I did of it 22:15
Let me do one more just in case
timo we are testing mqtt's t/regex.t?
jnthnwrthngtn Yes
I see a little under 5000 local deopts and a similar number of global deopts 22:16
MasterDuke oh wow. turns out i was on my branch that jits all those new ops
timo 10 seconds on my machine %)
MasterDuke only 6700 deopts on master
22:16 linkable6 left, evalable6 left
jnthnwrthngtn 10% of that benchmark is spent optimizing NFAs 22:17
MasterDuke huh. so jitting a bunch of ops makes the deopts increase by 100x. why would that be?
jnthnwrthngtn Wrong JIT of something leads to guard fail, maybe? 22:18
It's lucky that's all it leads to though
22:18 evalable6 joined 22:19 linkable6 joined
MasterDuke well, there is the segv almost right away in the nqp build on windows on that branch 22:19
jnthnwrthngtn Everything about the profile of the mqtt test says "build a better grammar engine that doesn't recalculate NFAs all over", though :)
MasterDuke next grant? 22:20
timo 67% interpreted frames %) 22:23
yeah, mergesubstates and optimize from QRegex are my top 2, and they are both basically not jitted at all 22:24
set_block_outer_ctx is the top 3, not jitted because of ctxouter 22:26
unfortunately, i see only successful compilations of mergesubstates 22:29
jnthnwrthngtn MasterDuke: I think "next grant" I apply for (which I need to very soon) will probably be some new-disp follow-ups and returning to working on PEA. 22:36
MasterDuke ah, that'll be nice too 22:37
jnthnwrthngtn Until new-disp was merged, I had 3 big ongoing things: new-disp, rakuast, and PEA. I...felt like I wasn't managing to get anything finished.
I'd rather knock PEA off that list before adding anything else to it :)
I'm resigned to rakuast being a long haul, if nothing else because the ecosystem consequences will likely be far more difficult to navigate than they were for new-disp. 22:38
timo you won't get dessert until you finish the PEAs you have on your plate
jnthnwrthngtn I like peas, so this isn't an issue for me. :)
I like peas, so this isn't an issue for me. :) 22:39
On the upside, I think rakuast will be easier for more folks to contribute to than new-disp has been. 22:40
MasterDuke how much more work is there for rakuast? 22:41
jnthnwrthngtn Well, it was passing 333 spectest files in full, and there's 1349 of them, so apparently quite a bit. 22:45
(it was passing that many last time I measured it, I mean)
moon-child I thought current narrative was '% spectests passing doesn't tell the whole story because of composition'?
jnthnwrthngtn moon-child: This is correct. The problem is that I don't know how to work out what the whole story is. 22:46
moon-child fair enough
MasterDuke ugh, i suspect the only way to find the bad commit in my PR is to try reverting them one-by-one. but i'll also disable all except the windows jobs in CI, so at least the testing should go quicker 22:53
but i think that'll be a task for tomorrow 22:54
jnthnwrthngtn Indeed, sleep time is coming 23:00
23:22 evalable6 left, linkable6 left