00:46
Ven`` joined
|
|||
samcv | Final grant report now published cry.nu/grant-report/ | 00:50 | |
01:55
ilbot3 joined
02:58
Ven`` joined
|
|||
MasterDuke | samcv++ | 02:59 | |
yoleaux | 25 Sep 2017 09:56Z <cuonglm> MasterDuke: can you tell me where is the code for `-n` command line flags | ||
25 Sep 2017 10:55Z <jnthn> MasterDuke: I'm surprised join doesn't already know that trick! Yes, let's do that, it's far more general | |||
03:11
zakharyas joined
03:19
bisectable6 joined
03:43
Ven`` joined
04:07
coverable6 joined,
committable6 joined,
nativecallable6 joined
04:31
vendethiel- joined
04:32
geekosaur joined
05:37
domidumont joined
06:11
domidumont joined
06:50
brrt joined
07:01
leont joined
|
|||
brrt | good * #moarvm | 07:03 | |
lizmat | brrt o/ | 07:17 | |
brrt | ohai lizmat | 07:19 | |
thanks for the weekly :-) | |||
lizmat | you're welcome! | 07:22 | |
07:49
brrt joined
|
|||
lizmat | samcv++ : cry.nu/grant-report/ # dated 20 Sep, did I miss that for the P6W ??? :-( | 08:25 | |
nwc10 | if we can have point releases for MoarVM, Rakudo etc, can we have point releases for the weekly? :-) | 08:26 | |
lizmat | hehe... well, eh, at least now I don't have to worry what the main story is going to be next week | 08:28 | |
samcv | lizmat, no | 08:33 | |
i released it today | |||
lizmat | ok, *phew* :-) | ||
samcv | i should change the time to be accurate | 08:34 | |
ok i think it's updated now | |||
lizmat | :-) | 08:35 | |
jnthn | samcv++ # awesome work, great report :) | 09:27 | |
dogbert17 | jnthn: did you sample the foodtrucks this weekend? | 09:39 | |
jnthn | dogbert17: No. That would have been an excellent reason to have a stomach problem on the evening, but I ended up with it without them :P | 09:40 | |
Did make it to the national railway day event though | |||
dogbert17 | cool, was it a nice event? | 09:41 | |
jnthn | Saw the stream train. It was absolutely packed out, though, so we figured we'd take a ride another time :) | ||
But yeah, was nice :) | |||
dogbert17 remembers wanting to be an engineer when he was a kid | 09:44 | ||
let me know when you're well enough to tackle a mystery | 09:47 | ||
"nasty" stuff like 'Internal error: zeroed target thread ID in work pass' | 09:50 | ||
jnthn | Hm, that's the kind that a MVM_GC_DEBUG=1 or 2 and a small nursery can often narrow | 09:54 | |
dogbert17 | this happen in one of our favorite test files, albeit seldom, t/spec/S17-promise/nonblocking-await.t | 09:56 | |
jnthn | Ah, is that the one that was also hanging for some folks? | 09:57 | |
dogbert17 | yeah, want to check out a gist? | 09:58 | |
jnthn | Sure | 09:59 | |
dogbert17 | gist.github.com/dogbert17/ead3d659...9b12e41c0b | ||
jnthn | Ah, the hanging one was S17-supply/syntax.t | 10:00 | |
Is that with MVM_GC_DEBUG=1 or without? | |||
dogbert17 | that's the one making TimToady's life misearble :) | ||
without | |||
can try with it if you want | 10:01 | ||
jnthn | Yeah, please do | ||
dogbert17 | ok | 10:02 | |
jnthn | Darn, it seems it was my supply-related changes that have regressed one of the cro-websocket tests | ||
nwc10 | it has hung for me too at times | ||
jnthn wonders if this hang and the hang in the cro-websocket tests are related | 10:03 | ||
ooh, I get it on my home machine | 10:04 | ||
dogbert17 | yay | ||
nwc10 | and at this point jnthn declares "lunchtime!" and exits stage left | ||
jnthn | Not feeling up to going to the office at least has some benefit :P | ||
And yeah, it's nomming CPU and memory | 10:05 | ||
dogbert17 | being at home has its perks :) | ||
jnthn | Extracting the test from its test file also hangs | 10:06 | |
Anyway, that it works out on my fast machine and hangs reliably in my slower VM makes it likely it's a race | 10:07 | ||
Hmm, where's that debug thing I made last week... | 10:11 | ||
Well, it confirms that timer events file up | 10:19 | ||
Doesn't say why | |||
As in, doesn't say something else is holding the lock for a long time | 10:20 | ||
dogbert17 | I noticed something else yesterday, if I decrease the size of the nursery I can get a couple of lock related tests to hang. Nursery size like 32768 * 8 | 10:34 | |
it would be a simple task to break into the hanging programs with gdb :) I did that yesterday with the annoying syntax.t test | 10:35 | ||
wrt to the syntax.t test each time the program "hanged" and I used gdb one of the thread was always at this line | 10:39 | ||
MVM_gc_root_add_frame_roots_to_worklist (tc=0xb26a6c08, worklist=0xa8ccf050, cur_frame=0x9d699e20) at src/gc/roots.c:366 | |||
but perhaps that is to be expected ? | 10:40 | ||
timotimo | "perf record" on the hanging test also says the time spent in gc_root_add_* stuff is a whole lot | 10:44 | |
dogbert17 | timotimo: it looks like this in gdb, gist.github.com/dogbert17/ca7ac0e2...096eaa4beb | 10:46 | |
timotimo | i'm not sure if there's any frame that has a whole lot of locals in it | 10:47 | |
or if there's just a whole lot of frames on the moarvm stack. which i don't think there would be | |||
digital cookies for someone who builds an extension or userscript that lets me go from a line of code that contains a filename and line number (including path) directly to the right github repository and file in it | 10:49 | ||
jnthn | I think I've found a problem in the Async::Lock queue-on-recurse mechanism | 10:57 | |
timotimo | cool! | ||
jnthn | Uh, Lock::Async | ||
dogbert17 | cooool :) | ||
moritz | jnthn: that sounds like the kind of thing where you don't want to have problems :-) | ||
timotimo | that could indeed be what makes the supply syntax test hang sometimes | 11:00 | |
jnthn | It's possible, yeah | ||
I think the issue is here: | 11:03 | ||
elsif self!on-recursion-list() { | |||
# Lock is already held on the stack, so we're recursing. Queue. | |||
$try-acquire.then({ | |||
LEAVE self.unlock(); | |||
self!run-with-updated-recursion-list(&code); | |||
}); | |||
} | |||
It sticks a .then on the Promise that is kept when the async lock is available | |||
timotimo | there could already be thens on there? | 11:05 | |
jnthn | Yeah, if two things want to queue up there, then it sticks both onto that Promise. The .thens will fire. Both now think they have the lock, run code as if they have it, and then both go to unlock it. | 11:06 | |
timotimo | but shouldn't that throw the "can't unlock when not locked" error? or does something else quickly enough jump in and hold the lock? | ||
jnthn | Yeah, I'm curious why I don't see that | 11:07 | |
timotimo | so every time you recurse you add another simultaneous track of pieces that think they can have the lock | ||
jnthn | Which makes we wonder if this really is the problem in question | ||
timotimo | you could try having an "id" for every locking phase | ||
and make sure the locks and unlocks match up their ids | |||
jnthn | Well, the easy fix is just to .then and re-contend | 11:10 | |
Doesn't help, though :( | 11:15 | ||
timotimo | dang | ||
jnthn | Which, given we didn't see the expected double-unlock error, isn't entirely surprising | ||
m: my $s = Supplier.new; react { whenever $s { .say }; whenever Promise.in(1) { $s.emit("a"); $s.emit("b"); $s.emit("c"); $s.done() } } | 11:16 | ||
camelia | a b c |
||
jnthn | Hm, I kinda expected that to trip over it | ||
m: my $s = Supplier.new; react { whenever $s { .say sleep 1; say now; }; whenever Promise.in(1) { $s.emit("a"); $s.emit("b"); $s.emit("c"); $s.done() } } | 11:17 | ||
camelia | ===SORRY!=== Error while compiling <tmp> Two terms in a row at <tmp>:1 ------> Supplier.new; react { whenever $s { .sayā sleep 1; say now; }; whenever Promise.i expecting any of: infix infix stopper ā¦ |
||
jnthn | m: my $s = Supplier.new; react { whenever $s { .say; sleep 1; say now; }; whenever Promise.in(1) { $s.emit("a"); $s.emit("b"); $s.emit("c"); $s.done() } } | ||
camelia | a Instant:1506424678.071537 b Instant:1506424679.075984 c Instant:1506424680.077176 |
||
jnthn | Hm, and I'd have expected that to have issues, but it works | 11:18 | |
m: my $s = Supplier.new; await start react { whenever $s { .say; sleep 1; say now; }; whenever Promise.in(1) { $s.emit("a"); $s.emit("b"); $s.emit("c"); $s.done() } } | 11:19 | ||
camelia | a Instant:1506424799.608883 b Instant:1506424800.611684 c Instant:1506424801.612954 |
||
timotimo | m: my $s = Supplier.new; await start react { whenever $s { .say; sleep 1; say now - $*INIT-INSTANT; }; whenever Promise.in(1) { $s.emit("a"); $s.emit("b"); $s.emit("c"); $s.done() } } | ||
camelia | a 2.12159250 b 3.1251021 c 4.1262031 |
||
jnthn | The first line can also be my $s = Supply.interval(0.001).head(0) and it still hangs | 11:27 | |
Ah, though head is implemented using a supply block :) | |||
So it's not actually a golfing | 11:28 | ||
timotimo | how come .head(0) actually does anything at all? | ||
dogbert17 | jnthn: what did you get for lunch? | 11:50 | |
dogbert17 hasn't eaten yet :( | 11:51 | ||
jnthn | Still eating simple stuff for today | 11:54 | |
Had some mashed potato earlier, will have some vegetable soup soon :) | 11:55 | ||
11:55
brrt joined
|
|||
jnthn | Still no particularly good leads on the bug | 11:55 | |
Instrumented the supply block guts some, but they all look to be behaving well | 11:56 | ||
11:57
patrickz joined
11:58
zakharyas joined
|
|||
lizmat | jnthn: would it make sense to have all BUILDALL (only) methods to share the same Any:D: signature ? | 11:59 | |
timotimo | hm, not Mu? | 12:00 | |
lizmat | no, because the default .new is in Any, not Mu | 12:03 | |
timotimo: so you're saying that would make sense ? | 12:04 | ||
timotimo | haven't spent enough thought on it | ||
currently puzzling over the runaway quote thing | |||
lizmat | it would effectively bring the number of Signature objects for BUILDALL down N to 1 (like it is now) | 12:05 | |
jnthn | Would probably work out | 12:06 | |
lizmat | ok, lemme try :-) | ||
jnthn | It seems that we're never unlocking an async lock | 12:10 | |
Not clear where that's going wrong jsut yet | |||
12:15
brrt1 joined
12:27
brrt joined
|
|||
lizmat | do we have anything like compile constants in nqp that I could let depend on an ENV variable at compile time ? | 12:35 | |
dogbert17 | jnthn: finally managed to get a 'Adding pointer %p to past fromspace to GC worklist' when running t/spec/S17-promise/nonblocking-await.t. Gist gist.github.com/dogbert17/f8cb9974...da44ef40da | 12:42 | |
jnthn | dogbert17: Ah, good that we can catch it under that | 12:51 | |
Though, hmm, that doesn't narrow it down a load | |||
lizmat | jnthn: it looks like auto-generating a BUILDALL is going to break some tests that assume BUILDALL lives in Any | ||
timotimo | yeah, frame roots :\ | ||
jnthn | lizmat: Which tests? | 12:52 | |
lizmat | S12-introspection/methods.t 1-3, 9, 15, 20, 22-24, 42, 46, 57 | 12:53 | |
jnthn | oh, interesting | ||
m: class C { submethod m() { } }; say C.^methods | 12:54 | ||
camelia | (m) | ||
lizmat | ah, it should be a submethod is what you're saying :-) | ||
jnthn | Oh, I thought you'd done it that way already ;) | 12:55 | |
It should but it won't help :) | |||
Since .^methods includes those | |||
lizmat | I guess we can simplify the BUILDALL to a generic one that just returns self if there are no elements in the BUILDPLAN | 12:56 | |
jnthn: not sure it would make sense to make it a submethod though | 12:57 | ||
if a subclass only adds methods, shouldn't they be able to share the same BUILDPLAN ? | 12:58 | ||
12:58
brrt joined
|
|||
lizmat | especially if it has a Any:D: invocant ? | 12:58 | |
s/BUILDPLAN/BUILDALL/ ? | |||
jnthn | What it the subclass uses a custom metaclass that doesn't trigger BUILDALL generation? | 13:01 | |
lizmat | is that possible ? | ||
jnthn | Yes | ||
I think submethod is safer | |||
lizmat | so all the "but" cases would just get a new BUILDALL method | 13:02 | |
dogbert17 reboot & | 13:25 | ||
13:31
dogbert17 joined
|
|||
timotimo | brrt, zoffix found a change to the optimizer that causes a segfault, but only if the jit is enabled. somehow a null pointer gets into the first argument of the reprconv getarg function | 13:41 | |
hm, may be a difference between how the interp.c handles the object being null and how the reprconv does it | 13:42 | ||
er, sorry, get_attr_o of course | |||
the interp just does IS_CONCRETE, which also segfaults on a null pointer | 13:43 | ||
oh | |||
it's calling that on self, but this is a sub, not a method | |||
dogbert17 | this syntax.t code is interesting, if I change 'await do for ^4' to 'await do for ^2' the program consistently take 1s to execute, if I increase it to 'await do for ^3' is often takes 25s to execute but once in a blue moon this also takes 1s | 13:46 | |
dogbert17 (has four cores in his vm) | 13:47 | ||
timotimo | aye | ||
i see something similar, getting that number down gets me to pretty much always succeed it | |||
what happens on your machine if you give .interval a second argument, like 0.01? | |||
dogbert17 | will try | ||
with 0.01, ^3 takes 1.7s and ^4 takes ~2s | 13:49 | ||
timotimo | but it always succeeds, right? | ||
dogbert17 | yep | 13:50 | |
even ^5 succeeds in short order | |||
0.005 also works quite well, is there some queue which gets filled up somewhere? | 13:51 | ||
jnthn | So far I've traced it down to an await on the async lock never coming back | ||
Even though the lock is released | 13:52 | ||
By now am down in the awatier guts | |||
[Coke] | btw, I have some Proc::Async code that hangs if I start more than X promises simultaneously (on 2017.09 release) github.com/perl6/doc/blob/master/xt/aspell.t (check out docs, then TEST_THREADS=10 perl6 xt/aspell.t triggers it here. have to have aspell and awk installed. (need to get rid of the awk requirement there.) | 13:54 | |
dogbert17 | strace just says futex(0xb4a3fbc, FUTEX_WAIT_PRIVATE, 1, NULL | 13:57 | |
[Coke] | (looks like it works with 6, then hangs with 7). happy to provide more diagnostics if needed. | ||
(ah, no, six can hang too, just not up front.) | 13:59 | ||
Geth | MoarVM: c40be90d36 | (Timo Paulssen)++ | src/jit/x64/emit.dasc jit: getlex_o shall give VNMull rather than null you can trigger that in nqp by using self in a sub that doesn't have a self available from outside. |
14:02 | |
dogbert17 | timotimo: when I run the syntax program with ^4 the program seems to start 8 threads, after a number of seconds that increases to 9 and an equal amount of time later it goes up to 10. A few seconds after that the code completes | 14:31 | |
jnthn | [Coke]: The new scheduler was merged shortly after 2017.09, and may well resolve the issue | 14:32 | |
(Or at least, make it work for longer...eventually it's probably a job for 6.d.PREVIEW) | |||
[Coke] | jnthn: doh, forgot that came in after. updating! | 14:38 | |
jnthn | It's looking like, after all my supply bug hunting, it may be a scheduler bug that I'm looking at | 15:08 | |
I eventually chased it down to the unlock promise not being scheduled | |||
15:09
AlexDaniel joined
|
|||
dogbert17 | jnthn++, that was a tough one | 15:09 | |
jnthn | And I think I can see what's going on, too | ||
The timer thread is busy pushing new work | 15:10 | ||
So we're eating resources | |||
dogbert17 | is that the 'memory leak'? | ||
jnthn | "Leak" is just ever-growing work queue | ||
On my 12-core machine at the office, it happily spawns up to 12 threads before it starts thinking if it really should add any more | |||
On this 4-core VM that point comes far sooner | 15:11 | ||
dogbert17 | so that's why it was difficult to reproduce at work | ||
jnthn | Right | 15:12 | |
Or just impossible | |||
On that machine | |||
:) | |||
It's using blocking react in this test file | |||
That's why this also goes away if the loop is for ^2 or something in that test also | |||
Anyway, the blocking react really blocks a bunch of threads | |||
The progress elsewhere confuses the schduler into thinking everything is looking great | 15:13 | ||
*scheduler | |||
dogbert17 | so it does nothing? | ||
jnthn | So it doesn't add more general workers | ||
Right | |||
It should probably also look at how long since something in the queue made progress. | 15:14 | ||
And use that as a "we might be deadlocked" heuristic also | |||
dogbert17 | sounds like a clever move | 15:15 | |
jnthn | Yeah, want a break, then will look at that. | ||
dogbert17 | so the unluck promise wasn't being scheduled because there was no bvious reason to do so ? | 15:16 | |
*obvious | |||
[Coke] | jnthn: that upgrade definitely helped. (I should also be funneling all these promises through something that is concurrenet safe rather than an array) | 15:29 | |
15:39
AlexDaniel joined
15:42
brrt joined
|
|||
jnthn | dogbert17: yeah, pretty much that | 15:48 | |
16:01
robertle joined
16:23
leont joined
|
|||
brrt | hi #moarvm | 16:26 | |
jnthn | o/ brrt | 16:27 | |
brrt | why, and how, does my tag still show moarvm 2017.8 after merging with origin/master | ||
\o jnthn | |||
that's because that's what git describe is giving me | 16:28 | ||
oh, because of rebasing | 16:29 | ||
my bad | |||
16:32
MasterDuke joined
|
|||
MasterDuke | jnthn: fyi, github.com/MoarVM/MoarVM/pull/705 now optimizes copying strands and when only one element is in the list to join. no hurry, just getting a ping in | 16:37 | |
yoleaux | 15:46Z <AlexDaniel> MasterDuke: did we have a ticket for ļ½¢say āfoo"; my $x = 42; say $xļ½£ ? | ||
16:44
domidumont joined
17:13
dalek joined
17:19
robertle joined
17:42
SourceBaby joined
18:17
squashable6 joined
18:25
quotable6 joined,
committable6 joined,
unicodable6 joined,
coverable6 joined,
bisectable6 joined,
bloatable6 joined,
nativecallable6 joined,
benchable6 joined,
releasable6 joined,
greppable6 joined,
evalable6 joined,
squashable6 joined,
statisfiable6 joined
18:35
Ven`` joined
19:09
lizmat joined
19:34
TimToady joined
19:46
Ven`` joined
|
|||
dogbert2 | MoarVM Panic caught when running t/spec/S14-roles/mixin.t, gist.github.com/dogbert17/696587a8...9e9f01447e | 19:48 | |
timotimo | oh, huh, the mixim cache again? | 19:49 | |
dogbert2 | is there such a beast? | ||
timotimo | hm, maybe i'm thinking of the parameterization cache | 19:51 | |
my code to squish phi argument lists in spesh causes some kind of infinite loop or something in the very last step of rakudo installation %) | 19:52 | ||
dogbert2 | can you break into the process with gdb and see what's going on? | 19:54 | |
timotimo | i could, but maybe i'll put the squishing into the output instead %) | 19:57 | |
it's not actually an optimization per se, as phi nodes don't appear in the generated code at all | |||
dogbert2 | the old println trick :) | ||
timotimo | well, how fun is it to look at this (screenshot upcoming) | 19:58 | |
i.imgur.com/9mqMta9.png | 19:59 | ||
and this is a very tame case | |||
i.imgur.com/Q3l5k16.png | 20:02 | ||
dogbert2 | looks moderately fun :) | ||
timotimo | hum. graph_spesh relies on a MAST/Ops.p6 module that apparently no longer gets written while building moar | 20:13 | |
the file i have locally is from november 2014 | |||
samcv | good * | 20:17 | |
timotimo | heyo samcv | ||
samcv | heyo | ||
timotimo | Ops.p6 doesn't show up in any commit diff of all of moarvm | ||
ilmari | not MAST/Ops.nqp? | 20:22 | |
timotimo | nope, a p6version of that | ||
um, huh | 20:28 | ||
m( it's under tools/lib | 20:29 | ||
so why is this sp_getlex_ins without operands in the graph drawing | 20:31 | ||
oh, and an sp_decont likewise, weird | 20:34 | ||
must be because the Ops.pm file was out of date i guess | 20:36 | ||
hm, i put that file into gitignore | |||
well, hardly anybody besides me uses that tool anyway, so ... :) | 20:47 | ||
it also gets very confused by multiple annotations in a row | 20:49 | ||
all in all, a grant well done | 23:28 | ||
23:56
MasterDuke joined
|