Builds 1234-1236 included several changes to routing that we hope
improved things.  Specifically:
- The "loop fix": when node A is choosing how to route a request it
received from node B, when considering node C's FOAF locations, it
should ignore locations among C's peers that exactly match B's
location.  That is, A shouldn't try to route a request back where it
came from by an alternate route.  Similarly, A should ignore A's own
location, and the locations of any node A has already tried to route
to and failed (rejectedLoop, rejectedOverload, etc).
- FOAF tie breaking: When A is routing a request, if both B and C have
the same minimum FOAF distance from the request location (presumably
because they have a peer in common), A should tie break on which has
the better immediate location.
- A change to ULPR propagation that shouldn't have much direct impact,
but may have had an indirect impact.

This is also the first time we've made network-level changes since I
started collecting the hourly HTL success rate data; hopefully, this
gives me something to analyze and determine in detail whether the
changes made an improvement.

First, the caveats:  1236 is not yet self-mandatory, so there may
still be some upgrade disruption happening.  This is only data from my
node; edt has been sending me his hourly stats data as well, but I
don't yet have any post-1236 data from him, so I haven't included any
of it.  There are known local changes at my node (fewer persistent
requests queued) that correlate, because my node lost its node.db4o
with the 1236 upgrade (though I do attempt to model local request
count impact on success rates).  I don't yet have enough data to know
if there are any weekly effects (though I have attempted to account
for time-of-day effects).  And all I've done are regression tests; I
haven't yet done the various non-parametric statistics tests to
produce an actual p-value on whether the change made a difference.  I
strongly suspect it did, but there's too much structure to my
residuals and too much non-normality to the data to be able to say
that from what I've done so far.  Network load is meaningfully lower
on the new data as well, and I don't know how to explain that.

To summarize: these results are highly preliminary.  Do *not* draw
conclusions from them.  They are, however, interesting and promising.
I'll have better data soon, that we might be able to begin drawing
tentative conclusions from.  But for now, I think the data are
intriguing enough that people would enjoy seeing them.  I would be
*very* appreciative of comments or suggestions.

Now, the request:  I'd like more people to send me their success rate
data!  So far I only have one; that's rather disappointing, given how
many people want a faster Freenet.  It's not hard; just turn on
loglevel normal, make sure you have plenty of space allocated to logs
so it doesn't drop old ones, and then run "zgrep HourlyStats
logs/freenet-*.gz > output.txt" and send me the results by email.
There's nothing non-anonymous in there.  You don't have to remove
duplicates; I can handle that easily.  There's no particular need for
you to worry about use of your node, internet connection, uptime, etc;
I'm trying to model that, and I should be able to basically average it
out.  I'd like high-uptime nodes, but it's not required.

So, the preliminary results.  All data is based on the total observed
CHK success rate (both local and remote; the % listed in the success
rate by htl box on the stats page).  First, the raw success rate vs
HTL graph:
freenet:c...@u3evtva0k6wvfmcji-ww0-ybdmlkmyef~hyxd6hbf-o,mphkKgatjdGtpHjf70t7APtBy82eW-GHwPjWWnNQFW4,AAIC--8/rate_both.png
The success rates are rather noisy, but it looks at first glance like
the new data (magenta) shows higher success rates than the older data
(blue).

Next, I created a linear regression model that attempted to explain
success rates based on other factors.  I included HTL, using 4th order
polynomial fit, since it showed a fair bit of curving; an exponential
or power model is probably better, but nonlinear regression is more
complicated.  The high order polynomial should match such curves
reasonably well.  I included a linear fit on local CHK blocks fetched,
on the assumption that local load probably has an impact.  I included
a quadratic fit on total incoming CHK requests, as an indicator of
local / global network load.  And lastly, I included a sinusoidal fit
(amplitude and phase, but not frequency) to time of day, and second
and third harmonics.  Overall R^2 was 0.84, with high significance
values; all parameters were significant at the 1% level (most
dramatically better than that), with the exception of the third
harmonic of time of day.

(The model was built against the unified set of data; we'll look for
changes resulting from the new build in the residuals, rather than in
model coefficients.)

Having explained away a large fraction of the variation in the data,
we look at the model residuals:
freenet:c...@9unnkexj6-wqkqdc2pwmxqreyjykdnxq-ej46c41qac,Gsi0xqKxA2hC~3w9iwZm9S8IwcBhH4ljXH7jOAmtSpU,AAIC--8/resid_vs_htl.png
What we see here is the portion of the success rate not explained by
the model (the residuals).  Positive numbers mean that the observed
success rate was higher than predicted by the model, negative means
lower.  The lines shown are average residual by HTL; they present a
slightly clearer picture of what's going on than the clouds of data
points.  Roughly, we see improved success rates at HTL 11-17, no
change at 6-10 and 18, and a slight decrease at 1-5.  This is not
inconsistent with the hypothesis I had posed before releasing the
builds, which was that improved routing would improve the success
rates at all HTLs, but that there would be a secondary effect of
improved routing meaning that more "easy" requests succeed at high
HTL, and that therefore the remaining low-htl requests would be
"harder", reducing the success rate.  (I predicted we would see
improvement at high htl, and a slight gain, no change, or slight drop
at low htl.)

Lastly, we look at a plot of model residuals vs success rate:
freenet:c...@kkiyz3enchahlen8d-bq8v0jfpjc818yol3vkxb-phc,JgzKJzaTsqV2iNiz-5OTl~Gt4AuKR0X-NH6NBHDCzD8,AAIC--8/residuals.png
For a multivariate regression, plotting residuals vs observed result
is a good way to get a visual picture of whether the model is doing a
good job.  If the model is explaining all non-noise factors, the
residuals should show no vertical patterning (horizontal patterning
represents patterns in the collected data).  We see significant
vertical patterning, of a similar structure on both sets of data.  The
structure suggests that there are unexplained factors that influence
the success rate.  Candidates include things like whether I was
running messaging apps (and therefore making those popular keys easy
to find), and how long my node had been up (and thus the population of
the recent requests cache, which I have set to a longer than default
lifetime).  The similarity in residual structure suggests that this
model deficiency is probably not having a huge impact on whether our
conclusions are valid.

Looking at the model coefficients is mildly interesting.  For example,
the time of day factor shows a maximum impact on predicted success
rate of +/- 1.6%.  Success rates are good in the 2200-0200 UTC range,
and less good in the 1200-1700 range.  The magnitude of this effect is
swamped by the individual data noise, but it is present.  Other
effects modeled (local / network load) show similar magnitude impact.
We see a strong impact from the network load parameter (incoming chk
request count); it accounts for a change of +/- 9%.  This is something
else that shows strong pre/post 1236 changes: the post-1236 data has
less network load.  I don't know why this would be, but we can clearly
see it on this graph of residuals vs remote requests:
freenet:c...@vwlfek98dqwlyji6edcdivcvy7rw6y3dkijrmzratbm,cvdKwGJjuaZjYtI8gGSC~o6s6Ul1PZ1Y9p9y0buL2EE,AAIC--8/resid_vs_remote.png

This network load discrepancy is worth examining in more detail.
Lower global load might well account for the entire observed effect;
there might be no change from the new build.  On the other hand, we
expect improved routing to reduce global load (though I would be
shocked if it reduced it as much as is observed).  I don't know how to
explain this; clearly, more modeling work is required.

Evan Daniel
_______________________________________________
Devl mailing list
Devl@freenetproject.org
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to