|
02:25
FROGGS_ joined
02:49
ilbot3 joined
04:40
cognominal joined
04:44
vendethiel joined
09:21
rurban_ joined
11:55
vendethiel joined
|
|||
| dalek | Heuristic branch merge: pushed 80 commits to MoarVM/even-moar-jit by bdw | 12:58 | |
| konobi | ullo all | 13:10 | |
| how goes the illumos stuffz? | 13:11 | ||
|
14:03
brrt joined
|
|||
| brrt | ohai konobi | 14:03 | |
| hasn't gotten much work so far, sorry about that | 14:04 | ||
| my suggested fix is that we somehow configure two different backends, namely | |||
| illumos/solaris+gcc and illumos/solaris+sunstudio | 14:05 | ||
| the sunstudio bits, they should probably work with the c99 compiler? | |||
| at any rate, as far as i care, only minilua would link with /usr/lib/values-xpg6.o | |||
| i was using dilos, but,... well... it's rough going | 14:06 | ||
| it's a one-man effort and while said one main is highly capable, the full OS isn't really stable | |||
| i've had worse luck with other OS-es | |||
| smartos, especially, i can't get that to work as a 'regular' os | 14:07 | ||
| i kind of have the feeling that is your main interest? | |||
| konobi | brrt: yup... you can use -std= | 14:13 | |
| brrt | actually, that doens't work for gcc | ||
| or, not for the gcc i had installed | |||
| i kind of have the feeling gcc-on-illumos is in flux at this point? | |||
| konobi | brrt: yeah, i'm part of the illumos community and I hadn't heard of it in years | 14:14 | |
| brrt | hmmpf | ||
| konobi | brrt: yeah, I'm a SmartOS user | ||
| user/developer | |||
| brrt: illumos is only built with gcc these days | |||
| brrt | hmm really | 14:15 | |
| konobi | yeah... the sunstudio dependency is purely for the linting tools... all the building is done by gcc | ||
| brrt | here's what we can do, as far as i'm concerned | ||
| i can get a vm, or a walkthrough-onto-a-vm, or an ssh-into-a-vm, of your reference system, and i can try to make it work on that | 14:16 | ||
| konobi | sure... lemme spin up a zone | ||
| brrt | that would be awesome | ||
| i cannot spend $large-amounts-of-tuits on getting this to run, because i don't have them, and there are larger, higher-priority things (for me) to do | 14:17 | ||
|
14:18
vendethiel- joined
|
|||
| timotimo | even-more-jit please | 14:18 | |
| not saying i don't care about illumos | |||
| i mean ... people can use moar even when even-moar-jit doesn't land yet, whereas people on illumos can't use moar at all yet | 14:19 | ||
| brrt | aye, that is true | ||
| although i must say that illumos is fun :-) | 14:21 | ||
| konobi | brrt: can you gist me your public key? | ||
| brrt | aye, coming up | 14:22 | |
| konobi | timotimo: illumos has some tooling that make it great for performing analysis/testing/debugging moarvm | ||
| timotimo | why didn't you say so immediately? :) | 14:23 | |
| it has DTrace or ktap or something? | |||
| brrt | timotimo: i agree, illumos looks awesome on the face of it | 14:27 | |
| it's just.... probably better for people who know solaris | 14:28 | ||
| konobi | timotimo: dtrace, mdb, libumem, kstat and more! | 14:35 | |
| timotimo | brrt: would it take you an alot of time to write the jit code for truncate/extend, switch between signed/unsigned and such things? | 14:43 | |
| brrt | no | ||
| timotimo | it wouldn't come up in code often | ||
| brrt | that would take very small amounts of time, actually | ||
| timotimo | like, rakudo itself doesn't use that, ever | ||
| brrt | truncate is especially simple; it's just 'use this thing as a smaller thing' | 14:44 | |
| timotimo | want me to prepare the graph.c stuff for you and entries into the switch statement? | ||
| brrt | on x86 | ||
| oh, you mean for the current jit | |||
| timotimo | yes | ||
| sorry about that :) | |||
| brrt | better idea | ||
| make a testcase | |||
| timotimo | but i don't even know! :D | 14:45 | |
|
14:45
pmurias joined
|
|||
| timotimo | damn. hitting those slow path binder code paths really takes a toll on allocations done | 14:46 | |
| pmurias | what is div_u used for? | ||
| timotimo | divides two unsigned 64bit ints and stores the result as an unsigned 64bit int | 14:47 | |
| um ... | 14:49 | ||
| either i did the build wrong | |||
| or i really am at fault for this | |||
| but ... how the hell? | 14:50 | ||
| konobi | timotimo: here's a good example: blog.8thlight.com/colin-jones/2015...-slow.html | ||
| timotimo | could it be the jit implementation of some method-related function is absolutely wrong? | ||
| ah, that one | 14:51 | ||
| i read that :) | |||
| brrt | method related function? | ||
| timotimo | well, yeah | ||
| here's what i mean: | |||
| 527713 calls to "<anon> gen/moar/m-BOOTSTRAP.nqp:2048" | |||
| that's with my "my jit advancements cut out" branch | |||
| 1882385 calls to that very same function | 14:52 | ||
| that's without the branch | |||
| hm, actually i think that's on latest moar master | |||
| brrt | that... would be weird | ||
| timotimo | that routine goes from 38.3% inclusive time, 14.55% exclusive time | ||
| to 72%/62.5% | |||
| switches places with "bind_one_param", which was 1st in one case and 2nd in the other | 14:53 | ||
| brrt | huh | ||
| timotimo | that's method find_best_dispatchee | ||
| the anon one | |||
| pmurias | timotimo: what I'm really asking for what uses div_u | 14:54 | |
| timotimo | the call graph also doesn't show that anon routine at all, so i can't tell who/what is causing it to call | ||
| pmurias | * is what | ||
| timotimo | pmurias: no clue :) | ||
| would there be any reason our jitted code wouldn't hit the multi cache? just in general, i mean? | 14:55 | ||
| brrt | hmmpf | 14:56 | |
| no, i wouldn't say it at first | |||
| i'm going to have to be off for a bit | 14:57 | ||
| see you later | |||
| timotimo | mhh, ok | ||
| see ya! | |||
| thing is... i've seen calls to find_best_dispatchee in the past where i had no idea where they came from | 15:07 | ||
| my recent commits cause more frames to be jitted, and the calls to find_best_dispatchee skyrocket | |||
| disabling the jit entirely also causes the speed to go back to "blazing fast" when enabling it has them at "slowed to a crawl" | 15:08 | ||
| oh, huh. weird! | 15:13 | ||
| disabling the jit and running the profile gives me 527713 calls to <anon> and 1852719 calls to bind_one_param | |||
| that's the exact same amount i get with my commits reverted | |||
|
15:20
patrickz joined
15:21
zakharyas joined
|
|||
| timotimo | so that's not because of the jit. but why then? | 15:23 | |
| patrickz | .tell mst That strange function rakudobrew injects into the shell is there to allow rakudobrew to modify an environment variable in the current shell (needed for the "shell" subcommand). It's a direct rip off of plenv. If you don't use that feature you don't need that function. | 15:24 | |
| timotimo | these 527k and 1.8m calls are also there when spesh is disabled | 15:25 | |
| so that's not the right place to look ... huh. | |||
| konobi | wonder what the cache strategy is for hotpathing | 15:26 | |
| jnthn | timotimo: Do we jit the find multi cache ops? | 15:30 | |
| Could their jit be busted? | |||
| dalek | arVM: bd56e2e | timotimo++ | src/ (4 files): Work around performance regression in the jit. Something causes a gigantic amount of calls to find_best_dispatchee. Until the cause for that is properly investigated and fixed, 2ce4b7a | cygx++ | src/io/syncfile.c: fix typo in error message |
15:32 | |
| timotimo | we do. i looked over them, but they don't seem busted | ||
|
15:33
dalek joined
|
|||
| timotimo | i'd like to bump NQP and MOAR revision to this so that our users get better performance for the time being | 15:33 | |
| +1/-1? | |||
| jnthn | +1 | 15:34 | |
| timotimo | good | ||
| jnthn | It's also possible that invocation isn't checking the multi cache properly. | ||
| patrickz | wrong channel... | 15:36 | |
| timotimo | so invoke_* on a proto method/sub? | ||
| emit_invoke also calls into MVM_frame_find_invokee_multi_ok | 15:39 | ||
| jnthn | Hm | ||
| Yeah, that'd be the place | |||
| Very odd | |||
| But yes, let's revert and bump for now and diagnose later | 15:40 | ||
| timotimo | revert & bump is done | ||
| and the jit also knows about fastinvoke sufficiently well it seems | 15:42 | ||
| jnthn | Yeah | 15:43 | |
| I didn't "prove" the multi dispatch cache miss is the problem conclusively, fwiw, I just observed that we ended up slow-pathing a lot | |||
| It's possible it's something else going wrong that creates that effect | |||
| timotimo | "a lot" is an understatement | ||
| jnthn | Well, Perl 6 is built around multi-dispatch | 15:44 | |
| timotimo | the profile definitely shows a vast amount of time is spent inside find_best_dispatchee | ||
| jnthn | And good performance relies a lot on finding ways to cheat on that | ||
| timotimo | gist.github.com/smls/9adf4b6707938445c050 - i was running this for profiling | ||
| jnthn | So yeah, it's perhaps the most painful optimization you could break, aside from method caching. | ||
| timotimo | spending 62.5% exclusive time in find_best_dispatchee is *tough* | 15:45 | |
| konobi | jnthn: tried using ARC? | ||
| jnthn | Right. That's how much we rely on it. | ||
| timotimo | oh, btw, i'd like to put the size of an allocated thing into the profile, too. sounds sensible? | ||
| jnthn | konobi: Don't think I've even *used* a language that does that, let alone implemented one. :) | ||
| timotimo | for that purpose, perhaps a flag "mallocs some extra data" might be interesting | 15:46 | |
| i don't know what ARC is ... only know "arc flags" for making path finding faster | |||
| jnthn | I suspect Automatic Reference Counting | ||
| timotimo | oh | ||
| jnthn | The thing that Swift/Objective C do | ||
| To handwave a bit, "do static analysis to work out where the calls to free go" | 15:47 | ||
| Guess it's highly related to escape analysis. | |||
| timotimo | we're hoping to get escape analysis at one point, anyway | ||
| perhaps that'll be enough for our purposes? | 15:48 | ||
| jnthn | My impression is using ARC is more a language design decision | ||
| Escape analysis is just an analysis, so can apply to either...it's what you do with the escape information that's the exciting thing :) | 15:49 | ||
| konobi | jnthn: nope... adaptive replacement cache | 15:50 | |
| timotimo | ah, fair enough | ||
| jnthn | (size of allocated thing) can work, but arrays/hashes resize over time... | ||
| konobi: Dammit, too many acronyms :P | |||
| timotimo | yeah. that's what the flag is for. i'd've only tracked object header + object body and maybe have a little star saying "this object does its own mallocing" | ||
| jnthn | konobi: Also makes more sense in context :) | 15:51 | |
| timotimo | hehe | ||
| jnthn | But no...and doing so would need some consideration of concurrency | ||
| Since we need at least queries of the cache to take place lock free | 15:52 | ||
| timotimo | also, i thought we'd be using escape analysis to put allocation of some things onto "the stack" instead of in our fully gc-managed heap | ||
| konobi | that should be fine | ||
| jnthn | And that's easy to achieve with an append-only cache. | ||
| Yeah, I think it's possible to engineer. | |||
| But we should actually meausre if we can get a win out of it first. | |||
| As in, whether full caches are common | 15:53 | ||
| konobi | or at least that it does no worse =0) | ||
| timotimo | today is headache-day ... it's not getting better :S | 15:54 | |
| jnthn | No, it'd actually have to do notably better | ||
| As a general Moar architectural principle, anything that increases code complexity has to pull its weight. | |||
| timotimo | "time spent on designing and implementing" is a big cost for us | ||
| konobi | jnthn: java.net/projects/solaris/sources/...?rev=13149 | 15:55 | |
| that's probably a good start... heavily commented =0) | |||
| jnthn | Yes, thanks | 15:56 | |
| And obviously more involved than what we have now :) | |||
| geekosaur | um? which ARC are we talking about here? | ||
| jnthn | Well, we've been through two of them so far :) | 15:57 | |
| Niether is arc welding... | |||
| geekosaur | zfs's arc is an adaptive filesystem cache. there are some similarities but not much | ||
| jnthn | en.wikipedia.org/wiki/Adaptive_rep...ment_cache anyway | ||
| geekosaur | (if you;re thinking of e.g. apple's automatic refcounting) | ||
|
16:14
Ven joined
16:51
vendethiel joined
17:42
Ven joined
18:11
vendethiel joined
18:56
virtualsue joined
20:47
virtualsue joined
|
|||
| diakopter | I still have to disable jit to build nqp on latest msvc | 21:51 | |
| jnthn | diakopter: Did you figure out why at all? I have a hazy memory of some 32-bit/64-bit confusion... | 22:03 | |
| diakopter | jnthn: it was misconfusion | 22:08 | |
| it's 64-bit for sure | |||
| konobi | oh... yet more ridiculousness... copy.sh/v86/ | 22:19 | |
| TimToady | m: say EVAL "42" | 23:11 | |
| camelia | rakudo-moar e8d924: OUTPUT«42» | ||
| TimToady | m: say EVAL 42 | ||
| camelia | rakudo-moar e8d924: OUTPUT«===SORRY!=== Error while compiling /tmp/5VGxLhs_KOEVAL is a very dangerous function!!! (use MONKEY-SEE-NO-EVAL to override,but only if you're VERY sure your data contains no injection attacks)at /tmp/5VGxLhs_KO:1------> say EVAL 42⏏…» | ||
| TimToady | m: use Test; say EVAL 42 | 23:12 | |
| camelia | rakudo-moar e8d924: OUTPUT«===SORRY!=== Error while compiling /home/camelia/rakudo-m-inst-2/share/perl6/sources/5A873B6C22E600D8BE41B8846C251CD7D914CFE3EVAL is a very dangerous function!!! (use MONKEY-SEE-NO-EVAL to override,but only if you're VERY sure your data contain…» | ||
| jnthn | Does it really need 3 !s? :) | ||
| Also probably wants a re-word for the literal thing | |||
|
23:17
rurban_ joined
|
|||
| arVM: 9a79010 | lizmat++ | src/io/syncfile.c: Merge pull request #317 from cygx/patch-1 fix typo in error message |
|||
| lizmat | m: 42.EVAL | ||
| camelia | rakudo-moar e8d924: OUTPUT«Unhandled exception: While looking for '/home/camelia/rakudo-m-inst-2/share/perl6/runtime/perl6.moarvm': no such file or directory» | ||
| lizmat | m: 42 | 23:22 | |
| camelia | rakudo-moar e8d924: OUTPUT«Unhandled exception: While looking for '/home/camelia/rakudo-m-inst-2/share/perl6/runtime/perl6.moarvm': no such file or directory» | ||
| lizmat | Ah, I guess something got nuked and it's now rebuilding ? | ||
| TimToady | yes, but waiting for jvm build to finish, or we run out of mem | 23:24 | |
| diakopter | no swap? | 23:29 | |
| TimToady | m: use Test; say EVAL 42 | 23:31 | |
| camelia | rakudo-moar af5b39: OUTPUT«42» | ||