From ca96c28cc947a7ce7000bff250aab657d62bcd3c Mon Sep 17 00:00:00 2001 From: Shrinidhi Anil Varna Date: Wed, 20 May 2020 20:53:10 +0530 Subject: [PATCH] traffic-control: Add documentation for set associative hash --- doc/models/Makefile | 2 + .../doc/figures/collision_prob.jpeg | Bin 0 -> 51821 bytes .../doc/figures/overlapped.jpeg | Bin 0 -> 70183 bytes src/traffic-control/doc/fq-codel.rst | 40 +++++++++++++++--- 4 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 src/traffic-control/doc/figures/collision_prob.jpeg create mode 100644 src/traffic-control/doc/figures/overlapped.jpeg diff --git a/doc/models/Makefile b/doc/models/Makefile index b5c66324f..600f24bd7 100644 --- a/doc/models/Makefile +++ b/doc/models/Makefile @@ -313,6 +313,8 @@ SOURCEFIGS = \ $(SRC)/spectrum/doc/spectrum-tv-cofdm.png \ $(SRC)/traffic-control/doc/classful-queue-disc.dia \ $(SRC)/traffic-control/doc/multi-queue-aware-queue-disc.dia \ + $(SRC)/traffic-control/doc/figures/collision_prob.jpeg \ + $(SRC)/traffic-control/doc/figures/overlapped.jpeg \ $(SRC)/lr-wpan/doc/lr-wpan-arch.dia \ $(SRC)/lr-wpan/doc/lr-wpan-data-example.dia \ $(SRC)/lr-wpan/doc/lr-wpan-primitives.dia \ diff --git a/src/traffic-control/doc/figures/collision_prob.jpeg b/src/traffic-control/doc/figures/collision_prob.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..52ddbe45ab3f50b41127df23981e11858343aaa5 GIT binary patch literal 51821 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 literal 0 HcmV?d00001 diff --git a/src/traffic-control/doc/figures/overlapped.jpeg b/src/traffic-control/doc/figures/overlapped.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..00571d2586c1c96d1ead85eb510d3f1e8e4cef91 GIT binary patch literal 70183 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 z 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

