Regarding the statement that the I2P network is the bottleneck, I did a small study of the number of messages which do not get delivered to the outproxies. This is with a 3-hop client tunnel on my side and the 0-hop tunnel on Arctic's side:
proxy: failed/tried
cerise: 0/427
gray: 0/301
amber: 0/446
blue: 0/90
brown: 5/403
pink: 0/318
green: 1/108
mauve: 0/61
jade: 0/257
orange: 0/65
I've written an analysis script so that anyone can perform a similar study. You will need python 2.7 and some disk space for the log files.
1. Save the following code into a file called "proxies.py" :
Code: Select all
proxies = {
"blue":"sVBg",
"green":"mw2w",
"amber":"QFCc",
"mauve":"bqcH",
"gray":"7AQZ",
"pink":"h6i9",
"orange":"bSi8",
"cerise":"nQKH",
"jade":"5O~r",
"brown":"iDHH"
}
2. Save the following code into a file called "analysis.py" :
Code: Select all
import sys,re
from proxies import proxies
proxyHashToName = {}
for name,hash in proxies.iteritems() :
proxyHashToName[hash] = name
sendFailedRe = re.compile(".*?OneShotJob: (\d+): Send failed \(cause: 3.*?to (\S+) out.*")
sendRe = re.compile(".*?OneShotJob: (\d+): Send outbound client message - leaseSet found locally for (\S+).*")
failedDestJobs = {}
triedDestJobs = {}
def process(regex, targetDict) :
f = open(sys.argv[1])
for line in f :
line = line[:-1]
m = regex.match(line)
if m is None :
continue
dest = m.groups()[1]
job = m.groups()[0]
targetDict.setdefault(dest,set()).add(job)
process(sendFailedRe, failedDestJobs)
process(sendRe, triedDestJobs)
for hash, name in proxyHashToName.iteritems() :
tried = triedDestJobs.get(hash,[])
failed = failedDestJobs.get(hash,[])
print "%s: %d/%d" % ( name, len(failed), len(tried) )
3. Enable logging for class "net.i2p.router.message.OutboundClientMessageOneShotJob" to DEBUG level.
4. Do some browsing!
5. When you want to run the analysis, copy the router logfile to the same directory as the two python files and run the following:
Code: Select all
python analysis.py log-router-X.txt
6. Don't forget to turn off DEBUG logging for the class above because it may fill up your disk space quickly.
It would be useful to perform tests with different tunnel settings such as number of hops and number of tunnels.