github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm
Set by AlexDaniel on 12 June 2018.
01:03 squashable6 left 01:04 squashable6 joined 02:58 rba left 02:59 Kaiepi left, Kaiepi joined, rba_ joined, rba_ is now known as rba 03:18 leont left 04:51 linkable6 left, squashable6 left, greppable6 left, coverable6 left, nativecallable6 left, evalable6 left, releasable6 left, unicodable6 left, committable6 left, sourceable6 left, statisfiable6 left, quotable6 left, benchable6 left, tellable6 left, notable6 left, bisectable6 left, shareable6 left, bloatable6 left 04:52 shareable6 joined, releasable6 joined, committable6 joined, squashable6 joined, nativecallable6 joined 04:53 benchable6 joined, evalable6 joined, coverable6 joined, sourceable6 joined, bloatable6 joined, quotable6 joined, notable6 joined, statisfiable6 joined 04:54 greppable6 joined, bisectable6 joined, linkable6 joined, tellable6 joined, unicodable6 joined 08:20 patrickb joined 08:23 klapperl left 08:24 klapperl joined
nwc10 good *, #moarvm 08:30
good news - I have a cup of coffee
and I still have enough for one more
and I have an FFP2 mask...
and shops are open
(there is a bit of a bootstrapping problem if you have no FFP2 mask) 08:31
MasterDuke do you have a requirement on type of mask? 08:43
nwc10 yes. As of about a month ago
MasterDuke interesting. pretty much anything goes here (except pythons, live animals don't count as masks) 08:45
08:53 zakharyas joined 08:58 sena_kun left 09:01 sena_kun joined 09:35 zakharyas left 10:10 leont joined 10:21 Geth joined
jnthn morning o/ 10:22
lizmat morn!
jnthn There's no FFP2 requirement here yet in shops, transport, etc. (and only essential shops are open), but given they've recommended them and cut VAT on them, it seems they're trying to get ahead of the bootstrapping issue so they could require them... 10:23
nwc10 \o
jnthn Bootstrapping is always a total hack... :)
Also: all snow melted :( 10:24
Surprisingly quickly
nwc10 bootstrapping here was at least partly "masks given out for free at supermarkets for a few days"
I guess that the snow is urgently needed in Texas :-(
jnthn oh, that's pretty smart
I think Texas woulda preferred we keep it here...
nwc10 I think we would too :-)
MasterDuke good morning/timing, i just confirmed the same difference between first and last optimization of reify-at-least (sp_guardconc+sp_guardsf -> just sp_guardsf) with the latest commit (loop through the plan again and destroy stats for frame that had discarded candidates)
jnthn Hm, and that's not the one that's deopting. Did you conclusively figure out which stats lead to the guard? 10:27
MasterDuke i'm 90% sure it's `126: 4 x type Iterator (TypeObj)` 10:30
jnthn 4 is...rather little evidence 10:31
What is it guarding? A return value?
MasterDuke gist.github.com/MasterDuke17/3d829...18f401e48c has the stats right before the optimization and the "after"
jnthn ah, getting an attribute 10:32
Ohh 10:33
MasterDuke i think gist.github.com/MasterDuke17/3d829...t-log-L133 is the deopting sp_guardtype
jnthn Look at this
112: 10:34
128 x type Rakudo::Iterator::Gather (Conc)
257 x type List::Todo (Conc)
4 x type Scalar (Conc)
This happens:
[Annotation: Logged (bytecode offset 112)]
sp_getvc_o r11(2), r0(2), liti16(40), sslot(8) # [001] getattr_o of '$!current-iter' in List::Reifier
[Annotation: Logged (bytecode offset 126)]
sp_decont r10(41), r11(2)
[Annotation: INS Deopt One (idx 2 -> pc 132; line 41)]
sp_guardtype r10(3), r10(41), sslot(1), litui32(2)
I'm wondering if sp_decont only logs in the case it actaully deconts something
MasterDuke logs? 10:35
jnthn And the answer seems to be yes
github.com/MoarVM/MoarVM/blob/mast...rp.c#L3071 10:36
Logs type stats 10:37
Since so many things are in Scalar containers, we log the type that comes out of them, as a source of guards to insert
However, it seems we only log them in situations where we do a decont operation. This usually doesn't hurt because: 10:38
MasterDuke ah. so in this case most of the time it's not actually deconting, but we optimize for the decont case since that's what's logged?
jnthn 1. In many places we either always have a container or never have a container
2. In places where we always don't and we know that in spesh, we throw out the decont op
But in this case there's a mix (occassional container).
The decont stats only tell us about the container case 10:39
100% of the 4 times we deceont it's a consistent type 10:40
*decont
But yeah, that's a pretty dumb guard to insert
I think there's two things we could do
1. Always log the type coming out of a decont so the stats make more sense
MasterDuke yeah. so the example i'm using is a good example because of the very bad behavior (e.g., the 688k deopts). but it's a bad example because i think there's something wrong at a more basic level. removing an optimization is sort of a bandaid (though a capability to have in general) 10:41
jnthn 2. Have a minimum threshold for when we pay attention to stats (though this gets a bit interesting in rarely taken branches)
Yes, both the GC-able spesh candidate *and* being able to remove candidates that deopt too much are both *really* useful 10:42
But it turns out that here it will only go and make the same bad assumption again
MasterDuke heh, yep. thrown me for a loop for a bit 10:43
jnthn On the upside, this seems potentially easier to fix
If the "always log" approach works, for example
MasterDuke just move that `if (MVM_spesh_log_is_logging(tc)) MVM_spesh_log_decont(tc, prev_op, r->o);` after the if/else? 10:45
jnthn I think that will do it, yes 10:47
MasterDuke deopts gone 10:48
jnthn Nice, and faster_ 10:50
?
MasterDuke yes, but haven't yet compared to master (i think it's pretty similar if i'm remembering those numbers correctly) 10:51
though i did just get a segv when profiling...
`MVM_spesh_log_decont (tc=0x55555555a0b0, prev_op=0x7ffff64827d8 "\017", value=0x0) at src/spesh/log.c:195` 10:52
jnthn o.O
MasterDuke heh. the `entry` doesn't look good 10:53
$2 = {kind = 0, id = 0, {entry = {sf = 0x0, cs = 0x0}, param = {type = 0x0, flags = 0, arg_idx = 0}, type = {type = 0x0, flags = 0, bytecode_offset = 0}, value = {value = 0x0, bytecode_offset = 0}, invoke = {sf = 0x0, caller_is_outer = 0,
      was_multi = 0, bytecode_offset = 0}, osr = {bytecode_offset = 0}, plugin = {bytecode_offset = 0, guard_index = 0}, deopt = {sf = 0x0, spesh_cand = 0x0}}}
jnthn oh, value=0x0 10:54
That means a real null showed up somewhere
MasterDuke yeah, from that moved `if (MVM_spesh_log_is_logging(tc)) MVM_spesh_log_decont(tc, prev_op, r->o);`
i just stuck it here github.com/MoarVM/MoarVM/blob/mast...rp.c#L3079
10:55 zakharyas joined
MasterDuke should i stick a VMNull if `!r->o` ? 10:56
10:56 linkable6 left
jnthn Or just don't log in that case 10:57
But I'm curious where they're coming from; we should never get a real NULL in a register
10:57 linkable6 joined
MasterDuke gist.github.com/MasterDuke17/1e77c...979c317e69 backtrace and bytecode 10:59
`if (r->o && MVM_spesh_log_is_logging(tc))` and a profile is created just fine 11:04
though if that isn't supposed to happen i should switch their order 11:06
jnthn Yes 11:15
MasterDuke github.com/Raku/nqp/blob/master/sr...#L251-L257 is where that null register comes from btw 11:19
jnthn Guess getobjsc and getscdesc are worth auditing 11:21
They're rare enough we could have missed it before now
releasable6: status 11:25
releasable6 jnthn, Next release in ≈2 days and ≈7 hours. 2 blockers. 22 out of 131 commits logged
jnthn, Details: gist.github.com/d1fbf3b53b009a0e68...cc619671df
jnthn Hm, was gonna say maybe the deopt logging change could go in separately so it makes the release as it would wrrant rather less testing, but that still feels a bit risk 2 days away
MasterDuke well, not sure a release is going to happen regardless 11:27
lizmat MasterDuke: why ? 11:28
MasterDuke think those blockers are going to be cleared by then?
huh. the inlining tests are now consistently failing... 11:32
even when run by themselves
jnthn Looks like one of the blockers is a fixed issue only waiting CI coverage, which I guess means it needn't block the release 11:33
lizmat and the inlining tests can be removed
I mean, *that* should not be a blocker
MasterDuke `sp_fastinvoke_o   r4(6),   r9(2), sslot(6)  # [005] could not inline 'AT-POS' (4875) candidate 139866774879360: bytecode is too large to inline`
lizmat *although* I wonder how it can be that inlining happens less when a machine is under load
wouldn't that imply that there is some sort of starvation on the spesh thread? 11:34
MasterDuke it isn't changing for me based on the load, it's on my branch that it's happening
lizmat aaah then maybe the failure is legit ?
MasterDuke i just changed how/what stats are collected, so could be 11:36
heh. that number after "candidate" used to be the index into spesh_candidates, now it's formatting the actual pointer as a number 11:39
i don't think it makes sense to put the pointer's address (even formatted correctly) or the spesh slot. i'm probably going to just remove that number entirely unless someone has an idea/opinion? 11:41
jnthn yeah, the pointer is meaningless 11:42
The number wasn't actually that meaningful either
MasterDuke just did a quick check. when compiling CORE.c, a candidate is removed 70 times 11:52
Deopt specialization of 'statement' (cuid: 111, file: gen/moar/Grammar.nqp:957) 11:58
Removing a spesh candidate because it was deopted too many times (35833)
12:00 zakharyas left
MasterDuke hmmmmmm. using this example `my $r := "a" .. "za"; my @a = $r[^$r.elems]; say now - INIT now`, master has ~688k deopts and takes ~2.6s. my branch has ~660 deopts and takes ~2.8s 12:03
and stage parse for CORE.c is ~2s slower on my branch 12:04
it seems to be because of more time spent in MVM_frame_invoke, but i'm not sure why 12:53
whereas master with that change to decont logging cherry-picked is ~2.5s (and also only has ~660 deopts) 12:57
but also fails the inlining tests 14:00
14:09 zakharyas joined 14:19 zakharyas1 joined, zakharyas left 14:25 squashable6 left 14:28 squashable6 joined 14:34 linkable6 left 14:36 linkable6 joined
nwc10 Two for one on coffee! 15:33
16:11 domidumont joined
dogbert11 wonders if his rakudobrew install is broken 16:21
if not there's a gc related bug lurking about. The first I've seen in quite some time. 16:23
perhaps this is something for nine, gist.github.com/dogbert17/5c6a632a...e2bfed97fa 16:28
17:42 linkable6 left 17:45 linkable6 joined 18:15 domidumont left 18:46 zakharyas1 left
nine Good evening! So....which stream are you watching? :D 19:50
nwc10 Texas? Or Mars? 19:51
nine I expect even the LabPadre people to watch Mars right now :) 19:54
lizmat is there an SN10 launch then planned ? 20:31
nine not today
lizmat seems friday at the earliest 20:33
nwc10 The bit that I liked (and I wound the stream back and transcribed it) was: 21:15
We've landed about 35m from the nearest rocks that we could identify from orbit from their shadow
I remember this spot - it looks good.
nine :) 21:16
MasterDuke huh. the "after" of AT-POS is pretty similar with that decont logging change and without 21:44
bytecode size is the same
21:46 vrurg_ joined, vrurg left
MasterDuke doh, the failed test was postcircumfix:<[ ]>... 21:47
but the spesh log says AT-POS isn't inlined, doesn't say that about [] 21:49
oh, but that's in the after of []
uh, it's after looks pretty similar also. both show AT-POS not being inlined? 21:52
this isn't great. i'm using an unmodified master and getting the occasional `free(): corrupted unsorted chunks` 21:55
everything stock. `MVM_SPESH_LOG=inline.spesh.log ./rakudo-m -I lib/ t/09-moar/10-inline-array-pos.t` sometimes gives `free(): corrupted unsorted chunks`. asan says `Direct leak of 8192 byte(s) in 1 object(s) allocated from: 22:02
    #0 0x7f4008562459 in __interceptor_malloc /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cpp:145
    #1 0x7f4006a617a4 in _IO_file_doallocate (/usr/lib/libc.so.6+0x747a4)`
not getting anything in valgrind 22:04
22:12 patrickb left 23:22 dogbert11 left 23:23 dogbert11 joined