Please forgive me that is long to read, maybe you already closed the browser as you saw that long post :)
Have been investigating for a long time on internet, but couldnt find an explaination that clears my questions. I dont need straight answers, even your opinions are enough. Now I will describe the question the way I understand the QOS concept, so please feel free to make corrections about misconceptions.
Main purpose of QOS is handling the traffic flow in case of a congestion, and additional purposes are shaping or policing the specific flows, or marking them although there is no congestion.
When there is no congestion, there are no software queues. Packets are simply switched between interfaces and placed to the hardware queues. There is no need of prioritizating packet flows since there is no congestion that packets flow as soon as they arrive (ignore the serialization delay from that scenario)
As congestion occurs, packets are being dropped. By default, the packet at the tail is dropped without checking if it is a voice/mission critical packet or not. To avoid losing critical data, the configured Queuing strategy kicks in and activates software queues. These software queues are manually created in Priority Queuing, Custom Queuing and dynamically created in WFQ, CBWQ and LLQ in accordance with class-maps, which are parralel to hardware queue like the following diagram
Q3------ --> HQ-------
In Custom Queuing and CBWFQ, packets from software queues are placed into hardware queue in a round-robin fashion. The advantage of CBWFQ besides NBAR and etc, you can assign the bandwidth limit that can be used per queue, unlike CQ. Here is the first question
I classify the necessary traffic, say voice %20 bandwidth, SQL %40 bandwidth and web %15 and %25 left to class-default that is for other traffic like routing protocol updates etc, in which I applied WRED to prevent tail-drop happening. Long story short, I manually defined the traffic which should use my total, say a T1 line 1.5Mbps.
So If a congestion occurs, my desired packets will still be forwarded without congestion to hardware queue, then why would I still need to prioritize the voice over others and use LLQ? Is it because if I have too many classes thus too many queues, the round-robin processing may last long enough (150 ms- delay caused by other interference along the path, distance and hops) untill it arrives to voice queue and cause jitter? Is that why Cisco recommends max class amount as 11?
Above is the question that I am %90 sure the answer is yes, but anyway just wanted to hear your opinions. The real question is this.
Above is why we should give priority to one voice queue, makes sense. So priority queueing has 4 queues (high-medium-normal-low). The difference is, if a packet arrives to a higher priority queue, the round-robin process starts again from the high prio queue without! completing its process. So if the high or high and medium queues are overhelmed, process will never come to normal and low queues, which is a drawback.
My question is, in prioritization basis (ignore the NBAR and other functionalities) what makes LLQ different over priority queuing?
The difference I saw is, you assign "priority percent %x" say %15 to one or two classes, and assign "bandwidth percent" to remaining classes. Now how will the packets in prioritized que will be treated? Lets say that %15 of that assigned bandwidth is overhelmed by that prioritized traffic, when will the packets in class based queues be processed? Should they wait for the prioritized que to complete? If yes, that means there is no difference between Priority Queuing and LLQ, if no, what is the difference?
Thanks for reading and allowing time on this