-
-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Settings for min 450mbit upload to 5 peers and only seed each piece once #1432
Comments
support_share_mode just controls whether the peer advertises support for share mode. share mode is a mode where a peer can passively participate in a swarm with the sole purpose of uploading more than it downloads (i.e. help out with distribution). I don't think this applies to your use case. The best way, I think, to get a good understanding of which bottlenecks you're hitting and which knobs to turn, is to have good monitoring. in libtorrent you can enable stats logging, which posts alerts that you can print to a file and then parse with a python script under tools. This is one way to get a good understanding of peers' state and disk I/O performance. |
Thank you very much for your answers, I appreciate it. A little bit more about the purpose of the first goal: Line 8395 in 192ef49
Looks like a priority handling but I don’t understand how the priority is handled? Based on connections or based on bandwidth or based on something else? If we want to use a very low share ration limit like 1 or 1.5, do we need the strict super seed mode to prevent a prioritization drop of an uncomplete seed? Because no disturbances by old file request are more important than speed for a single file. We already have the problem of old file requests in our server-client based distribution. What is a large enough send buffer and unchoke slot limit? Kind Regards |
Now I guess I understand the selected settings. |
please feel free to contribute documentation patches if you find improvements! |
Falcosc said:
arvidn said:
The libtorrent implementation of uTP seems unable to do this: Deluge using the ltConfig plugin can allow TCP peer/seed speeds to be decent without fully disabling uTP by doing what's described in this: For partial compatibility with uTP under Deluge with ltConfig plugin, you might allow uTP incoming and TCP incoming and outgoing. As for very large disk cache in RAM, both Deluge and qBitTorrent 32bit versions will crash if their cache is over about 1400 MB even with very few torrents running. (So long as the torrents are active of course!) |
Thanks, I will disable uTP as workarround because such high rates are only needed for a closed network. We do have the 32bit in our documentation, too. The problem is that our performance documentation is split into 3 places:
@arvidn would it be ok to create references between the 3 documents? Or which of them should contain all information? |
I think it makes sense to keep the reference documentation as the main source of truth of the API. including documenting all the settings of |
@Seeker2 Would be nice to upload fast to utorrent clients. I did wonder why I have so many slow connections at year 2017. But I am not sure if I could realy confirm this old bug. Currently I have a Deluge uTP connection with 500kbyte/s. I will have a look at fast peers from time to time. @arvidn do we already have a ticket for the utp speed issue? Because I didn't find one. Or does we already have a confirmed fix? |
Partial support for slow uTP peers is better than none, all things considering. If qBitTorrent/Deluge/libtorrent strongly favors making uTP peer connections over TCP peers, then it's a loss to try to partially use uTP peers because nearly every TCP peer will be auto "promoted" to being a uTP peer anyway. The issue was in libtorrent 1.0.x as well ...to a lesser but still considerable extent, as I mentioned here: |
I don't understand this, why should they strongly favors making uTP peer connections over TCP? I mean, does a libtorrent client use tcp if seeder does set mixed_mode_algorithm prefer_tcp? By the way, I do currently seed to a transmission peer over uTP with 800kbyte/s |
Unless you've nearly saturated your upload bandwidth and/or the destination peers are slow/overloaded, you should be able to upload to faster uTP peers at >4,000 KiloBYTES/second each. What's the top speed you've seen going to TCP peers? |
Now I am confused.
Does not match to your other comments
And
@Seeker2 Could you describe what is the difference between your last and your other comments is? Thanks I could not tell if there is a problem because my testhost has not enoght bandwith. I just refer to your comments and those does not match which does confuse me. And I did already manage to get higher uTP rates then you mentioned in the tickes. Is the uTP bug maybe already fixed? |
Some versions of qBT and/or some conditions with qBT can allow uTP to exceed 1 MB/sec. I did see ~4 MB/sec briefly in early tests on older versions of qBT. So if you see better than that, it might allow more testing to narrow down the issues. Sadly, your 2 examples: So if you get >4 MB/sec (or at least >1.5 MB/sec) to/from a single TCP peer or seed, then uTP may be working far worse than TCP. |
Thanks for clarification. I did expect this kind of an answer :) My test host is proberly to slow to get hit by the uTP bug if it's still there. |
The other possible part of the uTP bug was the 10% retransmits and resulting speed-crippling effects that could have on TCP peers as well. |
would someone mind providing a summary of "the uTP bug"? Is it primarily a problem of sending or receiving? It doesn't have to be a long run, just long enough to demonstrate the performance issue. |
it might be worth to start a new topic/ticket for it actually |
Deluge 1.3.13 could download without any uTP retransmits by uT 2.2.1 at speeds up to about 160-224 KB/sec. Then it started having progressively more uTP retransmits by uT 2.2.1 as speed increased and was unable to go faster than ~1100 KB/sec. Maybe 10-15% loss at worst. |
@Seeker2 thanks for having looked at this. This weekend I tried to reproduce this issue. I ran the latest version of uTorrent (Mac) seeding a large file over loopback to client_test (in libtorrent, RC_1_1 branch) and to transmission Mac. client_test climbed to ~70 MiB/s and stabilized just above 50 MiB/s (I suspect disk I/O causing the fluctuations) Are you suggesting that what you're seeing is a regression since libtorrent RC_1_0? Should I be trying with 1.0 too? |
"Are you suggesting that what you're seeing is a regression since libtorrent RC_1_0? Should I be trying with 1.0 too?" I thought as much earlier, but I retested a bunch using quite a few Deluge (v1.3.5 to v1.3.14) and qBitTorrent (v2.9.0 to v3.3.11) versions and only uTorrent 2.2.1 to them consistently seemed affected. "client_test climbed to ~70 MiB/s and stabilized just above 50 MiB/s (I suspect disk I/O causing the fluctuations)" There seems to be a triggering event, as only uT 2.2.1 uploading TO qBT is consistently slow, even qBT to uT tends to be immensely faster -- in excess of 30 MB/sec. It's important to force the use of uTP in the tests, as when qBT allows uTP it doesn't stick with uTP sometimes. "transmission did not get past 4 MiB/s" Does the latest Transmission even have uTP? ...because the version I tested (v2.84) didn't use uTP. Unrelated: A special case test using 16 KB piece size despite being a ~200 MB single file torrent seems to knock the speeds down a bunch. Everything was affected. The worst, Tixati started flailing and averaged <50 KB/sec. [EDIT:] uT seems to be using a different packet size than libtorrent (in qBitTorrent and Deluge): |
Currently we use a huge cluster of servers to distribute our files to all mirrors in a client-server model. In average we have 450mbit/s of new data to distribute to all mirrors. And our bandwith requirements gets multiplied by the number of mirrors.
All mirrors have at least as many bandwidth for uploading as for downloading which gives us a great opportunity to test a p2p distribution model.
How could we get the best seeding performance if we want to use only a single host to seed the whole stream of new data?
First Goal: don't send data twice
Is it possible to combine strict_super_seeding with share_ratio_limit 1? And does super seeding still work if we use suggest_mode = suggest_read_cache?
Second Goal: distribute as fast as possible
Peers with a lot of bandwidth should be prioritized. I guess seed_choking_algorithm = fastest_upload would do this job
Third goal: very high upload rates per peer
How to calculate max_allowed_in_request_queue to achieve at least 450mbit/s across 1 to 5 peers?
Fourth goal: manageable disk I/O
We don’t want to get limited by disk performance, how should we setup the cache to deliver only to 5 peers? I take a look at the high performance seed settings pack, but it is optimized for a huge amount of slow peers instead of a very small amount of gigabit peers.
I guess we need to tweak the following settings
cache_size
use_read_cache
cache_buffer_chunk_size
read_cache_line_size
write_cache_line_size
send_buffer_low_watermark
send_buffer_watermark
send_buffer_watermark_factor
use_disk_cache_pool
I don’t understand the support_share_mode option, is it useful for our usecase?
I hope some of you have time to help us to get a configuration which is useful for our use case.
Kind Regards
Falco
The text was updated successfully, but these errors were encountered: