Index

Show enters and exits. Hide enters and exits.

00:49:44ddubwaves
03:32:00brixenmri never ceases to amaze me
03:32:09brixenrb_hash_size is *static*
03:32:32brixenso of course people write completely unportable INT2FIX(RHASH(obj)->tbl->num_entries) in their code
03:32:35brixenwtf
04:57:27ddubbrixen, how many rb_hash_sizes do you need?
04:57:30ddub:)
08:02:36boyscoutUse an InlineCache for block sends in the JIT - d5a7829 - Evan Phoenix
08:05:52boyscoutCI: d5a7829 success. 2709 files, 10767 examples, 33779 expectations, 1 failure, 0 errors
08:47:02boyscoutPut ICs on the meta_* send ops - 9c0134c - Evan Phoenix
08:56:43boyscoutCI: 9c0134c success. 2709 files, 10767 examples, 33781 expectations, 0 failures, 0 errors
17:14:31evanmorning.
17:22:22dgtizedmorning
17:54:15brixenevan: this is what I get building on elle http://gist.github.com/134074
17:54:26brixendunno how boyscout CI is building
17:54:37brixenbuilds fine on os x after a rake clean too
17:54:43evanUM.
17:54:45evancrap.
17:55:53evanrun
17:56:00evanruby vm/codegen/instruction_macros.rb
17:58:07brixensame error
17:58:38evanhuh.
17:58:41evanremove that file in gen
17:58:49brixenk
17:58:50evangen/inst_list.hpp
17:59:41brixenremoved; rake -q; regens it, same error
18:02:39evanwtf.
18:02:45evancheck your compiler/iseq.rb
18:03:00evanmake sure that those instructions have an arg now
18:03:37brixen:args => [:literal]
18:03:47evanweird.
18:03:48evan...
18:03:52evanumm.
18:04:07evanh oh
18:04:08evanoh oh
18:04:08evander.
18:04:17evani wonder why this didn't blow up on OS X
18:04:20evanok, give me a sec.
18:04:22brixenk
18:10:06brixenahh boyscout does not build with jit enabled, that explains that
18:10:41brixenof course my ubuntu vbox built fine for the same reason
18:11:12brixenprobably works on os x because of gcc 4.0
18:17:24brixenwhen the top google link for 'ubuntu libc man pages' is ubuntu forums, maybe you should think about a reasonable package name
18:17:37brixenor how about install it with build_essential
18:59:26brixenevan: I'm tracking this (semi random) abort running syck and I'm wondering if there is a place to insert a guard on LookupData fields
18:59:30brixensee http://gist.github.com/134095
18:59:45brixenby the time Object::send gets called, the data is garbage
19:00:04brixenin MRI TYPE() would just do a bit flag test, but we send #kind_of?
19:00:51brixensince this is a sensitive call path, not sure if as<Module> somewhere from LookupData constructor up that bt would be appropriate
19:01:10brixenI think it would be good not to segfault/abort on this sort of thing
19:09:11evanhm.
19:12:49evanlets see
19:12:50evanwell
19:13:45evanso
19:13:54evani'm guessing that dest is getting missed by the GC
19:14:25evangiven how it blows up on method lookup
19:14:29brixenprobably
19:14:30brixenyeah
19:14:44brixenit only happens running full specs and compiling
19:14:58evansure, thats probably enough GC churn to make it happen
19:15:00brixenwhich is a problem itself
19:15:19evanso, how does syck advise the GC that there is a GC pointer in ->bonus ?
19:15:26brixenbut I'm concerned about that resulting in a segfault if a capi ext does a bogus rb_funcall
19:15:40evanah!
19:15:41brixenum..
19:16:09evanwell, it's easy enough to validate the handle
19:16:42evanactually, in this case
19:16:52evanif it IS being collected behind ->bonus's back
19:17:00evanthen the handle pointer has probably been free'd too
19:17:06evanhm.
19:18:05brixenthere is syck_mark_emitter(emitter) that calls rb_gc_mark on bonus and it uses Data_Wrap_Struct to pass around the emitter_xtra structs
19:18:34brixenit's some generally horrific code but runs all the specs except 2
19:18:43brixennot that there's many specs, but still
19:19:09evanhm.
19:23:37evanbrixen: we could set a flag in the memory of the GC handle when it's free'd
19:23:56evanand if env->get_object() tries to use a handle that has the free'd flag set, we print out and error and abort or something
19:24:01evanthats not foolproof
19:24:05evanbut it's better than nothing
19:24:13brixenyeah, that would be good
19:24:20brixenat least as controlled abort
19:24:25brixens/as/a/
19:24:27evanif we to get 'fancy'
19:24:32evanthe handle could hold a checksum
19:24:42evanand we validate the checksum on get_object
19:25:22brixenwell, the flag would be a good start
19:26:51evanhm, so what would the controlled abort be...
19:28:44brixenwell, we could just raise an exception
19:30:55evanyeah
19:33:03boyscoutStyle cleanup - 15b06aa - Evan Phoenix
19:33:03boyscoutFix operand changes - 73824ab - Evan Phoenix
19:36:44boyscoutCI: 73824ab success. 2709 files, 10767 examples, 33780 expectations, 0 failures, 1 error
19:36:59evan1 error?
19:37:00evanwtf.
19:42:39boyscoutAdd trivial checksuming to capi::Handle to aid in debugging - a09b9b1 - Evan Phoenix
19:44:33evanbrixen: try running with that
19:45:45brixenk
19:45:52evanI didn't raise an exception
19:45:56evanbut at least it should do detection
19:46:10evanit's using a fixed checksum of 0xffff
19:46:15brixenthe other fields in that extra struct are valid, so still looking at the port field
19:46:20brixenk
19:46:20evanand validates it's 0xffff on access
19:46:24brixenle'me pull
19:46:25evanso if it's invalidate memory
19:46:36evanit's likely not going to be 0xffff
19:46:43evanbut some other random collection of bits
19:46:51brixenk
19:47:13boyscoutCI: a09b9b1 success. 2709 files, 10767 examples, 33781 expectations, 0 failures, 0 errors
20:14:58slavahi evan
20:16:49evanhey slava
20:16:50evanhows things?
20:16:55slavagood
20:17:00evanslava: oh, on your PICs
20:17:06evanwhen you detect a new class
20:17:13evanyou always enlarge the PIC and add it, yes?
20:17:32slavathere's a maximum size
20:17:42evanhow many is your max size?
20:17:54slava3 by default
20:18:12evanthen you revert it to a slow lookup version?
20:18:28slavayeah
20:18:42evank
20:19:07evani'm adding the ability to track classes seen at each call site
20:19:12evanup to 3
20:19:20evanthen tracking how many times it overflows
20:19:28evaninfo to be used by the inliner
20:19:55slavacool
20:25:03slavawhat kind of speedup are you seeing with JIT -vs- interpretation now?
20:25:18evandepends on the code
20:25:27evanon some code, a lot
20:25:39evanatm though, the common cases aren't getting much of a speed up
20:25:44evani'm investigating that now
20:26:05brixenevan: heh argh! I got the abort in a regular build, but couldn't look at the checksum in gdb because it was optimized out, ran in debug and it didn't abort
20:27:22brixenI'll have it print the checksum when it aborts
20:27:59brixenevan: btw, did you see the bench graphs for rdoc with no jit?
20:28:11brixenit got slower, but the jit times are faster
20:28:27evanhehe
20:28:29evanok
20:29:42brixenI haven't investigated, just stands out on the top graph
20:30:01evanhm.
20:30:01evanok
20:30:36evangeez
20:30:38evanit got a lot slower
20:30:46evangood to see that we solved the threading issue though
20:30:51evanmspec has stabalized
20:31:22evanit jumped by a good 80s
20:31:23evanthats...
20:31:24evanodd.
20:35:40brixenyeah, the specs are much better
20:36:40brixenthe raw yaml files are in my home/devel/rubinius/benchmark/results
20:36:47brixenthe file names are explanatory
20:37:12brixennot seeing any weirdness in the rdoc times, just that they are a lot longer
20:37:30evanodd.
20:37:31evanok
20:37:37evani'll go back and do a little bisecting.
20:42:06brixenwe create (and free) a ton of capi handles during a full spec run
20:42:14brixenso generally, it is working well
20:42:26evangood.
20:42:27brixencan't get the abort running a debug build :/
20:43:17evani hate those bugs.
20:43:48brixenme too
20:44:04brixenreally, I have no desire to poke around in yaml/syck
20:44:10brixenI was so happy when it was working
20:44:11brixen:)
20:44:20evanheh
22:31:03brixensigh
22:31:14evansup?
22:31:16brixenevan: I ran that damn thing in debug and non-debug a dozen times
22:31:21brixenno abort
22:31:25evan:(
22:31:27brixenran it one more time, abort
22:31:28brixen:)
22:31:33evanhah
22:31:34brixenthe checksum is 0x0
22:31:40brixenso, it's apparently freed
22:31:44evanyep
22:32:06evanthe handles use a refcount scheme
22:32:10brixenyeah
22:32:18evanso perhaps the refcount isn't being maintained properly
22:32:19brixenbut it's so random, how do I track this?
22:32:25evanit's rough.
22:32:31evanGC bugs are the worst.
22:32:44evani usually nuke all .rbc files
22:32:49evanand try to get it to happen that way
22:32:57evanthen I always run it again with them nuked
22:32:58brixenit appears to always be on bonus->port, which is the sink for the yaml outputter
22:33:05evanto try and stabalize the patterns
22:33:40brixenI've only been able to trigger it on a full spec run compiling
22:33:47brixenie after rake clean
22:34:02evanright
22:34:08evancan you make it happen reliabily that way?
22:34:15brixenno
22:34:56evanUG>
22:35:02evanummm
22:35:38evanthese are the bugs where you stab in the dark
22:35:48evanyou have to check where that port handle is usesd
22:35:54evanand try and figure out where the bug might be
22:35:55brixenwell, the one consistent thing appears to be bonus->port
22:35:56brixenyeah
22:36:00evanand add some defensive coding
22:36:03evanand see if it oges away
22:36:09brixenk
22:36:18yakischlobado you guys use libev or libevent?
22:36:23brixenI've checked that it's initialized correctly
22:36:45evanyakischloba: libev, but since we switch to stackfull, it's not used much
22:37:16yakischlobacool.
22:37:29yakischlobais there a reason you chose it over libevent/what was your opinion of it?
22:37:41evanwe used to use libevent
22:37:55evanone of our contributers wanted to use libev
22:37:58evanand converted us over.
22:38:07yakischlobahmm
22:38:14evani'm not clear on the merits of one over the other
22:38:23evani'm not a big fan of the libev codebase
22:38:24yakischlobaits supposedly newer/better/faster but i havent really found anyone using it
22:39:13evanthe libev is pretty oppressive
22:39:34yakischlobahow so
22:40:29evanthe style sucks, imho
22:40:50evanit's just kind of a mess
22:40:58evani've tried to fix bugs or figure out why it did certain things
22:41:06evanit's hardly trivial to even follow what it's trying to do
22:41:26yakischlobahmm k
22:45:07dbussinkdidn't you work on that tarcieri?
22:48:48yakischloba*doh* yeah i suppose i should have asked him lol
22:52:54slavayakischloba: there's nothing magical about non-blocking I/O APIs. both libevent and libev have serious flaws and I suspect the developers are inexperieced
22:53:03slavaits best to roll your own at this stage
22:53:39yakischlobalol really?
22:57:07yakischlobaare they that bad?
22:58:13slavalast time I looked at the code I wasn't very impressed, they don't even support windows
23:00:57yakischlobaokay.
23:03:34larrytheliquidevan: made those double-check for the less common case performance changes to dataflow, and added it to rubyforge in case you want to play with it
23:07:14evaneh?
23:10:00larrytheliquidevan: concurrency lib stuff we talked about at the ey hack day
23:11:20evanah! yes sorry
23:11:21evanawesome
23:39:20yakischlobarecommendations on testing framework for C?
23:39:54evanwe use cxxtest for C++
23:39:56evanit's fine
23:40:00evannothing to get excited about