00:00 cognominal joined 00:32 cognominal joined 01:31 FROGGS joined 01:56 FROGGS joined 04:10 FROGGS joined 05:16 jnap joined 06:16 jnap joined 06:35 cxreg joined 06:47 FROGGS joined 07:08 zakharyas joined 07:17 jnap joined 08:18 jnap joined 08:41 lue joined
nwc10 jnthn: mininal ASAN failing test case: paste.scsys.co.uk/362486 09:16
fails to get to the second say
no idea why ASAN is adamant about:
0x600800396f6c is located 28 bytes inside of 40-byte region [0x600800396f50,0x600800396f78)
but I think that that might be the clue
09:19 jnap joined
jnthn nwc10: Yeah. Don't immediatley see what's going on there. Hmmm. 09:21
freed by thread T1 here: #0 0x7ffff4e6347a (/home/nicholas/Install/gcc482/lib64/libasan.so.0.0.0+0x1547a) #1 0x7ffff4551eaf (/home/nicholas/Sandpit/moar-san/lib/libmoar.so+0x2f8eaf) 09:23
nwc10 yes, I can't get that trivially from ASAN 09:24
jnthn There's not a way to get that mapped to a human-readalbe file/line, is there?
ah, ok
nwc10 building ASAN-free to use valgrind
maybe 15 minutes until I can answer that
and I still haven't got to the hammock yet
jnthn Just trying to figure out if it's ctx that's bad or ctx->callsite 09:25
Looking at the addresses, I guess ctx->callsite
nwc10 I think that it's the latter, but has_flattening has the wrong offset 09:26
jnthn: paste.scsys.co.uk/362496 09:30
if (storage) free(storage); /* not thread-safe */ 09:32
that's line 1134 of ops.c
which really really isn't a callsite
but the problem may well be "It's not thread-safe."
like 1094
er, line 1094
I'm not sure *how* it ends up correctly freeing something totally wrong 09:33
jnthn Sorry, ahd phone call 09:40
One that told me my May will be an iota less stressful than first expected. :)
FROGGS less stressful outside of this channel :o) 09:41
jnthn nwc10: wtf??!!!
I don't even...
The only thing I can imagine is that an object is unmarked, we look into it, and pull out a completely arbitrary memory address...somehow. 09:42
nwc10 jnthn: I'm agreeing with the wtf??!!‽⸘ELEVEN etc
FROGGS FROGGS .oO( how could this have ever worked? ) 09:43
nwc10 oooh, !!⒒
and some other stuff I don't have fonts for
FROGGS "ELEVEN etc" <-- *g*
nwc10 FROGGS: I'm assuming that the comments predicting doom, gloom, lack of thread safety, old ones, etc are reasonably accurate 09:44
and it's to do with crossing the streams. Er, using more than one thread
but I can't see *how*
jnthn Probably but...I think in this case it's doing it in a place where the thread is the only owner of the string in question...
nwc10 Unicode++ # does not yet have a "spinner" character, let alone one that a terminal would animate 09:45
I hope I don't give them ideas
jnthn shhh! :P 09:46
nwc10 jnthn: helgrind has a *lot* to say: paste.scsys.co.uk/362510 09:50
I'm not experienced with helgrind, so I can't offer any advice on what it's saying 09:52
I have Rakudo at ff04467628de2a004489ef31fdb8eb745c31f141
nqp at b596f16f9ecfb413fe7b11a576ec562c23046622
MoarVM at 405b1ec9a67131dcec363bdba982161936a2c1c0
jnthn if (++static_frame_body->invocations >= 10 && callsite->is_interned) { 09:53
nwc10 and that was helgrind from valgrind-3.8.1
jnthn /* Rough call count. May be hit up by multiple threads, and lose the odd
* count, but that's fine; it's just a rough indicator, used to make
* decisions about optimization. */
MVMuint32 invocations;
:)
nwc10 OK.
ideally would be a nice to have an optional way to build that is strictly correct 09:54
I think technically it's also possible to do a suppression file
jnthn *nod* 09:55
Some of them may be legit, of course.
nwc10 was going to try to suppress just that one
dalek arVM: 0487e37 | jonathan++ | / (8 files):
Add MVMNull REPR, instance->VMNull.

10:06
arVM: 2de460c | jonathan++ | src/6model/reprs/MVMNull.h:
Add static inline func for doing a VM-null check.

