Author Topic: Peer-Selection Logic: Maximizing Speed| Gigabit user, seed bandwidth sits unused  (Read 330 times)

Gigabit

  • Newbie
  • *
  • Posts: 1
  • Karma: +0/-0
    • View Profile
[tldr @ bottom]

Hello,
I have a symmetrical, Gigabit connection (1,000 Mbps Download/1,000 Mbps Upload) that sits massively underutilized.
I would love to be able to share back with the community that has helped me so much, especially when I was still a starving student @ University. Admittedly, the desire to give back was actually one of the biggest reasons I even wanted such a ridiculously fast connection. I want to be able to Seed meaningful files (like textbooks, documentaries, thought-provoking or feel-good movies, etc) to help contribute to a better society online as I do in-person.

The highest I've seen my Upload total speed reach is ~37.5 MB/s (so, 300 Mbit/s) and this was only once, ever, for maybe a few minutes.
The vast majority of the time it just sits there at a couple-few MB/s, despite there being tons of Peers that need the files (Leeches).
Individually, the majority of Peers I connect to download at no more than ~200-300 KB/s, which is just downright hard to believe. This includes users who are also in the same country (United States).
I am directly connected through Ethernet, and yes, my speed is verified to be very fast (consistently ~940 Mbits+ on both Download AND Upload).

What doesn't make sense to me is that here I sit, a single individual, with enough Bandwidth to MAX out virtually anybody's connection numerous times over - and yet my Bandwidth just sits here, largely unutilized. I've tweaked my settings (only ever considering the tweak if the source was one of seemingly few other Gigabit users, or the discussion was explicitly for ultra-high speed connections) and yet nothing seems to do much. I'm not hitting my max connections per torrent, nobody's choked, I'm using an ephemeral port (ie. one above 49152), I've tried sprinkling holy water on my ethernet cable, on and on and yet still my bandwidth sits here almost entirely unutilized.

  • For example, if I look at one of my torrents right now, it states that there are 152 Seeds, and 19 Leeches currently, 2 of which I'm connected to: Seeds 0(152), Peers 2(19).
    It is currently uploading to those two peers at 79.1 KB/s total. They are both located in the United States (same country), so the data path can only be going so far.
  • If I look at another example torrent right now, it states that there are 3 Seeds, and 7 Leeches, 1 of which I'm connected to: Seeds 0(3), Peers 1(7).
    It is currently uploading to that 1 Peer at 103.7 KB/s total. They are also in the United States, and an IP Lookup puts their general location actually quite near me.
You would think it obvious, for example, that I would be connected to all 7 of Example #2's torrent so that they could get the file done NOW, FAST. I could even host all of Example #1's torrent peers and support them at ~50 Mbps each (ALL 19 of them) and they would all be done with the file, quickly.

And so this brings me to my question - does the program relay any information about my connection's bandwidth? So that others may know "there's a guy over here that I could make ONE connection to, who could MAX out my bandwidth and get the file super fast from.. the fastest that'd be possible on my connection"?

If it doesn't, is there a reason why not? It would seem like a huge efficiency improvement - making use of peers in the swarm such as myself that have tons of bandwidth to spare, and would love to share around. If it's doing this to me, I must imagine it's doing it to most other users too. It can't be because the program doesn't want to saturate our connection/bandwidth, because that's what certain settings are for (ex: the 'Rate Limits' in Options > Speed) - not to mention if a user were to be complaining about their internet being slow, they would just... close the program that's using a lot of it.

I would imagine a sort of 'speed test' type implementation whereby the program is capable of verifying your connection's bandwidth, and thereby broadcasting it as so. This would prevent an otherwise inevitable situation where people randomly think to tell the program they have <this speed> when in reality they have <that speed> because they saw on a YouTube video that it would "bOoSt ThEiR SpEEd 700%!"


TLDR: This post is about peer-selection logic. Why doesn't the program tell people that I have TONS of bandwidth ready to go/max out their connections with? Detailed background info and live case examples above.
« Last Edit: August 29, 2019, 02:05:59 am by Gigabit »

Switeck

  • Forum addict
  • ****
  • Posts: 1501
  • Karma: +95/-0
    • View Profile
While qBitTorrent and some other BitTorrent clients are technically capable of reaching gbit-per-second speeds, as my previous tests show:
https://qbforums.shiki.hu/index.php/topic,3956.0.html

... they generally won't in practice for a lot of reasons.

