Skip to content

Avoid UE iterations in the scheduler #111

Description

@sgarg00

Originally reported by Robert Schmidt on 2026-05-15 — GitLab #1094

Converted from comment https://gitlab.eurecom.fr/oai/openairinterface5g/-/merge_requests/3575#note_219359

In various places in the scheduler (e.g., nr_csirs_scheduling(), nr_csi_meas_reporting(), nr_schedule_srs(), etc.), we iterate over all UEs in each slot to verify that a given condition for individual UEs is valid. For many UEs (say, 100), that might be costly. In the three mentioned cases above, it comes down to something like

(frame * n_slots_frame + slot - offset) % period == 0

i.e., "is the current frame/slot the one in which this UE is configured to send/receive X"?

That is inefficient. In these cases, we have a clear frame/slot <-> UE association (possibly multiple UEs per frame/slot).

Instead, I suggest that for kind of periodic scheduling, we should instead maintain an array indexed by time (frame/slot) mapping to N UEs that need to be scheduled. For instance, in SR scheduleing [from the comment mentioned above], maintain

NR_UE_info_t *sr_per_UE[MAX_SLOTS_SR_PERIDIOCITY];

then lookup at given frame/slot

int slot = convert_to_slot_max_sr_periodicity(frame, slot);
NR_UE_info_t *srUE = sr_per_UE[slot];
// srUE != NULL => UE has SR in this slot

to lookup if a given UE is to be scheduled SR, then allocate. That translates the O(n) operation into O(1).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions