LLQ — Low Latency Queuing for Voice
A router's output interface is a single pipe — every packet waits its turn in a queue before being transmitted. For bulk data transfers, waiting a few milliseconds is irrelevant. For a VoIP call, a packet that waits 50 ms behind a 1,500-byte file transfer chunk introduces jitter that the receiving phone's jitter buffer must absorb. Enough of these delays and the jitter buffer overflows, packets are discarded, and the call degrades to clipping and silence. Low Latency Queuing (LLQ) solves this by creating a strict-priority queue that is always served before any other queue. VoIP packets never wait — they bypass the normal scheduling and transmit at the first opportunity. See QoS Overview and QoS Queuing for background on queuing mechanisms and Voice VLAN for Layer 2 voice traffic separation.
LLQ is implemented in Cisco IOS by adding the priority
command to a class inside an MQC policy-map. The priority class
receives strict preemptive service at every scheduling interval.
The remaining bandwidth is distributed among other classes by
CBWFQ (Class-Based Weighted Fair Queuing), which
guarantees minimum bandwidth to each class and fairly shares any
remaining capacity. Together, LLQ + CBWFQ forms the standard Cisco
WAN QoS architecture for mixed voice-and-data networks. This page
builds a complete policy from scratch, explains every bandwidth
calculation, and shows exactly how to read the verification output
to confirm VoIP is receiving priority treatment at every hop.
LLQ acts on DSCP markings applied at the network edge — for the marking step see DSCP Marking & Classification. For the rate-limiting that protects the priority queue from being saturated see Traffic Policing and Shaping. For the QoS overview that contextualises all queuing steps see MQC QoS Basics, QoS Overview, QoS Queuing, and QoS Marking.
1. Queuing Architecture — Why LLQ Exists
Queuing Models Compared
| Model | How It Works | Voice Suitability | IOS Command |
|---|---|---|---|
| FIFO | Single queue — packets dequeued in arrival order. Default on interfaces above 2 Mbps with no QoS policy | Poor — large data packets ahead of VoIP cause unpredictable jitter | (default — no command) |
| WFQ | Weighted Fair Queuing — automatically creates per-flow queues and allocates bandwidth proportionally by precedence. Default on interfaces below 2 Mbps | Moderate — VoIP gets fair share but no latency guarantee; large flows can still cause bursts of delay | fair-queue |
| CBWFQ | Class-Based WFQ — administrator defines traffic classes and assigns minimum bandwidth guarantees. Excess bandwidth shared fairly among classes | Better — bandwidth guaranteed but still no strict latency bound; voice packets may wait one scheduling cycle behind data | bandwidth [kbps] or bandwidth percent |
| LLQ | CBWFQ + a strict priority queue. The priority class is always served before bandwidth classes — zero wait time. Other classes share remaining bandwidth via CBWFQ | Excellent — bounded latency and jitter. The priority queue introduces near-zero additional delay regardless of other traffic | priority [kbps] or priority percent |
| PQ (legacy) | Four fixed priority levels — high, medium, normal, low. Higher queues starve lower queues completely if always busy | Good for voice but data starvation risk; replaced by LLQ in modern deployments | priority-list (legacy) |
LLQ Scheduler — How Priority and CBWFQ Coexist
Outbound interface scheduler (runs every Tc interval):
┌────────────────────────────────────────────────────────────┐
│ Step 1: Is the PRIORITY QUEUE non-empty? │
│ YES → dequeue one packet from priority queue │
│ (repeat until priority queue empty OR │
│ priority bandwidth quota consumed this interval) │
│ NO → proceed to Step 2 │
├────────────────────────────────────────────────────────────┤
│ Step 2: Service CBWFQ classes in weighted round-robin │
│ Each class gets bandwidth proportional to its weight │
│ (configured kbps or percent allocation) │
│ Unused bandwidth shared among active classes │
├────────────────────────────────────────────────────────────┤
│ Step 3: class-default gets remaining bandwidth │
│ (WFQ within class-default if fair-queue configured) │
└────────────────────────────────────────────────────────────┘
Key constraint: priority kbps + sum of all bandwidth kbps
MUST be ≤ 75% of interface bandwidth
(IOS reserves 25% for overhead by default)
VoIP Bandwidth Calculation
Per-call bandwidth requirement (G.711 codec, default packetisation):
─────────────────────────────────────────────────────────────────
Payload: 160 bytes (20 ms of G.711 at 64 kbps)
RTP header: 12 bytes
UDP header: 8 bytes
IP header: 20 bytes
Layer 2 header: 18 bytes (Ethernet — varies by WAN type)
Total per packet: 218 bytes
Packets per sec: 50 pps (1000 ms ÷ 20 ms packetisation)
Bandwidth/call: 218 × 50 × 8 = 87,200 bps ≈ 87.2 kbps
G.729 codec (compressed voice — 8 kbps payload):
Payload: 20 bytes (20 ms of G.729)
Headers (same): 58 bytes
Total per packet: 78 bytes
Bandwidth/call: 78 × 50 × 8 = 31,200 bps ≈ 31.2 kbps
Rule of thumb:
G.711 per call ≈ 87 kbps (use 90 kbps for margin)
G.729 per call ≈ 32 kbps (use 35 kbps for margin)
Maximum calls formula:
LLQ priority kbps ÷ per-call kbps = max simultaneous calls
e.g. priority 512 ÷ 90 = 5 G.711 calls (with margin)
2. Lab Topology & Bandwidth Plan
[IP Phones + PCs — 192.168.10.0/24]
│
Gi0/1 (LAN — 1 Gbps)
192.168.10.1/24
NetsTuts-R1 NetsTuts-R2
Gi0/0 (WAN — 8 Mbps contracted) ──── Gi0/0 (WAN)
10.0.0.1/30 10.0.0.2/30
Gi0/1 (LAN)
192.168.20.1/24
WAN interface bandwidth: physically 100 Mbps Ethernet
ISP contracted CIR: 8 Mbps (must shape to this)
QoS budget within 8 Mbps:
┌──────────────────────────────────────────────────────────┐
│ Class │ DSCP │ Mechanism │ Bandwidth │
├──────────────────────────────────────────────────────────┤
│ VoIP RTP │ EF │ LLQ │ 512 kbps (6.4%) │
│ VoIP Signalling │ CS3 │ CBWFQ │ 128 kbps (1.6%) │
│ Interactive Vid │ AF41 │ CBWFQ │ 2000 kbps (25.0%) │
│ Critical Apps │ AF31 │ CBWFQ │ 1500 kbps (18.8%) │
│ Bulk Data │ AF11 │ CBWFQ │ 500 kbps (6.3%) │
│ class-default │ BE │ fair-queue│ remaining ~3360 kbps│
│─────────────────────────────────────────────────────────|
│ Total allocated │ │ │ 4640 kbps (58.0%) │
│ Reserved (25%) │ │ │ 2000 kbps │
│ Default class │ │ │~3360 kbps (42%) │
└──────────────────────────────────────────────────────────┘
Note: 512+128+2000+1500+500 = 4640 kbps < 75% of 8000 = 6000 kbps ✓
3. Step 1 — Define Class-Maps
The queuing policy classifies inbound-marked traffic by DSCP value. Traffic must already be marked at the ingress interface (see DSCP Marking & Classification) before it reaches the egress queuing policy:
NetsTuts-R1>en NetsTuts-R1#conf t ! ── VoIP RTP — strict priority class ──────────────────── class-map match-any CM-VOIP-RTP match dscp ef ! ! ── VoIP signalling (SIP, H.323, SCCP) ────────────────── class-map match-any CM-VOIP-SIG match dscp cs3 ! ! ── Interactive video (telepresence, video calls) ──────── class-map match-any CM-VIDEO match dscp af41 ! ! ── Critical business applications (SAP, ERP) ──────────── class-map match-any CM-CRITICAL match dscp af31 ! ! ── Bulk data (backups, FTP, email) ────────────────────── class-map match-any CM-BULK match dscp af11 ! ! ── Scavenger / low priority ───────────────────────────── class-map match-any CM-SCAVENGER match dscp cs1 !
match dscp rather than ACLs because
DSCP matching at the egress queue is far more efficient — the
DSCP field is a single byte in the IP header, read in hardware
with negligible overhead. ACL matching at the egress queue would
re-evaluate every packet against extended ACLs, consuming CPU
for each forwarded packet. The ingress marking policy (separate
policy-map applied input on the LAN interface) has already
classified and stamped the correct DSCP value, so the egress
queuing policy simply reads that stamp. This separation of
classification (ingress) from queuing (egress) is the
recommended MQC design pattern. See
DSCP Marking & Classification
for full ingress marking configuration and
QoS Marking for DSCP value reference.
4. Step 2 — Configure the LLQ + CBWFQ Child Policy
The child policy defines the queuing and scheduling behaviour.
The priority command creates the strict priority
queue (LLQ); bandwidth commands create CBWFQ queues
with guaranteed minimums; class class-default with
fair-queue applies WFQ to all remaining traffic:
! ════════════════════════════════════════════════════════ ! Child queuing policy — operates within 8 Mbps budget ! ════════════════════════════════════════════════════════ policy-map PM-QUEUE-WAN ! ! ── LLQ: strict priority queue for VoIP RTP ────────── ! ── Bandwidth = 512 kbps supports ~5 G.711 calls ───── class CM-VOIP-RTP priority 512 ! ! ── CBWFQ: guaranteed bandwidth for signalling ─────── class CM-VOIP-SIG bandwidth 128 ! ! ── CBWFQ: guaranteed bandwidth for video ──────────── class CM-VIDEO bandwidth 2000 ! ! ── CBWFQ: guaranteed bandwidth for critical apps ──── class CM-CRITICAL bandwidth 1500 ! ! ── CBWFQ: minimum bandwidth for bulk data ─────────── class CM-BULK bandwidth 500 ! ! ── Scavenger: minimal guarantee — leftover only ───── class CM-SCAVENGER bandwidth 8 ! ! ── Default: WFQ among all unclassified traffic ────── class class-default fair-queue ! !
priority 512 command allocates 512 kbps as the
strict priority budget. This means up to 512 kbps of EF-marked
traffic can be dequeued ahead of everything else. If VoIP traffic
exceeds 512 kbps (more calls than planned), the excess is
dropped by the built-in priority policer — not
queued. This is intentional: protecting all other classes from
complete starvation if the priority class is overloaded. The
bandwidth [kbps] values represent guaranteed
minimums — not maximums. If video is allocated 2,000 kbps and
only uses 500 kbps, the unused 1,500 kbps is shared among
other active classes. The total explicit allocations
(512+128+2000+1500+500+8 = 4,648 kbps) must stay below 75%
of the parent shape rate (8,000 × 0.75 = 6,000 kbps), which
they do comfortably.
Bandwidth Percent Alternative
! ── Equivalent policy using percentage (easier to scale) ─ policy-map PM-QUEUE-WAN-PCT class CM-VOIP-RTP priority percent 6 ! ── 6% of 8 Mbps = 480 kbps (≈ 5 G.711 calls) ──────── ! class CM-VIDEO bandwidth percent 25 ! ── 25% of 8 Mbps = 2000 kbps ───────────────────────── ! class CM-CRITICAL bandwidth percent 19 ! class CM-BULK bandwidth percent 6 ! class class-default fair-queue ! !
percent form calculates bandwidth as a percentage
of the interface or parent shape rate. If the WAN rate is later
changed (say, upgraded to 20 Mbps), a percent-based policy
automatically scales all class allocations without reconfiguration.
Absolute kbps values require manual recalculation. The 75% ceiling
still applies — sum of all percent values must not exceed 75%.
In a hierarchical policy (parent shapes, child queues), the percent
is calculated against the parent shape rate, not the physical
interface speed.
5. Step 3 — Parent Shaping Policy and Interface Application
The child queuing policy attaches to the parent shaping policy. The parent controls the WAN aggregate rate; the child controls packet ordering within the shaped budget. The combined policy is applied output-only on the WAN interface:
! ── Parent policy: shape to 8 Mbps ISP contracted rate ── ! ── Bc = 100000 bytes → Tc = 100 ms (smooth shaping) ──── policy-map PM-SHAPE-PARENT class class-default shape average 8000000 100000 service-policy PM-QUEUE-WAN ! ! ! ── Apply to WAN egress interface ──────────────────────── interface GigabitEthernet0/0 description WAN-Uplink-ISP ip address 10.0.0.1 255.255.255.252 service-policy output PM-SHAPE-PARENT no shutdown ! ! ── Ingress marking policy on LAN interface ────────────── ! ── (See DSCP Marking lab for full config) ─────────────── interface GigabitEthernet0/1 description LAN-User-Access ip address 192.168.10.1 255.255.255.0 service-policy input PM-MARK-INBOUND no shutdown ! NetsTuts-R1(config)#end NetsTuts-R1#wr Building configuration... [OK]
service-policy PM-QUEUE-WAN inside the parent
class-default attaches the child queuing policy to the shaping
queue. When the shaper holds excess packets, the child policy
determines the order in which they are released — VoIP in the
priority class is always dequeued first, regardless of how much
video or bulk data has accumulated in the shaping buffer. Without
this hierarchy, the shaping queue would be FIFO — VoIP and bulk
data would be released in arrival order, completely defeating
the purpose of the priority queue. The Bc of 100,000 bytes gives
a Tc of 100 ms (100,000 × 8 ÷ 8,000,000 × 1000 = 100 ms) —
smooth 100 ms scheduling intervals with minimal burst peaks.
After completing configuration run wr or see
Saving &
Managing Cisco Configurations for persistence best practices.
Verify Policy Attachment
NetsTuts-R1#show policy-map interface GigabitEthernet0/0
GigabitEthernet0/0
Service-policy output: PM-SHAPE-PARENT
Class-map: class-default (match-any)
0 packets, 0 bytes
5 minute offered rate 0000 bps, drop rate 0000 bps
Match: any
Traffic Shaping
Target/Average Byte Limit SUSTAIN bytes/int EXCESS bytes/int
8000000/8000000 100000 800000 100000 1000000 100000
Service-policy : PM-QUEUE-WAN
Class-map: CM-VOIP-RTP (match-any)
0 packets, 0 bytes
Priority: 512 kbps, burst bytes 12800, b/w exceed drops: 0
Match: dscp ef (46)
Class-map: CM-VOIP-SIG (match-any)
0 packets, 0 bytes
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
bandwidth 128 kbps
Match: dscp cs3 (24)
Class-map: CM-VIDEO (match-any)
0 packets, 0 bytes
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
bandwidth 2000 kbps
Match: dscp af41 (34)
Class-map: CM-CRITICAL (match-any)
0 packets, 0 bytes
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
bandwidth 1500 kbps
Match: dscp af31 (26)
Class-map: CM-BULK (match-any)
0 packets, 0 bytes
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
bandwidth 500 kbps
Match: dscp af11 (10)
Class-map: class-default (match-any)
0 packets, 0 bytes
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
bandwidth remaining ratio 1
Match: any
6. Step 4 — Verification with Live Traffic
show policy-map interface — With All Classes Active
NetsTuts-R1#show policy-map interface GigabitEthernet0/0
GigabitEthernet0/0
Service-policy output: PM-SHAPE-PARENT
Class-map: class-default (match-any)
312450 packets, 468675000 bytes
5 minute offered rate 7820000 bps, drop rate 0000 bps
Match: any
Traffic Shaping
Target/Average Byte Limit SUSTAIN bytes/int EXCESS bytes/int Interval Increment
8000000/8000000 100000 800000 100000 1000000 100000 100 100000
Adapt Queue Packets Bytes Packets Bytes Shaping
Active Depth Delayed Delayed FECN BECN
- 8 14820 22230000 0 0 yes
Service-policy : PM-QUEUE-WAN
Class-map: CM-VOIP-RTP (match-any)
18420 packets, 29472000 bytes
5 minute offered rate 248000 bps, drop rate 0000 bps
Match: dscp ef (46)
18420 packets, 29472000 bytes
Priority: 512 kbps, burst bytes 12800, b/w exceed drops: 0
Class-map: CM-VOIP-SIG (match-any)
342 packets, 68400 bytes
5 minute offered rate 2800 bps, drop rate 0000 bps
Match: dscp cs3 (24)
342 packets, 68400 bytes
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
bandwidth 128 kbps
Class-map: CM-VIDEO (match-any)
28140 packets, 50652000 bytes
5 minute offered rate 1984000 bps, drop rate 0000 bps
Match: dscp af41 (34)
28140 packets, 50652000 bytes
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 2/0/0
bandwidth 2000 kbps
Class-map: CM-CRITICAL (match-any)
12820 packets, 20512000 bytes
5 minute offered rate 1492000 bps, drop rate 0000 bps
Match: dscp af31 (26)
12820 packets, 20512000 bytes
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 1/0/0
bandwidth 1500 kbps
Class-map: CM-BULK (match-any)
8410 packets, 12615000 bytes
5 minute offered rate 492000 bps, drop rate 12000 bps
Match: dscp af11 (10)
8410 packets, 12615000 bytes
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/48/0
bandwidth 500 kbps
Class-map: class-default (match-any)
244318 packets, 355721000 bytes
5 minute offered rate 1602000 bps, drop rate 0000 bps
Match: any
show policy-map interface — Priority Class Detail
NetsTuts-R1#show policy-map interface GigabitEthernet0/0 output class CM-VOIP-RTP
GigabitEthernet0/0
Service-policy output: PM-SHAPE-PARENT
Service-policy : PM-QUEUE-WAN
Class-map: CM-VOIP-RTP (match-any)
18420 packets, 29472000 bytes
5 minute offered rate 248000 bps, drop rate 0000 bps
Match: dscp ef (46)
18420 packets, 29472000 bytes
Priority: 512 kbps, burst bytes 12800, b/w exceed drops: 0
Output Queue: Conversation 264
(pkts matched/bytes matched) 18420/29472000
(depth/total drops/no-buffer drops) 0/0/0
class [name]
suffix shows the most critical voice QoS metric:
b/w exceed drops: 0. This counter increments
when VoIP traffic exceeds the 512 kbps priority bandwidth budget
— the built-in priority policing drops the excess. Zero drops
here means every VoIP packet has been forwarded with strict
priority treatment. A non-zero value indicates either more VoIP
calls than planned (call admission control needed) or VoIP is
being mismarked at EF when it should not be (rogue EF traffic
consuming the priority budget). The depth: 0
confirms no VoIP packets are queued — they are dequeued
immediately on arrival, exactly as LLQ is designed to work.
show policy-map interface — Monitoring Over Time
! ── Check specific counters during a call ────────────────
NetsTuts-R1#show policy-map interface Gi0/0 output | include exceed
Priority: 512 kbps, burst bytes 12800, b/w exceed drops: 0
! ── Monitor queue depth for all classes (repeat every 5 sec) ──
NetsTuts-R1#show policy-map interface Gi0/0 output | include depth
(queue depth/total drops/no-buffer drops) 0/0/0
(queue depth/total drops/no-buffer drops) 2/0/0
(queue depth/total drops/no-buffer drops) 1/0/0
(queue depth/total drops/no-buffer drops) 0/48/0
(queue depth/total drops/no-buffer drops) 0/0/0
! ── Watch drop rate on priority class ────────────────────
NetsTuts-R1#show policy-map interface Gi0/0 output | include drop rate
5 minute offered rate 248000 bps, drop rate 0000 bps
5 minute offered rate 2800 bps, drop rate 0000 bps
5 minute offered rate 1984000 bps, drop rate 0000 bps
5 minute offered rate 1492000 bps, drop rate 0000 bps
5 minute offered rate 492000 bps, drop rate 12000 bps
! ── Clear counters to get a fresh measurement ────────────
NetsTuts-R1#clear counters GigabitEthernet0/0
Clear "show interface" counters on this interface [confirm]
| include filter technique is essential for
monitoring specific metrics across all classes simultaneously
without scrolling through the full output. The drop rate
12000 bps on the bulk class (last line) confirms the
CBWFQ is actively managing congestion for lower-priority traffic
while drop rate 0000 bps on VoIP, signalling, video,
and critical apps confirms those classes are receiving their
guaranteed bandwidth. Run clear counters before a
QoS test to reset cumulative drop and packet counters, then
measure for a known time period to get accurate rates. For general
interface counters and error statistics see
show interfaces and
show ip interface brief.
Simulating a VoIP Call — Verify Priority Behaviour
! ── Generate background bulk traffic to create congestion ─ ! ── (from a second host on the LAN) ────────────────────── ! ── From R1, ping the remote phone with small packets ──── ! ── to simulate VoIP-sized packets during congestion ───── NetsTuts-R1#ping 192.168.20.10 repeat 1000 size 218 df-bit Type escape sequence to abort. Sending 1000, 218-byte ICMP Echos to 192.168.20.10, timeout 2 seconds: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Success rate is 100 percent (1000/1000), round-trip min/avg/max = 1/2/4 ms ! ── Compare with bulk transfer sized packets ───────────── NetsTuts-R1#ping 192.168.20.10 repeat 100 size 1400 df-bit Type escape sequence to abort. Sending 100, 1400-byte ICMP Echos to 192.168.20.10, timeout 2 seconds: !!!!!!!!!!!!!.!.!!!.!!!!!!!.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Success rate is 94 percent (94/100), round-trip min/avg/max = 1/8/47 ms
7. Step 5 — IP SLA Jitter Probe for VoIP Quality Validation
Cisco IP SLA creates synthetic UDP jitter probes that simulate VoIP RTP streams and measure the exact quality metrics that determine call quality — latency, jitter, and packet loss. For full IP SLA configuration and scheduling see IP SLA Configuration & Tracking and IP SLA Syslog Alerting:
! ════════════════════════════════════════════════════════
! On NetsTuts-R2 (responder end) — enable IP SLA responder
! ════════════════════════════════════════════════════════
NetsTuts-R2#conf t
ip sla responder
!
! ════════════════════════════════════════════════════════
! On NetsTuts-R1 (sender) — configure jitter probe
! ════════════════════════════════════════════════════════
NetsTuts-R1#conf t
ip sla 1
udp-jitter 192.168.20.1 16384 codec g711ulaw
! ── Destination: R2 LAN IP, port 16384 (RTP range) ────
! ── Codec: G.711 — sets packet size and pps automatically
tos 184
! ── ToS 184 decimal = 0xB8 = DSCP EF (46) in ToS byte ─
frequency 60
! ── Run probe every 60 seconds ─────────────────────────
!
ip sla schedule 1 life forever start-time now
!
! ── Wait 60 seconds then check results ───────────────────
NetsTuts-R1#show ip sla statistics 1
IPSLAs Latest Operation Statistics
IPSLA operation id: 1
Latest RTT: 2 milliseconds
Latest operation start time: 14:32:18.421 UTC Thu Mar 12 2026
Latest operation return code: OK
RTT Values:
Number Of RTT: 1000 RTT Min/Avg/Max: 1/2/4 milliseconds
Latency one-way time:
Number of Latency one-way Samples: 500
Source to Destination Latency one way Min/Avg/Max: 1/1/3 milliseconds
Destination to Source Latency one way Min/Avg/Max: 1/1/2 milliseconds
Jitter Time:
Number of SD Jitter Samples: 999
Number of DS Jitter Samples: 999
Source to Destination Jitter Min/Avg/Max: 0/1/3 milliseconds
Destination to Source Jitter Min/Avg/Max: 0/0/2 milliseconds
Packet Loss Values:
Loss Source to Destination: 0 Loss Destination to Source: 0
Out Of Sequence: 0 Tail Drop: 0 Late Arrival: 0
Voice Score Values:
Calculated Planning Impairment Factor (ICPIF): 0
MOS score: 4.40
tos 184 command sets DSCP EF (decimal
value 184 in the ToS byte = 46 × 4 = 184) so the probe traffic
is handled by the priority queue, accurately reflecting actual
VoIP conditions. A MOS score below 3.6 or jitter above 30 ms
indicates the LLQ policy needs review — either priority bandwidth
is insufficient, the priority queue has exceeded drops, or the
DSCP marking is not reaching the egress policy. For MPLS-based
WAN QoS with EXP bit marking see MPLS.
For DMVPN overlay QoS see
DMVPN Phase 1, 2 & 3.
8. Troubleshooting LLQ and CBWFQ
| Problem | Symptom | Cause | Fix |
|---|---|---|---|
| Priority queue exceed drops non-zero | show policy-map interface shows b/w exceed drops: [N] on the priority class; VoIP calls experiencing degraded quality despite LLQ configuration |
VoIP is generating more traffic than the priority bandwidth allows — too many simultaneous calls, oversized codec (G.711 where G.729 was planned), or non-VoIP traffic being mismarked as EF 46 and consuming the priority budget | Increase priority [kbps] to accommodate actual call volume (recalculate: calls × per-call bandwidth). Audit EF-marked traffic sources — a PC marking all its traffic as EF consumes priority budget. Add call admission control at the CUCM or CUBE to limit simultaneous calls. Check ingress marking policy is enforcing set dscp default on class-default to erase fraudulent EF markings |
| IOS rejects policy-map — bandwidth exceeds 75% | % Cannot add more bandwidth: [total] kbps is more than max threshold [max] kbps error when configuring bandwidth classes |
Sum of all priority + bandwidth allocations exceeds 75% of the interface or parent shape bandwidth — IOS enforces this ceiling to reserve 25% for overhead and class-default |
Reduce individual class bandwidth allocations. Recalculate: sum of all class kbps must be ≤ 0.75 × interface or parent shape rate. If using a parent shape policy, IOS calculates the 75% against the shape rate, not the physical interface speed. Use bandwidth percent to make the ceiling easier to manage — total percentages must not exceed 75% |
| CBWFQ queue drops causing application timeouts | show policy-map interface shows non-zero total drops on a critical application class (CM-CRITICAL); application users report session timeouts and performance issues |
Critical application class bandwidth allocation is insufficient for the actual traffic load; or the class queue limit (default 64 packets) is too small causing tail-drop before CBWFQ can serve the queue | Increase the bandwidth [kbps] allocation for the critical class. Increase the queue limit with queue-limit [packets] inside the class to allow more buffering. Consider WRED with random-detect dscp-based instead of tail-drop to more gracefully manage queue depth for TCP flows |
| Queuing policy has no effect — FIFO behaviour observed | All traffic classes show zero queue depth and identical latency; VoIP experiences same jitter as bulk data during congestion | Service-policy applied in the input direction (queuing policies must be output); parent shaping policy missing (physical interface is not congested — queuing only activates when a queue builds, which requires a congestion point); or policy-map not attached to the interface | Confirm service-policy output [name] on the WAN interface. Verify the parent shaping policy is present and shaping: show policy-map interface [intf] output | include Shaping should show "yes" during traffic. Without a parent shaper on a high-speed physical interface, the output queue rarely builds and CBWFQ/LLQ have no effect — traffic exits faster than it arrives |
| Video class starving bulk class completely | Bulk data transfers showing near-zero throughput; video class offered rate matches or exceeds its bandwidth allocation; show policy-map interface shows bulk class drops but video class queue depth zero |
Video bandwidth allocation (2,000 kbps) plus other classes consuming most of the 8 Mbps budget, leaving insufficient bandwidth for class-default and bulk. CBWFQ guarantees minimums but if total allocations are near the 75% ceiling, little remains for class-default and under-allocated classes | Review bandwidth allocation percentages — ensure the sum leaves adequate bandwidth for lower-priority classes and class-default. Add a maximum bandwidth cap on the video class with bandwidth max [kbps] (on newer IOS) to prevent video from consuming excess bandwidth. Alternatively, add policing within the video class to cap it at its allocated rate even when spare bandwidth exists |
| VoIP works but MOS score remains below 4.0 | IP SLA shows zero LLQ exceed drops, zero packet loss, but MOS score 3.4–3.8; jitter is low but one-way latency is 80–120 ms | LLQ is functioning but the end-to-end propagation delay is too high — likely a WAN circuit with high inherent latency (satellite, long-haul MPLS). LLQ reduces queuing delay but cannot reduce propagation delay. Alternatively, the Tc (shaping interval) is too large, adding shaping delay that appears as latency to the VoIP stream | Reduce the shaping Bc value for a shorter Tc (e.g. Bc = 10,000 bytes → Tc = 10 ms) to minimise shaping-induced latency. Verify with show ip sla statistics one-way latency values — propagation delay is fixed; queuing and shaping delay are controllable. For very latency-sensitive paths consider a dedicated QoS class at the ISP level (MPLS EXP bits) |
| Child policy bandwidth total accepted but voice still impacted | Policy-map configured without errors; show policy-map shows correct values; but during congestion voice quality degrades similarly to pre-QoS |
Ingress marking policy not applied — traffic arriving at the egress queuing policy is unmarked (DSCP 0) so all packets land in class-default and are treated as best-effort. LLQ and CBWFQ classify by DSCP — if packets arrive unclassified, the class-maps match nothing | Verify the ingress marking policy: show policy-map interface [LAN-intf] input — check EF class "Packets marked" counter is incrementing. Confirm service-policy input [mark-policy] is applied to the LAN interface. Test by checking show policy-map interface [WAN-intf] output — if all traffic lands in class-default, marking is not reaching the egress policy |
Key Points & Exam Tips
- LLQ is CBWFQ + a strict priority queue. The
priority [kbps]command creates the priority class;bandwidth [kbps]creates CBWFQ classes. Both exist in the same policy-map. - The priority class is always served first — packets in the priority queue are dequeued before any CBWFQ class receives service. This is what eliminates queuing delay for VoIP.
- The priority class has a built-in policer — if EF traffic exceeds the configured kbps, excess packets are dropped immediately to prevent the priority queue from starving all other classes. Monitor b/w exceed drops to detect oversubscription.
- CBWFQ bandwidth guarantees are minimums, not maximums. Unused bandwidth from any class is shared proportionally among all active classes. A class with
bandwidth 500may transmit at 2,000 kbps if other classes are idle. - The sum of all
priority+bandwidthkbps values must not exceed 75% of interface (or parent shape) bandwidth. IOS enforces this ceiling to reserve capacity for class-default and overhead. - Queuing policies must be applied output on the interface where congestion occurs. On a high-speed physical interface with no parent shaping, queuing rarely activates — traffic flows faster than it arrives and no queue builds. A parent shaping policy creates the artificial congestion point that forces the queuing policy to operate.
- The hierarchical policy is the complete WAN QoS solution: parent
shape average [CIR]controls the WAN rate; child LLQ + CBWFQ controls packet ordering within the shaped rate. Without hierarchy, the shaping queue is FIFO and VoIP waits behind bulk data. - VoIP bandwidth per call: G.711 ≈ 87 kbps, G.729 ≈ 32 kbps (including all headers). Calculate the priority kbps as: max simultaneous calls × per-call bandwidth + 10% margin.
- Verify with
show policy-map interface [intf] output: check priority classb/w exceed drops: 0(no overload), CBWFQ classestotal dropsappropriate for class priority, and queue depth reflects real-time congestion state. - For the CCNP exam: know that LLQ is enabled by the
prioritycommand (notbandwidth); know the 75% bandwidth ceiling rule; know that the priority queue has a built-in policer; and know that queuing is meaningless without a congestion point (parent shaping or low-speed WAN interface).