# Congestion Control Mechanism Based on Backpressure Feedback in Data Center Networks
## 4 Bfcc
### Structure Design  
The basic composition of the BFCC scheme is shown in Figure 6 and mainly consists of the following modules: virtual queue module, congestion detection module, backpressure feedback module, and rate reduction module. (1) In the _virtual queue module_, the packets from the same sender are divided into the same virtual queue, identified as the same group of flows, and mapped to the FIFO queue in the switch buffer. (2) The _congestion detection module_ detects the congestion of the current node and identifies the congested flow based on the queue packet occupancy. (3) The _backpressure feedback module_ generates backpressure feedback on the congested flow based on the congestion of the node and sends it upstream. (4) The _rate reduction module_ is composed of two parts: the admission control for the ingress pipeline and the egress control for the egress pipeline.  
**Virtual queue module.** This module introduces the concept of a virtual queue, which does not hold any packet and does not have any effect on traffic. It is just a number that increments as packets arrive and decrements as packets leave. Traffic from the same sender is set to the same virtual queue, forming a group of flows. Each switch is the same virtual queue division, using registers to record and update the number of packets in different virtual queues.  
**Congestion detection module.** The role of this module is to determine the level of congestion in the current node and identify the real congested flow. The real-congested flow ID is the virtual queue to which it belongs.  
**Backpressure feedback module.** The key to bridging the two core modules of congestion detection and rate reduction in this mechanism is the delivery of congestion information. The method of generating backpressure information is to make use of the clone/mirror packet feature in P4. This operation allows packets to be copied into a number of different packet paths to enable functions such as network traffic monitoring and analysis.  
The information about the congestion situation of the switch and the congested flow is added to the header of the cloned packet, which evolves into a new packet carrying the congestion information. However, since the programmable switch has to process a large number of packets per second, if the feedback packets are generated in the above way for a certain period of time, a large number of feedback congestion packets are generated in that period of time, which aggravates the burden of the switch. Through the tests, we found that congestion occurs by generating thousands of feedback packets, in which there are consecutive packets carrying the same feedback information.  
To solve this problem, we establish a dedicated register in the egress pipeline that records/updates the feedback information each time. Before generating a new feedback packet, the last feedback recorded in the register is compared. If it is different, a new backpressure feedback packet is generated, and the register is updated. With this method, we observe that the probability of generating a feedback packet is reduced by 70% compared to the original, which greatly reduces the burden on the switch.  
Figure 6: The overall architecture of the BFCC.  
**Rate reduction module.** This module is implemented through the collaboration of two parts: the control of the ingress and egress pipeline. Unlike the sender side of the rate reduction, the switch independently implements the traffic rate reduction by introducing a \"fake packet\" to relieve the downstream node's congestion more rapidly.