Hi all,
First of all thanks for the wonderful lightweight configurable free
software. :-)
I've just started running a GTKG ultrapeer after a long time as a leaf
(my new machine finally has enough physical memory) and I'm seeing some
behaviour that I think might be a bug. Briefly, when the upstream
bandwidth is throttled and there are uploads in progress, the message
queues of neighbouring ultrapeers can start to fill up. This causes the
ultrapeers to be marked as inactive and dropped, and GTKG starts looking
for new ultrapeers. A large number of connections are opened, which
causes further congestion, so once again the new connections are marked
as inactive and dropped. This 'storm' of new connections can continue
indefinitely. It seems to be possible to stabilise things by reducing
the number of neighbours and the number of connections used to find new
neighbours, at which point the gnet bandwidth drops, the message queues
start to empty, and GTKG stops dropping connections.
It seems like this problem might be caused by TCP's slow start
mechanism: long-running TCP connections are much more robust to packet
loss and RTT variance than new connections, so the newly established
ultrapeer connections can't compete for bandwidth with existing HTTP
connections, and the low throughput causes the message queues to fill up
even if the remote peers are perfectly responsive.
Another factor might be vendor selection: my peer quickly reaches a
state where 60% of its neighbours are either LimeWire or BearShare, at
which point around half of the new connections it makes will be dropped
straight away because of the vendor. Although I like this feature, it
must be causing quite a lot of load on the network.
Here's how my bandwidth is configured:
Use surplus bandwidth = yes
Prefer compressed connections = yes
Use IP Type of Service = no
General incoming traffic = 5 KiB/s
General outgoing traffic = 5 KiB/s
Ultrapeer mode incoming traffic from leaves = 5 KiB/s
Ultrapeer mode outgoing traffic to leaves = 5 KiB/s
HTTP cumulative download rate = 245 KiB/s
HTTP cumulative upload rate = 20 KiB/s
Enable dynamic upload slots allocation = yes, 70%
Compute upload connection speed = yes
Here's what it displays for available bandwidth:
Total input bandwidth limit = 250 KiB/s
Total output bandwidth limit = 25 KiB/s
Measured HTTP latency = 0.000 s
(By the way it's always puzzled me why the total limit doesn't seem to
include the ultrapeer mode leaf traffic. Another thing that puzzles me:
when I specify "Try to keep at least 20 and allow at most 35 total
connections up", I can see 66 active ultrapeer connections (28 black,
which I assume means outgoing, and 38 grey). Do the figures only relate
to outgoing connections, and if so, is there any way to limit the number
of incoming connections?)
With my current settings (at least 20 and at most 35 connections, use 4
connections to connect more quickly), gnet traffic is at about 2 KiB/s
in and 1 KiB/s out, and leaf traffic is at about 0.2 KiB/s in and 1
KiB/s out. HTTP is using the rest. The message queues are pretty much
empty. If I increase the settings to at least 32, at most 40 connections
then sooner or later it gets into another storm
I'm running the GTK2 Debian package of version 0.96 from the website, on
Debian testing (Linux 2.6.14), with a cable connection (nominally 4 Mb/s
down and 384 Kb/s up).
Hope this is enough information. ;-)
Cheers,
Michael
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Gtk-gnutella-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtk-gnutella-devel