02:48
ilbot3 joined
|
|||
MasterDuke | .tell jnthn i applied nine's patch and then changed the conditional to `if (bits > 63 || (!sign && bits == 63)) {`, but that broke a bunch of tests. i looked at some of the breaking tests in S02-types/int-uint.t and they seemed a little suspect, but this is really pushing the boundaries of stuff i'm confident in | 04:24 | |
yoleaux2 | MasterDuke: I'll pass your message to jnthn. | ||
MasterDuke | .tell jnthn i then got distracted by the spesh bug i/Zoffix++ found with EVAL and div, so i'm not sure i'll come up with a solution anytime soon | 04:28 | |
yoleaux2 | MasterDuke: I'll pass your message to jnthn. | ||
MasterDuke | .tell jnthn fyi, spesh/eval/div discussion starts around here irclog.perlgeek.de/perl6-dev/2017-...i_14168641 | 04:31 | |
yoleaux2 | MasterDuke: I'll pass your message to jnthn. | ||
06:48
ggoebel joined
08:34
zakharyas joined
08:44
pyrimidi_ joined
08:53
brrt joined
|
|||
brrt | good *, #moarvm | 08:53 | |
so, long story short; i'm doing cycle breaking wrong | 09:02 | ||
i think, i can better do it with a stack | |||
(what cycles are you talking about, brrt? long story, good for a blog post :-)) | 09:03 | ||
09:08
domidumont joined
|
|||
jnthn | Bonus points if you include sample code formatted to look like a bicycle :P | 09:43 | |
yoleaux2 | 04:24Z <MasterDuke> jnthn: i applied nine's patch and then changed the conditional to `if (bits > 63 || (!sign && bits == 63)) {`, but that broke a bunch of tests. i looked at some of the breaking tests in S02-types/int-uint.t and they seemed a little suspect, but this is really pushing the boundaries of stuff i'm confident in | ||
04:28Z <MasterDuke> jnthn: i then got distracted by the spesh bug i/Zoffix++ found with EVAL and div, so i'm not sure i'll come up with a solution anytime soon | |||
04:31Z <MasterDuke> jnthn: fyi, spesh/eval/div discussion starts around here irclog.perlgeek.de/perl6-dev/2017-...i_14168641 | |||
brrt wonders how many characters that would require at minimum | 09:56 | ||
i've got something | 09:58 | ||
jnthn | probablydance.com/2017/02/26/i-wro...hashtable/ # long read, but maybe interesting :) | ||
brrt | +_-_ | ||
O -O | |||
jnthn | :D | ||
Next question: is it valid BF? :) | |||
brrt | (bf?) | 09:59 | |
jnthn | Brainf**k | ||
brrt | ah, i see | ||
no idea | |||
jnthn | I don't think so, though, 'cus O surely isn't in there :) | ||
brrt | that's unfortunate :-) | 10:00 | |
dogbert11 | o/ jnthn how is your brane today, have you had any coffee? | ||
jnthn | Currently drinking coffee | ||
dogbert11 | :) | ||
jnthn | And looking at what I've got left to do from Friday's hacking :) | 10:01 | |
dogbert11 | ah, the async lib stuff | ||
jnthn | aye | ||
dogbert11 | I only have boring gists | ||
but this is quite short, this always turns up when running a p6 program, is it anything to worry about? gist.github.com/dogbert17/0200459a...bf1ed2f6f1 | 10:02 | ||
and if the above isn't enough I have another question this time regarding a roast test file, i.e. github.com/perl6/roast/blob/master...eserving.t | 10:22 | ||
the last test fails from time to time. I'm simply wondering if there might be some kind of race condition wrt writing to '@closings' on line 16? | 10:24 | ||
brrt | <scratchpad> | 10:44 | |
so, what we can do is maintain a stack for the cycles | |||
traverse the reverse map and push the registers we need to process in a cycle | 10:45 | ||
then swap the start register value to a scratch value, and process the stack in lifo order (i.e. reverse the cycle), inserting swap registers | 10:46 | ||
then place the cycle-starter into it's destination afterwards | 10:47 | ||
e.g. suppose we have cycle a -> b -> c -> a, we loop while (reverse_map[cursor] != start_point) { cycle_stack[cycle_stack_top++] = cursor; cursor = reverse_map[cursor] } | 10:48 | ||
which would build a, b, but not c | |||
so we need a slightly different ending criterium | |||
jnthn back | 10:51 | ||
Power outage. | |||
dogbert11: ooh, yes, looks like | 10:54 | ||
nwc10 | jnthn: interesting. Now, *I* am not volunteering (at least, not this calendar year) to transcribe that to C (well, the subset that "we" need) | 11:02 | |
but I hope someone looks further into it | |||
jnthn | :) | 11:05 | |
Yes, I do drop stuff here now and then in hope of provoking somebody into writing code :-) | |||
brrt | heheeh | 11:18 | |
anyway, i figured out my solution ove rlunch | 11:19 | ||
*over lunch | |||
that is that in my example, 'a' needn't be on the stack at all, since it is handled specially | |||
b and c need to be on the stack. | |||
</scratchpad> | 11:20 | ||
11:55
domidumont joined
|
|||
dogbert11 | power outage, uh oh, usually means that the coffee machine is broken as well | 12:27 | |
jnthn | Yeah, thankfully I'd just made one before it :) | 12:33 | |
12:53
domidumont joined
|
|||
brrt wonders what would happen if all syscall except for one (wait()) were asynchronous and just stashed integers into a buffer | 13:03 | ||
moritz | brrt: error handling would be "fun" | 13:04 | |
brrt | (also, you'd have to emulate all the blocking syscalls with a stash+wait(), which would convert your optimized, register-argument syscall into a random-memory-buffer-syscall, and they'd be slower) | ||
yeah, that too | |||
but you could write microkernels really nice that way | |||
(in other words, what if it's just UNIX that sucks?) | 13:07 | ||
s/sucks/is not optimized for 2017/ | |||
brrt is reading AnyEvent code andā¦ all of it would just be so much nicer in perl6 | 13:10 | ||
13:55
SmokeMachine joined
14:11
lucasb joined
14:29
pyrimidine joined
|
|||
dogbert11 | jnthn: FYI t/spec/S17-promise/nonblocking-await.t has a tendency to hang on the third test if the nursery is small | 14:36 | |
14:37
lucasb left
|
|||
dogbert11 | I suspect this test 'Hundreds of time-based Promises awaited completes correctly' as being the culprit | 14:50 | |
gdb says something about '79 __atomic_thread_fence(__ATOMIC_SEQ_CST);' | 14:52 | ||
#0 AO_nop_full () at 3rdparty/libatomic_ops/src/atomic_ops/sysdeps/gcc/generic.h:79 | |||
#1 MVM_gc_enter_from_allocator (tc=tc@entry=0x86dc450) at src/gc/orchestrate.c:409 | |||
14:55
Ven joined
|
|||
timotimo | that sounds like it's trying to start a gc run | 14:55 | |
but other threads aren't cooperating | |||
i.e. it's waiting forever for other threads to say "yup, i'm ready" | 14:56 | ||
dogbert11 | aha | ||
timotimo | it'd be interesting to see what the other threads are doing at that moment | ||
can you "thread apply all bt"? | |||
dogbert11 | sec | ||
gist.github.com/dogbert17/5d29fee3...c5cf6fb132 | 14:58 | ||
timotimo | oh, heh. | ||
can you re-run with JIT disabled? | |||
dogbert11 | do I have JIT on 32 bit? | 14:59 | |
brrt | no, you should not | ||
timotimo | you normally do not | ||
unless you've been hiding something from us :) | |||
dogbert11 | :-) | ||
brrt | (the 'fastest hash table' article is very nice, jnthn++) | ||
timotimo | so why is the backtrace so shite for threads 2 through 6? | ||
dogbert11 | moar is built with optimizations though | ||
brrt | hmm, could you try and replicate without optimization | 15:00 | |
timotimo | like ... frame pointer omission? | ||
dogbert11 | can do, I also attached gdb after the hang | ||
brrt | FPO seems like a likely candidate yes | 15:01 | |
timotimo | attaching it afterwards should be okay | ||
brrt | yeah, that's no problem usually | ||
dogbert11 | rebuilding ... | ||
15:02
lizmat joined
|
|||
dogbert11 | done, refresh the gist | 15:03 | |
brrt | okay, that looks interesting | 15:04 | |
dogbert11 | thread 5 seems to be involved in some GC shenanigans as well | 15:13 | |
timotimo | it doesn't help that the line number in eventloop_queue_work is just the start of the { } inside the MVMROOT | 15:25 | |
>:( | |||
and that the interesting frame is just "??" | 15:26 | ||
i wonder if get_or_vivify_loop has trouble? | |||
okay imagine this scenario: | |||
dogbert11 | 'Backtrace stopped: previous frame inner to this frame (corrupt stack?) | 15:27 | |
that sounds a bit ominous | |||
timotimo | two threads try to vivify the loop at the same time, so they block on the mutex_event_loop_start | ||
no, i mean | |||
one blocks, the other proceeds into the critical section | |||
but inside the critical section it has to GC | |||
i think we just need to mark the thread as blocked inside get_or_vivify_loop | |||
i'll whip up a patch | |||
dogbert11 | ++timotimo | 15:28 | |
timotimo | (except i see no reason for the eventloop to not exist already by that point) | ||
gist.github.com/timo/66551554fd1c5...d04fab155a - try this please | 15:29 | ||
dogbert11 | will do, gimme a few minutes ... | 15:31 | |
15:36
brrt joined
|
|||
dogbert11 | timotimo: fail, refresh the gist again | 15:41 | |
timotimo | huh | 15:42 | |
dogbert11 | should I double check if I applied your patch correctly | 15:44 | |
timotimo | i'm just surprised it's in serialization_demand_object now | ||
dogbert11 | it worked the first three times and then hanged | 15:45 | |
timotimo | mhm | ||
what if you do the same thing i did in the patch, except around serialization.c:2720? | |||
15:45
pyrimidine joined
|
|||
dogbert11 | will try | 15:47 | |
MVMSerializationReader *sr = sc->body->sr; | 15:49 | ||
MVM_gc_mark_thread_blocked(tc); | |||
MVM_reentrantmutex_lock(tc, (MVMReentrantMutex *)sc->body->mutex); | |||
MVM_gc_mark_thread_unblocked(tc); | |||
timotimo: my change must be incorrect, got 'MoarVM panic: Invalid GC status observed while blocking thread; aborting' | 15:51 | ||
jnthn | MVM_reentrantmutex_lock igself calls MVM_gc_mark_thread_blocked, I believe | 15:53 | |
*itself | |||
dogbert11 | have you backlogged what we're trying to do? | 15:55 | |
timotimo | oh! | 15:56 | |
dogbert11 removes the second fix in the meantime :) | |||
so, there's still a problem then | 16:00 | ||
16:08
pyrimidine joined
16:27
lizmat_ joined
16:31
Ven joined
16:33
lizmat joined
17:02
Ven joined
17:57
lizmat joined
18:01
Ven joined
18:21
Ven joined
18:36
pyrimidine joined
18:41
Ven joined
18:44
Ven_ joined
19:18
pyrimidine joined
19:21
lizmat joined
|
|||
dogbert17 | timotimo: looks as if we got stuck with t/spec/S17-promise/nonblocking-await.t. Should I report it? | 19:22 | |
timotimo | yeah, please do | 19:51 | |
samcv | morning all | ||
20:01
Ven joined
|
|||
jnthn | o/, samcv | 20:05 | |
dogbert17: Will have time to look into some of those issues tomorrow | |||
dogbert17 | jnthn, timotimo: github.com/MoarVM/MoarVM/issues/543 | 20:11 | |
jnthn | Hm, interesting one | 20:13 | |
dogbert17 | haven't seen it fail when the nursery is at its default size | 20:14 | |
20:17
pyrimidine joined
|
|||
jnthn | Suspect it can happen, but just unlikely to | 20:18 | |
Which is why we nursery stress :) | |||
dogbert17 | indeed :) | 20:19 | |
20:32
puddu joined
|
|||
puddu | .tell bttr UNIX is not optimized for 2017? What if all syscalls would be synchronous a part of one, clone, which is also synchronous but let you implement all kind of multiprocessing you want? | 20:35 | |
yoleaux2 | puddu: I'll pass your message to bttr. | ||
21:38
agentzh joined
22:03
agentzh joined
22:14
pyrimidine joined
22:21
pyrimidine joined
22:59
pyrimidine joined
|