Here's some things to check:
1.HDDs block speeds -- accessing a spinning platter for data for 100+ peers at once is a huge latency and speed hit that prevents very high speeds. Seeding faster is possible...but it gets expensive! Even a HDD RAID won't help much because of torrents non-sequential accesses and they still have rotational latency no matter how many HDDs are in the RAID. Separate HDDs for multiple torrents probably help more than a consolidated RAID. Fast SSDs would really help, but even Serial-ATA 3 (SATA 3 for short) can possibly get bottlenecked by simultaneous requests. (NCQ support is a must! https://en.wikipedia.org/wiki/Native_Command_Queuing ) A multi-GB sized ramdrive containing the busiest torrents can really help.

2.CPU overloads! Even if the cpu appears to be 75% idle while qBitTorrent is running, it could be that much of qBitTorrent is single-threaded and 1 CPU core (out of 4 total) is maxed out. Intel's CPU hyperthreading makes matters worse instead of better, by converting each real cpu core into 2 virtual cores that cannot share with each other.

3.Upload slots -- fewer (in the ~20-50 range) may be quicker (than 100+) due to lowering HDD accesses and cpu loads.

4.Many reported peers+seeds are not real, and may never been! "Seeds 0(152), Peers 2(19)" If you're connected to only 2 peers, the rest may already be seeds and simply reported as still <100% complete peers. Seeds may have finished uploading and disconnected for good. IP addresses may have changed, some may be multi-homed but limited connectivity on each...so a single peer may get reported 5+ times and only the most recent ip address may work, or not even that if "hopelessly firewalled" (due to NAT, proxy, VPN, etc).

5.Private trackers aggravate these issues further, since DHT, LPD, and PEX are all disabled which prevents most ways of finding other peers+seeds. And tracker update intervals may be MUCH longer than the average peer takes to fully download the torrent, so by the time your BT client even contacts the tracker again the peer is already a seed.

6.BitTorrent protocol has something called uTP which does latency-based checking to determine real-time speeds, but qBitTorrent's implementation of it (in libtorrent's core library to be technical) seems horribly broken and has been that way a long time:
https://github.com/arvidn/libtorrent/issues/1432#issuecomment-284094829
https://github.com/arvidn/libtorrent/issues/3542
Extremely detailed discussion of latency vs speeds:
https://github.com/Tribler/tribler/issues/2620

ICWUDT

  • Newbie
  • *
  • Posts: 3
  • Karma: +0/-0
    • View Profile
Having the same issue with my 500/500.  Can't figure out how to get it to use my bandwidth.  I've go through and ensured everything was set to unlimited.  Tried having an absurd number of torrents just to try to see if I could get it maxed and I can't get it past the teens for upload.   Can't lock on the other users with big pipes either seemingly.   Once in a while it will lock on someone who is feeding me at up to about 10MB or letting me feed them but that is a rarity and often drops.  Aggregate upload seems to max in the teens and this only if I have a few extremely in-demand at the moment torrents.

In my case none of the cpu or HDD concerns are the culprit as I download and share to a newer SSD with minimal load being reported and my CPU usage is in the single digits when this is happening.

I just switched from uTorrent because I noticed my speed didn't increase after going from 200/200 to 500/500, max still sitting at less than 20mb peak and usually around 10.  Couldn't configure it in any way that made a difference. Same for the official bittorrent client. Qbittorrent, after ensuing there were no peer limitations, allowed me to hit 58MB pulling down Ubuntu 64bit (though at most I only seem to be occasionally uploading a few K of it back).  I'm connected through PIA's vpn, with qbittorrent's privacy options checked, but tried it with it not connected and did not see a difference in speed up or down.

Not sure if it is related but I note on some not-popular torrents I get blocks of clients that pop in to feed or receive a few, to few hundred KB for a while and then will randomly drop off, sometimes in sections and sometimes all at once.  Then watch peers come on that don't have 100% but aren't pulling anything and those that have it but aren't sharing it.  Can't figure out what if anything I have configured wrong either.

Want to give away all the bits but finding it impossible to do so.
« Last Edit: September 04, 2019, 08:37:51 am by ICWUDT »

Hiratasuka

  • Newbie
  • *
  • Posts: 19
  • Karma: +0/-0
    • View Profile
Hello.

Have you tested your qBittorrent with these settings --> http://infinite-source.de/az/az-calc.html

Regards.

Switeck

  • Forum addict
  • ****
  • Posts: 1501
  • Karma: +95/-0
    • View Profile
Hiratasuka,

az-calc's settings are based on false assumptions about peer/seed quality dating almost back to the time when 56k dial-up modems were still common.
I've posted about that a few times before on this forum just how awful those settings are.

ICWUDT

  • Newbie
  • *
  • Posts: 3
  • Karma: +0/-0
    • View Profile
Yeah, good indication that it might be out of date is when it has a "input your K" or if you are really fast "KB".  ;)