Index

Show enters and exits. Hide enters and exits.

00:32:24dgtizedbrixen: there are a couple of specs in the full set that either segfault or hang
00:32:58dgtizedI guess switching to include them increases the likelyhood that enough testing will actually catch them
00:33:35dgtizedit's just that the library spec set is a lot more flaky for standard spec runs
00:36:19rueOnly one thing to do
00:40:20brixendgtized: I tested it on the 3 systems that are readily available
00:40:28brixenif you have issues, I need information
01:29:29brixensweet, 5 sec off of 60 on a spec run, I'll take that
01:29:51evanwhat did ya change?
01:30:06brixenrecursion guard has no business being a stack
01:30:10brixenI changed it to a hash
01:30:17brixenlookuptable actually
01:30:31brixenI'm going to put it on Thread I think
01:30:39brixenThread.recursion_guard(obj)
01:30:49brixensince in uses a Thread local
01:31:27dgtizedwait I thought it was a lookuptable
01:31:36evangood plan
01:31:38evandgtized: it was an Array
01:31:40brixenevan: ok
01:31:43evanthat used include? to find things
01:31:47brixenyeah
01:31:49brixenterrible
01:31:52evanbrixen: since we're hitting it a lot
01:31:54evando a quick experiment
01:32:01evandrop it to a prim on Thread
01:32:15evanand add a LookupTable slot to Thread in C++ land
01:32:21evansee what that gives ya
01:32:24brixenok
01:32:31brixenI was thinking that too
01:32:39brixenother thing is, it relies on object_id
01:32:44evanthats stupid.
01:32:45brixenhow fast is that these days?
01:32:48evanignore that.
01:32:55brixenwell you need identity
01:33:02evanLookupTable keys ARE identity
01:33:11evanthey use C's ==
01:33:18brixenah yes ok
01:33:30brixenit was using an object_id (fixnum) to access that
01:33:32brixenyeah, gotcha
01:33:46evanhe used object_id so that the objects #hash wasn't needed
01:33:51evanand so it was the true identity
01:33:56evanLookupTable uses the true identity
01:33:56brixenk
01:34:02evanit doesn't allow for the class to override
01:35:03brixenevan: compare http://gist.github.com/103268
01:35:53brixenpre-prim it's down to 1.41 self sec from 5.85
01:36:01evansuper rad
01:36:08evanlooks like we should do 2 things
01:36:17evan1) re-enable the Class#new compiler speedup
01:36:22evan2) remove Module#clear_association
01:37:11brixenevan: a prim can take a block?
01:37:24evanumm
01:37:26evanno
01:37:30evani don't think we ever wired that up
01:37:46brixenk, cus this adds the obj and yields
01:37:49brixenthen removes the obj
01:37:53brixenfor the guard
01:37:53evanbrb
01:37:56brixenk
01:38:41dgtizedbrixen: is the costly bit calling inspecting, or inspecting?
01:39:11dgtizedor sorry RecursionGuard.inspect is the guarded one right?
01:49:41dgtizedbrixen: also -- I'm not sure why the specs were failing earlier, that issue seems to have disappeared -- it was consistantly being inconsistant about crashing every couple of times, and now it's just running smoothly
01:49:53dgtizedi'll let you know if it breaks again
01:50:06brixenk
01:56:42dgtizedwow we are only down to 12 failing specs in language
01:57:25dgtizedsorry delete the only from above
01:57:50dgtizedor put it before the 12
01:58:06slavamy inline caches are working!
01:58:19brixenslava: sweet
01:58:25evanok, going to get more stuff from the car
01:58:30evani've got the last load in the car! yay!
01:58:36evan(man this moving shit sucks)
01:58:39brixenwhat percentage are pelymorphic
01:58:43brixener poly*
02:02:02evanslava: i'd love to hear about your stats
02:02:17evan% polymorphic, what speedup you get, etc
02:07:37slavaevan: I'm still debugging
02:07:57brixenahh, for certain values of working :)
02:08:22evanit's working!! (see section 3.a for definiton of working)
02:15:31brixenevan: bt's are super sweet now, btw :)
02:15:51brixentook me a while to notice because they are just nice and not annoying
02:16:29evan:D
02:16:33evanhah
02:16:36evani'm working on a weird bug
02:16:41evanthe first line, when the path is broken up
02:16:49evanthe indent is too far
02:16:52evanit's weird.
02:18:26slavaI've been adding a ton of asserts to my vm lately
02:18:35slavaand there's a compile flag to enable them
02:18:39evanoh der.
02:18:58evanthe color control is throwing it off
02:19:04brixenman, #join on recursive arrays o/~ sucks o/~
02:19:08evanhaha
02:19:12evanfinally!
02:19:18evansomeone else using singing on IRC
02:19:24brixenhah
02:19:25evani always feel like i'm the only one that does that
02:19:28brixenlearned from you
02:19:48evan:D
02:19:52evanbingo, fixed the indent
02:20:54brixensweet
02:21:03brixenI've got one damn spec failing
02:21:19brixenI fix it, another breaks
02:21:56brixenthe fact that MRI allows recursive arrays in a File.join is so crazy
02:22:06brixenyou ain't gonna find a file with the result
02:24:26evanhaha
02:24:41brixenhttp://gist.github.com/103514
02:24:46brixenthat is fucking stupid
02:24:48evanraise NoSeriously, "No files available in the middle of a black hole"
02:25:06brixenif #join is going to do that
02:25:10evanman thats stupid
02:25:30brixenthen #inspect should be [1,2,3,[1,2,3,[...]]
02:27:03brixenevan: perhaps I should file a bug on that?
02:27:05evanis it not?
02:27:19brixenthe inspect is just above in the gist
02:27:27brixen#join is lame
02:27:33evanwhy the fuck does it list it TWICE before going recursive
02:27:36evanthats got to be a bug.
02:27:40brixenok
02:27:54brixenwe output "123[...]"
02:27:59evanthats fine
02:28:00brixenI'll file a bug
02:28:03evanstick with that.
02:28:06brixenk
02:32:20evanmuhah
02:32:27evanok, i've fixed it even more
02:32:38evanit now never outputs backtraces past 80 columns
02:33:29evanoh hot shit.....
02:33:34evangoes the extra mile.
02:35:25brixenhehe
02:35:41evanhm...
02:37:22evandamn.
02:37:25evanin a shell
02:37:27evanthere is $COLUMNS
02:37:35evanbut it's not a real env var
02:39:24brixenoh wtf
02:39:27brixenyes, it is a bugh
02:39:32brixenit was fixed
02:39:42brixenbut originally not in 1.9
02:39:52brixenso the specs for 1.9 are outdated
02:40:03evansweet.
02:40:05brixenI need to sync our specs
02:44:29brixenoh man, but they did not fix it for File.join
02:44:35brixen*facepalm*
02:44:47brixenfood
02:45:47evanmuhah
02:45:50evanhaws!
02:45:52evandamn!
02:45:56evanit's 6:45
02:45:58evanthis day is flying.
02:53:00evanmuhhah
02:53:01boyscoutImprove backtraces, dynamicly adjust to terminal width - 49b1b07 - Evan Phoenix
02:55:29slavaevan: seems polymorphic call sites are pretty rare
02:55:46brixenslava: that's what we've seen too
02:55:54brixenI was curious what you'd see
02:56:05slavaunfortunately in my case tail calls cannot call an IC stub
02:56:10slavaso a tail call to a generic word is always megamorphic
02:56:50evanbtw
02:56:59evan`tput cols` is sweet
02:57:19brixennice
03:00:24evanbrixen: so now backtraces never wrap
03:01:01brixensaweet
03:01:23brixendo they expand your terminal? :)
03:01:29evanhah
03:01:49evan"looks like you need a bigger viewport, let me get that for ya"
03:01:55brixenheh
03:02:08evanwhere does mspec print out the backtrace?
03:02:52brixenum..
03:03:04brixendepends on the formatter
03:03:26evanthe default
03:03:28evani want to check something
03:03:37brixensee eg mspec/lib/mspec/runner/formatter/dotted.rb
03:04:04brixenin #finish
03:04:05evanok, it's just calling
03:04:09evanprint exc.backtrace
03:04:11brixenyeah
03:04:13slavaits annoying that TCO makes backtraces somewhat useless
03:04:15evank
03:04:20evanyep
03:04:25evanslava: very annoying
03:05:08evanthats interesting
03:05:12evanwhy is the nice backtrace shown then?
03:05:24evansince Exception#backtrace call to_mri
03:06:43brixenhm, good question
03:11:28evanany ideas?
03:12:33brixennot off hand, le'me look
03:13:43brixenheh um yeah
03:13:55brixenmspec/lib/mspec/runner/exception.rb
03:14:03brixendef backtrace :)
03:14:25evanoh der
03:14:28evanexc is not an Exception here
03:14:32brixenright
03:14:41brixenI was confused too
03:15:03evaninteresting..
03:15:07evanwhats that line below there?
03:15:13evanrejecting lines
03:15:18evani saw something like this earlier
03:15:23evanwhere when i was screwing up the output
03:15:26evanlines were disappearing
03:15:29brixenright
03:15:45brixenit's supposed to leave out mspec files
03:15:59evani see lots of mspec files
03:16:02evani'd rather see them.
03:16:10brixenwell, there's a lot
03:16:14evanwell
03:16:17brixenand they make the bt long
03:16:19evannow that I changed the output
03:16:21evanthey show up
03:16:23evanall the time
03:16:40brixenyeah, cus the regexp is wrong
03:16:58brixenI can take it out
03:17:04evanlets take it out for now
03:17:07brixenrspec omits rspec files
03:17:10evanah
03:17:13evani prefer to see it
03:17:16evanbecause it's less magical
03:17:23brixenI kinda do
03:17:30evani always get confused when those lines are left out of the backtrace
03:17:31brixenexcept that each bt is a screen
03:17:37evanbecause i go "um.. how did THAT get to there from THERE...."
03:17:53brixenand when I'm dealing with 100s of exceptions, it sucks
03:18:03evanhm
03:18:20evanthe line splitting I added REALLY fucks this up.
03:18:28evanbecause you could reject partial lines
03:18:41brixenthat's ok, it's a hack
03:18:44evanok
03:18:45brixenI'll take it out
03:20:02evanwell
03:20:04evanhow about this
03:20:11evanadd a -d option to mspec
03:20:19evanala debug
03:20:26evanto not leave out lines
03:20:41brixencould
03:20:46evanand change the regexp to be what it is and also |^mspec/lib/mspec
03:20:55evanbest of both worlds
03:21:01brixensure
03:21:07evancrunchy outside, soft inside
03:21:11brixenhah
03:21:23brixenspeaking of, dinner... bbiab
03:21:24evanlike a lobster!
03:21:25evanmmm
03:21:26evandinner.
03:21:27evanyes.
03:37:16evanug
03:37:23evanthe return specs are masking their own failure
03:37:29evanie, if these LJE test fail
03:37:32evanthe script returns
03:38:00slavaso here are my initial observations
03:38:01evanoh hm
03:38:02evanmaybe not.
03:38:13slavaalmost no speedup, buggy, too many tail calls that just become monomorphic :)
03:38:17slavas/mono/mega
03:38:25evan:D
03:38:26evanyeah
03:38:29evanthats why most stick with mono
03:38:38evanand disable it if the cache spins
03:40:07slavaI haven't optimized much yet
03:40:20slavaI expect to get a speedup once I start bumming instructions out of the hot paths
03:42:23evanok, bbiab.
04:01:19slavaevan: ok, so my code was broken and it wasn't installing pics in all the right call sites
04:01:30slavathey would revert to megamorphic erronously
04:01:45slavaalso sometimes the asm generated was wrong and the cache would always miss hehe
04:18:28evanslava: so hows it working now?
04:18:34slavastill debugging :)
04:21:12slavaevan: I suck at debugging low-level code
04:21:36evanit's hard
04:21:42slavaevan: my brain just freezes up when it encounters dangling pointers, corrupt data, etc
04:21:43evanyou're using
04:21:46evandisplay /i $pc
04:21:47evanright?
04:21:51slavaheh
04:21:58slavaI'm not even that good with gdb ;)
04:21:59slavaprintf baby
04:22:04evandude
04:22:04slavathat's how I debug
04:22:12evanthats way too hard for lowlevel code
04:22:19evanuse printf to figure out where to set breakpoints
04:22:22evanthen use
04:22:24evandisplay /i $pc
04:22:25evanand si
04:22:29slavasure I use breakpoints
04:22:30evanto step one instruction at a time
04:22:39evanand have gdb disassemble as it moves
04:27:44slavathanks for the tip, I didn't know about the /i switch
04:28:31slavaevan: does gdb work well for C++?
04:31:27evanvery
04:31:35evanit's got some weird parts
04:31:39evanbut is mostly fine
04:31:47evanit get confused by casts sometimes
04:31:51evani haven't figured out why
04:32:08evanyeah
04:32:10evandisplay /i $pc
04:32:12evanis a lifesaver
04:32:15evanwhen you're down low
04:32:36slavastill buggy, but I got a 33% improvement on one benchmark
04:42:28brixenevan: you should write a short cut pdf on gdb for pragprog
05:42:24slavaevan: http://lhealy.livejournal.com/12721.html
05:42:43slavayou might find his code useful to look at
06:33:23evanslava: structs by value I think requires the caller to pass in a pointer to stack memory
06:33:27evanto be used for the return value
06:33:38slavayeah
06:36:26evanmy immix.hpp uses a interesting technique though
06:36:37evanthere is an Address struct that is used only by value
06:36:40evanand return by value
06:36:46evanbut it's only storage is a uintptr_t
06:36:57evanso gcc ends up optimizing the struct away entirely
06:37:09slavaonly on some architectures
06:37:10evansince the requires fields fit in one register
06:37:23slavayes, on some abis structs-by-value can be returned in registers if they're below a certin size
07:29:35boyscoutFixed Array#== to dispatch to other. - 57f1a88 - Brian Ford
07:29:35boyscoutPulled in Array#to_s and File.join specs for recursive arrays. - c9be299 - Brian Ford
07:29:35boyscoutStep 1 of reworking recursion guard. - c4ae396 - Brian Ford
07:29:51brixenevan: I've isolated the recursion guard on Thread
07:30:17brixenbut I cannat see how to do it without object_id, since LT hashes the object to a bin based on the pointer value
07:30:32brixenif that object moves, it won't find its bin
07:32:03brixenin other news, Hash methods are 8 of the top 16 methods in a profile of CI, and about 50% of the self seconds
07:33:43evaninterestin.g
07:33:46evanin all accounts.
07:33:54evanyour bin comment is right on
07:33:57evantotally forgot about that
07:34:02brixenok cool
07:34:06brixenI tried it :)
07:34:10evan:D
07:34:18slavaevan: so I'm resetting all call sites every major GC
07:34:18evanusing object_id is fine.
07:34:38brixenoh yeah, it made little difference
07:34:44evanfigured
07:34:47brixen1.3 to 0.8 self seconds
07:34:48slavaevan: my theory is that if a call site is serially monomorphic, resetting it once in a while is better than just having it go megamorphic at some point and never recover
07:34:51evanhow about direct versus prim?
07:34:53brixenwhich is small for this
07:34:56evan1.3 direct, 0.8 prim
07:34:56evan?
07:35:01evandirect == ruby
07:35:07brixenno, for not using object_id
07:35:10evanah.
07:35:17brixenI can't yield from a prim
07:35:23brixenso I didn't do that
07:35:28evanslava: thats very likely true
07:35:41evanslava: nice thing about ICs is you can clear them anytime you want
07:35:42slavaevan: the downside is that you allocate a lot of pic stubs
07:35:59evanwell, have you seen a MIC vs PIC performance improvement?
07:36:01slavaI need to fix one more bug then I can start optimizing
07:36:10slavaevan: I'm seeing about a 10:1 ratio of mono to polymorphic call sites
07:36:14evanbrixen: why do you need to yield?
07:36:21evanbrixen: oh, that thing takes a block
07:36:21evangotcha
07:36:25brixenyeah
07:36:38brixenI tried a version that used ensure in the methods
07:36:44brixenthat... didn't work
07:36:49evanheh.
07:36:49evanok
07:36:49brixennot sure why
07:36:51slavaevan: there's a performance regression over my method dispatch from 4 days ago
07:36:59slavaevan: ICs have almost won back the loss :)
07:37:31brixenevan: so, to remove Module#clear_associations we need a global serial # for constants?
07:37:51evanbrixen: so whats the final tally on performance improvement for the new guard code?
07:37:58slavaevan: The fallback on cache miss is slower than the old method dispatch system (which did a full dispatch and had no caching of any kind)
07:38:15slavaevan: but an IC hit is faster than a full dispatch used to be
07:38:22brixenevan: ~5 sec less out of 60, so I'm seeing ~55 sec on a compiled run now
07:38:31slavaevan: so I have to speed up both the slow case and fast case
07:38:32evanbrixen: yeah, using a global serial that is incremented whenever a constant is set
07:38:37brixenevan: ok
07:38:38evanbrixen: sweet.
07:38:50evanbrixen: we need to rework the code a little though
07:38:59brixenok
07:39:01slavaevan: I used to compile a decision tree which did method dispatch over a set of classes with the minimum number of branches possible
07:39:07evansince I wired the cache buckets into the LookupTables directly
07:39:11evanso they need to be unwired a little
07:39:17evani'll take a crack right now
07:39:21evanit should be easy
07:39:22brixenah ok
07:39:39evanslava: right, i recall
07:39:56brixenevan: I forget, did you have cuckoo hash code for LT or for our Ruby hash?
07:40:05slavaevan: I finally decided to ditch that approach to cut down on compile time (generating the dispatcher code took a long time)
07:40:08evanit's completely independent
07:40:13evanbrixen: hold on
07:40:17evani need to stop sitting on this code
07:40:20evanwhere should I put it
07:40:30slavaevan: basically by using ICs I'm moving some work from compile to run time. I'll see how much it pays off in the end
07:40:37slavathe old method dispatch was also very fast
07:40:52brixenevan: anywhere
07:40:54evanslava: what was the comparison in the tree?
07:41:19slavaevan: well the root checks the pointer tag, leaves check header fields
07:41:40slavaevan: it would compile into the same code that a C compiler would generate for a bunch of switches and ifs that check a class pointer
07:41:46evanbrixen: http://gist.github.com/103631
07:41:55evanhttp://gist.github.com/103632
07:41:59slavaevan: addinga nd removing methods would rebuild dispatchers so at any given point in time they were optimal
07:42:01evanC++ and .rb
07:42:29slavabut this doesn't scale as the number of methods in a generic word increases
07:42:36slavaor equivalently in message-passing OO, the number of methods on the same selector
07:42:38evanslava: so before, the compiler would kick in to recompile the dispatcher
07:43:09slavayeah, now the IC miss fallback just looks in a hash essentially
07:43:21slavaits slower than the old dispatchers because it involves loops and memory ops etc
07:43:29evanright
07:43:36evanbefore you had a nice, linear search
07:43:48evannow you've got some math and then a few memory accesses
07:44:01slavaand a call into C
07:44:23slavamethod lookup is now done in C instaead of generated machine code
07:45:23evanmakes sense
07:50:07slavaevan: http://paste.factorcode.org/paste?id=623
07:51:23slavaevan: looks like ICs eliminate 4 out of 5 full dispatches
07:51:49slavathat's really great considering the compiler gets a good ratio too
07:51:59evanyeah
07:52:05evancongrats on seeing PIC lower than MIC
07:52:08evantime wise
07:52:14evanthat means that you've bottlenecked in dispatch
07:52:16slavanah, I can't find a benchmark where it makes a measureable idfference
07:52:18evanand the rest of the system is humming along
07:52:39evanslava: well, richards is the one that stress polymorphism
07:53:04evanbasically one class that calls a method on a list of objects
07:53:12evanand that list is 1 of 5 times
07:53:20evana lot
07:53:22slavayeah, I've seen that benchmark, its kind of silly :)
07:53:25evanthats where the PIC shows up
07:53:28evanit's silly
07:53:36evanbut it's not the work it does persay
07:53:38evanbut how it does it :)
07:54:52slavaevan: wow, binary-trees: 59165033 megamorphic calls w/o ICs and only 1078 with
07:55:10evanhah
07:55:11evannice
07:55:20evanyeah, probably because the tree's values are diverse
07:55:27slavaooh, binary-trees shows a big speedup with PICs
07:55:42slavawith MICs, you still have 58808739 megamorphic calls
07:56:04slavaactually, seems bimorphic is enough
07:56:36slavayup. in binary-trees, the child of every node is either another node, or a null value
07:58:52slavaevan: http://paste.factorcode.org/paste?id=624
07:59:36slavaevan: notice how its a matter of 8 callsites going full mega instead of poly. that's the only difference in the pic stats
07:59:50slavathose 8 call sites contribute a lot of calls to the megamorphic tally and that makes .6 seconds of difference
08:02:44brixenevan: can these numbers be right? http://pastie.org/462176
08:02:57brixenrbx is faster than mri running the cuckoo hash code?
08:03:17brixenI had to disable unprof to get #s for mri
08:07:03evanpastie is down
08:07:06slavaevan: do you have ICs for ivar access?
08:07:30evanbrixen: could ya put that somewhere else
08:07:31evanslava: no
08:07:44evanbecause what would you cache?
08:07:59slavathe slot offset
08:08:04evanit's not fixed
08:08:07brixenevan: http://gist.github.com/103636
08:08:08slavaah
08:08:10evanso there is no slot offset to cache
08:09:01brixenI guess I should write a set of hash method benches
08:09:12evanyeah
08:09:15evanthose numbers are right
08:09:17slavaevan: I think I'll add something like that at some point
08:09:22evansince MRI has hash all in C
08:09:24slavaevan: I want to speed up polymorphic code as much as possible
08:09:25brixenif this is generally 75% faster than the existing, that's a good gain
08:09:31evanthis shows off how much better our tech is for running ruby code
08:09:38brixenI guess so
08:09:42brixenmakes me happy
08:09:44brixen:)
08:09:59evanoh, me too :D
08:10:26evanslava: we're working to eventually fix the layout of instances so there are slots
08:10:34slavagood plan
08:10:59evanin which case, there will be an IC and a fast path in JITd code
08:11:19evanif(obj->klass == last_klass) val = OFFSET_AT(obj, 10);
08:11:31slavayup
08:11:32evanelse val = slow_ivar(obj)
08:12:02slavain my case, ivar accessors are methods, so slow_ivar would be another PIC :)
08:12:20slavabut I want to special-case the auto-generated ones, that just load from a slot
08:12:32slavathe PIC doesn't have to jump into the body at all
08:12:52evanright
08:12:53evanyou should
08:12:59evanhave special MICs and PICs
08:13:05evanthat, when they hit, just run some code right there
08:13:09evanrather than doing a call
08:13:14slavayeah
08:37:49brixenyay http://redmine.ruby-lang.org/repositories/diff/ruby-18?rev=23306
08:38:59evanha ha!
08:39:02evanvictory is ours!
08:39:08evanand speedy victory too wow
08:39:13evani wish they were all that fast :/
08:40:03brixenyeah
08:47:07brixenevan: http://gist.github.com/103650
08:48:31evanha
08:48:32evannice
08:48:38brixenyeah
08:48:56brixenI'm torn between working on this tomorrow and fixing bugs :P
08:49:04evanit's just so much easier to retrieve bugs
08:49:08brixenheh
08:49:13evaner.
08:49:14evanman
08:49:16evanit's late
08:49:18evanretrieve keys
08:49:19brixenyeah
08:49:51brixenwell, I'm crashing
08:49:56evannite
08:50:02brixennite!
09:50:14ngtyhi, i'm new to rubinus, when i run rake build on my ubuntu jaunty, i get error @ http://pastie.org/462229
09:50:39ngtygot it also in intrepid, not sure how to get around this issue
11:03:18rueStrange, a typedef issue, maybe
14:01:06rueCould be worked around by using a pointer, but still...
14:15:38ieokInvalid switch '-B'
14:28:03rueieok: For `rake`?
14:28:11ieokyep
14:33:09rueWas the compile otherwise successful? I think you posted about an error earlier?
14:34:35rueIt is running OK here off HEAD
14:34:55ieokthe compilation is fine
14:35:15ieokit runs 726 tests.
14:35:31ieokerror was raised after that
14:36:36rueOK
14:36:45rueThe -B is to run library specs too
14:36:55rueieok: Actually--which shell are you using?
14:37:17ieokbash under ubuntu 9.04
14:38:08rueHm. Double-check with `git pull && rake clean && rake`
14:38:19rueCould be something stale, although it seems unlikely
14:38:22ieoki do a clean git pull
14:38:32ieokgit clone
14:38:34ieoksorry
14:41:21ieoksame error for bin/mspec ci -B full
14:42:51rueWhat does `bin/mspec ci -h` say, see the option there?
14:43:59ieok-B is not included.
14:56:04rueIs it in mspec/lib/mspec/utils/options.rb ?
14:56:17rueIf so, maybe you have a separate (very old) mspec installation somewhere?
14:57:19ieoklet me check
14:59:30ieokdef configure(&block) ;on("-B", "--config", "FILE", "Load FILE containing configuration options", &block);end
14:59:37ieokthis one?
15:02:14rueThat one, yes
15:02:42rueSo maybe it is loading some other [utils/]options.rb ?
15:05:15ieoki don't have other mspec installed, this is weired
15:14:25rueSee if you can verify which file it loads
15:15:14ieokokay
15:16:07ieokit loads that file
15:16:24ieoki write 'p 1' at the top
15:17:13ieokthis maybe a platform issue
15:17:19ieokthanks rue!
15:28:42rueWeird.
16:16:19rue"Expected Resolv::ResolvError but got ThreadError (Not owner)"
17:08:24tilmanrue: same here
17:51:42dgtizedbrixen: it hung again running specs, but it only seems to do it while just using rake to run them -- if I use bin/mspec directly it doesn't seem to happen
17:51:57dgtizedmaking it particularly difficult to diagnose
17:52:07brixenit's not that difficult
17:52:14brixenps ux | grep rbx
17:52:22brixengdb vm/vm <pid>
17:52:35brixenfr # to where there is a call_frame
17:52:45brixenp call_frame->print_backtrace(state)
17:52:50brixendiagnosed
17:52:58dgtizedk, next time it happens i will let you know
17:53:56evangood morning
17:54:43brixenmorning
17:58:43dgtizedmorning
17:59:19rueBad morning, bad!
17:59:54dgtizedevan: we still fail around 5 specs in language for reasons related to scope -- throw, and return don't throw the right exception if they are escaping a Thread or a block outside of a method
18:00:49dgtizedand our scoping for "for" is slightly off
18:02:15evanyep
18:02:19evani looked at them all last night
18:02:33evani'm going to ignore the error cases for throw and return
18:02:46evanfor needs to be fixed though
18:02:50evani was going to poke at that today
18:02:53dgtizedk
18:04:13dgtizedbrixen: ok, it's bin/mspec is frozen again, but fr just gives me: #0 0xb7f41e05 in std::_Rb_tree_increment () from /usr/lib/libstdc++.so.6
18:04:33dgtizedand then p call_frame doesn't work because there isn't one in the current context
18:04:45brixendgtized: bt
18:04:47brixenor bt 10
18:04:53brixenfr # to where you see call_frame
18:06:10dgtizedoh 0 is Rb_tree_increment, but 1 is VMManager::prune, and 2 is VM::colect_maybe
18:07:13tilmandgtized: valgrind reports invalid reads/writes at that spot for me in a long mspec run, too
18:07:34evanthere is a thread race there
18:07:41evani've been meaning to look into it
18:07:43evani'll do that now.
18:08:26brixensweet http://tinyurl.com/cjsq5y
18:08:39brixenand it's at powells, I'm going to go buy it today
18:08:40dgtizedk, the weird thing is just that I can't seem to trigger this by running bin/mspec ci -B full, it only happens when I run rake directly
18:09:01evanbrixen: :D
18:09:40brixenthere's also debugging with gdb by rms himself
18:09:45brixenbut that's from 2002
18:09:48brixenancient :P
18:09:56evangdb hasn't changed since then
18:10:03evanjust don't get the 1982 edition
18:10:05evanand you'll be fine.
18:10:17brixenheh
18:10:56dgtizedthat does sound pretty useful
18:13:02dgtizedactually the gdb frontend in emacs is pretty good too, but I always forget about it
18:15:33evanDDD is pretty nice
18:15:41evani use it once every 7 years
18:15:49evanbecause it's SO ugly
18:16:47brixensoon we'll have macruby to write all our pretty os x software and rubinius to make our servers fast :)
18:19:15evanheh
18:23:07evanincoming!
18:23:10boyscoutRemove LookupTableAssociation, add GlobalCacheEntry - 025b132 - Evan Phoenix
18:23:16evanboom, roasted.
18:23:20brixenawesome
18:23:42evanI didn't expose it as a prim, but we could expose the creation of GCE's
18:23:50evanto be used for other things
18:24:00brixenrunning rails -h calls 87,990,094 method, running full CI calls 130,239,282
18:24:05evanthey're all invalidated when Rubinius.inc_global_serial is called
18:24:05brixencaraaazy
18:24:11evandude
18:24:14evanwe need to get a billion
18:24:49brixenhow can rails -h need nearly as many calls as 32361 expectations?
18:24:51brixenhow?
18:25:07evanhah
18:25:10evanit's crazy.
18:36:08brixenevan: rock, I'm seeing ~50sec now for full CI
18:36:22evansweet
18:36:33brixenthat's ~15% better in 2 days
18:36:35brixenyay
18:36:37evani'm still getting 2 spec failures btw
18:36:40evanon socket
18:36:41brixenhm
18:36:45evanshould I just tag them?
18:36:53brixenas unstable yes
18:37:05brixenI'm not seeing any failures on many runs
18:37:06evanthey're
18:37:07evanResolv#getaddress resolves localhost FAILED
18:37:07evanExpected Resolv::ResolvError but no exception was raised
18:37:08evanand
18:37:15evanSocket::IPSocket#getaddress raises an error on unknown hostnames FAILED
18:37:15evanExpected SocketError but no exception was raised
18:37:19evanI know exactly why
18:37:22evanthose are crappy specs
18:37:41evanmy nameserver here returns an address for any host
18:37:50brixenah
18:37:53evanso the specs try things they think don't exist
18:38:02evanbut my system returns IPs for them
18:38:19brixengotcha
18:38:28brixenideas on how to write them better?
18:38:39evanthere is really not a way
18:38:49evanI tried changing them
18:39:11brixenwe need a fake nameserver for the specs
18:39:29brixenI'll have to think about that
18:39:32evanwell, it's using gethostbyname, the libc function
18:39:42evanwhich i don't think lets you specify a nameserver
18:39:46brixenhm
18:39:54evananywho
18:40:00evanconsider it
18:40:12brixenyeah, just tag them
18:40:26evank.
18:40:32tilmanis it considered sane style to use masgn to set locals? :o
18:40:45brixentilman: why not?
18:41:03tilmanbrixen: just wondering.. i find that hard to read :o
18:41:14brixena, b = b, a is the quintessential case for masgn
18:41:23tilmanofc
18:41:42tilmanbrixen: see enumerable.rb:622 for a less fun example
18:41:57tilmanand 628
18:42:15brixenlooks fine to me
18:42:21tilmanok
18:42:23brixenmy brain slurps that right up
18:43:30brixengranted, they could be on 2 lines, but that ranks a 0 on the scale of omgwtf code I've been looking at
18:43:33brixen:)
18:44:55evanthats like -1 on the scale
18:45:21boyscoutCI: 349411c success. .................................................................................................... .................................................................................................... .................................................................................................... ...............................................................................
18:45:35brixenboyscout: you're back!
18:45:39brixenand wet all over
18:45:52evanhe was hung
18:45:57evannot sure why
18:46:00evankilled it and restarted
18:46:19brixenevan: is the CI checking $! ?
18:46:27brixenCI report rather
18:46:40brixenwait $?
18:46:43brixenthat one
18:47:27evani'm not sure
18:47:29evani'll have to check
18:54:51brixenevan: yes, excellent change, ~9,000,000 fewer calls and Thread.recursion_guard is no longer in the top 45
18:54:55brixenhttp://gist.github.com/103924
18:55:29evanis that the spec run?
18:55:33brixenyeah
18:55:44evank
18:58:02evani'm seperating SharedState from VM
18:58:06dbussinkbrixen: some large array that is sorted in the specs?
18:58:09boyscoutCI: 025b132 success. 2647 files, 10133 examples, 32373 expectations, 1 failure, 3 errors
18:58:10evanand i'm going to redo VMManager I think
18:59:08evansuccess? I think not.
18:59:11evanweird
19:00:23tilmanit refers to the build only, doesn't it?
19:00:31tilmannot the spec run
19:00:41evanit should be both
19:00:52evanbut maybe it's not, true.
19:02:40brixenhm, it ran clean for me on elle yesterday, except for socket specs that tried to open a socket own by you
19:02:55evanok
19:03:02evana couple are some bad unix socket specs
19:03:09evanthat didn't clean up i'm guessing
19:03:16brixenare they EPERM errors
19:03:27brixenyeah, the socket specs need a serious review
19:03:58brixenevan: maybe you should run CI under a user I can su to
19:08:19dgtizedbrixen: did it run clean as bin/mspec ci -B full or, under the rake run?
19:11:30brixenit ran the same
19:14:47dgtizedjust got a "rbx: vm/vm.cpp:81: void rubinius::SharedState::remove_vm(rubinius::VM*): Assertion `i != vms_.end()' failed." from a bin/mspec ci -B full
19:15:15evanok
19:15:19evandgtized: i'm working on that now.
19:20:37dgtizedk, sorry it was just the first time it actually reported a reason why it was failing, just thought I'd let folks know
19:24:49brixenheh, suggested caption above github issues "We gladly accept coffee, donuts, code patches. No bugs please, we have better things to do."
19:25:20evanhah
19:46:03rueIs the "success" for vm:test?
19:46:53evanno
21:57:23evanwell, i'm sad to say that it took me almost 2 years before I had my first experience riding my bike in LA traffic
21:57:27evanit was kinda fun
21:59:32brixenkinda, like white knuckles on the grips, fun?
21:59:53evankinda
21:59:58evanit wasn't on a super busy street
22:00:03brixenahh
22:00:19evanbut I could blow by rows of cars
22:00:26evanand fly through stop signs
22:00:33evanpretty sure I made it over faster than I do in a car
22:00:53brixenyes, well be careful in those intersections :P
22:00:53evanstop lights are clearly the great equalizer
22:01:01evan:)
22:01:02brixenyes, they are
22:01:14evandon't tell anyone at EY i'm engaging in reckless behavior
22:01:17evan:)
22:01:22brixenheh yeah
22:01:25evanah crap, public channel.
22:01:26evan:D
22:01:57brixensees a tweet come through "EY banned me from my bike today"
22:01:57brixenheh
22:02:04evanhah
22:02:07evani hope not
22:02:10evani need to ride it more
22:02:19evanfirst I need to get a decent pump though
22:02:24evani've got street wheels on it
22:02:28evanand they need a really high PSI
22:02:39evanhigher than my crappy hand pump can get in easily
22:14:03rueYou should wear a mask if you bike in LA
22:17:29evanfor long rides, yeah
22:17:36evanI was only going a mile
22:19:07ezmobhows rbx going these days guys?
22:19:46brixenezmob: very well
22:19:55brixenezmob: but keep a lid on that :P
22:20:00ezmob;)
22:20:30brixenezmob: I'm on the edge of my seat for the blow minds demo btw :)
22:21:47brixenevan: ok, I went with the crunchy, spicy, *and* grilled option
22:21:53brixenpushing in a sec
22:22:03dbussinkbikes ftw!
22:22:33brixenbasically, the filtering is done with a regexp, omitted if you pass -d, and customized in your own ~/.mspecrc file if you wish
22:22:39dbussinkwhen i was in la i walked faster than the cars :)
22:22:51evandbussink: :D
22:23:10evanbrixen: it's a gordita crunch wrap!
22:23:14brixenheh
22:23:30brixendbussink: those kids in pedal cars don't count ;)
22:24:11dbussinkhehe, we were walking with a few guys and there was this convertable with some women we overtook at each trafic light, so we had excuse to wave each time :P
22:24:24brixenheh
22:24:48brixenyou europeans always get attention :P
22:26:05boyscoutUpdated MSpec source to ef112bbe. - 63f7c37 - Brian Ford
22:26:05boyscoutFilter mspec files from spec failure backtraces. - d6244df - Brian Ford
22:28:29boyscoutCI: d6244df success. 2647 files, 10133 examples, 32373 expectations, 1 failure, 3 errors
22:29:56brixenat least boyscout seems to be deterministic
22:30:52brixenevan: see the full msg for d6244df
22:31:28brixenif you want, we can even take the filter setting out of default.mspec and only have it be a personal thing
22:43:37evanbrixen: rad