E7BKhJ3PhpU5%7H~=~R#oDUX0@ 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 literal 0 HcmV?d00001 diff --git a/src/traffic-control/doc/fq-codel.rst b/src/traffic-control/doc/fq-codel.rst index 84cbb97d9..c6d983f84 100644 --- a/src/traffic-control/doc/fq-codel.rst +++ b/src/traffic-control/doc/fq-codel.rst @@ -29,10 +29,24 @@ The source code for the FqCoDel queue disc is located in the directory and `fq-codel-queue-disc.cc` defining a FqCoDelQueueDisc class and a helper FqCoDelFlow class. The code was ported to |ns3| based on Linux kernel code implemented by Eric Dumazet. +Set associative hashing is also based on the Linux kernel `CAKE `_ queue management code. +Set associative hashing is used to reduce the number of hash collisions in +comparison to choosing queues normally with a simple hash. For a given number of +queues, set associative hashing has fewer collisions than a traditional +hash, as long as the number of flows is lesser than the number of queues. +Essentially, it makes the queue management system more efficient. Set associative +hashing is a vital component of CAKE, which is another popular flow management +algorithm that is implemented in Linux and is being tested for FqCoDel. +Furthermore, this module can be directly used with CAKE when its other +components are implemented in ns-3. The only changes needed to incorporate this +new hashing scheme are in the SetAssociativeHash and DoEnqueue methods, +as described below. * class :cpp:class:`FqCoDelQueueDisc`: This class implements the main FqCoDel algorithm: - * ``FqCoDelQueueDisc::DoEnqueue ()``: If no packet filter has been configured, this routine calls the QueueDiscItem::Hash() method to classify the given packet into an appropriate queue. Otherwise, the configured filters are used to classify the packet. If the filters are unable to classify the packet, the packet is dropped. Otherwise, it is handed over to the CoDel algorithm for timestamping. Then, if the queue is not currently active (i.e., if it is not in either the list of new or the list of old queues), it is added to the end of the list of new queues, and its deficit is initiated to the configured quantum. Otherwise, the queue is left in its current queue list. Finally, the total number of enqueued packets is compared with the configured limit, and if it is above this value (which can happen since a packet was just enqueued), packets are dropped from the head of the queue with the largest current byte count until the number of dropped packets reaches the configured drop batch size or the backlog of the queue has been halved. Note that this in most cases means that the packet that was just enqueued is not among the packets that get dropped, which may even be from a different queue. + * ``FqCoDelQueueDisc::DoEnqueue ()``: If no packet filter has been configured, this routine calls the QueueDiscItem::Hash() method to classify the given packet into an appropriate queue. Otherwise, the configured filters are used to classify the packet. If the filters are unable to classify the packet, the packet is dropped. Otherwise, an option is provided if set associative hashing is to be used.The packet is now handed over to the CoDel algorithm for timestamping. Then, if the queue is not currently active (i.e., if it is not in either the list of new or the list of old queues), it is added to the end of the list of new queues, and its deficit is initiated to the configured quantum. Otherwise, the queue is left in its current queue list. Finally, the total number of enqueued packets is compared with the configured limit, and if it is above this value (which can happen since a packet was just enqueued), packets are dropped from the head of the queue with the largest current byte count until the number of dropped packets reaches the configured drop batch size or the backlog of the queue has been halved. Note that this in most cases means that the packet that was just enqueued is not among the packets that get dropped, which may even be from a different queue. + + * ``FqCoDelQueueDisc::SetAssociativeHash()``: An outer hash is identified for the given packet. This corresponds to the set into which the packet is to be enqueued. A set consists of a group of queues. The set determined by outer hash is enumerated; if a queue corresponding to this packet's flow is found (we use per-queue tags to achieve this), or in case of an inactive queue, or if a new queue can be created for this set without exceeding the maximum limit, the index of this queue is returned. Otherwise, all queues of this full set are active and correspond to flows different from the current packet's flow. In such cases, the index of first queue of this set is returned. We don’t consider creating new queues for the packet in these cases, since this approach may waste resources in the long run. The situation highlighted is a guaranteed collision and cannot be avoided without increasing the overall number of queues. * ``FqCoDelQueueDisc::DoDequeue ()``: The first task performed by this routine is selecting a queue from which to dequeue a packet. To this end, the scheduler first looks at the list of new queues; for the queue at the head of that list, if that queue has a negative deficit (i.e., it has already dequeued at least a quantum of bytes), it is given an additional amount of deficit, the queue is put onto the end of the list of old queues, and the routine selects the next queue and starts again. Otherwise, that queue is selected for dequeue. If the list of new queues is empty, the scheduler proceeds down the list of old queues in the same fashion (checking the deficit, and either selecting the queue for dequeuing, or increasing deficit and putting the queue back at the end of the list). After having selected a queue from which to dequeue a packet, the CoDel algorithm is invoked on that queue. As a result of this, one or more packets may be discarded from the head of the selected queue, before the packet that should be dequeued is returned (or nothing is returned if the queue is or becomes empty while being handled by the CoDel algorithm). Finally, if the CoDel algorithm does not return a packet, then the queue must be empty, and the scheduler does one of two things: if the queue selected for dequeue came from the list of new queues, it is moved to the end of the list of old queues. If instead it came from the list of old queues, that queue is removed from the list, to be added back (as a new queue) the next time a packet for that queue arrives. Then (since no packet was available for dequeue), the whole dequeue process is restarted from the beginning. If, instead, the scheduler did get a packet back from the CoDel algorithm, it subtracts the size of the packet from the byte deficit for the selected queue and returns the packet as the result of the dequeue operation. @@ -41,10 +55,10 @@ implemented by Eric Dumazet. * class :cpp:class:`FqCoDelFlow`: This class implements a flow queue, by keeping its current status (whether it is in the list of new queues, in the list of old queues or inactive) and its current deficit. In Linux, by default, packet classification is done by hashing (using a Jenkins -hash function) on the 5-tuple of IP protocol, and source and destination IP -addresses and port numbers (if they exist), and taking the hash value modulo -the number of queues. The hash is salted by modulo addition of a random value -selected at initialisation time, to prevent possible DoS attacks if the hash +hash function) the 5-tuple of IP protocol, source and destination IP +addresses and port numbers (if they exist). This value modulo +the number of queues is salted by a random value +selected at initialization time, to prevent possible DoS attacks if the hash is predictable ahead of time. Alternatively, any other packet filter can be configured. In |ns3|, packet classification is performed in the same way as in Linux. @@ -71,6 +85,7 @@ The key attributes that the FqCoDelQueue class holds include the following: * ``Flows:`` The number of flow queues managed by FqCoDel. * ``DropBatchSize:`` The maximum number of packets dropped from the fat flow. * ``Perturbation:`` The salt used as an additional input to the hash function used to classify packets. +* ``EnableSetAssociativeHash:`` The parameter used to enable set associative hash. Perturbation is an optional configuration attribute and can be used to generate different hash outcomes for different inputs. For instance, the tuples @@ -107,6 +122,7 @@ The FqCoDel model is tested using :cpp:class:`FqCoDelQueueDiscTestSuite` class d * Test 3: The third test checks the dequeue operation and the deficit round robin-based scheduler. * Test 4: The fourth test checks that TCP packets with distinct port numbers are enqueued into different flow queues. * Test 5: The fifth test checks that UDP packets with distinct port numbers are enqueued into different flow queues. +* Test 6: The sixth test checks the working of set associative hashing and its linear probing capabilities by using TCP packets with different hashes enqueued into different sets and queues. The test suite can be run using the following commands:: @@ -118,3 +134,17 @@ or:: $ NS_LOG="FqCoDelQueueDisc" ./waf --run "test-runner --suite=fq-codel-queue-disc" +Set associative hashing is tested by generating a probability collision graph. +This graph is then overlapped with the theoretical graph provided in the original +CAKE paper (refer to Figure 1 from `CAKE `_). +The generated graph is linked below: + + .. image:: figures/collision_prob.jpeg + :alt: Generated Collision Probability Graph + +The overlapped graph is also linked below: + + .. image:: figures/overlapped.jpeg + :alt: Overlapped Image with the graph from CAKE paper + +The steps to replicate this graph are available on this `link `_.