00:02 Ben_Goldberg joined 00:04 arnsholt_ joined 00:21 dalek joined 01:06 cognominal__ joined 01:08 moritz joined 01:09 rurban1 joined 01:10 rurban2 joined 02:05 rurban1 joined 03:16 FROGGS joined 04:20 ssutch joined 05:15 FROGGS joined 05:26 FROGGS joined, ssutch joined 06:13 FROGGS joined 06:50 FROGGS joined 07:37 lizmat joined 07:45 woolfy left 07:48 FROGGS joined 09:41 ssutch joined
FROGGS FYI: 09:56
stage parse rakudo@parrot: 197.062s
stage parse rakudo@moar: 359.375s
stage parse rakudo@optimized moar: 197.516s
that is on a Windows 7 x64
(since I am unable to use an optimized moar on linux for rakudo atm)
nwc10 FROGGS: what goes wrong with an optimised Moar on Linux? 10:03
and that's 197s both for optimised parrot and optimised Moar on Win7 x86_64? ie they are currently the same speed? 10:04
FROGGS nwc10: yes, optimized parrot
nwc10: there seems to be a gc bug that is showing up 10:05
I tried to hunt it down, but without any luck 10:08
10:15 lizmat joined
jnthn FROGGS: You're saying that optimized Moar does stage parse in same time as optimized Parrot? When I've still got some obvious performance bugs showing up in the profile? Nice :) 10:16
And that's *before* doing the nice type specialization stuff :) 10:17
FROGGS yes, I actually looked twice to confirm that it bailed out afterwards about something.moarvm :o)
jnthn: any advice how I should try to hunt down the gc bug? 10:18
jnthn FROGGS: Look down the stack trace and see what we had just done before calling process_worklist 10:23
That is, did we just push temp roots and are working on thsoe? Or something else? etc.
That *may* help
You can also set a breakpoint on the fromspace check panic and see what kind of thing it is 10:24
FROGGS k, thanks
jnthn back to teachign & 10:25
10:40 tgt joined
nwc10 another really intensive way to nail these sort of things is to rebuild each C object file (in this case of moarvm) in turn with optimisaiton, and see which one causes the GC bug to appear 11:15
and then spit it apart, and build function by function with optimisation
FROGGS hmmm, that is a nice idea 11:16
nwc10 but that's really only the fallback when "try to be smart" hasn't worked
and it may be that more than one needs to be built optimised
FROGGS true
nwc10 I see this (hope the paste isn't messed up): 11:30
Stage start : 0.000
Stage parse : 235.331Stage syntaxcheck: 0.000Stage ast : 0.000Bytecode validation error at offset 254, instruction 35:extension op 'p6trialbind' not registered
oh, yes, so it is 11:31
that's with gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
at (I think) -O3
11:39 cognominal__ joined 12:51 benabik joined
FROGGS gah, I can't even set breakpoints using the optimized build :o( 13:01
arnsholt Have you checked that it's built with debugging info? 13:02
-g should be in the CFLAGS 13:03
FROGGS ahh!
arnsholt: thanks! I'll try
arnsholt++ 13:04
\o/
p *item 13:07
$6 = {owner = 0, flags = 0, size = 56, forwarder = 0x0, sc = 0x0}
arnsholt If you're using GCC, I recommend using -g3 13:09
FROGGS k, what does this do?
arnsholt Then macros are stored in the debugging info
FROGGS k
arnsholt So that GDB understands what macros mean 13:10
In macroheavy code, it's really nice
FROGGS yeah, absolutely
but... what should I do now? I had thought that this item keeps a pointer to an MVMObject or so... 13:11
arnsholt That's harder =) 13:15
But it looks like it's not fully initialised, given the owner and sc being NULL
FROGGS "ownder is 0 if there is no held mutex" 13:16
owner*
/* Pointer to the serialization context this collectable lives in, if any. */
MVMSerializationContext *sc;
so, seems valid
can I dump these 56 bytes somehow? 13:17
ohh, I think I know 13:18
hmmm, not very helpful 13:20
jnthn 0 for owner and SC is fine 13:22
The flags are more interesting
FROGGS so it is an mvmobject?
jnthn 0 is actually a valid flag value.
And yeah, it would be if that's really right
FROGGS yeah
jnthn so you can try casting to (MVMObject *)
And looking at ->st
FROGGS ohh
jnthn If that is valid, look under REPR and you can see what kind of representation the object has. 13:23
FROGGS p *(*(MVMObject *)item)->st
$10 = {header = {owner = 0, flags = 42, size = 168, forwarder = 0x1a8ad80, sc = 0x1eddf10}, REPR = 0x7ffff7dd1060 <this_repr>, REPR_data = 0x4f121e0, size = 56, HOW = 0x20b4330,
WHAT = 0x1aa03a0, method_cache = 0x0, vtable = 0x0, type_check_cache = 0x0, vtable_length = 0, type_check_cache_length = 0, mode_flags = 0, type_cache_id = 0,
invoke = 0x7ffff7a19bd0 <MVM_6model_invoke_default>, container_spec = 0x0, container_data = 0x0, invocation_spec = 0x0, boolification_spec = 0x1fc1f00, WHO = 0x7ffff6a323b0,
hll_owner = 0x1eb2540, hll_role = 0}
name = 0x7ffff7a60dad "P6opaque" 13:24
ID = 5
jnthn: what is MVMuint16 mi; ? 13:56
13:57 colomon joined
FROGGS can I peek&poke it somehow else to get more information? 14:09
timotimo good day, mister! i can tell you're in need of anticipation and conjecture at extremely affordable prices! 14:10
FROGGS: can i interest you in the desire to find out what is in this struct? 14:11
so long as you never find out, it could be anything!
we guarantee that whatever you expect to be in the struct is probably more interesting than what is actually inside.
FROGGS huh? 14:17
ohh dear, when I insert say statements in m-BOOTSTRAP.nqp, the error goes away >.< 14:24
hoelzro I had a bug of that variety last week! 14:25
turns out I was reading from a socket with O_NONBLOCK on and no data was coming through 14:26
FROGGS well, I hope that is not the case here :o)
hoelzro indeed 14:27
jnthn FROGGS: mi = multiple inheritance 14:42
FROGGS ahh, it is true btw
hoelzro what is?
FROGGS mi of that object which explodes in the gc 14:43
jnthn oh... 14:44
wtf, where do we use MI in NQP...
Or bootstrap...
FROGGS I think it happens in the huge begin block in m-BOOTSRAP.nqp, line 569 to 2229
because I can say() something to the last line of that block, but the say() right outside of it explodes 14:45
(weirdly)
jnthn FROGGS: Well, you've done enough changes by then to throw off all kinds...
FROGGS: Anyway, look down the stack
You should see a call to process_worklist? 14:46
FROGGS I see my shoes
hold on
yes 14:47
#3
and I see MVM_args_get_pos_obj, for MoarVM's HEAD^ there showed up MVM_args_slurpy_positional 14:49
so I guess it has something to do with positional args
jnthn Well, what is immediately above process_worklist? 14:50
FROGGS #2 MVM_panic
or do you mean #4? 14:51
jnthn no, that's below :P
FROGGS MVM_gc_collect
:o)
jnthn Right, taht one :)
If you have a line number for where you are in there, take a look
It calls process_worklist many times...
And there's a comment above each saying what it's doing
What comment is above where it fails for you? 14:52
FROGGS lie 73
jnthn cake 73
FROGGS /* Add permanent roots and process them; only one thread will do
* this, since they are instance-wide. */
jnthn o.O
14:52 jnap joined
jnthn OK, another question 14:53
look at tc->gc_seq_number or similar
Can you see a conditional breakpoint at the start of MVM_gc_collect that will be hit on that number - 1?
And get the stack trace for the *previous* GC run?
FROGGS do you mean tc->gc_work_count by any chance? 14:57
jnthn no 14:58
FROGGS ahh
jnthn should be some kind of sequence number...
FROGGS it hangs of ->instance
jnthn oh
right, it's not thread-specific
FROGGS 170
okay...
jnthn :) 14:59
FROGGS break /home/froggs/dev/MoarVM/src/gc/collect.c:72 if tc->instance->gc_seq_number == 169 15:01
hit that now
and I see the bt
jnthn what's le bt? 15:02
FROGGS gist.github.com/FROGGS/d21a4bdc2753deff984e
jnthn wonders what's at interp.c:2289 15:07
jnthn looks on github...
(on classrom computer..> :))
FROGGS MVMObject *box = REPR(type)->allocate(tc, STABLE(type)); 15:08
in box_s
it should MVMROOT type, right?
same for box_i and _n
timotimo you fixed it? :) 15:09
FROGGS let's see if that helps :o)
jnthn no, 'cus it never mentions type again after the call that can allocate 15:10
FROGGS meh
jnthn If box_s was to blame, I kinda suspect we'd be seeing a lot more issues too... 15:11
The fact it comes from a perm root is very odd though 15:12
Antoher idea
Breakpoint it like you did
Once it fires, set a breakpoint in the roots.c function to add a perm root
And see if any get added
(and why)
FROGGS it compiled the setting btw 15:13
15:14 jnap1 joined
FROGGS but reverted, and will now add the breakpoint 15:14
jnthn The MVMROOT helped? o.O 15:15
FROGGS yes 15:16
jnthn wtf
FROGGS maybe just hides the problem
jnthn I'd guess so
FROGGS it does not hit the breakpoint MVM_gc_root_add_permanent 15:18
jnthn ok 15:19
Hmmmm
FROGGS I'll try MVM_gc_root_add_permanents_to_worklist
jnthn well, that is hit int he gc 15:20
FROGGS k
15:28 jnap joined
FROGGS jnthn: I think `type` needs to be temp_push'd in MVM_args_slurpy_named like in MVM_args_slurpy_positional 15:40
jnthn: btw, I don't think that my changes to interp.c helped, I just guess the m-BOOTSTRAP.moarvm was still in place from a successful build 15:49
but good to know that can build in 176s after that :o) 15:50
jnthn FROGGS: ah, ok 16:14
decommute now; bbiab
16:16 jnap joined 16:17 benabik joined
FROGGS jnthn: I really think that this patch is valid: gist.github.com/FROGGS/32d36a468e592eb0885e 16:21
does not help though 16:22
16:26 jnap joined 16:27 jnap joined 16:37 BenGoldberg joined 16:39 FROGGS[mobile] joined 16:47 jnap joined 16:50 colomon joined
jnthn FROGGS[mobile]: You'd really hope so...but... :/ 17:00
Look at what box_slurpy_named does :/ 17:01
It just uses type for its own means :/
17:19 benabik joined
FROGGS[mobile] ahh, that explains it 17:20
jnthn: if you feel like reviewing, there is a branch about labels in nqp *cough* :o) 17:36
jnthn hmm 17:37
Maybe later...
jnthn found teaching rather tiring
Dinner will either make me awaker or give me a food coma... :)
FROGGS[mobile] hehe 17:38
jnthn ponders what to nom
FROGGS[mobile] I'll have ham&eggs with onions and bread 17:39
17:54 lizmat joined 17:55 ssutch joined 18:14 tgt joined 18:15 FROGGS joined 18:18 colomon joined 18:36 benabik joined 18:58 jnap joined 19:11 BenGoldberg joined 19:16 jnap joined
FROGGS jnthn: is that correct that I can dump 336 bytes from 0x20b4330? gist.github.com/FROGGS/fcc7d25640eb12ec46fa 19:23
jnthn: if that is the case: the dump contains "$!positional_delegate" 19:24
which would be rakudo/src/gen/m-BOOTSTRAP.nqp:606: Attribute.HOW.add_attribute(Attribute, BOOTSTRAPATTR.new(:name<$!positional_delegate>, :type(int), :package(Attribute)));
ohh, or it is the line about: nqp::bindattr_i($attr, Attribute, '$!positional_delegate', $positional_delegate); 19:25
I guess I am reading junk 19:48
diakopter o_O 19:50
jnthn back from Indisk and a nice walk in -1 :) 20:02
20:27 jnap joined 20:36 eternaleye joined 20:40 colomon joined 21:04 FROGGS joined 22:19 colomon joined 22:36 jnap joined
timotimo FROGGS: you didn't find out what was causing the trouble yet? 22:37
FROGGS timotimo: no 22:48
timotimo builds stuff 22:49
jnthn We get a bit further into the optimize, then hit something null... 22:55
(after thing I pushed a moment ago)
need to sleep now though
&
timotimo gnite jnthn :)
Object does not exist in serialization context - that's not the error i should be getting? 23:01
trying to build src/gen/m-BOOTSTRAP.nqp 23:02
Internal error: invalid thread ID in GC work pass - huh? 23:08
currently trying to rebuild with an unoptimized moar 23:16
i wonder how far we get if we do --optimize=off
if i even get to stage parse this time 23:17
yes, i get to stage parse this time
shouldn't i be seeing at least two moar threads? isn't our gc multi-threaded? 23:19
or is that only the case in the gcorch branch?
Segmentation fault (core dumped) 23:25
there's an atpos_o whose object register is apparently a null pointer, so that's probably what jnthn was seeing
timotimo not sure how to debug 23:31
23:36 colomon joined
timotimo Error while compiling op replace: No registered operation handler for 'replace' - maybe i could do this? :3 23:38
23:44 lizmat joined 23:48 woolfy joined 23:51 d4l3k_ joined