-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi y'all, its weekly update time * Index: 1) 0.4.1.1 status 2) Pretty pictures 3) 0.4.1.2 and 0.4.2 4) Bundled eepserver 5) ??? * 1) 0.4.1.1 status After a pretty bumpy 0.4.1 release (and subsequent rapid 0.4.1.1 update), the net seems to be back to normal - 50-something peers actrive at the moment, and both irc and eepsites(I2P Sites) are reachable. Most of the pain was caused by insufficient testing of the new transport outside lab conditions (e.g. sockets breaking at strange times, excessive delays, etc). Next time we need to make changes at that layer, we'll be sure to test it more widely prior to release. * 2) Pretty pictures Over the last few days there have been a large number of updates going on in CVS, and one of the new things added was a new stat logging component, allowing us to simply pull out the raw stat data as its being generated, rather than deal with the crude averages gathered on /stats.jsp. With it, I've been monitoring a few key stats on a few routers, and we're getting closer to tracking down the remaining stability issues. The raw stats are fairly bulky (a 20-hour run on duck's box generated almost 60MB of data), but thats why we've got pretty pictures - http://dev.i2p.net/~jrandom/stats/ The Y axis on most of those is milliseconds, while the X axis is seconds. There are a few interesting things to note. First, client.sendAckTime.png is a pretty good approximation of a single round trip delay, as the ack message is sent with the payload and then returns the full path of the tunnel - as such, the vast majority of the nearly 33,000 successful messages sent had a round trip time under 10 seconds. If we then review the client.sendsPerFailure.png along side client.sendAttemptAverage.png, we see that the 563 failed sends were almost all sent the maximum number of retries we allow (5 with a 10s soft timeout per try and 60s hard timeout) while most of the other attempts succeeded on the first or second try. Another interesting image is client.timeout.png which sheds much doubt on a hypothesis I had - that the message send failures were correlated with some sort of local congestion. The plotted data shows that the inbound bandwidth usage varied widely when failures occurred, there were no consistent spikes in local send processing time, and seemingly no pattern whatsoever with tunnel test latency. The files dbResponseTime.png and dbResponseTime2.png are similar to the client.sendAckTime.png, except they correspond to netDb messages instead of end to end client messages. The transport.sendMessageFailedLifetime.png shows how long we sit on a message locally before failing it for some reason (for instance, due to its expiration being reached or the peer it is targetting being unreachable). Some failures are unavoidable, but this image shows a significant number failing right after the local send timeout (10s). There are a few things we can do to address this: - first, we can make the shitlist more adaptive- exponentially increasing the period a peer is shitlisted for, rather than a flat 4 minutes each. (this has already been committed to CVS) - second, we can preemptively fail messages when it looks like they'd fail anyway. To do this, we have each connection keep track of its send rate and whenever a new message is added to its queue, if the number of bytes already queued up divided by the send rate exceeds the time left until expiration, fail the message immediately. We may also be able to use this metric when determining whether to accept any more tunnel requests through a peer. Anyway, on to the next pretty picture - transport.sendProcessingTime.png. In this you see that this particular machine is rarely responsible for much lag - typically 10-100ms, though some spikes to 1s or more. Each point plotted in the tunnel.participatingMessagesProcessed.png represents how many messages were passed along a tunnel that router participated in. Combining this with the average message size gives us an estimated network load that the peer takes on for other people. The last image is the tunnel.testSuccessTime.png, showing how long it takes to send a message out a tunnel and back home again through another inbound tunnel, giving us an estimage of how good our tunnels are. Ok, thats enough pretty pictures for now. You can generate the data yourself with any release after 0.4.1.1-6 by setting the router config property "stat.logFilters" to a comma seperated list of stat names (grab the names from the /stats.jsp page). That is dumped to stats.log which you can process with java -cp lib/i2p.jar net.i2p.stat.StatLogFilter stat.log which splits it up into seperate files for each stat, suitable for loading into your favorite tool (e.g. gnuplot). 3) 0.4.1.2 and 0.4.2 There have been lots of updates since the 0.4.1.1 release (see the history [1] for a full list), but no critical fixes yet. We'll be rolling them out in the next 0.4.1.2 patch release later this week after some outstanding bugs relating to IP autodetection are addressed. The next major task at that point will be to hit 0.4.2, which is currently slated [2] as a major revamp to the tunnel processing. Its going to be a lot of work, revising the encryption and message processing as well as the tunnel pooling, but its pretty critical, as an attacker could fairly easily mount some statistical attacks on the tunnels right now (e.g. predecessor w/ random tunnel ordering or netDb harvesting). dm raised the question however as to whether it'd make sense to do the streaming lib first (currently planned for the 0.4.3 release). The benefit of that would be the network would become both more reliable and have better throughput, encouraging other developers to get hacking on client apps. After that's in place, I could then return to the tunnel revamp and address the (non-user-visible) security issues. Technically, the two tasks planned for 0.4.2 and 0.4.3 are orthogonal, and they're both going to get done anyway, so there doesn't seem to be much of a downside to switching those around. I'm inclined to agree with dm, and unless someone can come up with some reasons to keep 0.4.2 as the tunnel update and 0.4.3 as the streaming lib, we'll switch 'em. [1] http://dev.i2p.net/cgi-bin/cvsweb.cgi/i2p/history.txt?rev=HEAD [2] http://www.i2p.net/roadmap * 4) Bundled eepserver As was mentioned in the 0.4.1 release notes [3], we've bunded the software and configuration necessary for running an eepsite(I2P Site) out of the box - you can simply drop a file in the ./eepsite/docroot/ directory and share the I2P destination found on the router console. A few people called me on my zeal for .war files though - most apps unfortunately need a little more work than simply dropping a file in the ./eepsite/webapps/ dir. I've put together a brief tutorial [4] on running the blojsom [5] blogging engine, and you can see what that looks like on detonate's site [6]. [3] http://dev.i2p.net/pipermail/i2p/2004-September/000456.html [4] http://www.i2p.net/howto_blojsom [5] http://wiki.blojsom.com/wiki/display/blojsom/About+blojsom [6] http://detonate.i2p/ * 5) ??? Thats about all I've got at the moment - swing on by the meeting in 90 minutes if you want to discuss things. =jr -----BEGIN PGP SIGNATURE----- Version: PGP 8.1 iQA/AwUBQWL3MxpxS9rYd+OGEQLk1gCfeMpSoYfbIlPWobks3i7lr8MjwDkAoOMS vkNuIUa6ZwkKMVJWhoZdWto4 =hCGS -----END PGP SIGNATURE-----