Scheduler & air-interface resource optimization, written as a book chapter: the QoS-aware scheduler, deadline-based triage, speculative grants, the scheduling-request budget, two answers to fading, codeword economics, the inter-cell treaty, and carrier aggregation's collision with voice — closing with six KPI-optimization case studies on real node data.
Everything before this module was paperwork: QCI tables, E-RAB ladders, admission verdicts. The scheduler (QoS-Aware Scheduling, FAJ 121 0859) is where promises are kept or broken, one transmission-time interval — one millisecond — at a time. Each TTI it ranks every bearer with traffic by a weight built from the QciProfilePredefined row: priority, schedulingAlgorithm, and the resource type (GBR vs non-GBR).
The live node carries the single most consequential scheduler edit on the network: QCI-1's relative priority is flipped to 1 — above the 3GPP TS 23.203 default ordering that places QCI-5 (IMS signalling) highest. The operator's reasoning is sound and documented in the golden file: SIP rides patient TCP-like retransmission on the QCI-5 SRB-like bearer (RLC AM), but a voice frame missing its 80 ms slice is dead. The pdb=80 with pdbOffset=50 means the scheduler's effective per-packet deadline is tighter still — the offset reserves headroom for the transport and core legs of the corridor (Module 7 walks the full 280 ms budget).
All nine cells share one QciProfilePredefined=qci1 instance under QciTable=default: priority=1, pdb=80, pdbOffset=50, schedulingAlgorithm=PROPORTIONAL_FAIR for data QCIs but deadline-weighted for the GBR voice row. One instance, nine cells — the consistency is itself a finding: no per-cell drift.
Delay-Based Scheduling (FAJ 121 1789 / CXC4011064, ACTIVATED here) changes the scheduler's question for voice from “who deserves resources?” to “whose deadline is nearest?” Each QCI-1 packet's age is tracked against pdb − pdbOffset; weight rises steeply as the deadline approaches — triage by deadline. Its companion, uplink grant estimation, is prophecy by rhythm: voice is a 20 ms metronome (Module 1's SDP), so the scheduler can predict the next uplink need without waiting for a scheduling request, sizing grants to the AMR/EVS frame plus headers (Lesson 7-2's arithmetic).
The KPI seam: delay-based scheduling defends the tail of the delay distribution, not the mean. Verification belongs on per-QCI delay percentiles and pmPdcpPktDiscDlPelrQci[1] (in-node discards fall when deadlines are honored), never on average throughput — voice needs almost no throughput.
Prescheduling (FAJ 121 3085) and its voice-keyed sibling VoLTE Prescheduling (FAJ 121 5470, voltePreschedulingEnabled per cell) issue uplink grants before any scheduling request arrives — spending PUSCH capacity to delete the SR→grant round trip (~10–15 ms) from the latency budget. The node carries a fully tuned PreschedulingProfile: 86 bytes every 5 ms for 200 ms after activity — sized exactly to an AMR-WB 23.85 frame + ROHC headers + MAC/RLC overhead, the voice-tuned variant among the 100/108/200-byte profiles.
The profile exists; the switch is off. This is the recurring posture of the whole node: configurations tuned and parked, awaiting the evidence-driven trial of Module 8. The golden file agrees with the off state — no deviation, a deliberate decision. The trial criteria (Lesson 3-3): activate where SR volumes run high and uplink latency percentiles show a tail, measure PUSCH cost against the latency gain.
When prescheduling is parked, every uplink voice burst starts with a scheduling request on PUCCH. Prioritized SR Scheduling (FAJ 121 4300, ACTIVATED) makes the eNodeB answer voice SRs ahead of data SRs in the grant queue — the cheap half of the latency fix, no PUSCH spend. The PUCCH dimensioning on all nine cells: SR period 10 ms, noOfPucchSrUsers=320, noOfPucchCqiUsers=320, pucchOverdimensioning=50. The 10 ms SR period bounds the worst-case wait for a grant request slot at half the voice frame period — any longer and SR latency alone could eat the radio leg's budget.
The budget view: PUCCH resources are subtracted from PUSCH. 320+320 users at these periods is a capacity statement about expected connected-mode population; the overdimensioning margin absorbs handover surges. Audit rule: SR period × users must cover busy-hour connected UEs, or SR blocking shows up as setup latency that no downstream feature can recover.
A fading channel can be fought two ways. Uplink frequency-selective scheduling (FSS) measures per-PRB channel quality (sounding) and places each UE on its best PRBs — precision. Uplink frequency hopping (FAJ 121 4224) scatters a UE's transmission across the band within and between subframes — diversity, the statistical answer when sounding is stale or the UE moves fast. They are mutually exclusive per cell; hopping also collides with TTI bundling's resource patterns (Module 4's seam).
On this node hopping is a restricted feature and dark: FeatureState absent from the writable set, the vendor conversation of Lesson 3-5 required before any trial. The practical guidance stands regardless: dense urban grids with slow-moving users favor FSS precision; high-mobility corridors favor hopping's diversity.
MIMO spatial multiplexing sends two codewords when the channel's rank supports it. For a 30-byte voice frame, the second codeword buys nothing — the payload fits trivially in one — and costs link budget: power split across layers, two CRCs at risk instead of one. Single Codeword Selection for VoLTE (FAJ 121 5874, unlicensed) forces rank-1 transmission for QCI-1, trading useless capacity for transmission robustness. Here it sits false — parked, because the dense grid's SINR rarely makes the second codeword fragile. The feature is a rural/edge tool: where rank-2 BLER on voice runs visibly above rank-1, the flip is nearly free.
Zero Interference VoLTE Operation (FAJ 121 5235) coordinates neighbor cells to keep the PRBs carrying voice clean — an inter-cell treaty that reserves matching resources so a voice transmission near the cell border doesn't duel a neighbor's full-power data burst. The price is capacity on both sides of every border; the gain is edge-of-cell voice SINR. Parked here (DEACTIVATED, golden-compliant): a metro grid with strong dominance has few contested borders. The reopening evidence would be edge-concentrated voice loss (Lesson 7-4's surfaces) on border PRBs specifically.
CA multiplies data throughput by adding SCells — and every SCell adds RF chains the UE must power, measurement load, and a control-plane surface that can wobble exactly when a voice call needs stillness. CA-Aware VoLTE Handling (FAJ 121 4884 / CXC4012259, ACTIVATED · ENABLED · OPERABLE) resolves the collision with a philosophy statement carried identically on all nine cells: sCellHandlingAtVolteCall=DECONF_UL_SUPPRESS_DL_SCELLS — when QCI-1 establishes, deconfigure uplink SCells entirely, suppress downlink SCell activation. Voice gets a single-carrier, low-churn radio; data resumes its aggregation when the call ends.
The drop-rate effect is second-order but real: SCell (de)activation storms during calls create RRC reconfiguration churn, and every reconfiguration is a small drop risk. The ×9 consistency means population comparisons (Lesson 3-8) are clean — any cell deviating would contaminate drop-rate comparisons between cells.
Each follows the loop: KPI symptom → counter evidence → root cause → parameter/feature action (exact MO.attribute) → verification → rollback.
pmPdcpPktLostUlQci[1] normal — frames are late, not lost.EUtranCellFDD.voltePreschedulingEnabled=true (FAJ 121 5470) on the three cells — the 86 B/5 ms/200 ms profile is already staged. Control cells matched by load.pmPdcpPktDiscDlPelrQci[1] (in-node discard) stepping — the AQM defender (Module 7) dropping frames that aged out in queue.QciProfilePredefined.priority ordering (voice=1). The lesson, not the parameter, is the deliverable: priority edits are network-wide policy, never a per-KPI lever.noOfPucchSrUsers=320; SR opportunities saturate; grant latency spikes for all services.noOfPucchSrUsers and accept the PUSCH subtraction, or shorten SR period on event cells. Capacity decision (Module 2's corridor logic), taken with the capacity team.…PelrUuQci[1]) improves; data KPIs untouched (the feature keys to QCI-1).sCellHandlingAtVolteCall reverted to default by a template misapply — SCells stay configured during calls. Traces show RRC reconfigurations mid-call clustering before drops.DECONF_UL_SUPPRESS_DL_SCELLS; file the drift with the golden audit (Module 8) so the next monthly run catches the class.