Bandwidth limit is not correctly enforced: Transmission delays are inserted between data chunk writes (of arbitrary sizes)
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Ubuntu One storage protocol |
Won't Fix
|
High
|
Ubuntu One Foundations+ team | ||
Stable-3-0 |
Won't Fix
|
Undecided
|
Unassigned | ||
Stable-4-0 |
Won't Fix
|
Undecided
|
Unassigned | ||
Stable-4-2 |
Won't Fix
|
Undecided
|
Unassigned | ||
Trunk |
Won't Fix
|
High
|
Ubuntu One Foundations+ team |
Bug Description
GENERAL DESCRIPTION
*******************
Throttling implementation today is not working as users might expect, often saturating the link.
STEPS FOR REPRODUCING
*******
1. Ensure the Ubuntu One client is installed and running
2. In Ubuntu One client, limit its bandwidth to a small number (for example 20 KB)
3. Copy a big file to a folder configured to be synced by Ubuntu One
4. Open the System Monitor
4. Wait one minute
5. In the Terminal, run the following command: ping google.com -c20
EXPECTED BEHAVIOUR
******************
The monitored latency and throughput to be stable.
REAL BEHAVIOUR
**************
The monitored latency and the throughput to be unstable.
RELEVANT DETAILS
****************
- A screen-cast shows this issue with more detail: http://
- The actual limit during this video was around 10-20KB.
WORKAROUND
**********
Saturation can partially be mitigated by doing the following:
1. By contracting an Internet Service which follows the International Computer Science Institute quality standards, testable at http://
2. If you are pretending to use a wireless network, only use routers which are IEEE 802.11n compliant. This standard uses more advance algorithms than its predecessors for assigning bandwidth to links.
3. If you are using a home router, disable any feature which doesn't belong to any standard but are specific from the router's manufacturer. These generally are the firewall and the Quality of Service features, except Wireless Multimedia Extensions (WME or WMM). These specific functions trend to dramatically increase network latency when the link gets saturated.
4. If any application being used give an option to limit bandwidth, limit it to the 80% of the contracted one. This will ensure constant throughput for that program and faster initialisation for other services while bandwidth is being negotiated between them.
Related branches
- dobey (community): Needs Information
-
Diff: 24 lines (+11/-3)1 file modifiedubuntuone/storageprotocol/client.py (+11/-3)
summary: |
- it does not throttles inside the second, but sends a bunch of data and - waits then some seconds to be below the limit + Bandwidth limit is not correctly enforced: Transmission delays are + inserted between data chunk writes (of arbitrary sizes) |
Changed in ubuntuone-storage-protocol: | |
assignee: | nobody → Ubuntu One Foundations+ team (ubuntuone-foundations+) |
Changed in ubuntuone-storage-protocol: | |
importance: | Medium → High |
tags: | added: bandwidth foundations+ |
description: | updated |
description: | updated |
Changed in ubuntuone-storage-protocol: | |
status: | Confirmed → Won't Fix |
this is an effect of the following (examples for "write", the same applies for "read")... in the client.py, ThrottlingStora geClient has...
def write(self, data):
"""Transport API to capture bytes written."""
self. factory. registerWritten (len(data) )
StorageClient. write(self, data)
if self.factory.client is self:
...that writes whatever data it got, and just tells the throttler the amount of data written. So, if the limit is X bytes per second, and twisted wants to write 10*X, it just writes that (probably saturating the tcp link), and then the throttler waits 9 seconds more to be below the limit.
The way to fix this is not write the whole amount at once, but mix that with the throttling scheme.