Lazily allocate lexical containers.
This means that most of the time we won't allocate $/ and $!, and perhaps $_ too, when they are never used.
10:06 dalek joined 10:19 jnap joined 10:33 dalek joined 11:06 donaldh joined 11:13 donaldh joined 11:20 jnap joined 12:21 jnap joined
nwc10 jnthn: seems that only 6 of the helgrind complaints are about that one 12:38
13:22 jnap joined 14:22 jnap joined 14:24 donaldh joined 14:31 jnap joined
timotimo sounds like i ought to start a benchmark run soon, eh? :) 15:03
jnthn timotimo: go for it :) 15:08
walk, pondering stuff & 15:16
timotimo bon marcher
nwc10 jnthn: you're determined to continue an endangered skill? www.bbc.co.uk/news/magazine-27186709 15:31
japhb jnthn: Where is the current version of the rakudo-nqp-backends layering block diagram? I'd like to use it in my talk-in-progress, if that's OK .... 15:39
jnthn nwc10: I actually walk pretty often in cases where I could hop on public transport for a couple of stops. :) 15:48
japhb: Not quite sure what diagram you mean, unless it's one I've done in a talk sometime, in which case it's been a while... 15:53
timotimo jnthn: should i manually bump the moar revision in nqp and the nqp revision in rakudo to get the benchmark data? or should i trick p6bench into building master again? :) 15:56
jnthn timotimo: Whatever's easiest for you. It seems to not regress spectests. 15:59
timotimo timotimo faked it
FROGGS japhb: I think you mean one from the talk given at YAPC::NA 2013, and that talks was given by pmichaud I think 16:01
japhb FROGGS: Huh, I thought jnthn gave the most recent one. Ah well. 16:05
jnthn: I was talking about the one that shows what parts of the stack are Perl 6, what's NQP, and what's VM specific. 16:06
FROGGS japhb: this? youtu.be/XgPh5Li3k4g?t=24m58s 16:07
nwc10 jnthn: HEAD/HEAD/HEAD~2 works on "my" machine, apart from previously known fun 16:27
japhb FROGGS: Now that I'm near sufficient bandwidth not to annoy my peers, I took a look. Yes, that's the correct diagram -- but that was from before MoarVM was added to it. 17:11
I'm looking for one after MoarVM became "official".
FROGGS hmmm, maybe jnthn knows any of his slides where that is in :o) 17:13
17:15 LLamaRider joined
japhb FROGGS: I've looked through several of his most recent Rakudo and MoarVM decks, and didn't see one new enough. 17:21
Hmmm, I wonder ...
17:22 LLamaRider joined
japhb Gah, not in the internals course, either. :-/ 17:23
jnthn japhb: Yeah, I don't remember doing a recent one of those. 17:33
timotimo jnthn: t.h8.lv/p6bench/2014-05-01-vmnull.html - we can't quite stop doing the optimization thing just yet 18:18
jnthn: please don't ask me why some of the benchmarks start out very slow 18:21
FROGGS timotimo: can I ask why there is no rakudo/nom and no perl5 included? :P 18:22
I can only read benchmarks when I can compare something 18:23
timotimo hmm
rakudo/nom is eager_vivification
FROGGS ohh
timotimo nom/master/master is lazy_vivification
18:51 btyler joined 18:52 daxim joined
japhb jnthn: Is there editable source for that block diagram I was asking about earlier, like an SVG file? Maybe my best course of action is just to update it. :-) 20:11
jnthn japhb: For Pm's, maybe. Mine was drawn in Powerpoint...
timotimo jnthn: what's the next amazing optimization opportunity? 20:21
if we introduce a fact KNOWN_NONNULL, we can optimize these isstr, islist, ... things away
FROGGS timotimo: implement labels for jvm to optimize user experience? *g*
lizmat timotimo: perhaps low hanging fruit, but there is a candidate for slice :delete access in sink context 20:27
look for :$SINK! in array_slice / hash_slice.pm 20:28
timotimo i'll keep it for #monday :) 20:29
21:09 lue joined
japhb #monday? Are you just referencing p6weekly in a general sense, or does the '#monday' tag now do something special? 22:22
timotimo it doesn't do something special 22:28
except for this very case i'll probably search for it :) 22:29
22:52 colomon joined
dalek arVM: 4050a53 | jnthn++ | src/core/frame.c:
Optimize frame allocation.

Use calloc rather than malloc + memset.
23:08
arVM: ca47831 | jnthn++ | src/core/frame.c:
Remove unrequired memory barriering.

We didn't expose the frame anywhere else at the point we set these, so no need to barrier.
jnthn timotimo: One thing that may help a bit is to teach spesh about nqp::can 23:10
timotimo oh! aye
jnthn Just looking at the forest fire C-level profile and can is actually the leading cause of hash lookups...
timotimo 16/43 benchmarks for rakudo-jvm >_> 23:11
jnthn Yeah, and goalposts moved again. 18b7e2e I just did in Rakudo got me a 5%-10% improvement on ff.
timotimo would people mind if i set up a public gobby server on raduko.org or something like that?
oh dang!
er, but what's ff?
jnthn forest fire 23:12
timotimo i forgot what perl6 server i had access to and with what username and ssh key >_<
oh, that's good!
jnthn Reducing GC pressure will only help so much in forest fire, it seems... 23:15
'cus it's already down at around 12.5%
timotimo 12.5% what? 23:16
time spent in the gc?
jnthn Of runtime.
timotimo ah
yes, we want to get that back up to 50% while keeping the gc run time constant :)
jnthn Which as things go is quite good.
timotimo aye
jnthn I've been doing some pondering on spesh
I think I'm going to give it a "logging"/"data-collection" pass 23:17
So it can gather a load more info, that it can use to make guarded assumptions.
Also thought a bit about your "can haz spare register" question.
timotimo that sounds good 23:18
got an answer yet?
jnthn I wondered if the simplest way isn't to simply reserve some extra space after the arg buffer
Currently we have
->work pointing to a block of memory like | ...locals... | ...space to put args when calling... | 23:19
We could sneak an extra pair of registers after that.
One you can use for a .o/.s, the other for a .i/.n
For inlining, I realized the easiest way is to just concatenate the chunks. 23:20
'cus then it's dead easy (memcpy) to grab them out when we de-opt 23:21
timotimo oh?
well, that sounds lovely
jnthn Writing the deopt bit of inlining is going to be "fun"...
In so far as if it happens, we'll need to make the frames we optimized away suddenly start existing. 23:22
timotimo ah, yes
jnthn I also realized that "how do we get stacktraces right when we've inlined" can be dealt with by just de-opting. 23:23
timotimo aye 23:24
23:40 lue joined