00:00:00  * ircretaryquit (Remote host closed the connection)
00:00:07  * ircretaryjoined
00:00:55  <isaacs>bnoordhuis: so, at this point, i figure, why even expose tickDepth if we're not going to use it?
00:01:13  <bnoordhuis>just checked, there's people running node on rhel 5 with kernel 2.6.9 and glibc 2.4
00:01:21  <isaacs>bnoordhuis: using nextTick instead of writeReq.cb for the _write cb is only an optimization in an oddball edge case we don't care about.
00:01:22  <bnoordhuis>isaacs: indeed :)
00:02:05  <isaacs>bnoordhuis: oh, wait... one second. i might be wrong about it not degrading http_simple.
00:02:08  <graydon>bnoordhuis: right, but are they building from source?
00:02:16  <bnoordhuis>graydon: yes
00:02:20  <graydon>bnoordhuis: or taking a newer binary and backporting it
00:02:27  <graydon>we need to distribute binaries to old systems
00:02:57  <graydon>I _thought_ it'd be easier to get the surface area of linux binaries small enough to self-host a compiler. it's turned out to be a lot fussier than I expected.
00:03:04  <bnoordhuis>i think it'll work but i can't vouch for that
00:03:09  <isaacs>bnoordhuis: i had length=1024. if length=1 then there's a much higher incidence of "completely flushed the write"
00:03:17  <bnoordhuis>but if you run into issues, it should be easy enough to fix
00:03:25  <bnoordhuis>isaacs: ah. hm.
00:03:41  <graydon>bnoordhuis: k
00:05:28  <graydon>bnoordhuis: these makefiles are a thing of beauty
00:05:49  <bnoordhuis>that's the first time anyone has ever called them that :)
00:06:58  <graydon>well, I'm the party responsible for rust's, which are ...
00:06:59  <graydon>https://github.com/mozilla/rust/blob/master/mk/target.mk
00:07:07  <graydon>not a thing of beauty
00:07:34  <bnoordhuis>a thing of brevity though
00:07:39  <graydon>I take comfort from the (weak) victory of not having a meta-build-system
00:08:16  * AvianFluquit (Remote host closed the connection)
00:08:36  <isaacs>bnoordhuis: yeah, it's comparable either way. pushing to the increasingly-wrongly-named-pull-request
00:08:45  <bnoordhuis>isaacs: hah, very good :)
00:09:29  * paddybyersquit (Ping timeout: 260 seconds)
00:09:46  <bnoordhuis>graydon: i think pfox__ and i can take it from here. i'll add an out-of-tree build option tomorrow
00:10:17  <bnoordhuis>and if something still doesn't work, i've no doubt he'll let me know :)
00:10:18  <graydon>great, thanks
00:12:56  <trevnorris>isaacs: sorry dude. been scouring the docs and source, but can't figure out if calling `.on('data'` from a net client makes the stream fall back to "old mode"
00:13:12  <isaacs>trevnorris: it does
00:13:19  <bnoordhuis>"Builtin: A builtin from the snapshot" <- a slightly more descriptive name would be nice, v8
00:13:32  <bnoordhuis>esp. because there's like 20 different ones
00:13:53  <trevnorris>isaacs: ugh. ok. so can I listen for the 'readable' event from a net client?
00:14:11  <isaacs>trevnorris: https://github.com/joyent/node/blob/master/lib/_stream_readable.js#L574-L587
00:14:14  <isaacs>trevnorris: sure.
00:14:34  <isaacs>trevnorris: all Readables (including Duplexes) emit 'readable' when there's data for you to read
00:15:11  <isaacs>bnoordhuis: review? https://github.com/isaacs/node/compare/net-nexttick-warning
00:15:17  <trevnorris>isaacs: yeah. that's what I though. but I swear I can't get a readable event from the `client = net.connect(...)`
00:15:22  <bnoordhuis>isaacs: yep, lgtm
00:15:27  <isaacs>kewl
00:15:39  <isaacs>trevnorris: well, yo uwon't get a readable event until the server writes something
00:16:34  <MI6>joyent/node: isaacs master * 02f7d1b : net: Avoid tickDepth warnings on small writes Always defer the _write ca - http://git.io/hwD4fA
00:21:19  * c4milojoined
00:21:33  <pfox__>bnoordhuis: thanks for answering our questions. it sounds like we'll sit tight for the out-of-tree-build and ARCH= stuff and then just integrate that into our build
00:21:44  <pfox__>as always, you rock.
00:21:52  <bnoordhuis>happy to help :)
00:22:21  * pooyajoined
00:22:30  <trevnorris>isaacs: oh, son of a bitch. wasn't paying attention to the filename of the benchmark... =/
00:22:37  <pfox__>bnoordhuis: do you want a pull req for that? or is it trivial for you to do?
00:22:44  <isaacs>trevnorris: ?
00:22:57  <bnoordhuis>pfox__: if you have time to work on it, go ahead. i'm about to head off to bed
00:23:06  <isaacs>TooTallNate: https://github.com/joyent/node/pull/4675 <-- lgty?
00:23:12  <pfox__>bnoordhuis: okie dokie.
00:23:17  <trevnorris>isaacs: I created a tcp_net2.js that wouldn't use the `.on('data'` event. but I was constantly running tcp_net.js
00:23:18  <isaacs>bnoordhuis: sleep tight.
00:23:25  <isaacs>trevnorris: lol
00:23:30  <bnoordhuis>isaacs: thanks :)
00:24:50  * jmar777joined
00:27:06  <isaacs>trevnorris: happens to the best of us
00:27:24  <trevnorris>isaacs: heh, thanks.
00:27:38  <trevnorris>i'm just want to see if there's a perf diff not using on data
00:27:55  <isaacs>i'm guessing that it's faster if you don't switch into old mode
00:29:56  * karupaneruraquit (Excess Flood)
00:31:05  <trevnorris>isaacs: so in your tests, you're writing from the client to the server then back to the client?
00:31:30  * bnoordhuisquit (Ping timeout: 276 seconds)
00:32:56  * karupanerurajoined
00:33:29  <trevnorris>isaacs: yeah. ok, we'll need benchmarks that specifically measure client to server and server to client. i'll create those tonight.
00:39:28  * EhevuTov_joined
00:41:51  * EhevuTovquit (Ping timeout: 252 seconds)
00:48:55  <isaacs>trevnorris: yeah
00:49:09  <isaacs>So, here's a crazy idea:
00:49:18  <isaacs>in Readable.pipe(writable)
00:49:26  <isaacs>there's a bunch of time being spent in the "readable" bit of that
00:50:06  <isaacs>but what if we just said fuckit, since if you'er piping, you're pulling data out asap anyway, and just fall back to doing the emit('data') stuff
00:50:41  <isaacs>net-pipe.js is slower because it's spending any time at all in the Readable side.
00:50:47  <trevnorris>isaacs: that makes since, because the other end can still use readable anyways.
00:50:59  <trevnorris>so don't see a need to do it on both ends.
00:50:59  <isaacs>but at least for Sockets, once you pipe, it kinda doesn't matter.
00:51:15  <isaacs>Raynos: ping
00:51:18  <isaacs>Raynos: get in on this.
00:52:48  <trevnorris>isaacs: have to jam, but be on later. i like the idea. because going one way i'm getting 12Gb/sec, but piping only getting 5.
00:52:54  <isaacs>kewl
00:52:55  <trevnorris>you'd think that it'd only be cut in half
00:53:06  <trevnorris>(well, i would)
00:53:13  <isaacs>trevnorris: http://static.izs.me/flamegraphs/net-master-2013-01-29-00-37-15.svg
00:53:16  <isaacs>trevnorris: that's where the time is going
00:53:26  <isaacs>trevnorris: compare to http://static.izs.me/flamegraphs/net-streams1-2013-01-29-00-42-25.svg
00:53:32  <isaacs>trevnorris: master has two peaks. streams1 has one.
00:53:41  <isaacs>becasue the write() slowness, we can't really do anything about
00:54:55  <trevnorris>interesting. that's helpful.
00:54:56  * EhevuTov_quit (Quit: This computer has gone to sleep)
00:55:04  <trevnorris>out
00:55:05  * trevnorrisquit (Quit: Leaving)
00:55:16  <isaacs>laterz
00:57:34  <Raynos>isaacs: pong
00:58:27  <isaacs>Raynos: So! here's a crazy idea.
00:58:31  <Raynos>isaacs, TooTallNate: Duplex(readOptions, writeOptions), writeOptions = writeOptions || readOptions
00:58:55  <TooTallNate>Raynos: we decided the opposite actually
00:58:59  <isaacs>Raynos: instad of stream.pipe() doing what you'd do if you did it yourself, we have it do some emit('data') stuff, and listen to that
00:59:03  <TooTallNate>Raynos: since it reads better when you write it out
00:59:10  <Raynos>...
00:59:23  <Raynos>When I create a duplex I care mostly about readable then writable
00:59:27  <Raynos>but bikeshed who cares
00:59:44  <isaacs>Raynos: yeah, i kinda thought the same thing. Readable is the bit you consume. Writable is the other guy's problem
00:59:52  <isaacs>but i guess it affects your own memory usage etc.
00:59:53  <isaacs>whatever.
01:00:04  <Raynos>isaacs: so get rid of pipe, cool. awesome
01:00:13  <Raynos>fuck push streams
01:00:25  * Raynosmisinterrupts everything
01:01:05  <Raynos>isaacs: I think I see
01:01:20  <isaacs>Raynos: no, not get rid of pipe
01:01:27  <isaacs>Raynos: just... don't be so fancy with pipe
01:01:35  <isaacs>Raynos: probably this means getting rid of unpipe(src)
01:01:57  <Raynos>when pipe then `readable.pushMode = true` when net see's socket.pushMode === true it just emits the buffer
01:02:14  <Raynos>so your telling the source "hey we're in push mode, don't do the crazy buffer / watermark / stuff"
01:02:26  <Raynos>I like unpipe :(
01:02:30  <isaacs>Raynos: i don't know what pushMode is...
01:02:37  <Raynos>but fuck it, unpipe can go in userland
01:02:47  <Raynos>isaacs: I'm trying to understand the problem
01:03:01  <Raynos>I think the problem your talking about is wasted computation in pumping data out of a pull stream
01:03:23  <isaacs>Raynos: so, what we're doing right now in pipe() is we calling read() until it returns null, then waiting on 'readable', etc.
01:03:36  <isaacs>Raynos: and, we're doing that for an array of streams
01:04:08  <isaacs>Raynos: before, whenever there was a data event, we'd jsut write it to the target
01:04:12  <Raynos>i think the problem here is
01:04:18  <Raynos>that net.Socket is a push stream
01:04:23  <Raynos>and Readable is a pull stream
01:04:30  <Raynos>and pipe converts Readable into a push stream
01:04:37  <isaacs>that is definitely not the problem.
01:04:41  <Raynos>so we're doing this double conversion of push -> pull -> push
01:04:48  <Raynos>which is wasted computation
01:04:48  <isaacs>Raynos: take a look at this: http://static.izs.me/flamegraphs/net-master-2013-01-29-00-37-15.svg
01:05:08  <Raynos>name the files stream1 and streams2 :p
01:05:28  <isaacs>Raynos: basicaly the that whole mountain on the left, the fat one, is doing all the Readable.pipe() stuff
01:06:02  <Raynos>i cant read flame graphs
01:06:15  <Raynos>not in comparison mode
01:06:35  <isaacs>oh, actually, both those mountains should be the same mountain.
01:06:53  <isaacs>one just has a uv__io_poll stuck in there
01:07:25  <isaacs>so, bottom line, we're spending a lot of time in onread, and some other places.
01:07:31  <isaacs>i don't know, maybe this is a dumb idea.
01:07:40  * jmar777quit (Remote host closed the connection)
01:08:15  * jmar777joined
01:08:19  <isaacs>but i'm gonna try to see if it makes a difference if you add a Socket.onread function that just writes to all the pipe dests, and calls handle.readStop/readStart appropriately, in Socket.pipe
01:08:37  <isaacs>might buy us back some of our 40% net.pipe perf regression.
01:08:39  <Raynos>I think it is a good idea
01:08:44  <Raynos>to hand optimize Socket.pipe
01:12:14  * jmar777quit (Read error: Operation timed out)
01:14:51  * mikealquit (Quit: Leaving.)
01:15:54  * mikealjoined
01:17:38  <isaacs>hm. yeah, maybe.
01:17:52  <isaacs>i just wonder if it's worth doing something differently with STream.Readable
01:17:55  <isaacs>Raynos: ^
01:17:57  <MI6>joyent/node: isaacs master * bda45a8 : Revert "net: Avoid tickDepth warnings on small writes" This commit break - http://git.io/Hiw7uQ
01:21:45  * jmar777joined
01:30:42  * abraxasjoined
01:31:55  * lohkeypart
01:36:06  * lohkey_joined
01:36:08  * lohkey_quit (Client Quit)
01:37:02  * qmx|awaychanged nick to qmx
01:47:36  * c4miloquit (Remote host closed the connection)
01:50:37  * jmar777quit (Remote host closed the connection)
01:51:13  * jmar777joined
01:52:26  * chrisdickinsonquit (Read error: Operation timed out)
01:54:31  * chrisdickinsonjoined
01:55:25  * jmar777quit (Ping timeout: 256 seconds)
02:07:25  * EhevuTovjoined
02:10:15  * mikealquit (Quit: Leaving.)
02:13:26  * dapquit (Quit: Leaving.)
02:15:18  * mikealjoined
02:22:06  * mikealquit (Quit: Leaving.)
02:28:13  * pooyaquit (Quit: pooya)
02:47:48  * EhevuTovquit (Quit: This computer has gone to sleep)
02:48:05  * piscisaureus_quit (Quit: ~ Trillian Astra - www.trillian.im ~)
02:48:24  * EhevuTovjoined
02:52:22  * mikealjoined
03:00:17  * TooTallNatequit (Quit: Computer has gone to sleep.)
03:03:10  * qmxchanged nick to qmx|away
03:03:23  * lohkeyjoined
03:12:40  * piscisaureus_joined
03:12:46  * piscisaureus_quit (Client Quit)
03:27:25  * graydonquit (Quit: Leaving.)
03:27:28  * AvianFlujoined
03:29:26  * indexzerojoined
03:32:58  <Raynos>isaacs: vague
03:34:23  * lohkeyquit (Quit: lohkey)
03:35:39  * stagasquit (Ping timeout: 252 seconds)
03:48:22  * pooyajoined
03:56:54  * bradleymeckjoined
03:59:55  * TooTallNatejoined
04:00:30  * EhevuTovquit (Quit: This computer has gone to sleep)
04:02:49  * trevnorrisjoined
04:04:44  * TooTallNatequit (Client Quit)
04:10:55  * c4milojoined
04:11:09  * c4miloquit (Remote host closed the connection)
04:14:42  * brsonquit (Ping timeout: 252 seconds)
04:15:59  <trevnorris>isaacs: in your tests you had Gb, which I think means gigabits. but a buffer length is in bytes, right?
04:17:23  <trevnorris>oh, nm. just saw that you multiply buffer length by 8.
04:22:34  * mikealquit (Quit: Leaving.)
04:26:32  * lohkeyjoined
04:27:29  * mikealjoined
04:27:51  * mikealquit (Client Quit)
04:28:29  * kazuponjoined
04:32:59  * mikealjoined
04:33:19  * EhevuTovjoined
04:39:33  * lohkeyquit (Quit: lohkey)
04:45:56  * nsmjoined
05:01:37  * indexzeroquit (Quit: indexzero)
05:05:55  * indexzerojoined
05:08:36  * lohkeyjoined
05:14:17  * trevnorrisquit (Quit: Leaving)
05:21:07  * bradleymeckquit (Quit: bradleymeck)
05:22:22  * bradleymeckjoined
05:23:20  * brsonjoined
05:34:19  * EhevuTovquit (Quit: This computer has gone to sleep)
05:36:02  * bradleymeckquit (Quit: bradleymeck)
05:38:22  * kazuponquit (Remote host closed the connection)
05:44:36  * wolfeidauquit (Remote host closed the connection)
05:46:04  * kazuponjoined
05:48:20  * EhevuTovjoined
05:59:39  * EhevuTovquit (Quit: This computer has gone to sleep)
06:21:50  * pooyaquit (Quit: pooya)
06:25:33  * nsmquit (Quit: nsm)
06:29:09  * AvianFluquit (Remote host closed the connection)
06:31:44  * paddybyersjoined
07:08:46  * loladiroquit (Quit: loladiro)
07:14:04  * indexzeroquit (Quit: indexzero)
07:20:23  * trevnorrisjoined
07:21:38  * rendarjoined
07:25:49  * felixgejoined
07:31:32  * `3rdEdenjoined
07:31:58  * lohkeypart
07:51:51  * lohkeyjoined
07:51:56  * lohkeyquit (Client Quit)
08:06:05  * pooyajoined
08:13:58  * paddybyersquit (Ping timeout: 256 seconds)
08:16:49  * wolfeidaujoined
08:17:01  * wolfeidauquit (Remote host closed the connection)
08:17:08  * wolfeidaujoined
08:21:21  <indutny>morning
08:21:22  <indutny>https://docs.google.com/spreadsheet/ccc?key=0AhEDnA4M4EKGdFdhdk9reUFsUnFQSDlaNmRVQXBER3c
08:21:24  <indutny>trevnorris: ^
08:21:32  <indutny>looks like benchmarks were skewed
08:21:40  <indutny>by cloud server
08:22:20  <indutny>isaacs: ^
08:22:45  <indutny>this spikes in the middle
08:22:52  <indutny>are killing all trust in results
08:23:10  <trevnorris>indutny: interesting.
08:23:46  <indutny>ok
08:23:46  <indutny>brb
08:54:39  * brsonquit (Ping timeout: 252 seconds)
08:55:08  * qmx|awaychanged nick to qmx
09:09:03  * qmxchanged nick to qmx|away
09:12:09  * pooyaquit (Quit: pooya)
09:20:22  <trevnorris>indutny: i'm almost done creating a complete set of net tests: http://git.io/0mdWkQ
09:23:23  <trevnorris>tests rotate through tcp and net implementation with data going from client to server (c2s), server to client (s2c) and both ways (pipe)
09:37:04  <indutny>good
09:52:02  <trevnorris>indutny: have to hit the sack, but think you could use a couple to narrow down your search. i like the data you generated, just seemed to be too much variance.
09:52:16  <trevnorris>always a problem with benchmarks.
09:53:19  * stagasjoined
10:02:02  * stagasquit (Quit: ChatZilla 0.9.89-rdmsoft [XULRunner 1.9.0.17/2009122204])
10:02:09  * trevnorrisquit (Quit: Leaving)
10:15:52  * stagasjoined
10:25:24  * kazuponquit (Remote host closed the connection)
10:26:23  * hzjoined
10:34:12  * paddybyersjoined
10:41:01  * abraxasquit (Remote host closed the connection)
10:41:34  * abraxasjoined
10:46:18  * abraxasquit (Ping timeout: 252 seconds)
11:38:31  * qmx|awaychanged nick to qmx
12:36:07  * kazuponjoined
12:40:21  * sgallaghjoined
12:46:14  * sgallaghquit (Remote host closed the connection)
12:54:04  * jokesterjoined
13:00:23  * loladirojoined
13:00:32  * loladiroquit (Client Quit)
13:02:27  <jokester>Hi everyone ! I'm facing some troubles using libuv in my node native project (node-pcsc). Libuv compilation fails during node-gyp build process. Is there someone who could provide me examples to base my work on ? Thks
13:05:12  * bnoordhuisjoined
13:05:42  * sgallaghjoined
13:06:41  * paddybyersquit (Ping timeout: 252 seconds)
13:13:22  <indutny>jokester: can you please show me error that you're seeing first
13:13:40  <indutny>node-gyp isn't compiling libuv, so its definitely not a libuv problem :)
13:13:57  <indutny>so, I guess after looking at your error message we may figure out what's wrong in your code
13:18:29  <jokester>ok fine, I based my work on your example ;)
13:19:10  <indutny>my?
13:19:14  <indutny>oh good
13:19:44  <cjd>I just d/l'd libuv and ran 'make', seems to work ok on linux, we'll see re other os's
13:20:05  <jokester>@indutny http://pastebin.com/raw.php?i=qczMrG5B
13:20:56  <jokester>here is my binding.gyp: https://github.com/jokesterfr/node-pcsc/blob/master/binding.gyp
13:21:12  <indutny>jokester: huuuh?
13:21:19  <indutny>jokester: why are you embedding libuv in your project?
13:21:24  <indutny>its already available
13:21:31  <indutny>you can just #include "uv.h"
13:22:13  <indutny>and I guess your .gyp file don't have defines required for normal libuv build
13:22:15  <indutny>that's it
13:22:20  <indutny>so just remove it from your project
13:22:25  <indutny>and use one that's included with node.js
13:22:31  <indutny>otherwise you'll face a lot of problems
13:22:37  <indutny>starting from not working module ;)
13:22:47  <jokester>While compiling I got a "UV_RUN_DEFAULT is not defined", It tough I needed to embed it like you did.
13:23:45  <jokester>thanks for your advice
13:25:56  * hzquit
13:26:34  <indutny>UV_RUN_DEFAULT?
13:26:36  <indutny>what's that?
13:26:55  <indutny>ah, it's run mode
13:27:00  <indutny>ok, why do you need it? :)
13:27:14  <indutny>haha
13:27:23  <indutny>ok, feel free to ping us about anything else
13:27:29  <jokester>I picked it from the uvbook :p
13:27:32  <jokester>http://nikhilm.github.com/uvbook/basics.html#event-loops
13:27:37  <indutny>ah, great
13:27:51  <indutny>so the thing is that node.js addon runs inside already existing loop
13:28:00  <indutny>so you don't need to create new one and run it
13:28:12  <jokester>mmmh
13:28:24  <indutny>jokester: I think you should consider reading http://nodejs.org/api/addons.html
13:28:25  <jokester>is that usefull in comparison to a classical "while" loop ?
13:28:46  <jokester>because I think I will only have one "polling" process in that new loop
13:28:58  <indutny>em... you writing node.js addon ain't you?
13:29:11  <indutny>(C++ module in other words)
13:29:30  <jokester>yep
13:29:55  <indutny>ok, so you want to be able to do some networking/timers/fs/anything else in javascript after requiring your module
13:30:11  <indutny>if you'll start while() loop inside your module - everything will halt until that loop won't be stopped
13:30:25  <indutny>s/won't/will/
13:30:41  <jokester>yes, that's why I wanted to use libuv
13:30:57  <indutny>node already uses it
13:31:00  <indutny>internally
13:31:08  <indutny>so you just need to use uv_default_loop()
13:31:24  <jokester>yes
13:31:40  <indutny>then use it ;)
13:31:42  <jokester>and what about the "UV_RUN_DEFAULT)" in uv_run(uv_default_loop(), UV_RUN_DEFAULT); ?
13:31:52  <indutny>you don't need to call uv_run()
13:31:57  <indutny>its called by node
13:32:00  <jokester>aaaah
13:32:12  <jokester>ok x)
13:32:45  <jokester>so I only need to call uv_idle_init() and uv_idle_start() right ?
13:33:39  <indutny>yes
13:34:25  <jokester>thank you
13:35:08  <indutny>you're welcome
13:36:02  * paddybyersjoined
13:44:54  * jmar777joined
13:58:13  * kazuponquit (Remote host closed the connection)
14:12:18  * cjdquit (Ping timeout: 244 seconds)
14:12:23  * mmaleckichanged nick to mmalecki[out]
14:16:46  * c4milojoined
14:24:43  * sgallaghquit (Remote host closed the connection)
14:30:54  * sgallaghjoined
14:31:05  <indutny>bnoordhuis: hoya
14:31:12  <bnoordhuis>indutny: hey
14:31:21  <indutny>so I've benchmark results on hands
14:31:31  <indutny>they're pretty noisy
14:31:37  <indutny>and not really informative :)
14:32:06  <indutny>bnoordhuis: https://docs.google.com/spreadsheet/ccc?key=0AhEDnA4M4EKGdFdhdk9reUFsUnFQSDlaNmRVQXBER3c#gid=0
14:32:10  <indutny>in case if you're interested
14:32:42  <bnoordhuis>nice, thanks. i'll look at them later today
14:32:54  <indutny>ok, np
14:34:46  * c4miloquit (Remote host closed the connection)
14:54:55  * piscisaureus_joined
15:08:40  * kazuponjoined
15:11:16  * piscisaureus_quit (Ping timeout: 245 seconds)
15:13:24  * kazuponquit (Ping timeout: 264 seconds)
15:15:23  * c4milojoined
15:16:46  * bradleymeckjoined
15:30:41  * piscisaureus_joined
15:31:13  * piscisaureus_quit (Client Quit)
15:31:27  * piscisaureus_joined
15:40:15  * kazuponjoined
15:54:47  * c4miloquit (Remote host closed the connection)
15:56:55  * c4milojoined
16:00:05  * dapjoined
16:01:09  * pooyajoined
16:02:01  * qmxchanged nick to qmx|lunch
16:02:41  * dapquit (Client Quit)
16:08:21  <MI6>joyent/libuv: Ben Noordhuis master * 40a9e11 : build: fix up dependency rules * Auto-create build subdirectories. * Ad (+3 more commits) - http://git.io/09-8Cw
16:08:26  <bnoordhuis>pfox__: ^
16:08:37  * mmalecki[out]changed nick to mmalecki
16:11:43  <pfox__>bnoordhuis: you're awesome. thanks.
16:11:57  * paddybyersquit (Read error: Connection reset by peer)
16:12:02  <pfox__>i had the work done in unix for BUILDDIR as an arg to the makefile
16:12:04  * paddybyers_joined
16:12:13  <pfox__>someday i'll actually get a contribution in to libuv
16:12:15  <pfox__>someday :)
16:12:53  * mikealquit (Quit: Leaving.)
16:15:34  <isaacs>bnoordhuis: Good morning. I think I'm going to rewrite Readable.pipe today.
16:15:52  <bnoordhuis>isaacs: oh, why?
16:16:00  <MI6>joyent/node: Ben Noordhuis master * 9bd9c54 : readline: make \r\n emit one 'line' event Make lines ending \r\n emit on - http://git.io/m7xPxw
16:16:07  <isaacs>bnoordhuis: well.. i think it can be faster :)
16:16:12  <bnoordhuis>good reason
16:16:33  <isaacs>bnoordhuis: especially, it was written before we had Readable.push() and it's not really taking advantage of pushy stream behavior as well as it could
16:17:12  <isaacs>bnoordhuis: what i'd like is for Readable.push() to just shove the chunk into the pipe flow directly if it can.
16:17:21  <bnoordhuis>pfox__: opinions on BUILDDIR vs builddir_name? i picked the latter for no reason except that it's what gyp uses
16:17:37  <isaacs>bnoordhuis: which should get us closer to the js workload of emit('data', chunk)
16:17:50  <bnoordhuis>that'd be good
16:17:51  <isaacs>(ie, just a few function calls, but no buffer array monkey business)
16:18:12  <isaacs>effectively, once you pipe it, a pull-stream is pushy *anyway* so we may as well leverage that.
16:18:23  <isaacs>but the current way that pipe() is written, it's hard to do that.
16:18:30  <isaacs>it exposes things in the wrong ways.
16:18:34  <isaacs>too many closures and other stuff.
16:18:37  * mikealjoined
16:18:42  <isaacs>hard to manipulate.
16:18:48  <isaacs>so... rewrite.
16:19:08  <isaacs>bnoordhuis: any insights on http_simple?
16:19:31  <bnoordhuis>isaacs: nothing conclusive so far
16:19:38  <isaacs>kewl
16:19:39  <bnoordhuis>except that perf's jit support is kinda weak
16:20:22  <pfox__>builddir_name seems to be more common, actually
16:21:45  <isaacs>you know, i could have sworn that i'd already squeezed most or all of the regressions in net-pipe, but i guess i brought it all back with Readable.push() refactoring
16:28:45  * AvianFlujoined
16:29:19  <MI6>joyent/node: bnoordhuis created branch rename-os-tmpdir - http://git.io/qdCq5A
16:29:47  <bnoordhuis>^ low-prio review anyone? it's for https://github.com/joyent/node/issues/4622
16:29:53  * bnoordhuisheads off to dinner
16:30:29  <isaacs>bnoordhuis: lgtm
16:31:12  * mikealquit (Quit: Leaving.)
16:31:30  * pooyaquit (Quit: pooya)
16:48:55  * `3rdEdenquit (Quit: fooding)
16:54:11  <pfox__>bnoordhuis: /w 4
16:54:14  <pfox__>whoops
17:02:27  * paddybyers_quit (Ping timeout: 248 seconds)
17:06:06  * brsonjoined
17:06:46  * pooyajoined
17:09:25  * mikealjoined
17:11:28  * piscisaureus_quit (Ping timeout: 272 seconds)
17:28:26  * pooyaquit (Quit: pooya)
17:32:08  <Raynos>piscisaureus: we should team up and make npm install run npm dedup.
17:52:37  <indutny>bnoordhuis: lgtm
17:52:56  <indutny>low priority stuff is so alluring :)
17:54:33  * pooyajoined
17:54:40  * mikealquit (Quit: Leaving.)
17:55:43  <CoverSlide>let's alias everything! snake case aliases for everything!
17:56:52  * mikealjoined
17:59:00  * mikealquit (Client Quit)
18:01:39  * mikealjoined
18:04:17  * brsonquit (Ping timeout: 244 seconds)
18:04:31  * `3rdEdenjoined
18:06:57  * brsonjoined
18:08:21  * hzjoined
18:10:29  * brson_joined
18:11:36  * brsonquit (Ping timeout: 264 seconds)
18:23:03  * TooTallNatejoined
18:23:20  * trevnorrisjoined
18:24:38  * kazuponquit (Remote host closed the connection)
18:25:05  * mikealquit (Quit: Leaving.)
18:37:12  * dapjoined
18:38:48  * wolfeidauquit (Remote host closed the connection)
18:38:56  * bradleymeckquit (Quit: bradleymeck)
18:39:14  * wolfeidaujoined
18:40:46  * wolfeidauquit (Remote host closed the connection)
18:42:18  * mikealjoined
18:45:09  * mikealquit (Client Quit)
18:46:10  <trevnorris>isaacs: all variations of net tests are complete in GH-4656. still doing some cleanup, but think there are some results you'll want.
18:46:24  * hzquit (Ping timeout: 264 seconds)
18:46:31  <trevnorris>there's a ~10% regression in the client-server and server-client test on tcp_raw.
18:47:19  <trevnorris>(so stating the obvious here, but that means there's regression at the cc layer)
18:51:52  * AvianFluquit (Remote host closed the connection)
18:55:01  * kazuponjoined
18:55:29  * qmx|lunchchanged nick to qmx
18:55:35  <trevnorris>isaacs: also things like there's a ~15% regression sending data client->server between strems2 api vs raw
18:56:07  <trevnorris>but a ~7% regression on v0.8 client->server using the old stream vs raw
18:56:38  <CoverSlide>alright, dump streams2, back to streams1
18:57:12  * mikealjoined
18:57:16  <trevnorris>CoverSlide: how many streams2 changes happened at the cc level?
18:57:38  <CoverSlide>oh hrm
18:58:07  * CoverSlideshrugs
18:58:26  <trevnorris>if someone else can get the raw tcp tests back to par, I can probably squeeze out the last 5-10% from the js lib
18:59:05  <indutny>ooh
18:59:06  <indutny>streams2
19:00:02  <trevnorris>just took `git diff --stat 01db736 77ed12f` (before and after of streams2 branch) and no changes to the cc level
19:00:19  <trevnorris>which means that the tcp_wrap layer has had significant regression since that point.
19:00:34  <indutny>erm?
19:00:38  <indutny>tcp_wrap has regressed?
19:01:24  * mikealquit (Client Quit)
19:01:25  <trevnorris>indutny: yeah. I finally complete the tests. one isaacs gave me was a stream test directly over the tcp_wrap layer. no js libs.
19:01:32  <trevnorris> completed*
19:01:37  <indutny>huuuh
19:01:43  <indutny>I just can't fit it in my mind
19:01:54  <indutny>I thought we had commited only fixes
19:02:13  <indutny>trying to figure it out, but it seems that there were no "improvements"
19:02:55  <trevnorris>indutny: here's all the new tests: http://git.io/0mdWkQ
19:03:06  <trevnorris>can you look over the tcp_raw_* and see if those look correct?
19:03:46  <trevnorris>(c2s = client to server; s2c = server to client; pipe = client to server and back)
19:04:11  * kazuponquit (Ping timeout: 245 seconds)
19:06:19  <isaacs>trevnorris: this is important work you're doing. thank you.
19:06:30  <isaacs>trevnorris: i'l look over the pull req today
19:06:59  * piscisaureus_joined
19:07:00  <trevnorris>isaacs: np. just give me a heads up. still a few cleanups that need to be done. but wanted to get a working set out there asap
19:07:17  <piscisaureus_>ircretary: notes
19:07:25  <isaacs>bnoordhuis, indutny, TooTallNate, piscisaureus: I'm going to write up a thing today about what Node 1.0 will mean. Probably publish it tomorrow. I'll send out a review request this evening (pacific evening)
19:07:30  <isaacs>piscisaureus_: ^
19:07:37  <piscisaureus_>isaacs: kewl
19:07:40  <TooTallNate>isaacs: sounds good
19:07:44  <indutny>surely
19:07:55  <indutny>you want to explain why we're not that cool yet?
19:07:56  <indutny>:)
19:09:55  <isaacs>yeah, basically ;)
19:10:04  <isaacs>you know, really, we could have probably called 0.8 1.0
19:10:07  <isaacs>and called 0.10 2.0
19:10:16  <isaacs>but those big numbers are scary.
19:10:17  <indutny>may be we should do it?
19:10:20  <indutny>:)
19:10:20  <isaacs>meh
19:10:25  <isaacs>let's skip over 1.0
19:10:27  <isaacs>1.0 is stupid
19:10:30  <indutny>ok
19:10:31  <indutny>1.10
19:10:33  <isaacs>10.0 is WAY AWESOMER
19:10:38  <indutny>oh
19:10:41  <indutny>btw, yeah
19:10:42  <indutny>I agree
19:10:48  <indutny>major version is stupid
19:10:51  <isaacs>actualy, let's go spinal tap and dial it up to 11.0.0
19:10:53  * paddybyersjoined
19:11:02  <indutny>I'm not kidding
19:11:05  <CoverSlide>i say 9000.0.0
19:11:09  <indutny>10.0
19:12:21  * bradleymeckjoined
19:13:11  <indutny>seriously, why not?
19:13:58  <CoverSlide>haha
19:14:24  <indutny>trevnorris: it looks good to me
19:14:25  <CoverSlide>that should get the attention of corporate idiots
19:14:27  <indutny>trevnorris: raw test
19:14:31  <indutny>CoverSlide: yes
19:14:49  <trevnorris>indutny: thanks. so that means there's a ~10% regression at the cc level somewhere.
19:15:05  <CoverSlide>Java's on 1.8, .Net is on 4.5, but we're on 10.0, bitches!
19:15:25  <indutny>trevnorris: how have you tested it?
19:15:30  <indutny>trevnorris: on 0.8.x and on master?
19:15:35  <indutny>CoverSlide: ++
19:15:39  <indutny>isaacs: you should consider this
19:15:45  <trevnorris>indutny: yup.
19:16:06  <indutny>isaacs: chromium already does it
19:16:15  <indutny>and I don't feel like we're going to increment major version anytime soon
19:16:45  <trevnorris>or we could pull a vlc and not release 1.0 for like 15 years.
19:20:52  <trevnorris>indutny: yeah. for some reason I have my fork cloned, and joyent's cloned. so I just have them each build off the latest master and v0.8 branch.
19:20:58  <trevnorris>so that's where the numbers are coming from
19:21:16  <indutny>ok, it basically means that regression is on libuv level
19:21:31  <indutny>because I can't see any major changes to tcp_wrap.cc
19:21:51  <trevnorris>um, sure. that one's out of my ballpark.
19:22:06  <trevnorris>(i just report the number ;-)
19:22:56  * bradleymeckquit (Ping timeout: 245 seconds)
19:26:46  * bradleymeckjoined
19:31:31  <trevnorris>isaacs: ok, hope this makes sense. in v0.8 when you took the half the avg of c2s and s2c vs pipe, there was a ~7% regression. where in master it's ~17%.
19:31:46  * mikealjoined
19:31:54  <trevnorris>so not sure how important pipe is, but there's something going on.
19:32:50  * lohkeyjoined
19:34:36  <trevnorris>(and that's additional regression, taking the known regression into account)
19:34:58  * AvianFlujoined
19:43:48  * hzjoined
19:45:35  * qmxchanged nick to qmx|brb
19:56:29  * `3rdEdenquit (Remote host closed the connection)
20:00:40  * kazuponjoined
20:05:08  * kazuponquit (Ping timeout: 248 seconds)
20:18:00  <trevnorris>bnoordhuis: to drop that uninitialized bytes msg from valgrind, do I just need to fill them with something?
20:18:24  <indutny>trevnorris: yes
20:18:30  <trevnorris>cool. thanks
20:20:13  * EhevuTovjoined
20:22:43  <trevnorris>bnoordhuis: fyi, valgrind isn't giving me "README_MISSING_SYSCALL_OR_IOCTL" when I run the tests on the v0.8 branch.
20:25:18  <indutny>yeah, that's ok
20:25:47  <trevnorris>indutny: ok. just curious why it's not happening on the v0.8 branch
20:25:57  <indutny>well, we did a lot since then
20:25:57  * wolfeidaujoined
20:26:02  <indutny>actually bnoordhuis did :)
20:26:14  * qmx|brbchanged nick to qmx
20:28:13  * EhevuTovquit (Quit: This computer has gone to sleep)
20:28:59  * EhevuTovjoined
20:29:23  <trevnorris>and that's mainly libuv stuff?
20:30:01  <indutny>sure yes
20:30:07  <indutny>but some internal refactoring too
20:30:12  <indutny>i.e. streaming interface in crypto
20:30:20  <indutny>and v8 update
20:32:51  * `3rdEdenjoined
20:33:39  <trevnorris>indutny: i kid you not that my tests show that writing an initialized buffer is faster than an uninitialized one. is that possible?
20:33:51  <trevnorris>(sorry, the other way around)
20:33:58  <indutny>erm?
20:34:14  <indutny>writing to uninitialized buffer is faster?
20:34:19  <indutny>are you taking initialization in account?
20:35:08  <trevnorris>basically the difference between filling the buffer at the beginning of the script. give me a minute to run enough tests to make sure this is statistically sound.
20:36:52  <indutny>please rephrase it
20:37:40  <trevnorris>indutny: yeah. the stdev on each test is super small. w/o buffer.fill - 14.73 Gb/sec; w/ buffer.fill - 14.07 GB/sec
20:38:05  <trevnorris>ok, to remove the error from valgrind I was buffer.fill'ing before any of the tests run
20:38:16  <trevnorris>but when I did that, I noticed the tests going slower.
20:38:31  <indutny>well, there might be a lot of reasons
20:38:41  <indutny>none of them should really interest you right now :)
20:38:58  <indutny>pages/cpu cache/valgrind itself/kernel heuristics
20:39:06  <indutny>forget latter one
20:39:14  <indutny>I'm almost sleeping
20:39:20  <trevnorris>heh, cool.
20:40:51  * stagasquit (Ping timeout: 245 seconds)
20:40:55  * indutny&
20:40:56  <LOUDBOT>I'M HOLDING OUT FOR THE NINTENDO SIXTY-FIVE
20:43:42  <CoverSlide>&
20:43:49  * CoverSlide&
20:43:49  <LOUDBOT>WHY ISN'T THE WHOLE GULF OF MEXICO FULL OF MUD BY NOW?
20:46:51  * bradleymeckquit (Quit: bradleymeck)
20:51:11  * jmar777quit (Read error: Connection reset by peer)
20:51:31  * jmar777joined
20:54:29  <trevnorris>phew.... think those net benchmarks are finally done.
20:54:40  <trevnorris>isaacs: i feel they're ready for review.
20:55:06  <isaacs>trevnorris: kewl.
20:55:14  * isaacsis deep in the blog trenches atm
20:59:29  * c4miloquit (Remote host closed the connection)
21:00:02  * c4milojoined
21:00:59  * c4miloquit (Remote host closed the connection)
21:01:06  * kazuponjoined
21:01:55  * TooTallNatequit (Quit: Computer has gone to sleep.)
21:02:43  * TooTallNatejoined
21:05:56  * kazuponquit (Ping timeout: 248 seconds)
21:07:00  * wolfeidauquit (Remote host closed the connection)
21:17:24  * loladirojoined
21:32:30  * rendarquit
21:40:41  * jmar777quit (Remote host closed the connection)
21:41:15  * jmar777joined
21:45:39  * jmar777quit (Ping timeout: 248 seconds)
21:51:31  * c4milojoined
21:59:49  * sgallaghquit (Remote host closed the connection)
22:04:41  * AvianFluquit (Remote host closed the connection)
22:08:34  * stagasjoined
22:15:29  * loladiroquit (Quit: loladiro)
22:46:42  <trevnorris>freakin a. the benchmark api functionality is so extensive that the comment documentation is longer than the code.
22:47:32  * felixgequit (Quit: felixge)
22:50:03  * felixgejoined
22:50:03  * felixgequit (Changing host)
22:50:03  * felixgejoined
22:51:29  * hzquit
22:51:49  <isaacs>ha
22:52:03  <piscisaureus_>i totally missed this
22:52:12  <piscisaureus_>what's up with these benchmarks?
22:52:28  <trevnorris>piscisaureus_: i've been working on a benchmark api to help identify problems.
22:52:41  <piscisaureus_>trevnorris: for node?
22:52:56  <trevnorris>piscisaureus_: e.g. i've solidified that there is a libuv regression causing ~10% slowdown in net streaming
22:53:08  <piscisaureus_>did you identify which commit it did yet?
22:53:17  <piscisaureus_>s/it did/did it/
22:53:37  <piscisaureus_>also where is this benchmark? PR / github repo / gist ?
22:53:40  <trevnorris>not yet. i'm doing some cleanup to make sure my tests are correct.
22:53:44  <trevnorris>one sec. i'll get you the link
22:55:16  <trevnorris>piscisaureus_: http://git.io/UnjYzQ that link is to benchmark/ in my branch.
22:55:35  <trevnorris>_bench_timer.js is the current lib, though I'm making a couple small improvements to api and docs now
22:55:53  <piscisaureus_>trepan_: thanks!
22:56:00  <piscisaureus_>er, *trevnorris
22:56:07  * AvianFlujoined
22:56:20  <trevnorris>net/ has a huge number of tcp stream tests from isaacs
22:56:46  <trevnorris>though I've created one for every part of the tcp stream and net lib. and client to server, server to client, and pipe
22:57:13  <trevnorris>so we can cross test and find where regression are coming from
22:58:02  <trevnorris>also added a few that use the new streams2 api, not the old one. so we can cross compare.
22:58:53  * `3rdEdenquit (Quit: Zzz)
22:59:20  <trevnorris>piscisaureus_: the api allows for cli parameterization. bnoordhuis requested that a single test be made available for valgrind.
22:59:47  <isaacs>piscisaureus_: what has to happen to libuv still?
22:59:50  <isaacs>piscisaureus_: before 1.0?
22:59:55  <isaacs>piscisaureus_: i'm totally stumped on this.
22:59:58  * isaacsneeds a cheeseburger.
23:00:21  * paddybyers_joined
23:01:10  * paddybyersquit (Remote host closed the connection)
23:01:11  * paddybyers_changed nick to paddybyers
23:02:10  * kazuponjoined
23:02:17  <trevnorris>mmm... cheeseburger sounds good. might have to drop by in-n-out
23:04:02  <trevnorris>isaacs: i'm also seeing a regression in fs operations. after the doc updates i'll work on creating a few of those as well.
23:04:09  <isaacs>k
23:04:24  <isaacs>trevnorris: get this into a PR as soon as you can
23:04:29  <isaacs>trevnorris: like, before adding any more tests :)
23:04:34  <isaacs>trevnorris: you must share with the group :0
23:05:37  <trevnorris>isaacs: GH-4656. give me 30 mins and I'll have these small changes done.
23:06:10  <isaacs>trevnorris: https://github.com/joyent/node/issue/4656 <-- 404?
23:06:21  * jmar777joined
23:06:30  <isaacs>oh, issueS
23:06:31  <isaacs>duh
23:07:03  * kazuponquit (Ping timeout: 276 seconds)
23:07:08  <trevnorris>that's strange. thought gh auto redirected those...
23:10:54  <isaacs>trevnorris: also a 404: https://npmjs.org/bench-timer
23:11:08  <isaacs>trevnorris: you should package this thing up as a separate module, and have it live in ./tools/bench-timer, i think
23:11:25  <isaacs>trevnorris: or even ./benchmarks/node_modules/bench-timer
23:11:35  <isaacs>trevnorris: and benchamrks can do require('bench-timer')
23:11:39  <isaacs>and users can install it, use it, etc.
23:12:05  <trevnorris>isaacs: ok. I can do that. i'll do that in 10 and update the PR
23:12:14  <isaacs>awesome
23:15:45  <brson_>I am planning on driving the Rust scheduler using the uv event loop, and to signal the scheduler to wake a task I expect to use async_cb to execute scheduler code. Is there signifacant performance overhead to async_cb? Signaling Rust's current scheduler is done with a mutex and condition variable
23:18:04  <isaacs>trevnorris: also: `make bench` needs to output a bunch of operation/time values
23:18:09  <isaacs>trevnorris: the current `make bench` is useless.
23:18:15  <isaacs>trevnorris: we can delete it
23:19:03  <isaacs>trevnorris: then we can track each row as a line on a graph.
23:19:22  <isaacs>where the x axis is commit id, and the y axis is ops/sec, and each line is a different benchmark
23:19:36  <isaacs>ok, i'm out for a bit
23:19:41  * isaacs&
23:19:41  <LOUDBOT>IT'S NOT A TOY, IT MAKES REAL CUPCAKES WITH A 40-WATT BULB. AND IT HAS ICING PACKETS, BUT THE SECRET INGREDIENT IS LOVE.. DAMMIT.
23:23:35  <trevnorris>piscisaureus_: let me know if you have any feedback. especially on the benchmarks themselves.
23:23:48  <trevnorris>need to make sure they're testing the smallest piece of functionality possible.
23:40:18  * loladirojoined
23:49:21  * felixgequit (Quit: felixge)
23:53:36  * wolfeidaujoined