# Game Theory-Based Load-Balancing Algorithms for Small Cells Wireless Backhaul Connections +
## 3 Results
### Simulation Results and Discussions
#### 3.3.2 Practical Implementation Issues  
The proposed and discussed GT-based and reference LB algorithms act on packet/flow level which makes possible a network layer implementation. This is a significantly simpler solution than a MAC/Physical layer implementation, even if the latter one has the potential of a more efficient implementation. To implement the LB algorithms at the network layer access is required to various packet queues embedded in the Operating System (OS) kernel. Packet queues are basic components of any network stack. Queues allow communication between asynchronous modules, and can increase the performance of inter-module communication, but have the side effect of impacting latency. In Figure 13 is depicted the enqueuing of the IP packets on the transmit path of the Linux OS network stack, being highlighted also some of the used latency-reducing features [47].  
Figure 12: Price of anarchy, \(max_{NE}\), for the simulated virtual tunnels. (a) \(max_{NE}\) versus the absolute total rate \(R_{max}\); (b) \(max_{NE}\) versus the relative total rate \(R_{max}/R_{av-tunnel}\).  
Between the IP stack and the Network Interface Controller (NIC) is located the NIC's driver queue (see Figure 13), typically implemented as a FIFO buffer. The driver queue does not necessarily store the packet data. An alternative is to store some descriptors that point to other packet queues called socket kernel buffers (SKBs), where the packets of the service flows are stored. The NIC's driver queue acquires packets from the IP stack. These packets may be generated locally by various services running on the platform or may be received on one NIC and routed to another one when the device is functioning as an IP router. The use of the driver queue ensures that if the system has data packets to transmit these packets will be sent on the channel at the moment when the NIC becomes ready for transmission. By employing this design, the NIC does not have to ask the IP stack for data packets when transmission opportunities occur, resulting in a higher transfer rate.  
The discussed LB algorithms could be integrated into the Queuing Discipline module, which sets the order in which different services can access the driver queues of the NIC. The Queuing Discipline module has access to the IP stack queues and can acquire information about the data flows. This module also has access to the NIC's driver queues and can acquire information about the delay inserted by each tunnel (each tunnel is attached to a separate NIC) and the number of packets waiting in the NIC's queues. The LB algorithms discussed can also be run in the user space but will be necessary to use functions that allow access from the user space to the mentioned queues. It should also be mentioned that the GT-based LB algorithms proposed can obtain all the parameters necessary for performing the LB operations by analyzing the evolution in time of the queues mentioned above. The identification of the service flows and the measurement of packet rates or the interpacket delays can be carried out by analyzing the content and evolution in time of the IP stack queue. The measurement of the delays suffered by various packets and the congestion level on the communication tunnels implementing the backhaul connections can be achieved by analyzing the evolution in time of the NICs' transmit queues. No other measurement of the macro cell wireless links parameters is necessary, which simplifies the system, not being necessary to use specific measurement techniques for different macro cell links technologies. Moreover, the change of the macro cell wireless links characteristics and/or parameters will not require changes in the LB algorithms.  
Figure 13: A simplified high-level overview of the queues on the transmit path of the Linux OS network stack.