thedarkone2 has quit [Read error: Connection reset by peer]
thedarkone2 has joined #jruby
camlow325 has quit [Quit: WeeChat 1.5]
camlow325 has joined #jruby
tjohnson has quit [Quit: Connection closed for inactivity]
camlow325 has quit [Quit: WeeChat 1.5]
enebo has joined #jruby
enebo has quit [Client Quit]
Hobogrammer has joined #jruby
jhass has quit [Ping timeout: 250 seconds]
johnsonch_afk is now known as johnsonch
jhass has joined #jruby
<GitHub32> [jruby] chrisseaton pushed 10 new commits to truffle-head: https://git.io/v6NKV
<GitHub32> jruby/truffle-head 57909b1 Chris Seaton: [Truffle] Start to use our own internal source section when building the AST....
<GitHub32> jruby/truffle-head 3c27bfb Chris Seaton: [Truffle] Remove some dead code.
<GitHub32> jruby/truffle-head d245ce1 Chris Seaton: [Truffle] Get nodes to directly give us our new source sections.
<GitHub8> [jruby] chrisseaton pushed 1 new commit to truffle-head: https://git.io/v6N6Z
<GitHub8> jruby/truffle-head 81bfe6a Chris Seaton: [Truffle] Update LabsJDK.
Liothen has quit [Excess Flood]
cprice404 has quit [Ping timeout: 260 seconds]
Liothen has joined #jruby
Liothen has quit [Changing host]
Liothen has joined #jruby
tcrawley is now known as tcrawley-away
johnsonch is now known as johnsonch_afk
pawnbox has quit [Remote host closed the connection]
pawnbox has joined #jruby
etehtsea has joined #jruby
<GitHub191> [jruby] kares pushed 2 new commits to jruby-1_7: https://git.io/v6NyS
<GitHub191> jruby/jruby-1_7 5c4dcff Daniel Smith: Backport Change script file restriction from 9000
<GitHub191> jruby/jruby-1_7 e1eb184 Karol Bucek: Merge pull request #4115 from jellymann/fix-stdin-bug-1_7...
<GitHub126> [jruby] kares closed pull request #4115: Backport "Change script file restriction" from 9000 (jruby-1_7...fix-stdin-bug-1_7) https://git.io/v6bAB
etehtsea has quit [Quit: Computer has gone to sleep.]
<travis-ci> jruby/jruby (jruby-1_7:e1eb184 by Karol Bucek): The build has errored. (https://travis-ci.org/jruby/jruby/builds/155245906)
etehtsea has joined #jruby
griest has joined #jruby
<travis-ci> jruby/jruby (jruby-1_7:02c988a by Charles Oliver Nutter): The build was fixed. (https://travis-ci.org/jruby/jruby/builds/154899323)
<griest> hey I think your website is down
griest has quit [Quit: http://www.kiwiirc.com/ - A hand crafted IRC client]
<kares> http://jruby.org is up for me
c0de1 has quit [Ping timeout: 264 seconds]
thedarkone2 has quit [Quit: thedarkone2]
c0de1 has joined #jruby
c0de1 has quit [Changing host]
c0de1 has joined #jruby
rsim has joined #jruby
<travis-ci> jruby/jruby (jruby-1_7:e1eb184 by Karol Bucek): The build has errored. (https://travis-ci.org/jruby/jruby/builds/155245906)
claudiuinberlin has joined #jruby
<travis-ci> jruby/jruby (jruby-1_7:e1eb184 by Karol Bucek): The build passed. (https://travis-ci.org/jruby/jruby/builds/155245906)
joy_ has joined #jruby
<joy_> Why this happens? java -cp /Users/leonardostefani/.rvm//rubies/jruby-9.0.5.0/lib/jruby.jar test.class -> Error: Could not find or load main class test.class
<kares> joy_: because test.class is not on the cp
etehtsea has quit [Quit: Textual IRC Client: www.textualapp.com]
<joy_> :) how to solve that? I`m newbie
<joy_> something like this: export CLASSPATH=lib/jruby.jar:lib/asm-3.0.jar:lib/jna.jar:. ?
<kares> joy_: where is test.class ?
<joy_> in my /home/leonardostefani/hello_world
<kares> if its in the dir add the dir to -cp
<joy_> same problem :/
<kares> joy_: does it work if you move test.class into cwd?
<joy_> no, in my /hello_world dir only exists the .rb file and the .class
<kares> assume you did cp /home/leonardostefani/hello_world and from there run the above java -cp ... ?
<kares> joy_: sorry my bad - java rulez .class is auto assumed, do :
<kares> java -cp /Users/leonardostefani/.rvm//rubies/jruby-9.0.5.0/lib/jruby.jar test
<joy_> works :)
<joy_> btw exists some way to create .jar file?
_whitelogger has joined #jruby
<GitHub77> jruby/truffle-travis 0e33a2b Benoit Daloze: Travis: simplify install and script
<GitHub77> [jruby] eregon pushed 1 new commit to truffle-travis: https://git.io/v6Ac9
_whitelogger has joined #jruby
<travis-ci> jruby/jruby (truffle-travis:0e33a2b by Benoit Daloze): The build has errored. (https://travis-ci.org/jruby/jruby/builds/155312275)
hobodave has joined #jruby
<GitHub97> [jruby] eregon force-pushed truffle-travis from 0e33a2b to a561152: https://git.io/v6FPm
<GitHub97> jruby/truffle-travis a561152 Benoit Daloze: Travis: simplify install and script
<GitHub18> [jruby] nirvdrum pushed 11 new commits to truffle-head: https://git.io/v6AuP
<GitHub18> jruby/truffle-head a6c7d33 Kevin Menard: [Truffle] Added a faster path for fetching the bytes of a RepeatingRope whose child has its bytes populated.
<GitHub18> jruby/truffle-head 10726d2 Kevin Menard: [Truffle] Added a faster path for fetching the bytes of a SubstringRope whose child has its bytes populated.
<GitHub18> jruby/truffle-head 9efb699 Kevin Menard: [Truffle] Sped up making a RepeatingRope from a RopeBuffer....
hobodave has quit [Quit: Computer has gone to sleep.]
lance|afk is now known as lanceball
<travis-ci> jruby/jruby (truffle-travis:a561152 by Benoit Daloze): The build passed. (https://travis-ci.org/jruby/jruby/builds/155324519)
liri has quit [Quit: http://www.kiwiirc.com/ - A hand crafted IRC client]
tcrawley-away is now known as tcrawley
raeoks has quit [Quit: Textual IRC Client: www.textualapp.com]
etehtsea has joined #jruby
enebo has joined #jruby
johnsonch_afk is now known as johnsonch
pawnbox has quit [Remote host closed the connection]
pawnbox has joined #jruby
<GitHub179> [jruby] eregon pushed 2 new commits to truffle-head: https://git.io/v6A6i
<GitHub179> jruby/truffle-head 4e3399a Benoit Daloze: [Truffle] Reorder logically in CoreLibrary.
<GitHub179> jruby/truffle-head 2e78dca Benoit Daloze: [Truffle] Use the createArray() helper in most places.
<GitHub7> [jruby] eregon pushed 1 new commit to truffle-head: https://git.io/v6A6M
<GitHub7> jruby/truffle-head 826a586 Benoit Daloze: Merge branch 'truffle-travis' into truffle-head
pawnbox has quit [Ping timeout: 244 seconds]
pawnbox has joined #jruby
pawnbox has quit [Read error: Connection reset by peer]
pawnbox has joined #jruby
chrisseaton has quit [Read error: Connection reset by peer]
chrisseaton has joined #jruby
nicksieger has joined #jruby
nicksieger has quit [Client Quit]
nicksieger has joined #jruby
nicksieger has quit [Remote host closed the connection]
<GitHub168> [jruby] bjfish pushed 1 new commit to truffle-thread-group-layout: https://git.io/v6ASv
<GitHub168> jruby/truffle-thread-group-layout 1dee397 Brandon Fish: [Truffle] Remove thread_set_group UnsafeGroup
nicksieger has joined #jruby
shellac has quit [Quit: Leaving]
<nirvdrum> headius: I'm glad I'm not the only one that can't work out $~'s visibility.
etehtsea has quit [Ping timeout: 276 seconds]
<nirvdrum> I'm trying to fix this a bit in our backend currently.
vtunka has quit [Quit: Leaving]
yosafbridge` has quit [Quit: Leaving]
hobodave has joined #jruby
camlow325 has joined #jruby
yosafbridge has joined #jruby
griest has joined #jruby
<griest> I cannot access jruby.org, but it loads on my phone. Has my IP address been blacklisted or something?
<chrisseaton> griest: works for me
<chrisseaton> I can't imagine anyone would blacklist your IP for any reason
<GitHub44> [jruby] chrisseaton pushed 5 new commits to truffle-head: https://git.io/v6A5C
<GitHub44> jruby/truffle-head c1b82a2 Chris Seaton: [Truffle] Get rid of a few more forcings of the source section.
<GitHub44> jruby/truffle-head 149002c Chris Seaton: [Truffle] Get the source from the root node - don't maintain it in Ruby nodes.
<GitHub44> jruby/truffle-head 0de1879 Chris Seaton: [Truffle] Don't give child nodes our encapsulating source section....
<griest> @chrisseaton yeah I can load it on my phone, just not on my computer
<griest> maybe my IP blacklisted your site?
<enebo> griest: we are using github pages
<enebo> griest: can you access github?
<enebo> griest: we have no blacklist feature so I don’t know why it is not allowing you to connect
<griest> jruby.github.com?
<enebo> griest: www.jruby.org ends up being via DNS + github support to redirect to jruby.github.io or whatever that url is
<enebo> griest: maybe github itself has somehow blocked some hosts from hitting github pages?
<griest> maybe. I can access the repo on github
<enebo> griest: yeah it is on our jruby group repo
thedarkone2 has joined #jruby
<griest> jruby.github.io and jruby.github.io/jruby does not work
<enebo> griest: perhaps open a ticket on github (not us though since I have no idea how we can block anyone)
<enebo> griest: not sure if there is a github pages issue tracker for general support
<enebo> griest: jruby.github.io does work for me
<griest> okay I'll keep trying things
<enebo> griest: although url ends up displaying as www.jruby.org
<griest> is there a way I can download the releases without going to jruby.org?
<griest> like a PPA or something?
<travis-ci> jruby/jruby (truffle-thread-group-layout:1dee397 by Brandon Fish): The build was fixed. (https://travis-ci.org/jruby/jruby/builds/155360440)
griest has quit [Quit: http://www.kiwiirc.com/ - A hand crafted IRC client]
<enebo> oh well I sort of had an answer for you :)
<enebo> come back! :)
camlow325 has quit [Quit: WeeChat 1.5]
camlow325 has joined #jruby
<GitHub44> [jruby] eregon closed pull request #4110: [Truffle] Add ThreadGroup layout and nodes (truffle-head...truffle-thread-group-layout) https://git.io/v6dLo
<GitHub143> [jruby] eregon pushed 1 new commit to truffle-head: https://git.io/v6Axc
<GitHub143> jruby/truffle-head ebb6fb7 Benoit Daloze: Merge pull request #4110 from jruby/truffle-thread-group-layout...
<GitHub18> [jruby] eregon deleted truffle-thread-group-layout at 1dee397: https://git.io/v6AxC
camlow325 has quit [Read error: Connection reset by peer]
claudiuinberlin has quit []
camlow325 has joined #jruby
cremes has quit [Quit: cremes]
<bascule> _____ ____ ___ ____ _ __ ___ _ _
<bascule> | ___| _ \|_ _| _ \ / \\ \ / / | | |
<bascule> | |_ | |_) || || | | |/ _ \\ V /| | | |
<bascule> | _| | _ < | || |_| / ___ \| | |_|_|_|
<bascule> |_| |_| \_\___|____/_/ \_\_| (_|_|_)
<bascule>
cprice404 has joined #jruby
<GitHub46> [jruby] eregon deleted truffle-travis at a561152: https://git.io/v6xUq
zacts has joined #jruby
nicksieger has quit [Remote host closed the connection]
rsim has quit [Quit: Leaving.]
claudiuinberlin has joined #jruby
zacts has quit [Quit: WeeChat 1.5]
camlow325 has quit [Quit: WeeChat 1.5]
camlow325 has joined #jruby
temporalfox has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
nicksieger has joined #jruby
<GitHub94> [jruby] nirvdrum force-pushed truffle-fix_match_backref from bae45f6 to bee562d: https://git.io/v6uWv
<GitHub94> jruby/truffle-fix_match_backref 3eba4f2 Kevin Menard: [Truffle] Replaced calls to Regexp.last_match= with a direct primitive invoke to cut out an extra frame.
<GitHub94> jruby/truffle-fix_match_backref 14a6dfa Kevin Menard: [Truffle] Simplified the RegexpNodes#matchCommon call a bit by removing support for 'operator' mode.
<GitHub94> jruby/truffle-fix_match_backref dafe3ba Kevin Menard: [Truffle] Hide frame-local global variables from the local_variables list.
<GitHub141> [jruby] nirvdrum pushed 1 new commit to truffle-head: https://git.io/v6x3H
<GitHub156> [jruby] nirvdrum closed pull request #4081: Truffle fix match backref (truffle-head...truffle-fix_match_backref) https://git.io/v6VX8
<GitHub141> jruby/truffle-head f1b2a0e Kevin Menard: Merge pull request #4081 from jruby/truffle-fix_match_backref...
<GitHub155> [jruby] nirvdrum deleted truffle-fix_match_backref at bee562d: https://git.io/v6x37
<travis-ci> kares/jruby (test-ji-become-java:42bf279 by kares): The build was broken. (https://travis-ci.org/kares/jruby/builds/155393795)
nicksieger has quit [Remote host closed the connection]
nicksieger has joined #jruby
<travis-ci> jruby/jruby (truffle-fix_match_backref:bee562d by Kevin Menard): The build has errored. (https://travis-ci.org/jruby/jruby/builds/155407749)
rsim has joined #jruby
temporalfox has joined #jruby
<travis-ci> jruby/jruby (truffle-head:f1b2a0e by Kevin Menard): The build was broken. (https://travis-ci.org/jruby/jruby/builds/155408024)
subbu is now known as subbu|lunch
rsim has quit [Read error: No route to host]
camlow325 has quit [Read error: Connection reset by peer]
rsim has joined #jruby
camlow325 has joined #jruby
zacts has joined #jruby
zacts has quit [Quit: WeeChat 1.5]
subbu|lunch is now known as subbu
<headius> nirvdrum: hey, enebo mentioned IO benchmarking to me so I was looking at that micro/core/file.rb
<headius> I'm not sure writing to /dev/null is really a good test
<nirvdrum> Oh?
<headius> the kernel may short-circuit all writes to /dev/null to do nothing
<headius> I'm basically getting nearly the same ips for writing a GB as writing a KB on MRI
<nirvdrum> I think that might be fine. It's mostly to check the syscall overhead, I believe.
<nirvdrum> chrisseaton: ^
<nirvdrum> Some of these are really to test string performance, too.
<headius> if I modify it to write to a file, MRI is 7 orders of magnitude slower
<headius> that gives me pause
<enebo> 7ORDERS
<chrisseaton> What we want to check is that we can get the bytes into to the kernel
<headius> I guess it just feels weird to benchmark IO that isn't doing IO
<nirvdrum> At least, that's how I've been using them.
<chrisseaton> Well it's outputting it to the kernel
<headius> enebo: this is probably the reason we're slower...we have a managed byte buffer that has to get transfered to a native buffer before the write can happen
<chrisseaton> That's what the benchmark highlights, yeah
<enebo> chrisseaton: when you mean kernel you just mean OS kernel time to invoke system-level writer (2)
<enebo> err write() 2
<headius> then perhaps there should also be a proper benchmark of writing to something that won't nop
<chrisseaton> well yeah I guess if someone wants to benchmark that
<chrisseaton> I didn't when I wrote that benchmark
<enebo> I admit from a microbench time it makes sense to have this bench but why would a real user care about this result in a programming conference?
<enebo> It really distorts expectation doesn’t it?
<enebo> Maybe I don’t give average attendees enough credit
<chrisseaton> Whoah back up guys, we aren't distorting anyone's expectation with a benchmark in a repo
<enebo> chrisseaton no sorry I don’t want to imply that
<chrisseaton> It's there to check performance of that operation stays the same
<headius> not to compare perf across impls?
<chrisseaton> I someone wants to talk about real IO performance, we'd probably use something like the asciidoctor end-to-end translation benchmark
<chrisseaton> Well I do compare with this benchmark, but only in terms of checking we aren't slower than anyone else
<chrisseaton> If the VM's actively detected it was /dev/null then that would be different, but if the kernel detects it the same from all VMs, then that's fine by me
<headius> my concern is if these results get presented as "here's our IO performance" it's leaving out something kinda important... IO
<headius> if that isn't going to happen then I don't care :-)
temporalfox has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
<chrisseaton> Yeah, it's a tool for building up to a benchmark you might want to report
<headius> ok
<chrisseaton> We do a have a problem at the moment with the basic IO primitive being really slow, as the Rubinius code copies quite a bit, and then to implement that we then copy again, and this highlights that for us - we're using it because we're bad at it at the moment
<enebo> chrisseaton: yeah sorry I really did not want to imply that. you guys do have this in micro subdir too. My context was talking to Kevin about some results for his ropes talk
<headius> jruby proper can destroy MRI on every one of these write benchmarks if they don't write to null
<enebo> chrisseaton: I have looked at it and the comparisons he are using are common string operations and looking at things from an impl difference standpoint
<chrisseaton> But you'd like to match MRI even if the IO is dropped by the kernel, right? That's what we want to do
<nirvdrum> enebo: Sorry if that came out incorrectly. I'm looking at this for the 10,000 String#+ operations. The writing to /dev/null is just to keep everyone honest.
<nirvdrum> If I don't reify the rope bytes, you'd be surprised how much faster that can be :-)
<headius> chrisseaton: is that something people need to be fast?
<enebo> chrisseaton: but we were talking about these results this morning so this is where that came from
<headius> IO that does nothing?
<enebo> nirvdrum: yeah I htink part of the confusion in last few minutes is this is a file called ‘file.rb’
<nirvdrum> headius: It's actually not that uncommon, to redirect output to /dev/null *shrug*
<headius> nirvdrum: a GB of output per second?
<nirvdrum> Probably not to that extreme.
<enebo> nirvdrum: I think if these string tests were in string.rb it would be less confusing
<headius> I mean, maybe that happens...it just isn't something I've had to do :-)
<headius> yeah
<chrisseaton> headius: I'm not saying anyone wants it to be fast, but if there's something in my code that's making it slow, I'd like to remove it
<headius> I took these to mean that they're IO subsystem benchmarks
<headius> specifically File operations
<headius> which usually work with Files
<nirvdrum> enebo: I tried to warn you of that from the outset, you fool ;-)
<enebo> nirvdrum: hahaha sorry
<chrisseaton> Well they are IO subsystem benchmarks - they test how fast we can send bytes to the kernel
<enebo> do you guys need some side-effect to not eliminate all the work?
<chrisseaton> And I know they're useful benchmarks, as we're currently slower than MRI on them
<headius> but the kernel is not something you can ignore
<headius> if it can't write everything you have to write again
<headius> that goes back into your runtime
<headius> by writing to something that always succeeds, you never have to deal with buffering, write loops, etc
<chrisseaton> You're just saying the benchmark doesn't cover all cases, which is obviously true, but it doesn't make the benchmark useless
<headius> I agree
<headius> it helped me realize our IO is slower than MRI writing to null :-)
<headius> so there's a win of a sort
<chrisseaton> To back this up, don't worry about us focusing on micros, we're looking at bigger stuff like asciidoctor actually outputting HTML, and PSD.rb actually reading PSDs as our big benchmarks soon
<headius> oh sure...I just saw some bench numbers flying around related to IO and wanted to have a look
<chrisseaton> Oh and opt carrot of course
<headius> I've never spent any time optimizing the ported MRI IO logic, so there's a lot of potential
<enebo> chrisseaton: so because we want to use these micro benches as well could we perhapts point out this is a devnull test since I saw MRI results and figured something weird was going on
<enebo> chrisseaton: the MRI result looks nuts
<chrisseaton> In the same of the benchmark? Sure
<headius> that would help clarify
<enebo> chrisseaton: I mean I can see it writes to devnull by reading what it does but the results to this were super unexpected and we spent time trying to fiture out how MRI could have that result
<headius> devnull was just a red flag for me
<headius> so there it is
<enebo> now that we know in hindsight we perhaps won’t forget it but I think anyone viewthing will wonder what the hell is going on
<nirvdrum> FWIW, I think measuring the IO machinery is also useful in that there is certainly more than one way to do it. AFAIK, you guys use the JVM for all your IO and we use jnr-posix.
<headius> ahh here's another issue with our impl
<headius> it will allocate a contiguous 1GB native buffer when the managed buffer needs to be written
<headius> that could be a single smaller buffer with N writes
<chrisseaton> we do that, but then I wasn't sure if that broke any expectations of atomic-ness in the file system
<headius> it certainly may
<headius> there's multithreaded writes to consider
<headius> it's because there's so much nuance in IO behavior that I decided to port MRI's logic for much of it
<headius> hmm well that's much slower :-)
<headius> assuming I did it right
<chrisseaton> Does our handy little benchmark tell you that?
nicksieger has quit [Remote host closed the connection]
<headius> well, I didn't run it to test the impl
<headius> but the reduced case is still a devnull write
rsim has quit [Quit: Leaving.]
<headius> I'm not yet sure if it's telling me this is a bad approach or I did something wrong
<enebo> chrisseaton: we are happy this test is here. I think we both just got really confused what the test was actually testing
<enebo> chrisseaton: we both spent time wondering how the hell MRI could do this so fast…which is a value in itself but had this been labbeled with core-write-gigabyte-devnull then I htink we would have realized this quickly
<chrisseaton> Yeah maybe that's a better name
<enebo> chrisseaton: in a way I feel dumb for not just realizing that but I feel I am in good company
<headius> the confusing thing for me is that 1.7 seems to have similar devnull write perf
<headius> it should have just as much overhead copying 1GB string to native
<enebo> headius: it uses NIO channel and we use native now?
<headius> yes, and that's a place I'll investigate certainly
<enebo> headius: oh yeah it probably does copy still? Or maybe somethign is really smart
<headius> but Java's NIO channels aren't a whole lot different
<headius> so we are using FFI to bind write, and they bind it directly in a JNI function
<headius> but jffi makes pretty tight bindings
<enebo> perhaps they can just pass off the ran byte[] addr somehow
<enebo> raw
<headius> it's possible
<headius> I didn't think modern hotspot could pin though
<enebo> It is sad…all that JNI work I did and I don’t remember how references to primities work any more
<headius> or at least, not via any API you can call
<enebo> you can acquire refrences in JNI
<enebo> it lets GC know it cannot free
<headius> yeah but they're indirections back into managed heap
<enebo> well perhaps with a primitive byte[] it knows it cannot relocate and uses the memory direclty
<headius> right, pinning
<headius> I didn't believe it could do that
<nirvdrum> I haven't kept up with Project Panama at all. Does any of this get better?
<enebo> no?
<headius> there's an API in JNI but it says you don't have to pin for it, and I thought I'd heard they don't
<headius> nirvdrum: it doesn't change anything about managed versus native
<headius> it does make it easier/lighter to work with blocks of native memory
<headius> big wins in panama are reduced jni overhead and JVM-aware layout of native structs
<nirvdrum> So posix calls should get cheaper?
<headius> yes
<nirvdrum> Is this still landing in Java 9?
chrisseaton has quit [Read error: Connection reset by peer]
andrewvc has quit [Read error: Connection reset by peer]
<enebo> GetPrimitiveArrayCritical()
<headius> nirvdrum: as a jdk package I believe, yes
<headius> not a standard Java API
<headius> enebo: yeah that's the one
<enebo> So looks like they could be using that method to mark critical section
<enebo> It sounds like it may or may not force a copy
<headius> right
<headius> I thought it did
<enebo> but that it can prevent a copy
<headius> but it would be an explanation for 1.7 being faster
<headius> I'll look at the C code for NIO
<headius> as far as I can tell 1.7 and 9k are mostly the same otherwise
<headius> ByteBuffer var8 = Util.getTemporaryDirectBuffer(var7);
<headius> so they do have a native buffer pool
<enebo> hmm so our jnr-* stuff could try this and probably wayne has this somewhere
<enebo> headius: could native IO work with GetPritimitiveArrayCritical?
<headius> they don't appear to use that in JDK
asarih has quit [Read error: Connection reset by peer]
<headius> they put the bytes in a native buffer, and then the downcall is just write(2) followed by retval fixups
<enebo> headius: hmm I guess they are not really bound by what they use but if you cannot find special code then I don’t get it
<headius> hmm
<headius> oh jeez, I bet I know
<headius> hahah
<headius> yep
<headius> we short circuit devnull in 1.7
<headius> it does nothing
<enebo> hahah
<enebo> headius: and nul: on windows?
<headius> yes
<enebo> I actually remember that if statement
<headius> if (path.equals("/dev/null") || path.equalsIgnoreCase("nul:") || path.equalsIgnoreCase("nul")) {
<headius> Channel nullChannel = new NullChannel();
<enebo> It is missing a pkltform check
<headius> yeah
<headius> so all we need to do is make 9k short-circuit and we'll be winning again :-P
temporalfox has joined #jruby
tcrawley is now known as tcrawley-away
asarih has joined #jruby
nicksieger has joined #jruby
chrisseaton has joined #jruby
bbrowning is now known as bbrowning_away
claudiuinberlin has quit []
nicksieger has quit [Remote host closed the connection]
andrewvc has joined #jruby
<headius> enebo: with 9k short-circuiting /dev/null we're faster than 1.7 and MRI
<headius> for the write benchmarks
<enebo> SHIP IT
<headius> all that's missing is the JNI downcall plus write syscall really (and the overhead of actually copying bytes out to write them)
<headius> if I ln /dev/null to some other name, 1.7 degrades close to 9k but not quite
<headius> this isn't really a valid change since we can't provide a real fd for the fake devnull
<headius> spawn redirects to a devnull file would fail to work right
lanceball is now known as lance|afk
<headius> I suppose I could short-circuit just write but that feels weird too
<headius> nirvdrum: what benchmark(s) are you using to measure string perf?
<headius> enebo mentioned that we're beating MRI except for String#+ and I'd like to see that
<nirvdrum> You can see it on that in the core-big-concat-and-write benchmark from that file.rb micro.
<nirvdrum> I just extracted that and ported it to bench9000.
<enebo> nirvdrum: if you look at my results we are faster for that too
<nirvdrum> I haven't pushed those up yet.
<enebo> nirvdrum: 10.5 i/s on 9k and 4.7 i/s on MRI 2.3.1
<enebo> nirvdrum: unless MRI improved since 2.3.1
johnsonch is now known as johnsonch_afk
<nirvdrum> I'm testing 2.3.1.
<enebo> nirvdrum: or we behave poorly on linux vs macos
<enebo> nirvdrum: so I see same 2x ratio for that test but I am using benchmark/ips
<nirvdrum> This is the bench9000 benchmark: https://gist.github.com/nirvdrum/96abc383a758c6700e240809d0f4c111
<nirvdrum> I'll get the others pushed up, but I need to rebase my branch.
<nirvdrum> And I'm in the middle of trying to fix a bug in something else.
<headius> no problem, I can try the one in file.rb
<headius> you say concat here but this is +
<headius> am I missing something?
<headius> erb et al wouldn't use +, they'd use <<
<nirvdrum> Sorry. I'm using the nomenclature from the rdoc.
<nirvdrum> Which is confusing as hell.
<headius> + obviously has a great deal of object overhead
<headius> ok
<nirvdrum> So, I've been calling String#+ concat and String#<< append.
<headius> ok I see
<nirvdrum> Which has the unfortunate side effect of calling String#concat append as well.
<nirvdrum> If you have a better way to disambiguate, I'm all for it.
<enebo> nirvdrum: Is my results different for you?
<enebo> nirvdrum: I am not seeing big-concat as slower
<nirvdrum> I'm not running with benchmark-ips.
<nirvdrum> It's hard to compare that way.
<enebo> nirvdrum: but I don’t see how JRuby would run slower running longer vs MRI
<headius> yeah, I just want to see the bad + perf so I can fix it
<enebo> nirvdrum: I guess the tool gives what the tool gives
<headius> but I can't see it
<enebo> nirvdrum: perhaps we are deopting much later
<nirvdrum> enebo: Well, with bench9000 you also have some outside process managing things. Whereas with benchamrk-ips, you have the VM reporting its own results.
<nirvdrum> I'm a bit surprised there's such a difference though.
<headius> I get the same ratio as enebo, 2x faster on the + concat bench
<nirvdrum> I'll try running with benchmark-ips then.
<enebo> I should run with perfer
<headius> jruby 2x MRI
<headius> I'm running the "all" version with benchmark-interface, which I assume uses ips for this one
<headius> nirvdrum: what ratio were you seeing?
<nirvdrum> ~1x
<enebo> headius: it can use whatever you choose but ips is default
<headius> certainly could be linux
<headius> nirvdrum: jruby proper on graal or hotspot?
<nirvdrum> HotSpot, indy enabled.
<headius> and that was current master, only 1x MRI?
<nirvdrum> These were the scores I got this afternoon: https://gist.github.com/nirvdrum/0c53354e9f7a2808d2b8c9ed3bf3765e
<headius> well graal is definitely slower, but that's not relevant right now
<nirvdrum> In that case, JRuby was slower. There is some variance here run-to-run.
<chrisseaton> I added comparison confidence intervals to bips, but it's not easy to use to compare implementations at the moment
<chrisseaton> You can use it with hold to do that though
<enebo> chrisseaton: does MRI ever really vary from iteration to iteration?
<chrisseaton> yes! actually it shows some warmup!
<chrisseaton> very interesting
<enebo> chrisseaton: that is fascinating
<enebo> chrisseaton: I wonder if it is generation collector moving important bits out
<chrisseaton> you don't always see it but I did have an example somewhere
<chrisseaton> maybe
<chrisseaton> it's not just caches I don't think, as they fill up on first iteration
<enebo> chrisseaton: after a while it is probably only young stuff
<enebo> total guess…they don’t have a JIT :)
<chrisseaton> did you see the deoptimisation patch?
<enebo> no
<headius> I'm confused...nirvdrum/bench9000 doesn't have a benchmarks dir
<nirvdrum> enebo: To your earlier question, I see roughly double values with MRI in benchmark-ips.
<enebo> what?!?!
<enebo> :)
<chrisseaton> fullSourceSection
<headius> and jruby/bench9000 doesn't have the string concat bench
<enebo> nirvdrum: so ~1x with bench9000 but 1/2x for ips?
<enebo> nirvdrum: but headius and I see ~2x
<nirvdrum> enebo: No. I see ~1x for each.
<enebo> nirvdrum: ah ok
<enebo> nirvdrum: it could be a platform difference maybe
<nirvdrum> You're seeing 2x, but you're seeing half the value for MRI that I'm seeing.
<nirvdrum> Granted, these aren't stable machine-to-machine.
<headius> this is benchmarking constructing an array?
<headius> chrisseaton: what are they actually deoptimizing?
<nirvdrum> But I get 9.373 (±10.7%) i/s with MRI and 9.310 (±10.7%) i/s with master with indy.
<enebo> nirvdrum: unless you are running on a pentium 2 and we have some intrinsic in play you don't
<headius> nirvdrum: those numbers are suspsiciously close
<enebo> nirvdrum: of perhaps rbenv builds MRI differently than how rvm does
<enebo> Come to think of it there are lots of explanations
<enebo> hmm
<headius> nirvdrum: where's the repo I can run that command against?
<headius> neither your copy of bench9000 nor jruby/ copy have the configs you use
<nirvdrum> Correct. As I said, I haven't tidied up the workspace yet. You guys pre-empted me by a few days.
<nirvdrum> I just gisted up the file benchmark file I was using.
<chrisseaton> headius: they do things like inline calls, fold arithmetic, and the deopt if monkey patched
<chrisseaton> all still bytecode
<headius> @chrisseaton the bench he shows in that PR does nothing but create a big array in a loop
<nirvdrum> I'm not trying to be coy. I just have a bit of work to get it up there since I based the work off my previous ropes branch.
<headius> nirvdrum: ok no problem, I can just wait then
<headius> very keen to figure out why you see that slower perf though
<nirvdrum> I don't think I'm seeing anything slower. I think you guys are seeing slower MRI than I am.
<headius> I am running with 4GB heap, dunno if you are setting that or not
<nirvdrum> I'm not. I can re-run with that.
<headius> I figured that would be good since some of the benchmarks create 1GB strings :-)
<nirvdrum> bench9000 uses a 2GB heap.
<nirvdrum> I'm running just this one benchmark.
<enebo> chrisseaton: very cool
<chrisseaton> headius: they've done a couple of things recently to remove temporary arrays - this looks like more effort towards that
<enebo> chrisseaton: it may be limited but it will just improve stuff a bit more
<chrisseaton> maybe to optimise Evan's canary test (reduced case of my acid benchmark)?
<enebo> chrisseaton: which is what they just keep doing
<headius> enebo: the optz they make could be applied to IR
<nirvdrum> I suspect I have more powerful hardware than your wimpy MBPs though :-)
<headius> nirvdrum: 2012 MBPs
<headius> so you're probably right
<headius> let me rephrase...I don't know why we'd see JRuby 2x MRI and you wouldn't, and that's what I want to fix
<nirvdrum> This is Ivy Bridge-E, so a bit older gen. But it's hexacore at 3.4 GHz. And I have 48 GB RAM in here.
<headius> 2.2GHz quad core here, obviously we can't compare our results
<headius> but we should be able to compare ratios, and yours don't match enebo's and mine
<enebo> headius: well yeah I am not sure there is much benefit of this over our deopt raise the restore algo (which has not been written)
<headius> or ours don't match yours :-)
<enebo> headius: One theory would be to see if rbenv 2.3.1 is same speed or not
<enebo> headius: they may choose different -O or something
<enebo> headius: I use RVM and so do you right?
<nirvdrum> I'll get this pushed up as soon as I can.
<headius> yes
<nirvdrum> headius: Here's a fun one for you. My i/s drops moving from the default heap size to 4GB.
<headius> I use rvm
<headius> nirvdrum: something's screwy
Puffball has quit [Remote host closed the connection]
<enebo> I use default settings
<nirvdrum> Not much. But something.
<enebo> and I get 2x
<enebo> I would not be surprised if it was how MRI was compiled the more I think about it
<enebo> It could even be OS + how MRI is compiled
<enebo> Although JVM is not identical everywhere either
<headius> I moved to 2.3.1 and it's no better than 2.3.0
<nirvdrum> I'm on Ubuntu 16.04. I just did "rbenv install 2.3.1"
<headius> my MRI numbers are about half nirvdrum's
<nirvdrum> I didn't configure any flags on my own.
<headius> for big-concat-and-write
<nirvdrum> Which I suppose is really a ruby-build thing.
Puffball has joined #jruby
<headius> rvm appears to compile with -O3
<headius> $ rvm ruby-2.3.1 do ruby -e 'puts RbConfig::CONFIG["cflags"]'
<headius> -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens
<headius> anyway, I'll put this to rest until I can reproduce your results
<nirvdrum> > ruby -e 'puts RbConfig::CONFIG["cflags"]'
<nirvdrum> -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -Wdeprecated-declarations -Wno-packed-bitfield-compat -Wno-maybe-uninitialized
<enebo> oh yeah I forgot about that field
<nirvdrum> Cool. I'll go back to fixing my bug. I'll get the benchmarks pushed and we can loop back around next week.
<headius> none of those look like they'd double perf
<headius> the different ones anway
<nirvdrum> If I've screwed up, I'd rather find out before I present to a room full of people.
<headius> me too :-)
<enebo> these are two different OSes
<headius> indeed they are
<headius> it could hint at a probem with jruby on linux, or a problem with MRI on OS X :-)
<headius> or it's a fluke
<enebo> or how jffi was compiled on linux
<enebo> so many possibilities :)
<enebo> I am installing rbenv
<enebo> gtettign 2.3.1 now
<enebo> I don’t quite get this need to explicitly set what you will use and have it drop a turd
<enebo> feels like there must be an env-only way
<nirvdrum> Eh?
<enebo> I don’t know
<enebo> I am new to this
<enebo> :)
hobodave has quit [Ping timeout: 264 seconds]
<headius> this deopt looks pretty simple
<headius> they mark probably half their instructions as "not pure" so those can't be optimized
<headius> the optimizations appear to mostly replace an iseq with something simpler?
<nirvdrum> enebo: And if it helps any, it looks like I used gcc 5.4.0
<enebo> obviously their are limits but you can consider this some callsite specialization
<enebo> since they have none this should help especially for simple math
<headius> and they only deopt immediately before entering the frame?
<headius> that doesn't seem kosher
<chrisseaton> enebo: I'd describe it as a kind of cross-instruction byte code quickening
<chrisseaton> headius: yeah I couldn't see how that works
<chrisseaton> they need to check once per side effect
<headius> so if they have something change during a loop I don't think they'll see it
<headius> yeah
<enebo> yeah they are cheating a bit
<headius> I keep looking for more code but this is all
<chrisseaton> the problem is when MRI 'cheats', they can just say it's the new semantics!
<enebo> hey how cool would that semantic change be :)
<headius> hah
<enebo> it would sure make ruby a lot easier to optimize
<headius> "The strategy is restricted so that any VM states like program counter(s) would not be affected by the modifications."
<enebo> so they can still use this technique but it stll has to fit and have a deopt guard
<headius> so yeah, they can't deopt mid-function
<enebo> so that may be hard :)
<headius> and maybe the purity check is intended to reduce how much of a semantic change that is
<enebo> I still like it even if it does not pan out :)
<chrisseaton> They should insert safe point nodes, and then do a pass to coalesce them after their optimisation
<chrisseaton> A few extra guards here or there won't hurt MRI, I'm sure it'd still be a net-win for these benchmarks
<enebo> chrisseaton: or noops
<headius> well they currently do almost no optz, static or otherwise
<enebo> chrisseaton: just enough to replace with a guard
<headius> so if this maybe gets them some static optz it will be a good win
<enebo> they just need enough space to stuff a guard in front of calls
<enebo> or any side-effecting thing
<enebo> maybe having an interp in a hot lopp where 40% of their code is noops will have a noticeable hit
<enebo> nirvdrum: ok for comparison I re-ran using mri from rbenv nad I get ~ same results
<headius> seems pretty useless to benchmark creating and throwing away an array to prove this out though
<headius> like, worst possible benchmark to use
<enebo> it is like the few cases in IRBuilder where we kill unused literals
<nirvdrum> enebo: Do you guys know anyone at RedHat that runs Linux? :-)
<enebo> hahaha
<enebo> nirvdrum: I can ask someone to try this
<nirvdrum> I'm just curious. No rush.
enebo has quit [Quit: enebo]
andrewvc has quit [Ping timeout: 258 seconds]
chrisseaton has quit [Ping timeout: 260 seconds]
zacts has joined #jruby
asarih has quit [Ping timeout: 264 seconds]
andrewvc has joined #jruby
chrisseaton has joined #jruby
zacts has quit [Ping timeout: 265 seconds]
zacts has joined #jruby
zacts has quit [Ping timeout: 244 seconds]
bruceadams has quit [Read error: Connection reset by peer]
bruceadams has joined #jruby
<GitHub54> [jruby] chrisseaton pushed 3 new commits to truffle-head: https://git.io/v6xjo
<GitHub54> jruby/truffle-head 4783ba3 Chris Seaton: [Truffle] Try removing the context parameter from control nodes.
<GitHub54> jruby/truffle-head c803fb9 Chris Seaton: [Truffle] Try removing the source section as a constructor parameter from AndNode.
<GitHub54> jruby/truffle-head 7e273bd Chris Seaton: [Truffle] Remove the source section from many control nodes.
<GitHub22> [jruby] chrisseaton pushed 1 new commit to truffle-head: https://git.io/v6xjM
<GitHub22> jruby/truffle-head 305c126 Chris Seaton: [Truffle] Organise imports.
andrewvc has quit [Remote host closed the connection]
chrisseaton has quit [Remote host closed the connection]