- Introduced new configuration parameters `pusch_RSSI_Threshold` and `pucch_RSSI_Threshold` (MACRLC section) - Added `nr_limit_tpc` function in `gNB_scheduler_primitives.c` to limit TPC based on RSSI threshold. - Integrated `nr_limit_tpc` in PUCCH and PUSCH power control Example Configuration puxch_RSSI_Threshold takes value between -1280 and 0 and is mapped to range -128.0 dBm/dBFS to 0.0 dBm/dBFS in 0.1 dB increments. Unit depends on RSSI reporting config. pucch_RSSI_Threshold = -500; # Set the PUSCH RSSI threshold to -50.0dBm/-50dBFS pucch_RSSI_Threshold = -600; # Set the PUCCH RSSI threshold to -60.0dBm/-60dBFS
13 KiB
This document describes the basic functioning of the 5G MAC scheduler, describes the periodic output, and explains out the various configuration options that influence its behavior.
[[TOC]]
General
The 5G MAC scheduler is a proportional fair (PF) scheduler, "approximating wide-band CQI" (for lack of a better term, but CQI is typically used for PF) through the selection of an MCS to use.
Concretely, the scheduler loops through all UEs and calculates the PF coefficient using the currently selected MCS, and the historical achieved rate. The UE with highest coefficient wins and is scheduled RBs until all resources are used, or until it has no more data to fill RBs, in which the scheduler continues with the UE with the second-best coefficient.
UEs with retransmissions are allocated first; similarly, UEs that have not been scheduled for some time in UL are scheduled automatically in UL and have therefore priority over data with "normal" traffic.
The MCS selection is done in get_mcs_from_bler() in file
gNB_scheduler_primitives.c.
It consider two thresholds for a "BLER" that is computed from the number of
first-round retransmissions over total transmissions in the last window (50ms).
If that ratio is higher than an "upper" threshold (see
dl/ul_bler_target_upper in the configuration section below), it is
interpreted as "bad channel" and MCS is decremented by 1. If the ratio is
lower than a "lower" threshold (see dl/ul_bler_target_lower), it is
interpreted as "good channel" and MCS is incremented by 1. This happens each
window.
The actual scheduler implementation can be found in functions pf_dl() and
pf_ul() in files
gNB_scheduler_dlsch.c
(for DL) and
gNB_scheduler_ulsch.c
(for UL), respectively.
Periodic output and interpretation
The scheduler periodically outputs statistics that can help you judge the radio
channel quality, i.e., why a UE does not perform as you would expect. The
scheduler outputs this info in log level "INFO". The same information is also
available in the the file nrMAC-stats.log in the same directory in which
nr-softmodem is run.
Example:
UE RNTI 2460 CU-UE-ID 2 in-sync PH 28 dB PCMAX 24 dBm, average RSRP -74 (8 meas)
UE 2460: CQI 15, RI 2, PMI (14,1)
UE 2460: UL-RI 2 TPMI 0
UE 2460: dlsch_rounds 32917/5113/1504/560, dlsch_errors 211, pucch0_DTX 1385, BLER 0.19557 MCS (1) 23
UE 2460: ulsch_rounds 3756/353/182/179, ulsch_errors 170, ulsch_DTX 285, BLER 0.33021 MCS (1) 27 (Qm 8 dB) NPRB 5 SNR 31.0 dB
UE 2460: MAC: TX 1530943191 RX 194148 bytes
UE 2460: LCID 1: TX 651 RX 3031 bytes
UE 2460: LCID 2: TX 0 RX 0 bytes
UE 2460: LCID 4: TX 1526169592 RX 16152 bytes
In the first line,
UE RNTI(here2460): this is also used as the DU UE ID over F1; each line is prepended with the RNTICU UE ID(2): separate identifier from the RNTI to handle multiple UEs across DUs (in which case RNTI conflicts are possible)- whether a UE is
in-sync(actively being scheduled) orout-of-sync(the UE is not being scheduled, because it did not respond when being scheduled in UL or since it has radio-link failure PH(28): Power Headroom, the amount of power the UE has left. If it is > 40 you can achieve full UL throughput.PCMAX(24 dBm) is what the UE reported as maximum UL transmit power it can output in the channel.RSRP(-74): measured power of the DL reference signals at the UE. >-80dBm you should have full DL throughput. <-95 dBm, you are very limited in terms of connectivity.
The second and third line reflect channel state information (CSI) as reported by the UE, and only appear if CSI-RS/SRS are enabled and received (for some bands, they cannot be enabled):
CQI(15): the channel quality indicator is a number between 0 and 15. It indicates the achievable spectral efficiency of the UE. 15 means highest, 0 is lowest. This corresponds to a 4-bit table in 38.214 with actual spectral efficiencies in bits/s/HzRI: Rank indicator 1-4. If 1 it means limited to 1 layer transmission on DL. 2 two layers, etc.PMI: precoding matrix indicator. It's a measure of the spatial-direction of the gNBs transmit array as seen by the UE. It indicates the precoding that the gNB applies. It should be more or less stationary unless the UE is moving around quickly. It can jump when objects move around the UEUL-RI,TPMI: same as DL.
The fourth and fifth line show HARQ-related information:
dlsch_rounds A/B/C/D(32917/5113/1504/560). This is the number of transmissions by the gNB for each round of the HARQ protocol.Ais the first round, B is the second, etc. IfAis high andBis low,Cis lower andDis around 0, then things work well. IfBis around the same asA, then the first round is almost always in error. This is not usually good unless the UE is far from the gNB.dlsch_errors(211) is the number of errors, meaning that after 4 transmissions the MAC transport block was not received by the UE. A high number is not good/it should be a very low number, again unless there are severe radio conditions.pucch0_DTX: this is the number of PUCCH format 0 (or 1 later) missed detections (unreceived ack/nak). This means that either the UL is very bad and ACK/NAK cannot be conveyed properly or DL DCIs are missed by the UE. This is also something that should be very small compared toAindlsch_rounds.DLSCH BLERis the current measured block-error rate of the DLSCH. Basically a moving average ofB/Aindlsch_rounds. This is something that should always be close to the target bler that the MAC scheduler uses. typically 10-30% if we want a high throughput scheduling policy.MCS (Q) M: M (0-28) is the current MCS used by the MAC scheduler and Q is the mcs table: 0=64QAM, 1=256QAM, 2=low SE table for URLLCulsch_rounds/ulsch_errors: same as DLSCH but for UL.ulsch_DTX(285): number of PUSCH missed detection (i.e. signal energy below threshold in configuration file,L1s.pusch_dtx_threshold, which is 10 times the actual unnormalized digital signal level). This is an indication of either very poor radio conditions (UE cannot reach the gNB), power control problems, or missed DCI 0_x DCIs. It should be low compared toAinulsch_roundswhen things are working properly.- ULSCH
BLER/MCS: same as DLSCH but for UL. - ULSCH
Qm X deltaMCS Y dB: modulation order: 2=QPSK, 4=16QAM, 6=64QAM, 8=256QAM and the dB offset for deltaMCS component in PUSCH power control law. If deltaMCS is disabled (this is the default) then it indicates 0. When deltaMCS is enabled it indicates the current power offset applied by the UE on the UL corresponding to the scheduled MCS - ULSCH
NPRB: current number of PRBs scheduled by the gNB. This will fluctuate a lot but when doing high throughput with iperf, it indicates the number of PRBs that the UE is actually able to use with its power budget and should be high. - ULSCH
SNR: the current SNR that the gNB receives the UE signal with. It should be close to the target in the gNB configuration file,pusch_TargetSNRx10, which should be around 10 times the value shown in the log
In the last lines:
MACshows the amount of MAC PDU bytes scheduled in transmit (TX,1530943191) and receive (RX,194148) directionsLCID Xshows the amount of MAC SDU/RLC PDU data for Logical Channel ID with IDXin transmit and receive directions. LCIDs 1 and 2 are mapped to SRBs 1 and 2. LCIDs 4 and onward are mapped to DRBs 1 onward. If you have an LCID 4, it means you have a PDU session.
Configuration of the MAC
Split-related options (running in a DU)
See nFAPI documentation or Aerial tutorial for information about the FAPI split.
See F1 documentation for information about the F1 split.
MAC scheduler-related configuration options
The following options have an influence on the MAC scheduler operation (for all UEs, if applicable), either on the MAC scheduler operation directly or how a UE is configured.
In the MACRLCs section of the gNB/DU configuration file:
ulsch_max_frame_inactivity(default 10): number of frames before a UE is scheduled automatically in UL. Lowering can improve latency at the expense of more resources in idle (which limits the number of UEs, and increases UE power consumption)pusch_TargetSNRx10(default 200): target SNR in PUSCH times 10 (200 corresponds to 20dB target SNR)pucch_TargetSNRx10(default 150): target SNR in PUCCH times 10 (as above)ul_prbblack_SNR_threshold(default 10): target SNR for disabling RB scheduling in uplink on affected RBs.pucch_FailureThres(default 10): number of DTX on PUCCH after which scheduler declares UE in radio link failure and moves it to "out-of-sync state". Currently not used.pusch_FailureThres(default 10): number of DTX on PUSCH after which scheduler declares UE in radio link failure and moves it to "out-of-sync state"dl_bler_target_upper(default 0.15): upper threshold of BLER (first round retransmission over initial transmission) to decrease MCS by 1dl_bler_target_lower(default 0.05): lower threshold of BLER (first round retransmission over initial transmission) to increase MCS by 1dl_max_mcs(default 28): maximum MCS to useul_bler_target_upper(default 0.15): asdl_bler_target_upperul_bler_target_lower(default 0.05): asdl_bler_target_lowerul_max_mcs(default 28): asdl_max_mcsdl_harq_round_max(default 4): maximum number of HARQ rounds, i.e., retransmissions to perform, in DLul_harq_round_max(default 4): asdl_harq_round_maxmin_grant_prb(default 5): number of PRBs to schedule for UE after activity (seeulsch_max_frame_inactivity) or after scheduling request (SR)min_grant_mcs(default 9): MCS to use for UE after activity (seeulsch_max_frame_inactivity) or after scheduling request (SR)identity_precoding_matrix(default 0=false): flag to enable to use only the identity precoding matrix in DL precodingset_analog_beamforming(default 0=false): flag to enable analog beamformingbeam_duration: duration/number of consecutive slots for a given set of beams, depending on hardware switching performancebeams_per_period: set of beams that can be simultaneously allocated in a period (beam_duration)pusch_RSSI_Threshold: Value between -1280 and 0 which maps to range from -128.0 dBm/dBFS to 0.0 dBm/dBFS. This limits PUSCH TPC commands in case RSSI reaches the threshold and prevents ADC railing. Unit depends on RSSI reporting config.pucch_RSSI_Threshold: Same as above but for PUCCH
In the gNBs section of the gNB/DU configuration file: some of the parameters
affect RRC configuration (CellGroupConfig) of a UE, and are therefore listed
here, also they pertain to the DU, i.e., the scheduler.
pdsch_AntennaPorts_XP(default 1): number of XP logical antenna ports in PDSCH (see alsoRUNMODEM.md)pdsch_AntennaPorts_N1(default 1): number of horizontal logical antenna ports in PDSCH (see alsoRUNMODEM.md)pdsch_AntennaPorts_N2(default 1): number of vertical logical antenna ports in PDSCH (see alsoRUNMODEM.md)pusch_AntennaPorts(default 1): number of antenna ports in PUSCHmaxMIMO_layers(default -1=unlimited): maximum number of MIMO layers to use in downlinksib1_tda(default 1): time domain allocation (TDA) indices to use for SIB1 (38.214 section 5.1.2.1.1)do_CSIRS(default 0): flag whether to use channel-state information reference signal (CSI-RS)do_SRS(default 0): flag whether to use sounding reference signal (SRS)min_rxtxtime(default 2): minimum feedback time for UE to respond to transmissions (k1 and k2 in 3GPP spec)ul_prbblacklist: PRBs that should not be used for UL scheduling. Cf with parameterul_prbblack_SNR_thresholdthat does a similar thing based on measurementsforce_256qam_off(default 0=false): flag whether to disable 256QAM (limit to 64QAM) in DLforce_UL256qam_off(default 0=false): flag whether to disable 256QAM (limit to 64QAM) in DLdisable_harq(default 0=false): flag whether to disable HARQ completely (useful for NTN operation, see <../RUNMODEM.md>). this is a Rel-17 feature and you need to have a capable UE for thisuse_deltaMCS(default 0=false): flag whether to enable deltaMCS (this is not fully tested and might not work and you might need to adjust other parameters such as target SNRs)num_dlharq(default 16): number of HARQ processes to use in DL (other valid options are 2, 4, 6, 8, 10, 12, 32; 32 is a Rel-17 features)num_ulharq(default 16): asnum_dlharqfor UL (other valid option is 32; 32 is i Rel-17 feature)