00:05 deep-book-gk_ joined 00:07 deep-book-gk_ left 01:52 ilbot3 joined 02:16 geekosaur joined 02:19 nwc10_ joined, moritz_ joined 03:05 AlexDani` joined 03:27 AlexDani` joined 04:56 deep-book-gk_ joined 04:57 deep-book-gk_ left 05:44 AlexDani` joined 06:01 brrt joined
brrt good * #moarvm 06:06
06:28 Ven joined
brrt i've found a few bugs in the allocator still, but not the smoking gun 06:39
06:39 AlexDani` joined 06:40 domidumont joined 06:47 domidumont joined
brrt also! 06:50
www.evanmiller.org/why-im-learning-perl-6.html
pretty high praise
"The code base is well-written, well-organized, well-documented, and well-tested; little things, like functions having the right size and variables having good names, make it a pleasure to read." 06:52
y'all++ :-D
06:53 Ven_ joined 07:13 brrt joined
samcv hey brrt 07:18
brrt hey, mac has decided to reset my computer 07:19
07:24 brrt joined
brrt ohai samcv 07:25
samcv brrt, did they notify you first?
brrt the mac? 07:26
like five seconds in advance
samcv :P
rude
brrt, glad to read that fine praise! 07:27
brrt :-D
i'm going to copy that everywhere :-D 07:38
08:01 zakharyas joined
AlexDaniel lizmat: ? something to mention in next p6weekly for sure :) 08:22
ah, you've seen it already, nvm
jnthn morning o/ 08:48
brrt morning jnthn
jnthn Nice article :) 08:52
jnthn is usually so busy working on the things that need improving that he often forgets we have some good stuff too :P 08:53
08:59 robertle joined
jnthn There's lots of stuff I'd like to work on based on the CORE.setting compile profile, but I think they're out of scope for my branch, so I figure I'll get it merged 09:08
Want to look into the --profile regression first
grr, valgrind makes it work o.O 09:12
09:21 evalable6 joined 09:24 bisectable6 joined, unicodable6 joined 09:28 camelia joined
nwc10 jnthn: ASAN? (as it has a multithreaded hammer) 09:41
dogbert17 perl6-gdb might be an alternative 09:48
that's what I used yesterday 09:50
jnthn was right again, valgrind does hide the problem 09:52
Geth MoarVM/spesh-worker: 836da8faf6 | (Jonathan Worthington)++ | src/profiler/instrument.c
Clear argument guards on starting profiling.

Otherwise they'll end up pointing to bogus spesh candidates.
09:53
MoarVM/spesh-worker: 9a6b5d835e | (Jonathan Worthington)++ | 4 files
Update profiling to cope with spesh changes.

