<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.formulasearchengine.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=152.23.142.120</id>
	<title>formulasearchengine - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://en.formulasearchengine.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=152.23.142.120"/>
	<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/wiki/Special:Contributions/152.23.142.120"/>
	<updated>2026-08-11T23:18:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.47.0-wmf.7</generator>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=Poverty_gap_index&amp;diff=28026</id>
		<title>Poverty gap index</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=Poverty_gap_index&amp;diff=28026"/>
		<updated>2014-01-28T16:19:12Z</updated>

		<summary type="html">&lt;p&gt;152.23.142.120: /* Related measures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{for|an official visit abroad taken by a member or members of the United States Congress|Congressional delegation}}&lt;br /&gt;
&lt;br /&gt;
In [[network routing]], &#039;&#039;&#039;CoDel&#039;&#039;&#039; (pronounced &amp;quot;[[wikt:coddle|coddle]]&amp;quot;) for &#039;&#039;&#039;controlled delay&#039;&#039;&#039; is a [[scheduling algorithm]] for the [[network scheduler]] developed by [[Van Jacobson]] and [[Kathleen Nichols]].&amp;lt;ref name=&amp;quot;CoDel_ACMQ&amp;quot;&amp;gt;{{cite web |url=http://queue.acm.org/detail.cfm?id=2209336 |title=Controlling Queue Delay  |authorlink=Kathleen Nichols |last1=Nichols |first1=Kathleen |authorlink2=Van Jacobson|last2=Jacobson |first2=Van |date=6 May 2012 |work=ACM Queue |publisher=ACM Publishing |accessdate=12 August 2012| doi=10.1145/2209249.2209264 }}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;CoDel_JimGettys&amp;quot;&amp;gt;{{cite web |url=http://gettys.wordpress.com/2012/05/08/fundamental-progress-solving-bufferbloat/ |title=Fundamental Progress Solving Bufferbloat &lt;br /&gt;
  |last=Gettys  |first=Jim  |authorlink=Jim Gettys&lt;br /&gt;
  |date=May 8, 2012 |work=jg&#039;s Ramblings |publisher=Wordpress |accessdate=12 August 2012}}&amp;lt;/ref&amp;gt; It is designed to overcome [[bufferbloat]] in network links (such as [[router (computing)|router]]s) by setting limits on the delay [[network packet]]s suffer due to passing through the [[buffer (telecommunication)|buffer]] being managed by CoDel.&lt;br /&gt;
&lt;br /&gt;
CoDel aims at improving on the overall performance of the [[Random early detection|RED]] algorithm by addressing some fundamental misconceptions in the algorithm (as perceived by Jacobson) and by being easier to manage (since, unlike RED, CoDel does not require manual configuration).&amp;lt;ref name=&amp;quot;CoDel_ACMQ&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An implementation of CoDel was written by Dave Täht and Eric Dumazet for the [[Linux kernel]]&amp;lt;ref&amp;gt;{{cite web |url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/sched/sch_codel.c |title=CoDel Linux kernel network scheduler module |publisher=[[kernel.org]] |accessdate=2013-09-07}}&amp;lt;/ref&amp;gt; and dual licensed under the [[GNU General Public License]] and the [[3-clause BSD license]]. Dave Täht back-ported CoDel to Linux kernel 3.3 for project [[CeroWrt]], which concerns itself among other things with bufferbloat,&amp;lt;ref&amp;gt;{{cite web|url=http://www.bufferbloat.net/projects/cerowrt |title=Cerowrt - Overview |publisher=Bufferbloat |date= |accessdate=2014-01-24}}&amp;lt;/ref&amp;gt; where it was exaustively tested. It was then pushed into [[OpenWrt]].&amp;lt;ref&amp;gt;{{cite web |url=https://dev.openwrt.org/changeset/31756 |title=Backport of CoDel and FQ_CoDel to Linux 3.3 |publisher=[[OpenWrt]] |date=2012-05-16 |accessdate=2013-09-07}}&amp;lt;/ref&amp;gt;  Dumazet&#039;s variant of CoDel, [[FQ_Codel]] was adopted as the standard [[Active queue management|AQM]] and [[packet scheduling]] solution in OpenWrt &amp;quot;Barrier Breaker&amp;quot; in 2012.&amp;lt;ref&amp;gt;{{cite web |url=https://dev.openwrt.org/browser/trunk/package/network/config/qos-scripts/files/usr/lib/qos/tcrules.awk |title=Adoption of CoDel in OpenWrt default QoS scripts |publisher=[[OpenWrt]]}}&amp;lt;/ref&amp;gt; From there, Codel and FQ_Codel has migrated into various downstream projects such as [[dd-wrt]], [[IpFire]], and technologies like [[StreamBoost]].&lt;br /&gt;
&lt;br /&gt;
==Theoretical underpinnings==&lt;br /&gt;
The theory behind CoDel is based on a number of observations of packet behavior in [[packet-switched network]]s under the influence of [[data buffer]]s.  Some of these observations are about the fundamental nature of queueing and the causes of bufferbloat, others relate to weaknesses of alternative queue management algorithms.  CoDel was developed as an attempt to address the problem of bufferbloat.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
 | url = http://www.readwriteweb.com/enterprise/2012/05/good-news-for-solving-bufferbloat-codel-provides-no-knobs-solution.php&lt;br /&gt;
 | title = Good News for Solving Bufferbloat: CoDel Provides &amp;quot;No Knobs&amp;quot; Solution&lt;br /&gt;
 | publisher = [[ReadWriteWeb]]&lt;br /&gt;
 | author = Joe Brockmeier&lt;br /&gt;
 | date = 2012-05-08 | accessdate = 2012-08-16}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bufferbloat===&lt;br /&gt;
{{Main|Bufferbloat}}&lt;br /&gt;
{{See also|Receive_window#Window_size|l1=TCP window size|Slow-start|l2=TCP slow start}}&lt;br /&gt;
&lt;br /&gt;
The flow of packets slows down while travelling through a network link between a fast and a slow network, especially at the start of a [[Transmission Control Protocol|TCP]] session, when there is a sudden burst of packets and link to the slower network may not be able to process the burst quickly enough.  [[buffer (telecommunication)|Buffers]] exist to ease this problem by giving the fast network a place to push packets, to be read by the slower network as fast as it can.&amp;lt;ref name=&amp;quot;CoDel_ACMQ&amp;quot;/&amp;gt;  In other words, buffers act like shock absorbers to convert bursty arrivals into smooth, steady departures.  However, a buffer has a finite size, and it can hold only a specific maximum number of packets.  The ideal buffer is sized so it can handle a sudden burst of communication and match the speed of that burst to the speed of the slower network.  Ideally, the &amp;quot;shock absorbing&amp;quot; situation is characterized by a temporary delay for packets in the buffer during the transmission burst, after which the delay rapidly disappears and the network reaches a balance in offering and handling packets.&amp;lt;ref name=&amp;quot;CoDel_ACMQ&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The TCP congestion avoidance algorithm relies on packet drops to determine the available [[bandwidth (computing)|bandwidth]].  It speeds up the data transfer until packets start to drop, and then slows down the transmission rate.  Ideally it keeps speeding up and slowing down the transmission rate, until it finds an equilibrium to the speed of the link.  However, for this to work the packet drops must occur in a timely manner, so that the algorithm can select a suitable transfer speed.  With a large buffer that has been filled, the packets will arrive at their destination, but with a higher latency.  The packet is not dropped, so TCP does not slow down once the uplink has been saturated, further filling the buffer.  Newly arriving packets are dropped only when the buffer is fully saturated.  TCP may even decide that the path of the connection has changed, and again go into the more aggressive search for a new operating point.&amp;lt;ref&amp;gt;{{cite journal&lt;br /&gt;
 | url = http://www.cord.edu/faculty/zhang/cs345/assignments/researchPapers/congavoid.pdf&lt;br /&gt;
 | title = Congestion avoidance and control&lt;br /&gt;
 | journal = ACM SIGCOMM Computer Communication Review&lt;br /&gt;
 | last = Jacobson | first = Van  &lt;br /&gt;
 | coauthors = Karels, MJ&lt;br /&gt;
 | year = 1988 | volume = 18 | issue = 4&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Rant_Jacobson&amp;quot;&amp;gt;{{cite web&lt;br /&gt;
 | url = http://www.pollere.net/Pdfdocs/QrantJul06.pdf&lt;br /&gt;
 | title = A rant on queues. A talk presented at MIT Lincoln Labs, Lexington, MA&lt;br /&gt;
 | last1 = Jacobson&lt;br /&gt;
 | first1 = Van&lt;br /&gt;
 | authorlink1 = Van Jacobson&lt;br /&gt;
 | year = 2006 | accessdate = 12 August 2012&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the problematic situation, packets queued in a network buffer are only dropped if the buffer is full.  Having a big and constantly full buffer which causes increased transmission delays and reduced interactivity &amp;amp;mdash; especially when looking at two or more simultaneous transmissions over the same channel &amp;amp;mdash; is what&#039;s called &#039;&#039;&#039;bufferbloat&#039;&#039;&#039;.  Available channel bandwidth can also end up being unused, as some fast destinations may not be reached due to buffers clogged with data avaiting delivery to slow destinations &amp;amp;mdash; caused by contention between simultaneous transmissions competing for some space in an already full buffer.&lt;br /&gt;
&lt;br /&gt;
===Good and bad queues===&lt;br /&gt;
CoDel distinguishes between two &amp;quot;types&amp;quot; of a queue (or rather, the effects produced by a queue):&amp;lt;ref name=&amp;quot;CoDel_ACMQ&amp;quot;/&amp;gt;&amp;lt;ref&amp;gt;{{cite web |url=http://arstechnica.com/information-technology/2012/05/codel-buffer-management-could-solve-the-internets-bufferbloat-jams/ |title=CoDel buffer management could solve the Internet’s bufferbloat jams |publisher=Ars Technica |date=2012-05-10 |author=Iljitsch van Beijnum |accessdate=2012-08-16}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Good queue&lt;br /&gt;
: Defined as a queue that exhibits no buffer bloat, i.e. catches and handles communications bursts with no more than a temporary increase in queue delay and which maximizes utilization of the network link.&lt;br /&gt;
; Bad queue&lt;br /&gt;
: Defined as a queue that exhibits buffer bloat, i.e. where a communications burst has caused the buffer to fill up and stay filled, resulting in low utilization and a constantly high buffer delay.&lt;br /&gt;
&lt;br /&gt;
In order to be effective against bufferbloat, a solution in form of an [[Active queue management]] (AQM) algorithm must be able to &#039;&#039;&#039;recognize&#039;&#039;&#039; an occurrence of bufferbloat and &#039;&#039;&#039;react&#039;&#039;&#039; with deploying effective countermeasures.&lt;br /&gt;
&lt;br /&gt;
Regarding the recognition of an unwanted situation, [[Van Jacobson]] asserted in 2006 that existing algorithms have been using incorrect means of recognizing bufferbloat.&amp;lt;ref name=&amp;quot;Rant_Jacobson&amp;quot;/&amp;gt;  In an attempt to recognize the telltale standing queue of bufferbloat, algorithms like [[Random early detection|RED]] measure the average queue length (in packets or stored bytes) and consider it a case of bufferbloat if the average grows too large.  However, Jacobson demonstrated in 2006 that this measurement is not a good metric &amp;amp;mdash; the average queue length rises sharply in case of a communications burst.  But this can then dissipate quickly (good queue) or develop a standing queue (bad queue).  Also, other factors in network traffic can cause false positives or negatives, causing countermeasures to be deployed unnecessarily &amp;amp;mdash; Jacobson suggested therefore that average queue length actually contains no information at all about packet demand or network load.&amp;lt;ref name=&amp;quot;CoDel_ACMQ&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;Rant_Jacobson&amp;quot;/&amp;gt;  He then suggested that a better metric might be the minimum amount of delay experienced by any packet in the sliding window of the buffer.{{Citation needed|date=December 2012}}&lt;br /&gt;
&lt;br /&gt;
==The CoDel algorithm==&lt;br /&gt;
Based on Jacobson&#039;s notion from 2006, CoDel was developed to manage queues under control of the minimum delay experienced by packets in the running buffer window. The goal is to keep this minimum delay below 5 milliseconds. If the minimum delay rises to too high a value, packets are dropped from the window until the delay drops below the maximum level.&amp;lt;ref name=&amp;quot;CoDel_ACMQ&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nichols and Jacobson cite several advantages to using nothing more than this metric:&amp;lt;ref name=&amp;quot;CoDel_ACMQ&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CoDel is parameterless. One of the weaknesses in the RED algorithm (according to Jacobson) is that it is too difficult to configure (and too difficult to configure correctly, especially in an environment with dynamic link rates). CoDel has no parameters to set at all.&lt;br /&gt;
* CoDel treats good queue and bad queue differently. Good queue has low delays by nature, so the management algorithm can ignore it. Bad queue is susceptible to management intervention in the form of dropping packets.&lt;br /&gt;
* CoDel works off of a parameter that is determined completely locally, so it is independent of round-trip delays, link rates, traffic loads and other factors that simply cannot be controlled or predicted by the local buffer.&lt;br /&gt;
* The local minimum delay can only be determined when a packet leaves the buffer. So no extra delay is needed to run the queue to collect statistics to manage the queue.&lt;br /&gt;
* CoDel adapts to dynamically changing link rates with no negative impact on utilization.&lt;br /&gt;
* CoDel can be implemented relatively simply and therefore can span the spectrum from low-end home routers to high-end routing solutions.&lt;br /&gt;
&lt;br /&gt;
CoDel does nothing to manage the buffer if the minimum delay for the buffer window is below the maximum allowed value. It also does nothing if the buffer is relatively empty (if there are fewer than one [[maximum transmission unit|MTU]]&#039;s worth of bytes in the buffer).&amp;lt;ref name=&amp;quot;CoDel_ACMQ&amp;quot;/&amp;gt; If these conditions do not hold, then CoDel drops packets probabilistically.&amp;lt;ref name=&amp;quot;CoDel_ACMQ&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
The algorithm is independently computed at each [[Hop (networking)|hop]]. The algorithm operates over an &#039;&#039;interval&#039;&#039;. The initial &#039;&#039;interval&#039;&#039; is 100 milliseconds. Per-packet [[queuing delay]] is monitored through the hop. As each packet is dequeued for [[Packet forwarding|forwarding]], the queuing delay (amount of time the packet spent waiting in the queue) is calculated. The lowest queuing delay for the interval is stored. When the last packet of the interval is dequeued, if the lowest queuing delay for the interval is greater than 5 milliseconds, this single packet is dropped and the &#039;&#039;interval&#039;&#039; used for the next group of packets is shortened. If the lowest queuing delay for the interval is less than 5 milliseconds, the packet is forwarded and &#039;&#039;interval&#039;&#039; is reset to 100 milliseconds.&lt;br /&gt;
&lt;br /&gt;
When the &#039;&#039;interval&#039;&#039; is shortened, it is done so in accordance with the inverse [[square root]] of the number of successive intervals in which packets were dropped due to excessive queuing delay. The sequence of intervals is &amp;lt;math&amp;gt;100&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;{100 \over \sqrt{2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;{100 \over \sqrt{3}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;{100 \over \sqrt{4}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;{100 \over \sqrt{5}}&amp;lt;/math&amp;gt; ...&lt;br /&gt;
&lt;br /&gt;
===Simulation results===&lt;br /&gt;
CoDel has been tested in simulation tests by Nichols and Jacobson, at different MTUs and link rates and other variations of conditions. In general, results indicate:&amp;lt;ref name=&amp;quot;CoDel_ACMQ&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;CoDel_sims&amp;quot;&amp;gt;{{cite web |url=http://www.pollere.net/CoDel.html |title=Controlled Delay (CoDel) Active Queue Management |last1=Nichols |first1=Kathleen |date=July 2012 |publisher=Pollere Inc. |accessdate=12 August 2012}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In comparison to RED, CoDel keeps the packet delay closer to the target value across the full range of bandwidths (from 3 to 100 Mbit/s). This seems to result in good queue, since the measured link utilizations are consistently near 100% of link bandwidth.&lt;br /&gt;
* At lower MTU, packet delays are lower than at higher MTU. Higher MTU results in good link utilization, lower MTU results in good link utilizations at lower bandwidth, degrading to fair utilization at high bandwidth.&lt;br /&gt;
&lt;br /&gt;
Simulation was also performed by Greg White and Joey Padden at [[CableLabs]].&amp;lt;ref&amp;gt;{{cite paper |url=http://www.cablelabs.com/downloads/pubs/PreliminaryStudyOfCoDelAQMinaDOCSISNetwork.pdf |title=PRELIMINARY STUDY OF CODEL AQM IN A DOCSIS NETWORK |author1=Greg White |author2=Joey Padden |date=November 2012 |accessdate=2012-11-26}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CoDel in use===&lt;br /&gt;
A full implementation of CoDel was realized in May 2012 and is available as [[open-source software]] to all interested parties. This implementation will be used by different parties to study CoDel in actual use.&amp;lt;ref name=&amp;quot;CoDel_ACMQ&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of 21 May 2012, CoDel has been implemented within the [[Linux kernel]] (starting with the 3.5 mainline).&amp;lt;ref name=&amp;quot;CoDel_Linux&amp;quot;&amp;gt;{{cite web |url=http://gettys.wordpress.com/2012/05/22/a-milestone-reached-codel-is-in-linux/ |title=A Milestone Reached: CoDel is in Linux! |last=Gettys  |first=Jim  |authorlink=Jim Gettys |date=22 May 2012 |work=jg&#039;s Ramblings |accessdate=12 August 2012}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CoDel began to appear as an option in some proprietary/turnkey bandwidth management platforms in 2013.&amp;lt;ref name=&amp;quot;Procera_PacketLogic_Changelog&amp;quot;&amp;gt;{{cite web | url=&amp;quot;http://download.proceranetworks.com/client-bin/14.0/11/changelog.txt&amp;quot; | title=Procera Packetlogic Changelog}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Bufferbloat]]&lt;br /&gt;
* [[Receive window#Window size|TCP window size]]&lt;br /&gt;
* [[TCP tuning]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Reflist|30em}}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://queue.acm.org/appendices/codel.html CoDel pseudocode]&lt;br /&gt;
* [http://www.orospakr.ca/blog/2013/01/22/bufferbloat-demystified/ Bufferbloat demystified]&lt;br /&gt;
&lt;br /&gt;
[[Category:Packets (information technology)]]&lt;br /&gt;
[[Category:Network performance]]&lt;/div&gt;</summary>
		<author><name>152.23.142.120</name></author>
	</entry>
</feed>