> For the complete documentation index, see [llms.txt](https://sliu583.gitbook.io/blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sliu583.gitbook.io/blog/networking/index/reading-list/beyond-jains-fairness-index-setting-the-bar-for-the-deployment-of-congestion-control-algorithms.md).

# Beyond Jain's Fairness Index: Setting the Bar For The Deployment of Congestion Control Algorithms

* Key idea: deploy new congestion control algorithms on the Internet&#x20;
* Deployment threshold: inter-CCA&#x20;
  * What happens when a new CCA is deployed on a network with flows using some legacy CCA. Is the new CCA impact on the status quo acceptable?&#x20;
* Past effort: "fairness", "friendliness"
  * Fair: if it maximizes every users utility function given limited link capacity&#x20;
    * End host CCA, with users as flows, aim to maximize utility per-flow by ensuring every flow sharing the same bottleneck link gets equal bandwidth&#x20;
    * Looking at the throughput ratio between competing CCAs or by computing Jain's Fairness Index (JFI)&#x20;
      * \[1: perfectly meeting expected fair allocation; 0: unfair]&#x20;
      * Does not account for the demand of each job: amount of resources a flow uses when operating in absence of contention&#x20;
      * Thus look at Max-min fairness&#x20;
    * Problem:
      * Ideal-Driven Goalposting: impractically high requirements (Cubic is not even fair to itself!)&#x20;
      * Throughput-Centricity: ignore other important figures of merit for good performance, such as latency, flow completion time, or loss rate.&#x20;
      * Assumption of balance: fairness metric cannot tell whether the outcome is biased for or against the status quo.&#x20;
        * I.e. Jain's Fairness Index: equal score to --> "takes" and "leaves" larger share&#x20;
        * status quo: whether or not the new algorithm damages the performance of existing traffic&#x20;
  * Mimicry: new algorithms replicate properties of TCP-Reno (e.g., driving throughput as a function of the loss rate) in order to be 'friendly' to legacy, Reno-derived TCPs&#x20;
    * Binds new algorithms to repeating the often undesirable idiosyncrasies of Reno&#x20;
* Now: advocate for new approach --> limiting harm caused by the new algorithm on the status quo&#x20;
  * More practical, future proof, and handles a wider range of quality metrics&#x20;

![](/files/8JudTSUeRIjTUcTA6TO3)

Limitation of fairness&#x20;

![](/files/WGZeUMTMQXhGkxVCboAp)

* Assumption of Balance: values the performance outcome of both the new CCA and the existing, deployed CCA&#x20;
* Beta: most users use&#x20;
* Alpha: brand new algoithm&#x20;
* It should be perfectly acceptable to deploy alpha if alpha is the one receiving unfair treatment - no users other than user A, who chose to use alpha, would be impacted negatively&#x20;

Limitation of Mimicry:&#x20;

* Two mimicry based approaches are&#x20;
  * TCP-Friendly Rate Control (TFRC)&#x20;
    * ![](/files/tvWd2EA9EQn6abg4JMmt)
    * p: the link loss rate&#x20;
    * describes TCP Reno's average sending rate over time&#x20;
  * RTT-biased Allocation&#x20;
    * grant more throughput to connections with low RTTs than to hose with higher RTTs
* &#x20;Binds new algorithms to replicate the often undesirable idiosyncrasies of the deployed CCA&#x20;
  * TFRC limit new CCAs to achieve high throughput&#x20;
  * RTT-based: RTT-based algorithm might be better?&#x20;

### Harm&#x20;

* 1: maximally harmful, 0: harmless&#x20;
* x = demand
* y = performance after introduction of a competitor connection&#x20;
* Metric "more is better", i.e. throughput, QoE --> harm = ![](/files/xSMa7WM4E9PSkAw3JnOC)
* Metric "less is better", i.e. latency, flow completion time --> harm = ![](/files/0fwAPbYholNksajatOUl)
* Harm is&#x20;
  * Multi-metric&#x20;
  * Demand-aware&#x20;
  * Status-quo biased&#x20;
  * Practical
  * Future-proof
* *If the amount of harm caused by flows using a new algorithm α on flows using an algorithm β is within a bound derived from how much harm β flows cause other β flows, we can consider α deployable alongside β.*
* Formulation:&#x20;
  * Worse case bounded harm might have some problems: falling to the lowest common denominator (too loose)
    * ![](/files/6whw9I9zcG9T7UIWiu3J)
  * Equivalent bounded harm: focus on a pair of workload w and w\* in a legacy network where all services using beta. We want to switch the service with workload w\* to use alpha. With equivalent bounded harm, alpha would be acceptable iff (alpha, w\*) does no more harm to (beta, w) than (beta, w\*) would&#x20;
    * ![](/files/kBYfWlR3swdiO7MeA255)
    * Too strict to serve as a threshold&#x20;
  * Symmetric bounded harm&#x20;
    * ![](/files/lVVl9TXIxfnFhyugX2yh)
    * 'do unto other flows as you would have other flows do to you'&#x20;
