04:57 geekosaur joined 05:01 diakopter joined 05:23 domidumont joined 05:29 domidumont joined 05:56 domidumont joined 05:59 geekosaur joined 06:07 geekosaur joined 06:09 geekosaur joined 06:16 geekosaur joined 06:21 geekosaur joined 06:30 geekosaur joined 06:37 geekosaur joined 06:40 geekosaur joined 06:42 geekosaur joined
brrt timotimo: it is not strictly necessary, a refactor 06:56
i may be biased by my environment, but a refactor per se isn't always a good idea 06:57
07:33 zakharyas joined 07:52 lizmat joined 08:15 FROGGS joined
nwc10 good *, #moarvm 08:44
FROGGS morning nwc10 08:46
jnthn morning, #moarvm 08:58
Seems 'tis the season for colds :S
FROGGS :S 09:05
moritz it is :(
moritz works from home today in order not to spread it further
FROGGS will build a roof for a treehouse the next days and hopes it wont rain all day 09:06
jnthn isn't too bad...yet 09:07
There's actually a rename-related Windows precomp bug too :(
Now that the mkdir-related one is gone
FROGGS uff 09:08
jnthn Uh, to be clear: it was there before
FROGGS is that one new too?
ahh
jnthn Relatively new
It only seems to happen when you're editing modules
FROGGS but what's the bug?
jnthn It crashss with "Failed to rename file: operation not permitted" somewhere in the precomping process it seems 09:10
I'll try to get a small repro
Though I want to look in to github.com/MoarVM/MoarVM/issues/426 first 09:11
nwc10 jnthn: is there an strace equivalent for windows? In that, would you get that error on Win32 if it's attempting to rename a file which is open? 09:12
(A legal move on *nix filesystems)
jnthn nwc10: Renaming an open file had crossed my mind as a reason for this, yeah 09:15
There's various tools though not sure which would give more detail than "not permitted" 09:16
nwc10 was thinking that with strace on linux (or the equivalents) in the massively verbose log, one could find the "not permitted" error, and then work back to figure out which file it was, and when it was opend/closed 09:17
geekosaur strace equivs are few and far between and painful. but procmon and/or filemon would do it 09:32
jnthn github.com/MoarVM/MoarVM/issues/426 is proving a difficult golf... 09:34
Turns out that my $count = +$fixer.out.lines; can become my $count = 42;
Without losing the bug
But removing the run loses it
FROGGS :S 09:36
fairly hairy then
dalek arVM: 19d951d | jnthn++ | src/ (4 files):
Introduce MVM_SPESH_LIMIT.

For limiting the number of specializations produced. This can be used in conjunction with MVM_SPESH_LOG to bisect which particular frame's specialization leads to breakage.
10:03
arVM: ad87cd9 | jnthn++ | src/spesh/candidate.c:
Correct thinko; alway spesh when no limit.
10:29
jnthn Seems it's something to do with Spesh of 'elems' (cuid: 4215, file: gen/moar/m-CORE.setting:16795) 10:32
Turns out not; it got weirder 11:17
FROGGS :S 11:23
I guess that's the price for have a weirdtual machine... 11:24
jnthn Think I've figured it out at last 11:26
It's actaully about callframe 11:27
When we are doing the logging phase of a spesh'd frame, the annotations don't resolve right
timotimo dangerous op, that
oh, huh
that's a really weird one!
jnthn Well, it's because they refer to original bytecode offsets I guess 11:28
Anyway, the upshot of that is that in MVM_exception_backtrace:
if (fshi >= 0 && fshi < cur_frame->static_info->body.cu->body.num_strings)
value = MVM_repr_box_str(tc, MVM_hll_current(tc)->str_box_type,
We can't take that path
MVM_cu_string(tc, cur_frame->static_info->body.cu, fshi));
So we take this one:
else
value = MVM_repr_box_str(tc, MVM_hll_current(tc)->str_box_type,
cur_frame->static_info->body.cu->body.filename);
But since the file is in memory, not from disk, that is NULL
We thus box a NULL 11:29
timotimo and that null string blows up somewhere else?!
jnthn Which leads to the explosion in the code: "chars requires a concrete string, but got null"
What threw me off a bit is I was looking for a problem in the optimized code
While actually this is blowing up the moment we hit the logging code 11:30
timotimo i can imagine you would!
i just put in a cache for the three most used ContainerDescriptors and got a little reduction in both core setting size and a tiny bit more than that in rakudo startup memory usage
jnthn Nice 11:31
timotimo the three most used descriptors, btw, are %_ Mu (by a huge margin!), $_ Mu, and \c Any
jnthn Hm
But...I thought we already had them for $_ Mu
See magical_cds or so
Lunch time here; bbi30 or so
timotimo i shall investigate magical_cds
(they might have great music on them!)
jnthn :D 11:32
timotimo perhaps we have some $_ spelled out?
483 Container descriptor: $_ Mu, rw: 0, defaults to 'of' not dynamic 11:33
3838 Container descriptor: %_ Mu, rw: 0, defaults to 'of' not dynamic
this is across the whole core setting, so it's very possible those $_ are explicitly written "my $_ ..."
since there's an additional reduction in memory usage compared to just "the core setting file we mmap in got smaller", i'm hopeful this'll be a little saving for every additional method or sub that the user's code pulls in 11:37
jnthn back 12:01
Did you put in a general cache for identical CDs?
12:05 brrt joined
timotimo not yet, but i'm about to 12:07
to harness the power of The Long Tail
brrt notes to jnthn that he might be able to adapt the jit-bisect.pl tool in the even-moar-jit branch to bisect spesh
not that bisecting is hard, but when it is done for you, why not
jnthn Sounds nice :) 12:11
brrt although, the jit-bisect.pl tool also bisects the exact basic tree that starts going wrong 12:12
so it does a bunch of things that you strictly don't need
and, it uses prove etc... it was not designed for extensiblity
jnthn :) 12:13
Yeah, probably easier just to write another script
dalek arVM: 715e39a | jnthn++ | src/core/exceptions.c:
Make sure we never box a NULL filename.
12:14
jnthn m: sub foo() { caller(1).file.ends-with('x') } for ^300 { foo() }; 12:15
camelia rakudo-moar eb6907: OUTPUTĀ«===SORRY!=== Error while compiling <tmp>ā¤Unexpected block in infix position (missing statement control word before the expression?)ā¤at <tmp>:1ā¤------> caller(1).file.ends-with('x') } for ^300ā { foo() };ā¤ expecting any of:ā¤ ā€¦Ā»
jnthn m: sub foo() { caller(1).file.ends-with('x') }; for ^300 { foo() };
camelia rakudo-moar eb6907: OUTPUTĀ«===SORRY!=== Error while compiling <tmp>ā¤Undeclared routine:ā¤ caller used at line 1ā¤ā¤Ā»
jnthn m: sub foo() { callframe(1).file.ends-with('x') }; for ^300 { foo() };
camelia rakudo-moar eb6907: OUTPUTĀ«chars requires a concrete string, but got nullā¤ in sub foo at <tmp> line 1ā¤ in block <unit> at <tmp> line 1ā¤ā¤Ā»
jnthn m: sub foo() { callframe(1).file.ends-with('x') }; for ^100 { foo() };
camelia ( no output )
jnthn m: sub foo() { callframe(1).file.ends-with('x') }; for ^300 { foo() };
camelia rakudo-moar eb6907: OUTPUTĀ«chars requires a concrete string, but got nullā¤ in sub foo at <tmp> line 1ā¤ in block <unit> at <tmp> line 1ā¤ā¤Ā»
jnthn There's a golf of what I just fixed :)
timotimo huh, having a "has %!foo" won't create a nqp::hash for me when a class is instantiated in nqp?
jnthn It easier to golf after you found the bug :P
timotimo well, apparently not
jnthn timotimo: not if the class has its own BUILD 12:16
timotimo aha, it does!
oh, i didn't know about Perl6CompilationContext 12:18
should the caches go there?
jnthn I...hmm 12:21
Where is magical_cds? :)
Probably same place as those
timotimo yeah, it's in that class 12:23
first measure, then move
domidumont FROGGS: remember the hanging moar on arm64. Here's an extract from /proc/xx/status while it's hung: SigBlk: 755e4cdab639e800 . If I interpret this correctly, SIGCHLD is blocked. And the mask value is weird. do you think that the right track ? 12:43
[Coke] jnthn: 426++ 12:45
jnthn for ^200 { next if $_ < 199; say callframe }
m: for ^200 { next if $_ < 199; say callframe }
camelia rakudo-moar eb6907: OUTPUTĀ«concatenate requires a concrete string, but got nullā¤ in block <unit> at <tmp> line 1ā¤ā¤Ā»
timotimo same version as before still 12:46
jnthn Yeah, that's a separate MoarVM issue
[Coke] (hard to golf) I had a hard time getting it down to those 7 lines!
jnthn That it turns out is also fix
*fixed
timotimo oh, damn
but also: yeah!
jnthn So, two MoarVM issues down 12:53
[Coke]: Thanks for getting it down that far, at least :)
jnthn ponders what next :) 12:54
nwc10 lunch!
jnthn Already done that ;) 12:55
nwc10 jnthn++
timotimo jnthn: jdv has a bug that's been keeping them away from using perl6 more; it's an async related one
he's even been asking if there's "pay for bug" kind of stuff available 12:56
[Coke] RT #128833 - I was going to try to golf it, but probably won't be able to until this evening.
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128833
FROGGS domidumont: I dunno... I dont know much about signals... 12:57
timotimo yeah, it's using grammars from multiple threads and it's as if variables would suddenly change what's in them ...
jnthn timotimo: That's almost certainly a case of insufficient clsoure cloning
jnthn takes a look 12:58
timotimo i have no clue how to properly debug that kind of thing, tbh
jnthn Ah, is that the one that was being golfed somewhat above?
uh, not above, but over on #perl6-dev
timotimo do we have any diagnostics uncommentable that'll point out that kind of problem?
jnthn Not really
Though the cross-thread write logging is a good hint 12:59
timotimo # Failed test 'bound readonly sub param remains readonly (1)' 13:00
i wonder how my cache breaks that? o_O
i sure hope descriptors are never written to 13:02
jnthn Well, descriptors do get tweaked during compilation potentially
I *think*
Can't quite remember
Are you caching based on the rw flag too?
An ro $a and an rw $a need two different descriptors 13:03
timotimo only readonly will be cached at all
because the rw ones seem to have default values that aren't =:= the .of
my first instinct was to look at p6recont_ro, but that doesn't seem to touch the descriptor at all 13:04
it only looks to see if the descriptor says it's rw 13:05
"desc" only occurs two times in QASTCompilerMAST, and that's scsetdesc and scgetdesc :\ 13:07
timotimo AFK for a bit 13:11
13:14 mst joined 13:59 BinGOs joined
dogbert17 wonders what jnthn will tackle next 14:37
FROGGS .oO( might be tea )
dogbert17 shocking :-) when there's coffee 14:38
jnthn I did coffee this morning 14:39
Next will be get a test to cover the thing I just fixed into roast :)
brrt also does tea in the afternoon rather than coffee 14:40
dogbert17 has completed his moronic project, i.e. run every spectest (well 95%) through valgrind to see what if anything shows up (not incredibly much) 14:42
timotimo oh wow 14:44
that must have taken a *long* time
mst that sounds incredibly boring and also well worth doing
which is the sort of thing that often doesn't happen for open source projects
mst applauds dogbert17
dogbert17 it took quite a few hours 14:45
results are quite good I'd say, one spectest generating invalid reads and a few which leaks memory 14:46
jnthn dogbert17++ for taking the time to do this 14:47
dogbert17 I RT'd the one which generated the invalid reads, i.e. RT #129832 14:48
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=129832
timotimo interestign. trying to deserialize from a serialized blob belonging to a compunit that got collected?? 14:51
i'm at least not aware of those blobs being shared 14:52
hm, but serialized blobs don't get mallocd and freed, tthey get mmapped, don't they?
dogbert17 makes coffee 14:53
timotimo ooooh
i know what this is
the vm is shutting down, but other threads haven't been stopped yet 14:54
dogbert17 every time I run valgrind on that test it ends with 'ERROR summary ....' followed by 'Killed' 14:55
jnthn Hm, I thought if we did full-cleanup then we got all threads sync'd 14:56
timotimo computer says "no" :) :)
jnthn I think next fix will, if I can find it, be for the darn annoying rename bug on Windows
Well, may not be a rename bug
bah, the tried STraceNT out of curiosity and it SEGVs before producing any data 15:12
dogbert17 what about geekosaur's suggestion, i.e. procmon 15:17
FROGGS jnthn: now you need to fix STraceNT first :P 15:19
jnthn dogbert17: That is much more intersting :) 15:31
(Was also reading docs for MoveFileExW :))
From that, it seems that the parent process of the one that gets in trouble when trying to rename has the target file open 15:42
japhb jnthn: If you're still looking for impactful tasks, the OO::Monitors 'no precompilation' thing would definitely reduce my daily annoyance because it would speed up my testing cycles considerably. :-) 15:56
timotimo what happens if you just remove "no precompilation"? :) 15:57
jnthn timotimo: "Can't serialize SCRef" 15:58
timotimo OK 16:00
jnthn I have a horrible feleing it'll be because I was clever enough to use macros 16:01
OO::Monitors might be the only module widely depended on that actually does that :P
I thought "ah, it'd be good to compile-time check condition variable names"
16:01 domidumont joined
jnthn Which is very clever but maybe not worth the inconvenience of not being able to pre-comp it 16:01
Dammit, I actually found a case of "file not closed when it should be" in CORE.setting, but it's not the one afflicting precomp on Windows 16:02
brrt interestingly, I believe I made that argument against precompilation just yesterday or so
as in, precompilation is fun, but macros are better
timotimo i was considering a pretty crazy project today: when serializing (or perhaps when deserializing?) record all positions in the bytestream before and after reading individual tiny pieces together with C-level backtraces, to split the whole serialized blob by what each byte is used for 16:03
jnthn brrt: I don't think they're at odds particularly... 16:09
brrt hmmm.... I think they can be 16:10
but it kind of depends on your ambitions
did you get to take a look at the spesh alloc extraction? 16:11
jnthn Not yet, sorry
brrt one thing I'm pondering is configurable block sizes
np :-)
jnthn Been bug hunting all day...
brrt it's a PR for a reason
jnthn Still am :P
16:34 Util joined
japhb
.oO( "Be vewwy vewwy quiet ... we're hunting bugs!" )
17:05
timotimo is super hungry and super tired :\ 17:07
jnthn made lamb kebab thingies with feta in them, salad, and tatziki :) 18:25
Super full now
FROGGS (good food)++ 18:44
domidumont FROGGS: I've cornered the moar bug on arm64
FROGGS domidumont: wow, how so?
domidumont Turns out that the blocked SIGCHLD is the issue, introduced by a Debian patch :-( 18:45
on libuv
FROGGS uhh
bad patch! :P
domidumont The patch was added to fix a mips problem
I've added all the details on github
But I don't know what's wrong with Debian patch... 18:46
FROGGS yeah, I see the patch now... 18:47
domidumont Darn, this package is maintained by Debian javascript team, and I'm also part of this team :-p 18:49
FROGGS haha 18:50
it's also not obvious to me in what way this patch is faulty... 18:54
domidumont++ 18:55
geekosaur link? 18:56
FROGGS geekosaur: github.com/MoarVM/MoarVM/issues/42...-254901159
and: bugs.debian.org/cgi-bin/bugreport.cgi?bug=841354 18:57
timotimo mhhh tadziki 19:00
very tasty
geekosaur why is a uint64_t being replaced by a uint64_t* in the same call? 19:01
(sigmask with &sigset)
note that sigmask had the same type as sigset 19:02
geekosaur does a little poking, concludes that it should not be passing a pointer. what signals get blocked will depend on the bit pattern of the pointer... 19:04
so if you're in a position to do so, try with that patch but remove the & in the uv__epoll_pwait call (line 75 of the patch) 19:06
FROGGS geekosaur: but they've changed the signature of uv__epoll_pwait too 19:10
geekosaur hm.
did they change all uses too? didn;t see it in that patch... or is this really the only usage 19:11
FROGGS they must have, because they removed sigmask
geekosaur oh, yes, it is. but, now I wonder about the logic... because they were building sigset correctly but using the manually built sigmask. 19:13
manually as in manual bit twiddling
are the same bits really being twiddled on all platforms?
geekosaur goes back and looks at the bug again... those are really weird masks... 19:15
which is what made me think pointer
... OH 19:16
FROGGS one thinko might be that in line 49 'sigmask = 0;' is removed 19:17
geekosaur the sigset only ever gets sigemptyset-ed if SIGFPROC is added to it
FROGGS but 'sigemptyset(&sigset);' is not added there
geekosaur it's going to be random bits otherwise
er SIGPROF
FROGGS aye
19:18 dalek joined
FROGGS same thing we are talking about 19:18
domidumont: can you try moving the 'sigemptyset(&sigset);' in front of the condition? 19:21
I'm cloning the libuv package currently, but it'll take time
domidumont geekosaur, FROGGS: I'll have a look tomorrow 19:39
geekosaur submits that observation to debian's bug tracker 19:50
20:06 pyrimidi_ joined 20:08 pyrimidi_ joined
FROGGS geekosaur: I just sent a patch to the bug tracker... (tested it successfully on arm64) 22:06
geekosaur saw, yes
22:07 lizmat joined
FROGGS took a while to actually test it 22:12
arm64 on qemu is not quite fast
gnight 22:20