Show enters and exits. Hide enters and exits.
| 00:10:26 | ddub | gets a big grin on his face |
| 00:10:31 | ddub | someone forked urb |
| 00:21:25 | evan | haha |
| 00:21:31 | evan | did they add anything? |
| 00:29:32 | mernen | back |
| 00:43:01 | ddub | evan: yes, a configure script! |
| 00:43:10 | ddub | now I have cross-platform build |
| 00:43:24 | ddub | unfortunately, they only added configure and not the corresponding configure.ac |
| 00:43:37 | ddub | so its now by far the largest thing in the repo |
| 00:43:45 | evan | hah |
| 00:43:46 | evan | course |
| 00:43:59 | evan | generate configure files are larger than 50% of the projects that use them. |
| 00:44:02 | evan | generated |
| 00:44:33 | ddub | I submitted a patch for ragel because 95% of my compiled java code size was the tables it was generating |
| 00:44:44 | evan | unsurprising. |
| 00:44:47 | ddub | there is a limit on how large a pre-defined array or a method can be |
| 00:45:33 | ddub | so rather than putting it in a single array, they allocated one statically and called table[3251] = 4; table[3252]=5; |
| 00:45:41 | ddub | in methods like build_1, build_2, build_3 |
| 00:45:48 | ddub | and a static build that called all those methods in sequence. |
| 00:46:17 | ddub | the generated stack code for all that was immense. As was the debug information |
| 00:46:57 | ddub | I instead defined multiple private static final arrays and had a static method to build the working jump table from them. |
| 00:47:18 | ddub | lo and behold, my jar shrunk to 25% of its previous size |
| 00:47:46 | ddub | whats next on the rubinius optimization path? |
| 00:48:42 | ddub | primitive inlining, phase 1? |
| 00:51:04 | evan | primitive and FFI inlining are soon, yes. |
| 00:51:11 | evan | as well as generic method inlining |
| 00:59:49 | ddub | I wish there was some way we could work together |
| 00:59:54 | ddub | but urb doesn't really need any of that |
| 01:00:12 | evan | hah |
| 01:00:14 | evan | true |
| 01:00:20 | evan | no methods to inline or specialize |
| 01:00:48 | ddub | I may need to write a paper on my method of evaluating code in constant time |
| 01:01:20 | ddub | its all about how you define the word 'evaluating' |
| 01:02:23 | evan | your program, given a program that modifies no state, computes in constant time |
| 01:02:57 | evan | (results may vary given programs that modify state) |
| 03:01:19 | ddub | evan: programs that modify state are so... dirty |
| 06:29:38 | tmornini | Howdy all. I get hanging specs when I run sometimes, no CPU usage, unable to cntl-c. Have you seen this? |
| 06:31:24 | brixen | tmornini: I'm assuming you are running with the jit on? |
| 06:31:47 | tmornini | Yes, correct. Trying to narrow down with -V now. |
| 06:32:07 | brixen | yeah, it's a known issue that most commonly afflicts linux |
| 06:32:31 | brixen | you can gdb vm/vm <process id> when it hangs |
| 06:32:37 | tmornini | OK, seeing it regularly here on OS X, happens in different specs. |
| 06:32:41 | brixen | bt should tell you where it is hung |
| 06:32:47 | brixen | do bt 10 |
| 06:32:58 | tmornini | What do I issue that into? |
| 06:32:59 | brixen | then look for a frame that has call_frame as an arg |
| 06:33:20 | brixen | so, you've got the specs running in one terminal |
| 06:33:24 | brixen | it appears to hang |
| 06:33:35 | tmornini | Yes |
| 06:33:39 | brixen | in another terminal, ps ux | grep rbx |
| 06:33:46 | brixen | get the pid |
| 06:33:56 | brixen | in the rbx dir, run gdb vm/vm pid |
| 06:33:57 | tmornini | OK |
| 06:34:05 | brixen | that will attach to the running process |
| 06:34:14 | brixen | once your are in gdb, bt 10 |
| 06:34:38 | brixen | look for a call that has call_frame |
| 06:34:52 | brixen | type p call_frame->print_backtrace(state) |
| 06:35:11 | brixen | look at your original terminal and you should have a ruby backtrace |
| 06:36:48 | tmornini | http://gist.github.com/138014 |
| 06:37:44 | brixen | sorry |
| 06:37:50 | brixen | fr 3 |
| 06:37:52 | brixen | then run that |
| 06:38:00 | brixen | you have to switch to that frame |
| 06:38:19 | brixen | just pass the symbol state |
| 06:38:47 | tmornini | OK, waitpid |
| 06:40:35 | tmornini | fascinating! wait_spec just blew up... |
| 06:41:03 | tmornini | http://gist.github.com/138017 |
| 06:41:10 | tmornini | I've seen this before. |
| 06:41:23 | tmornini | But all this is happening more regularly now than before. |
| 06:41:42 | evan | tmornini: type |
| 06:41:43 | evan | frame 3 |
| 06:41:45 | tmornini | In any case, you already know about this, so I'll be quiet now. :-) |
| 06:41:48 | evan | p call_frame->print_backtrace(state) |
| 06:41:52 | evan | and gist the output |
| 06:41:56 | evan | we need to see the real thing. |
| 06:42:08 | tmornini | Hey Evan. |
| 06:42:12 | evan | the backtrace will show up in the other terminal. |
| 06:42:31 | tmornini | I've seen two different behaviors, hang and this: http://gist.github.com/138017 |
| 06:43:00 | tmornini | If it will hang again, I will gist that up as well. |
| 06:43:02 | evan | what about that file? |
| 06:43:07 | evan | just the file doesn't tell me much |
| 06:43:13 | evan | can you get me a backtrace? |
| 06:43:24 | tmornini | Yeah, but the process is terminated at that point. |
| 06:43:29 | evan | why |
| 06:43:31 | evan | it shouldn't be |
| 06:43:32 | tmornini | I did not terminate it...boom! |
| 06:43:33 | evan | you're in it via gdb. |
| 06:43:42 | tmornini | No, not in that one. |
| 06:43:46 | tmornini | Different behavior. |
| 06:43:55 | tmornini | Sometimes it just terminates all by itself, just like that gist. |
| 06:44:07 | evan | i'm confused. |
| 06:44:10 | evan | but if you get a hang |
| 06:44:12 | tmornini | OK, I'm hanging in fork_spec now. Will gist it up. |
| 06:44:16 | evan | please generate a C and a ruby backtrace |
| 06:44:22 | tmornini | Doing right now. |
| 06:47:23 | tmornini | http://gist.github.com/138021 |
| 06:48:36 | tmornini | Just edited gist to include C backtrace |
| 06:49:08 | ddub | is incredibly tired |
| 06:49:30 | evan | hm |
| 06:49:31 | evan | ok |
| 06:49:38 | evan | mutex locking problems it looks like |
| 06:49:48 | evan | hopefully i can repro tomorrow and see it |
| 06:50:34 | tmornini | How long has this been happening? The terminate thing popped up a few times over the last couple of weeks, but the hanging is quite recent. |
| 06:50:35 | ddub | ewww |
| 06:50:42 | ddub | what is posix behavior if you fork while holding a lock? |
| 06:50:46 | evan | tmornini: i dunno how long |
| 06:50:51 | evan | it's not happening to me or brixen |
| 06:50:54 | evan | or anyone else |
| 06:50:59 | evan | we saw it a few times on linux |
| 06:51:04 | evan | but i haven't yet debugged that. |
| 06:51:07 | tmornini | Hanging seems to have started with a new laptop. |
| 06:51:20 | evan | "the terminate thing" |
| 06:51:21 | tmornini | Terminate has been here for a while. |
| 06:51:22 | evan | whats that? |
| 06:51:36 | tmornini | http://gist.github.com/138017 |
| 06:51:58 | evan | that doesn't say anything |
| 06:52:02 | evan | i don't know what i'm looking at |
| 06:52:14 | evan | oh, it's wide. |
| 06:52:20 | tmornini | There you go. |
| 06:52:24 | evan | looks like the same thing. |
| 06:52:31 | evan | but I dunno |
| 06:52:34 | evan | haven't see it here. |
| 06:52:40 | tmornini | Perhaps, but sometimes it hangs, othertimes it outputs that and terminates. |
| 06:52:50 | tmornini | i.e. they appear different. |
| 06:52:51 | evan | terminates means crashes |
| 06:52:54 | evan | typically. |
| 06:53:03 | evan | if you open up Console.app |
| 06:53:07 | tmornini | OK, so if it's the same bug, sometimes it hangs, othertimes it crashes. |
| 06:53:11 | evan | i'll bet there are a whole bunch of crash logs for it |
| 07:00:38 | tmornini | Where are crash logs stored? |
| 07:18:33 | evan | um |
| 07:18:37 | evan | look in console.app |
| 07:18:40 | evan | they should be in there somewhere |
| 16:48:20 | manveru | evan: shouldn't rubyspec say that Object#extend takes multiple modules? |
| 16:48:31 | manveru | err Kernel#extend |
| 17:17:01 | evan | manveru: yes |
| 17:22:01 | manveru | k... |
| 17:22:20 | manveru | someone should run facets against the rubyspec :P |
| 17:31:18 | brixen | manveru: yeah that's a good idea |
| 17:32:01 | brixen | manveru: at my rubyspec talk, someone suggested loading ActiveSupport and running the specs |
| 17:32:21 | brixen | see if Rails changes exiting Ruby APIs or only extends them |
| 18:10:37 | evan | my my, fiddling with how local variables are looked up causes all kinds of fun stuff to fail |
| 18:11:39 | brixen | heh |
| 18:11:47 | brixen | now where did that local go |
| 18:12:26 | evan | i'm making it so the set/push_local opcodes do the sensible thing |
| 18:12:42 | evan | which is, always manipulate the current scope |
| 18:12:50 | evan | before, they always manipulated the top_scope |
| 18:13:00 | evan | which, in a block, is the top most creater scope |
| 18:13:03 | evan | which was just silly. |
| 18:14:12 | brixen | ahh yeah |
| 18:17:45 | evan | the way i'm reorganizing them |
| 18:18:01 | evan | locals in the current scope can be written always without running the write barrier |
| 18:19:26 | brixen | sweet |
| 18:21:45 | evan | GR. |
| 18:21:50 | evan | the library specs are crashing. |
| 18:52:37 | dbussink | evan: nasty crashes? |
| 18:53:05 | evan | not sure yet |
| 18:58:47 | dbussink | evan: btw, saw you guys found the 64 bit jit issue, funny one :p |
| 18:59:44 | evan | yeah |
| 18:59:51 | evan | silly macros |
| 19:07:55 | dgtized | so any idea why the bin/mspec ci jit benchmark is consistantly failing to give a result? |
| 19:08:23 | evan | nope |
| 19:09:18 | dgtized | could boyscout run twice, once without jit, and then once with? |
| 19:09:27 | evan | it does. |
| 19:10:17 | dgtized | huh, alright, I guess I had not caught that |
| 19:10:55 | dgtized | that gets posted to integrity as well or no? |
| 19:11:03 | evan | no |
| 19:11:08 | evan | integrity is just CI. |
| 19:12:31 | brixen | dgtized: you can run the benches yourself |
| 19:12:38 | brixen | see benchmark/utils/cron_daily |
| 19:12:51 | brixen | see if you can track down why it doesn't finish |
| 19:14:10 | dgtized | brixen: is there a way to only run the ci portion of the benchmark, since that is the portion that fails? |
| 19:15:00 | evan | dgtized: read the scripts |
| 19:15:04 | evan | you'll see it in there. |
| 19:15:09 | brixen | benchmark/utils/README |
| 19:28:32 | dgtized | it just says that the status was a Timeout |
| 19:28:56 | dgtized | it doesn't generate any other logs other then the benchmark/results yaml file? |
| 19:38:22 | dgtized | can someone try running: rbx -Xjit.enabled mspec/bin/mspec-ci spec/frozen/core |
| 19:38:43 | dgtized | that appears to hang on some spec |
| 19:39:06 | dgtized | I'm trying to attach a gdb instance to it, but there are several processes, and it's not clear which one has hung |
| 19:39:42 | evan | dgtized: it's a linux problem |
| 19:39:51 | evan | please try and debug it |
| 19:39:55 | evan | it's on my list of things to get to |
| 19:40:32 | mernen | dgtized: is jit running fine for you? |
| 19:41:37 | dgtized | mernen: if I do a bin/mspec ci -T-Xjit.enabled it works fine, but specifically running rbx to use mspec/bin/mspec-ci is not |
| 19:41:44 | mernen | yesterday I was getting into a recursive loop while initializing the vm |
| 19:42:03 | mernen | not even rbx -e '' would run without overflowing the stack |
| 19:42:29 | dgtized | evan: I have two processes in a wait_pid, one in a fork, one in a mutex_lock |
| 19:43:03 | dgtized | and two defunct processes |
| 19:43:53 | dgtized | mernen: rbx -e '' works fine for me, as does rbx -Xjit.enabled -e '' |
| 19:57:05 | mernen | dgtized: weird, I just made a clean build and I'm still having problems |
| 20:23:33 | dbussink | mernen: i'm seeing failures on 64 bit with jit.enabled |
| 20:24:18 | mernen | I don't just see failures, I'm completely unable to use rbx with jit.enabled |
| 20:24:44 | dbussink | mernen: yeah, crashes for me too |
| 20:24:57 | dbussink | mernen: but 64 bit hasn't really been tested recently |
| 20:25:22 | mernen | reverting the uncommon branch commit it seems to work (at least doesn't crash, haven't tested more) |
| 20:25:26 | mernen | I'm checking that now |
| 20:26:42 | evan | mernen: oh |
| 20:26:46 | evan | thats it. |
| 20:26:49 | evan | der. |
| 20:27:03 | evan | the uncommon branch code is computing the sp value wrong on 64bit |
| 20:27:12 | mernen | evan: I'm looking at the changes to jit_operations |
| 20:27:19 | mernen | ptrtoint, subtract_pointers |
| 20:27:23 | evan | yeah |
| 20:27:28 | evan | subtract_pointers is wrong on 64bit |
| 20:27:33 | evan | it needs to divide by 3 |
| 20:27:40 | evan | at the very least |
| 20:27:54 | evan | it also needs to use IntPtrTy rather than Int32Ty |
| 20:28:01 | evan | when it converts the pointers to ints |
| 20:28:04 | evan | so they don't get truncated. |
| 20:29:23 | mernen | I still don't understand the division by 3 though |
| 20:30:04 | evan | because the pointers are 8 bytes wide |
| 20:31:12 | evan | it's doing pointer math |
| 20:31:32 | mernen | I expected just to divide by 8 |
| 20:31:45 | evan | er. |
| 20:31:50 | evan | yes. |
| 20:31:51 | evan | sorry. |
| 20:31:57 | evan | shift by 3 |
| 20:32:01 | evan | is what i was thinking |
| 20:32:06 | mernen | oh, okay |
| 20:32:06 | evan | same diff |
| 20:32:10 | mernen | yeah, makes sense now |
| 20:32:42 | dbussink | evan: testing with sizeof(uintptr_t) / 8 now |
| 20:32:58 | evan | k. |
| 20:37:46 | mernen | this is what I've got: http://gist.github.com/138362 |
| 20:38:54 | evan | thats wrong |
| 20:38:58 | evan | the change in JITVisit is wrong |
| 20:39:03 | evan | that should stay Int32Ty |
| 20:40:11 | mernen | I should cast the result of subtract_pointers to int32 then? |
| 20:41:19 | evan | sure |
| 20:41:27 | evan | well actually |
| 20:41:32 | evan | you can change that |
| 20:41:43 | evan | but you need to change continue_uncommon |
| 20:41:50 | evan | and VMMethod::uncommon_interpreter |
| 20:48:06 | mernen | I think I see it |
| 20:50:22 | dbussink | evan: looks like it's even necessary to prevent all kinds of type mismatches in llvm |
| 20:50:32 | evan | could be |
| 21:01:08 | dbussink | evan: what's the easiest way to see where a Assertion `S1->getType() == S2->getType() && "Cannot create binary operator with two operands of differing type!" comes from? |
| 21:01:11 | dbussink | gdb? |
| 21:09:40 | mernen | evan: updated it http://gist.github.com/138362 |
| 21:10:54 | dbussink | mernen_: does it run with jit with these changes? |
| 21:11:09 | mernen | it runs basic tests, but segfaults easily |
| 21:11:12 | mernen | I'm investigating that |
| 21:14:32 | slava | howdy evan |
| 21:47:00 | dbussink | mernen: any progress? |
| 21:48:17 | mernen | well, turns out it crashes even without jit |
| 21:48:56 | mernen | so that might be good news, depending on how you see it |
| 21:49:01 | dbussink | mernen: hm, that doesn't happen for me atm |
| 21:49:10 | mernen | try: bin/rbx -rmatrix -e '' |
| 21:49:19 | mernen | or mspec ci |
| 21:49:23 | mernen | both crash very quickly here |
| 21:49:41 | dbussink | hmm, works for me here |
| 21:49:45 | dbussink | on 64 bit |
| 21:50:38 | mernen | ok, lemme try a clean build again then |
| 21:54:27 | mernen | yeah, it works now |
| 21:55:17 | mernen | though mspec ci library/ipaddr still crashes, jit or not |
| 21:55:58 | dbussink | mernen: strange, it doesn't crash on it for me |
| 22:59:51 | mernen | dbussink: well, if it works for you, I'm gonna push it |
| 23:00:02 | mernen | maybe I'll check my crashes later |
| 23:02:08 | boyscout | Make uncommon branch code word size-independent - d91ad2a - Daniel Luz |
| 23:06:48 | boyscout | CI: d91ad2a success. 2723 files, 10829 examples, 33841 expectations, 0 failures, 0 errors |
| 23:44:39 | dgtized | how come this is considered particularly newsworthy? http://www.infoq.com/news/2009/06/macruby-drops-gil-threading |
| 23:48:33 | slava | why not? |
| 23:49:06 | yakischloba | shouldn't it be? |
| 23:50:22 | yakischloba | the 'primary' ruby implementations don't have parallel thread execution, so it is worth noting that that one now does |
| 23:52:52 | dgtized | well for one it neglects to comment on what extent rubinius has partial removal of the GIL |
| 23:53:11 | yakischloba | does that make the topic un-newsworthy? |
| 23:54:08 | dgtized | no, but it makes it less balanced and more like hype without substance |
| 23:54:27 | yakischloba | i think hype without substance would be like |
| 23:54:39 | yakischloba | a title of "macruby removes gil!" and then article body stating "macruby PLANS to remove the gil" |
| 23:55:29 | yakischloba | the article seems to state that something was actually done |
| 23:56:22 | yakischloba | maybe you could email the author and let them know that you think rubinius should be mentioned |
| 23:56:43 | yakischloba | that doesn't mean there should not be an article telling us about what macruby is doing |