It should wait for the spesh thread to finish its work, otherwise it will end up with confusion (and segfualts) when instrumented code gets installed underneath the spesh worker thread.
jnthn That seems to make things better.
timotimo perl6-gdb-m or maybe even rr ;) 09:54
also, mornin'
dogbert17 morning timotimo
jnthn++, that was a quick fix 09:55
jnthn Righty, time for a blocking + nodelay run of things, then I think I'll get this merged 09:58
There's still a good amount of time before the next release
So the various huge changes this branch brings can get a good workout. 09:59
(The GC orchestration stuff I did yesterday is also a huge change.)
dogbert17 any ideas as to where the current performance loss might be hiding? 10:00
jnthn Various. We're collecting a good bit more info than we were but not really using it fully yet, would be one reason, though the profiles don't show that collection up as being much of a cost. 10:02
Another could be we always have multiple threads now, so the single-thread optimizations went away. 10:03
Again, hard to see that in the profiling data.
Though it could be there inside the FSA
Yet another is that perhaps we're doing less well on certain optimizations for some reason 10:04
dogbert17 you did fix some long standing bugs, perhaps they affected reliability positively but performance negatively ? 10:05
dogbert17 tries to get ahead of nwc10 by doing a spectest with ASAN :) 10:06
jnthn That also possible, yes 10:07
Alright, looks OK 10:08
Will merge then continue hunting improvemnets 10:09
timotimo when the log buffer is full, we just stop logging, right?
jnthn Won't do an immediate bump of MOAR_REVISION so only those who choose to live right on the edge will get it
timotimo: We have a quota of buffers 10:10
timotimo: When we run out, we stop logging
timotimo: Until the spesh worker is done with one and lets us log some more
timotimo right
jnthn Otherwise we could end up nomming a lot of memory 10:11
timotimo it's not problematic to lose any logged data, right?
of course
10:11 AlexDani` joined
jnthn Not really 10:11
If something's hot it'll get called and log stuff eventually 10:12
timotimo right 10:13
jnthn What you notice in CORE.setting is there are points where the spesh worker thread goes a whole second or two with no new data, which implies nearly everything we're running has been specialized :) 10:14
Or at least, everything hot 10:15
Since hot frames will be filling the buffer with entries and hot loops with OSR entries.
timotimo aye 10:16
do we now keep osrpoints that have not been used around in frames btw?
or is there still some design needed to make that work?
jnthn For now we kick them all out
timotimo right 10:17
jnthn There's no easy option on that, I don't think
Since a spesh'd frame doesn't log
timotimo hm, right
loop detection and all that
jnthn Wow, 193 commits in my branch o.O 10:18
Merge testeds and spectested 10:19
Geth?
:) 10:20
Pushed the merge, anyway :)
Odd it didn't report it
timotimo busy bee jnthn bringing us that very special optimization honey
brrt \o/ 10:21
Geth MoarVM: 17e53807a7 | (Jonathan Worthington)++ | 2 files
Avoid many array searches for SC code refs.

This showed up hot in profiling. It turns out that we weren't even checking if the code ref had a cached SC index, and even if we had been we'd still get a miss because we didn't set the SC on the code object before adding it, meaning the index was never cached. Cuts the number of times we need to take the loop to just 40% of the cases it used to need to in CORE.setting compilation, which cuts about 5% off stage MAST.
10:49
lizmat wee! :-) 10:52
timotimo *neat* 10:56
10:57 ZofBot joined
timotimo i think i'll install telemeh spots for "finished a log" which will tell both the thread object and the address of the log object, and also for the spesh worker when it grabs that log object 11:14
Geth MoarVM: 975a67ee28 | (Jonathan Worthington)++ | 3 files
JIT param_sp and param_sn.
11:17
jnthn Righty, lunch and another callgrind run to have fresher data 11:18
dogbert17 jnthn: unless I have done something wrong there's a spectest fail in t/spec/S04-declarations/constant.t. "Cannot invoke this object (REPR: Null; VMNull)" 11:58
timotimo there was just a commit about constants in rakudo 11:59
dogbert17 aha
ok 72 - Can match a exported constant regex
Cannot invoke this object (REPR: Null; VMNull)
in sub at /home/dogbert/repos/rakudo/t/spec/packages/ExportConstant.pm6 (ExportConstant) line 3
in block <unit> at t/spec/S04-declarations/constant.rakudo.moar line 386
jnthn I suspect that was a revert done earlier today 12:01
Without reverting a test
fwiw, want a bit of a break from spesh work, so decided to work on shrinking MVMFrame some :) 12:02
brrt that is probably going to be worthwhile 12:04
timotimo i pushed two commits just now, geth seems unhappy 12:06
Geth MoarVM: f5d52c587f | (Timo Paulssen)++ | src/main.c
inability to open telemeh log shall not be fatal
12:08
MoarVM: 30f92a01e6 | (Timo Paulssen)++ | src/spesh/worker.c
output spesh worker info on telemetry channel
timotimo hey look
oh no 12:19
the cat is sitting between my keyboard and screens :D 12:21
jnthn They probably offer a nice warming service with the added bonus of distracting a human for attention. 12:23
timotimo actually, my desk is cluttered (fall-out from moving, still :( ) and she's sitting right in front of the keyboard, a good 30cm away from the screens 12:24
now the telemetry log shows when quota runs out and then when the worker thread re-enables logging for a thread 12:26
essentially letting you see how much time is spent non-logging 12:27
gist.github.com/timo/9fc680c461b04...c3a919e8b7 - looks like this 12:28
stmuk gcc 7.1 is noisy 12:34
12:37 Geth joined
Geth MoarVM: 2f89bd12c5 | (Jonathan Worthington)++ | 2 files
Eliminate all reads of frame effective_handlers.

We can cheaply and easily determine what they are by checking if we have a spesh candidate or not. This will create a very small added cost where we need them, which is when an exception is thrown.
12:38
MoarVM: c0ac26668d | (Jonathan Worthington)++ | 4 files
Eliminate effective_handlers field in MVMFrame.

All the writes to it can go away, some of which were on hot paths.
MoarVM: 3b6c397d97 | (Jonathan Worthington)++ | 2 files
Move static inline to the only file using it.
jnthn 8 (or 4 on 32-bit) bytes down
timotimo neat. we do have many frames.
Geth MoarVM: c969852553 | (Jonathan Worthington)++ | src/core/exceptions.c
Correct pluralo.
12:43
12:49 zakharyas joined 12:52 lucasb joined
Geth MoarVM: b04678bc6d | (Jonathan Worthington)++ | 6 files
Eliminate many readers of ->effective_bytecode.

These are all easily handled by simply checking if we've a spesh candidate.
13:16
MoarVM: 992990345d | (Jonathan Worthington)++ | src/core/frame.c
Remove an unrequired test.

If we have JIT code, we'll be running JIT code.
MoarVM: 4357c00547 | (Jonathan Worthington)++ | 2 files
Account for jitcode in effective bytecode check.
MoarVM: 3d5c545346 | (Jonathan Worthington)++ | src/core/frame.c
Prepare invoke for eliminating effective_bytecode.
13:20
jnthn I "just" need to update deopt.c now in order to be able to eliminate effective_bytecode
But first, language class :) 13:21
bbiab 13:22
timotimo ... object oriented speaking ... 13:23
13:26 jsimonet joined
jsimonet Hello, I think I saw a type on moarvm website (www.moarvm.org/) "Synchronous I/O reimplemented, lifting limtations". 13:28
typo*
timotimo mhh lime-tations 13:29
probably some kind of tĆ¢rte?
brrt hey, thanks 13:32
14:03 AlexDaniel joined
jnthn Ah, and I need to replace that with this 2017.07 release text anyway :) 14:46
jsimonet++ for noticing though :)
jsimonet :)
jnthn Well, now I know how to say "deopt je nejkomplikovan?jŔi"... :) 14:50
jnthn tries to sort out the effective_bytecode removal there too
Geth MoarVM: paulsmith++ created pull request #618:
Fix typo in comment
14:54
MoarVM: 11f195d9f5 | (Paul Smith)++ (committed using GitHub Web editor) | src/core/oplist
Fix typo in comment
15:06
MoarVM: 49ed81f0a1 | (Jonathan Worthington)++ (committed using GitHub Web editor) | src/core/oplist
Merge pull request #618 from paulsmith/patch-1

Fix typo in comment
MoarVM: 7455420dbd | (Jonathan Worthington)++ | src/spesh/deopt.c
Make deopt no longer require effective_bytecode.

Which makes it rather clearer anyway.
15:10
jnthn Phew :)
Geth MoarVM: d6d7d5eb71 | (Jonathan Worthington)++ | 4 files
Eliminate effective_bytecode.

Saves another 8 (64-bit) or 4 (32-bit) bytes in MVMFrame, and some assignments on the invoke hot path.
15:22
jnthn That's 16 (or 8 on 32-bit) bytes saved off every MVMFrame. 15:23
15:25 brrt joined
timotimo the cache rejoices 15:26
15:32 nebuchadnezzar joined 15:42 brrt joined
Geth MoarVM/frame-extras: 9a33eeb8aa | (Jonathan Worthington)++ | 10 files
Add function to encapsulate special return setup.

Which will ease refactoring how it is handled/stored.
15:58
16:24 brrt joined 16:26 robertle joined 16:37 colomon joined
Geth MoarVM/frame-extras: 3be41bc41c | (Jonathan Worthington)++ | 12 files
Move special return into a frame extras.

This is allocated and hung off a frame on-demand to store things that relatively few frames have. A couple of further items will move to this structure later; for now this saves 3 pointers per MVMFrame (so 24 bytes per frame on 64-bit platforms).
16:54
16:59 Ven joined
jnthn Tomorrow, a couple more things move into there, saving another 16 bytes 17:03
Or 8 if you're on 32 bit
17:22 Ven joined
timotimo hm, so reini's thread model is basically "the owner of an object doesn't have to lock if it wants to do changes to it, but it has to check for a work queue constantly"? 17:29
and on every access to any object you first have to check who the owner is, too 17:31
i'm not entirely convinced that's better than letting the user handle the locking based on what needs it and what doesn't 17:34
jnthn I suspect its properties also fall under the "false sense of security" I've mentioned before: effectively, that the atomicity is on smaller things than the transactions that you typically care for. 17:46
The start { while @a { process(@a.pop) } } for ^4 example being the classic example: a model that lets you safely ask how many elemnets you have and safely pop doesn't make that code safe 17:47
timotimo right 17:49
i imagine you'd still write lock-based code for that
where while a thread is waiting to acquire a lock would i guess block on its work queue? 17:50
and, er, when the lock gets freed all other threads get a wake-up for that?
there must be a way to make this efficient
anyway, will be AFK for a cinema evening with friends :)
17:53 domidumont joined 18:08 domidumont joined 18:19 FROGGS joined 18:22 brrt joined
nine timotimo: actually it's my thread model and it relies on writes being done only by the owning thread, i.e. you send it the task to execute the write. The effective lock is the one on the task queue. And yes, it doesn't actually give you guarantees about reading consistent states. 18:27
But hey, it was my first attempt :)
jnthn timotimo: You want something along the lines of what the concurrent queue uses 18:34
(condvar for the wake-up) 18:35
Geth_ moarvm.org: 4a6510293e | jnthn++ | 2 files
Update site for 2017.07 release.

And some more general updates to the homepage text.
19:11
moarvm.org: 5904b51079 | jnthn++ | roadmap.html
Update roadmap also.

We completed some things.
19:15
19:53 dogbert2 joined
dogbert2 Profiled a program which runs 10-15 percent slower with spesh-worker and compared it with a profile where I used the Camelia version. 19:55
The only obvious difference I saw was the following, the Camelia version did 5 OSR while spesh-worker only did 3. 19:57
[Coke] COMPLEAT ALL THE THINGS 20:22
jnthn dogbert2: Any chance you could callgrind the two also?
How did the inlining rate and percentage specialized compare? 20:23
dogbert2 percentage specialized frames: Camelia 100%, spesh-worker 99.99% 20:26
no JIT compiled frames since I'm on a 32 bit VM 20:27
20:27 colomon_ joined
dogbert2 also regarding the OSR's: camelia had 2 deopts while shesh-worker had 0 20:28
jnthn Yeah, in theory spesh-worker has more data to go on in most cases and so can do less deopting 20:39
Did you find the inlining rate? It's on the overview page 20:41
dogbert2 Camelia: Inlining eliminated the need to create 25326140 call frames (that's 40.33%). spesh-worker Inlining eliminated the need to create 25325704 call frames (that's 40.33%). 20:43
jnthn Gosh, they're close 20:47
And top routines and their percentage times are similar?
20:49 colomon joined
dogbert2 jnthn: here are the callgrind results: gist.github.com/dogbert17/6bb3eeb5...c7ab6f31a7 20:54
20:56 colomon joined
dogbert2 the percentages (top ten in the --profile output) are more or less the same 21:04
jnthn Yeah, that's quite revealing. Thanks. 21:05
nine almost half a million get_attribute more? 21:11
jnthn Yeah, also a lot of multi-dispatch cache lookups 21:14
nine So either the stronger validation of code objects is too strong or some missing facts? 21:15
jnthn More like, we were playing waaay fast and loose with aliasing before
And now we're a lot tighter on it, so much so that it probably cuts out a bunch of useful opts 21:16
I expected to have to deal with that; we already do collect some data about it that now needs to be put to good use
In the longer run we'll want some more sophisticated alias analysis also
Which is also an escape analysis pre-req, which would allow for cutting out a ton of GC work. 21:20
21:38 colomon joined
samcv someone i talk to on irc linked me that evanmiller article unprompted and asked if i'd seen it :) is perl 6 popular yet? 22:02
:p
heh 22:03
jnthn :) 22:23
sleep & 22:31
22:46 AlexDani` joined 23:59 sivoais joined