buggable | ???????????? It's time for the monthly Accidental /win Lottery ???????????? We have 1 ballots submitted by 1 users! DRUM ROLL PLEASE!... | 00:00 | |
And the winning number is 23! Congratulations to jnthn! You win a can of WD40! | |||
00:08
vendethiel joined
00:18
vendethiel- joined
01:52
ilbot3 joined
02:18
https_GK1wmSU joined
02:20
https_GK1wmSU left
02:29
vendethiel joined
02:41
MasterDuke joined
05:33
brrt joined
06:42
brrt joined
|
|||
brrt | good hi #moarvm | 07:22 | |
let me ask the stupid question today | 07:24 | ||
how hard would it be, with lex/yacc in hand, and MoarVM as a library, to make a bootstrap-nqp | 07:25 | ||
is that even remotely worth the effort | |||
timotimo | huh ... | ||
brrt | basically, i'm asking, how hard would it be to make a compiler for NQP in C, using MoarVM and traditional parsing tools | 07:26 | |
timotimo | yeah | 07:27 | |
brrt | that would allow us to rid ourselves from binary moarvm blobs in the nqp codebase | 07:28 | |
timotimo | yeah | 07:29 | |
hmm. when you have a nqp parser you can potentially compile the qregex engine with that and sidestep having to write Yet Another QRegex Impl | 07:30 | ||
nwc10 | jnthn: callgrind for the setting for your branch paste.scsys.co.uk/564738 and for master paste.scsys.co.uk/564739 makes it look like the branch should be a winner | 07:35 | |
so maybe on the *big* stuff it is | |||
07:35
zakharyas joined
|
|||
timotimo | today will be a day of insufferable heat :\ | 07:38 | |
moritz | today will be a day of switching on the AC | 07:40 | |
yoleaux | 31 Jul 2017 22:19Z <Zoffix> moritz: So "Mark Powers" from Apress emailed me a copy of the book; saying I should post a review on Amazon if I read the book and wanna review it... But where on Amazon do I post the review? I googled the book and found a link, but when I click review it it says "This item has not been released yet and is not eligible to be reviewed". I see a couple other reviews there already. What am I doing wrong? :/ | ||
timotimo | if i had any | ||
moritz: you know about the "protect somethingsomething relax" in one of the hyperlinks? the one for the | syntax | 07:41 | ||
moritz | .tell Zoffix I don't know how they managed that; a review when it's officially released would do nicely | 07:42 | |
yoleaux | moritz: I'll pass your message to Zoffix. | ||
moritz | timotimo: I have no idea what you're talking about :( | ||
timotimo | 2 | 07:43 | |
docs.perl6.org/type/IO\protect\cha...N\protect\ | |||
char"0024\relaxCOLONPath | |||
one of at least two examples | |||
nwc10 is afk for most of the day | 07:51 | ||
brrt | today is not that bad in .nl | 08:14 | |
08:20
domidumont joined
08:26
zakharyas joined
08:47
vendethiel joined
|
|||
jnthn | morning o/ | 08:54 | |
Urgh, hottest day of the year so far today, probably | |||
nwc10: Hm, wow. Wonder why you get differnet results | 08:56 | ||
Maybe my baseline was off or something | |||
OK, so timing the spectests and the build it comes out about even | 09:13 | ||
But | |||
Master does 1281 GC runs | 09:14 | ||
The branch does 1429 | |||
As a sanity check, if I never set the allocate_on_heap flag then it gives the same number of GC runs, so no oddities there | 09:18 | ||
OK, I've managed to tweak the criteria so it's around 1310 or so | 09:36 | ||
And that seems to be a wallclock winner | |||
In part by bumping the threshold to decide but much more that I spotted we would bump the number of promotions whenever there wasn't a spesh cand | 09:38 | ||
But that didn't imply we were spesh logging | |||
So it could falsely inflate the number of promotions on frames where we didn't log the number of entries | |||
Geth | MoarVM/frame-heap-prediction: f29412f8ad | (Jonathan Worthington)++ | src/core/frame.c Improve frame heap allocation prediction. Only bump the counter of heap promotions when we have a spesh correlation ID, which means we will have bumped the entries; before this could get out of sync and over-state the frame's preference. Also increaes the thresholds some. This greatly brings down the number of added GC runs that this change caused by decreasing the number of false positives. |
09:44 | |
09:45
zakharyas joined
|
|||
jnthn | I'm really curious about the callgrind numbers on this vs master, so will run those while I get on with other stuff :) | 10:01 | |
10:37
brrt joined
|
|||
Geth | MoarVM: 53000c87fb | (Jonathan Worthington)++ | 4 files Attach type tuples to callsites. We will be able to use this information to better optimize calls where arguments are passed in Scalar containers than is currently possible. |
11:09 | |
brrt is watching the graal vm talk on the polyglot conference | 11:10 | ||
it's interesting | |||
but | |||
i'm a bit in panic mode | |||
jnthn | 'cus you have a talk coming up too? | ||
11:15
robertle joined
|
|||
jnthn | So, results of master vs my branch are in | 11:18 | |
Seems with latest improvements I see it as a win too; it's possible I got confused by updating Rakudo at some point and the setting grew in some way | |||
Either way, 10 billion cycles less | 11:19 | ||
m: say 218 / 228 | |||
camelia | 0.956140? | ||
jnthn | On CORE.setting compilation | ||
I think that's a win :) | |||
Geth | MoarVM: 21450df926 | (Jonathan Worthington)++ | 3 files Allocate frames on heap that will need promotion. By trying to use existing promotions as an indicator. This somehow seems to end up doing *worse* for the CORE.setting build, however it looks like it helps `make spectest` wallclock time a bit (though it's all within noise). |
11:20 | |
MoarVM: 3d140fdb50 | (Jonathan Worthington)++ | src/core/frame.c Improve frame heap allocation prediction. Only bump the counter of heap promotions when we have a spesh correlation ID, which means we will have bumped the entries; before this could get out of sync and over-state the frame's preference. Also increaes the thresholds some. This greatly brings down the number of added GC runs that this change caused by decreasing the number of false positives. |
|||
jnthn | So, rebased and pushed | ||
lunch | 11:22 | ||
brrt | jnthn: yes | 11:34 | |
jnthn | brrt: Good luck with it :) | 12:09 | |
brrt | thanks :-) | 12:10 | |
thing is, i'm covering much of the same ground, i guess, only my approach is quite different | |||
12:12
AlexDaniel joined
|
|||
jnthn | Righty, time to try and get spesh fully back on its feet again with regards to Perl 6 code | 12:13 | |
12:16
vendethiel joined
|
|||
jnthn | Grr, why do things always have to go wrong in 200+ BB frames :P | 12:25 | |
brrt | bisect! | 12:34 | |
actually, you could make a spesh-bisect tool pretty simply, i'd think | |||
provided you give them a sequence number and use blocking | 12:35 | ||
jnthn | Oh, it goes away wiht the JIT | 12:37 | |
Uh, with the JIT disabled | |||
I wonder if padding a deopt offset of -1 is normal... | |||
Ah, it's unused if we have no inlines | 12:38 | ||
Taht's odd | 12:42 | ||
Deopt one requested by JIT in frame 'variable_declarator' (cuid '322') (-1 -> 4384) | |||
but | |||
Deopt one requested by interpreter in frame 'variable_declarator' (cuid '322') | 12:43 | ||
Will deopt 4398 -> 4378 | |||
I don't see why the target index should be different | |||
ohh | 12:45 | ||
So as background, I just enabled having decont as a deoptonepoint | |||
So in the pre-opt graph there's | 12:46 | ||
[Annotation: INS Deopt One (idx 119 -> pc 4378; line 2977)] | |||
[Annotation: Logged (bytecode offset 4370] | |||
getlex r10(74), lex(idx=1,outers=0,$ast) | |||
[Annotation: INS Deopt One (idx 120 -> pc 4384; line 2977)] | |||
decont r35(14), r13(74) | |||
After optimization it's | 12:47 | ||
[Annotation: Logged (bytecode offset 4370] | |||
sp_getlex_o r10(74), lex(idx=1,outers=0,$ast) | |||
[Annotation: INS Deopt One (idx 120 -> pc 4384; line 2977)] | |||
[Annotation: INS Deopt One (idx 119 -> pc 4378; line 2977)] | |||
sp_guardconc r10(74), sslot(7) | |||
Note the deopt point moved | |||
And now two are on the same instruction | 12:48 | ||
brrt | yes | 13:02 | |
that's ā¦ oh | |||
that might upset some expectations | |||
jnthn | Yeah, seems that being sure to append rather than prepend the annotations will do it though | 13:03 | |
Geth | MoarVM: a11b5f1e7e | (Jonathan Worthington)++ | src/spesh/deopt.c Improve deopt logging output. |
13:08 | |
MoarVM: 3932a0f749 | (Jonathan Worthington)++ | src/spesh/manipulate.c Append, not prepend, moved deopt one annotations. So that the earliest one takes precedence, not the latest one. Otherwise, we might skip over code that we really should run after doing the deopt. |
13:11 | ||
MoarVM: 53ff82e417 | (Jonathan Worthington)++ | 2 files Turn decont into a deoptonepoint. This means that we will guard types resulting from a decont, which should in turn help us do a better job of Perl 6 code without the dubious aliasing handling of before. |
|||
13:13
AlexDaniel joined
|
|||
jnthn | ahh...interesting problem | 13:27 | |
If we enter a hot loop - typically the main loop of a benchmark - at a point where we ran out of spesh log, then we'll miss an ENTRY record and similar for it | 13:28 | ||
And so the OSR points will go nowhere | |||
And we won't optimize it | 13:29 | ||
brrt | .oO(Now here is nowhere) |
||
jnthn ponders | |||
The obvious heuristic this might be about to happen is when we enter a new compilation unit for the first time | 13:30 | ||
13:43
ilmari[m] joined
|
|||
nwc10 | jnthn: not afk as much as planned. | 13:45 | |
window for your branch has MVM_SPESH_BLOCKING=1 | |||
other window that built master did not | |||
jnthn | ah | 13:51 | |
Geth | MoarVM: a79f22b120 | (Jonathan Worthington)++ | 2 files Force logging when entering a new compunit. This ensures that we log the outermost loops of a compilation unit, and so will reliably be able to OSR hot tight outer loops of benchmarks. |
13:57 | |
jnthn | That works pretty effectively :) | ||
vendethiel | can't this function be called from multiple threads? | 14:07 | |
nvm | |||
14:09
zakharyas joined
15:15
zakharyas joined,
brrt joined
15:36
lizmat joined
15:49
AlexDaniel joined
|
|||
Geth | MoarVM: ee44adbe6a | (Jonathan Worthington)++ | 3 files Also handle case of nearly full spesh log. So that we can better collect data for new compilation units in this case also. |
16:01 | |
MoarVM: 9b166512da | (Jonathan Worthington)++ | 7 files Change the way we log returns. The previous way was fragile and could lead to us getting bogus depth counts, which then confused the order that specialization was done in (not to mention anyone reading the spesh log). It also would block any effort to try and carry over the simulated stack between processing of logs. |
|||
MoarVM: 10203d7196 | (Jonathan Worthington)++ | 3 files Don't let compunit bonus logs inflate quota. |
16:23 | ||
MoarVM: 99332f234c | (Jonathan Worthington)++ | 2 files Tweak compunit heuristic for EVAL/BEGIN-heavy code |
|||
jnthn | Well, didn't quite end up doing exactly what I expected this afternoon, but still, improvements are improvemnets :) | 16:26 | |
Will work on invocation spesh tomorrow | |||
16:38
zakharyas joined
16:48
robertle joined
17:20
zakharyas joined
17:25
hoelzro joined
19:16
markmont joined
19:41
zakharyas joined
20:20
AlexDaniel joined
|
|||
markmont | There was talk on perl6-compiler a few days ago about Rakudo Star on systems that enforce W^X, see near the end of www.nntp.perl.org/group/perl.perl6....16180.html | 20:44 | |
timotimo made a change to prevent MoarVM from breaking on systems that do not allow executable heaps: www.nntp.perl.org/group/perl.perl6....16195.html | 20:45 | ||
timotimo | yup, i'm here | ||
markmont | That still leaves executable stacks. One solution is to build MoarVM with libffi 3.1 or later. | ||
timotimo | yup | 20:46 | |
jnthn | Pretty sure that comes via dyncall and is accidental; it's been worked on a bunch upstream. | ||
markmont | But I just looked into dyncall. As it turns out, updating to the latest (unreleased head) dyncall solves the execstack problem and all Perl 6 spectests pass, see gist.github.com/markmont/4a7578970...fafed7ecbc | ||
timotimo | whoa | ||
that's cool | |||
so we don't have to tell people to pass a non-standard configure flag | |||
markmont | Alternatively, we could just apply these changes to the version of dyncall MoarVM uses and, again, all spectests pass: hg.dyncall.org/pub/dyncall/dyncall/...f0b683918a | 20:47 | |
timotimo | i do believe we can just bump up the dyncall submodule | ||
markmont | I'm just throwing this out there in case someone wants to either update the version of dyncall or just apply the patch. | ||
jnthn | timotimo: Yeah, I think so | ||
timotimo | i.e. no patches that dyncall doesn't have upstream | ||
jnthn | I think bumping our bundled version is fine. | 20:48 | |
markmont | Here's the main stuff we get if we bump up dyncall: | ||
no execstack needed, ARM64 support, PPC64 support, PPC32 support under Linux, and improved stability/reliability for Mach-O. | 20:49 | ||
well, that's all in dyncall. But it could lay some foundations for subsequent MoarVM work. | |||
jnthn | Sounds worthwhile then :) | ||
markmont | One potential concern is there hasn't been a release of dyncall in ~18 months, we'd be using an unreleased head. | 20:50 | |
jnthn | We're a bit before release, so now sounds like a decent time to bump to latest dyncall | ||
True, though there's configure options for people who want to use an installed dyncall if packaging. | |||
For those doing a source build, probably this just makes things work better. | 20:51 | ||
markmont | Let me know if I can do anything else at this point. So far, I've only tested on Linux x86_64. Otherwise, thanks for being open and looking into this! | 20:54 | |
jnthn | timotimo: One question on your patch: I think it doesn't impact moar --version? | ||
In that it'd still say "built with JIT support"? | |||
timotimo | oh | ||
we can totally have a piece of output for that | 20:55 | ||
jnthn | Just that people will get a notable performance slowdown if they have their OS configured so we "can't" JIT | ||
timotimo | there's still that workaround with the temporary files | ||
jnthn | And it's nice if it registers in the --version | ||
timotimo | i'll patch something up for the --version | ||
jnthn wonders if this is a common configuration | |||
timotimo | "built with JIT support, but operating system forbids it" or something | ||
jnthn | Temporary file sounds...uh...interesting | ||
timotimo | wellllllll, given i had four different programs crash on me in the background while i had that option enabled ... :) | 20:56 | |
jnthn | hah :) | ||
timotimo | (thunderbird exploded, a google chrome extension or tab or something, something from kde, and something else) | ||
jnthn | I guess we'd have to be darn careful about perms on the file | ||
timotimo | we're supposed to create a temp file and immediately unlink it | 20:57 | |
(but also mmap it twice in different modes) | |||
markmont | Here's how dyncall does it using mmap(): hg.dyncall.org/pub/dyncall/dyncall/..._wx_mmap.c | ||
jnthn | Otherwise we risk turning a program with an path injection vuln into one that potentially has the ability to run arbitary machine code... | ||
oh, /dev/zero :) | 20:59 | ||
Cute :) | |||
timotimo | that seems clever | ||
jnthn | Yeah, that makes it sound less like a security hole waiting to happen :) | ||
timotimo | and systems that don't have /dev/zero probably don't have execmem rejection | 21:00 | |
jnthn | I suspect this bites most people doing JITs at some point :) | ||
timotimo | i would assume so | 21:01 | |
i don't understand why this works but our code doesn't, though | 21:02 | ||
what their code does is just have one mmap and that start out as RDWR and gets turned read + execute later | |||
that's what we do? but mprotect explodes in our faces when we try that? | 21:03 | ||
(it gently explodes, of course) | |||
markmont: can you shed some light perhaps? | |||
markmont | timotimo: I'm out of my depth here I'm afraid, I'm more of a sysadmin than a programmer. But I'll look. | 21:04 | |
timotimo | i'll point you at the code where we do the thing | 21:05 | |
github.com/MoarVM/MoarVM/blob/mast...pile.c#L68 | 21:06 | ||
though you probably saw the patch itself, too | |||
and these platform functions live in ... | |||
github.com/MoarVM/MoarVM/blob/mast...six/mmap.c | |||
markmont | timotimo: yep! And thanks for the links. I'll take a look at those and MVM_platform_alloc_pages() and MVM_platform_set_page_mode(). | 21:07 | |
oh, those functions are pretty simple :) | 21:10 | ||
timotimo | yup, really just prettier than ifdefs | 21:14 | |
MasterDuke | jnthn: i just tried doing a --profile-compile of the rakudo build and got immediate segvs, but i thought you'd fixed that? | 21:16 | |
jnthn | MasterDuke: I fixed some profiler stuff, didn't try anything that sizeable with it. I think timotimo fixed something recently also | 21:19 | |
MasterDuke | fyi, i was on moarvm HEAD | ||
timotimo | yup i see it | 21:20 | |
it explodes in invoke_o | 21:21 | ||
code is a null object there | |||
21:24
geekosaur joined
|
|||
markmont | timotimo: I've looked at everything and for the case where the system has both mprotect and MAP_ANON, it looks like MoarVM is doing exactly what dyncall does. I've got to leave, but I'll poke at this in detail over the next few days if no one beats me to it. | 21:25 | |
timotimo | thanks! | 21:26 | |
21:51
geekosaur joined
22:03
markmont joined
22:33
lizmat joined
|