LibreQoE / LibreQoS

A Quality of Experience and Smart Queue Management system for ISPs. Leverage CAKE to improve network responsiveness, enforce bandwidth plans, and reduce bufferbloat.
https://libreqos.io/
GNU General Public License v2.0
464 stars 50 forks source link

Handling Queues Available problem #376

Closed jaber-the-great closed 1 year ago

jaber-the-great commented 1 year ago

Problem: The issue with number of available queues in LibreQoS.py. In line 703 and 724, the for loops iterate through the number of available queues and create MQ qdisc for each CPU core / rx-tx queue. The issue is that the function findQueuesAvailable() only counts the number of tx queues for interfaceA (Interface connected to core router) and do not separately count the number of tx queues for interfaceB(Interface connected to edge router).

The code would work fine if: number of tx queues for interfaceB <= number of tx queues for interfaceA or number of tx queues for interfaceB <= cpuCount

This scenario may not always be true and may raise error in the for loop of line 724.

Fixes:

  1. Changing findQueuesAvailable() : The function now gets the interface name as input and finds the number of tx queues based on that. Previous version works on InterfaceA by defualt. Also, changing the error and logging messages to print the interface name.
  2. Handling the case when the available queues for interface A and B are different: Choosing the minimum one (in order to not mess up with assigning parent nodes to different classes in major:minor format)
thebracket commented 1 year ago

That's a terrifyingly big list of changed files? Is there a merge in there, or does it need to be retargeted to develop, perhaps?

On Thu, Aug 3, 2023, 6:05 PM jaber daneshamooz @.***> wrote:

Problem: The issue with number of available queues in LibreQoS.py. In line 703 and 724, the for loops iterate through the number of available queues and create MQ qdisc for each CPU core / rx-tx queue. The issue is that the function findQueuesAvailable() only counts the number of tx queues for interfaceA (Interface connected to core router) and do not separately count the number of tx queues for interfaceB(Interface connected to edge router).

The code would work fine if: number of tx queues for interfaceB <= number of tx queues for interfaceA or number of tx queues for interfaceB <= cpuCount

This scenario may not always be true and may raise error in the for loop of line 724.

Fixes:

  1. Changing findQueuesAvailable() : The function now gets the interface name as input and finds the number of tx queues based on that. Previous version works on InterfaceA by defualt. Also, changing the error and logging messages to print the interface name.
  2. Handling the case when the available queues for interface A and B are different: Choosing the minimum one (in order to not mess up with assigning parent nodes to different classes in major:minor format)

You can view, comment on, or merge this pull request online at:

https://github.com/LibreQoE/LibreQoS/pull/376 Commit Summary

File Changes

(21 files https://github.com/LibreQoE/LibreQoS/pull/376/files)

Patch Links:

— Reply to this email directly, view it on GitHub https://github.com/LibreQoE/LibreQoS/pull/376, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADRU433V66VF53KYD4ABGWLXTQOBPANCNFSM6AAAAAA3DMETQY . You are receiving this because you are subscribed to this thread.Message ID: @.***>

jaber-the-great commented 1 year ago

Oops. My bad, merge problem. Issued another pull request.