![]() |
5G-LENA nr-v3.3-159-ga6832aa7
The 5G/NR module for the ns-3 simulator
|
UE representation for a QoS-based scheduler. More...
#include "nr-mac-scheduler-ue-info-qos.h"
Public Member Functions | |
NrMacSchedulerUeInfoQos (float alpha, uint16_t rnti, BeamId beamId, const GetRbPerRbgFn &fn) | |
NrMacSchedulerUeInfoQos constructor. | |
void | CalculatePotentialTPutDl (const NrMacSchedulerNs3::FTResources &assignableInIteration) |
Calculate the Potential throughput for downlink. | |
void | CalculatePotentialTPutUl (const NrMacSchedulerNs3::FTResources &assignableInIteration) |
Calculate the Potential throughput for uplink. | |
void | ResetDlMetric () override |
Reset the DL avg Th to the last value. | |
void | ResetDlSchedInfo () override |
Reset DL QoS scheduler info. | |
void | ResetUlMetric () override |
Reset the UL avg Th to the last value. | |
void | ResetUlSchedInfo () override |
Reset UL QoS scheduler info. | |
void | UpdateDlQosMetric (const NrMacSchedulerNs3::FTResources &totAssigned, double timeWindow) |
Update the QoS metric for downlink. | |
void | UpdateUlQosMetric (const NrMacSchedulerNs3::FTResources &totAssigned, double timeWindow) |
Update the QoS metric for uplink. | |
![]() | |
NrMacSchedulerUeInfo ()=delete | |
Default Constructor (deleted) | |
NrMacSchedulerUeInfo (uint16_t rnti, BeamId beamId, const GetRbPerRbgFn &fn) | |
Create a new UE representation. | |
virtual | ~NrMacSchedulerUeInfo () |
~NrMacSchedulerUeInfo deconstructor | |
uint8_t | GetDlMcs () const |
Get the downlink MCS, given by the wideband CQI, or the sub-band CQIs of the currently allocated RBGs, if available. | |
uint32_t | GetTotalDlBuffer () const |
void | ReleaseLC (uint8_t lcid) |
virtual void | UpdateDlMetric () |
Update DL metrics after resources have been assigned. | |
virtual void | UpdateUlMetric () |
Update UL metrics after resources have been assigned. | |
Static Public Member Functions | |
static double | CalculateDelayBudgetFactor (uint64_t pdb, uint16_t hol) |
This function calculates the Delay Budget Factor for the case of DC-GBR LC. This value will then be used for the calculation of the QoS metric (weight). Notice that in order to avoid the case that a packet has not been dropped when HOL >= PDB, even though it is in this state (currently our code does not implement packet drop by default), we give very high priority to this packet. We do this by considering a very small value for the denominator (i.e. (PDB - HOL) = 0.1). | |
static uint8_t | CalculateDlMinPriority (const NrMacSchedulerNs3::UePtrAndBufferReq &ue) |
This function calculates the min Priority for the DL. | |
static double | CalculateDlWeight (const NrMacSchedulerNs3::UePtrAndBufferReq &ue) |
comparison function object (i.e. an object that satisfies the requirements of Compare) which returns true if the first argument is less than (i.e. is ordered before) the second. | |
static uint8_t | CalculateUlMinPriority (const NrMacSchedulerNs3::UePtrAndBufferReq &ue) |
This function calculates the min Priority for the UL. | |
static bool | CompareUeWeightsDl (const NrMacSchedulerNs3::UePtrAndBufferReq &lue, const NrMacSchedulerNs3::UePtrAndBufferReq &rue) |
comparison function object (i.e. an object that satisfies the requirements of Compare) which returns true if the first argument is less than (i.e. is ordered before) the second. | |
static bool | CompareUeWeightsUl (const NrMacSchedulerNs3::UePtrAndBufferReq &lue, const NrMacSchedulerNs3::UePtrAndBufferReq &rue) |
comparison function object (i.e. an object that satisfies the requirements of Compare) which returns true if the first argument is less than (i.e. is ordered before) the second. | |
![]() | |
static NrMacHarqVector & | GetDlHarqVector (const UePtr &ue) |
GetDlHarqVector. | |
static std::unordered_map< uint8_t, LCGPtr > & | GetDlLCG (const UePtr &ue) |
GetDlLCG. | |
static uint8_t & | GetDlMcs (const UePtr &ue) |
GetDlMcs. | |
static std::vector< uint16_t > & | GetDlRBG (const UePtr &ue) |
GetDlRBG. | |
static std::vector< uint8_t > & | GetDlSym (const UePtr &ue) |
GetDlSym. | |
static uint32_t & | GetDlTBS (const UePtr &ue) |
GetDlTBS. | |
static NrMacHarqVector & | GetUlHarqVector (const UePtr &ue) |
GetUlHarqVector. | |
static std::unordered_map< uint8_t, LCGPtr > & | GetUlLCG (const UePtr &ue) |
GetUlLCG. | |
static uint8_t & | GetUlMcs (const UePtr &ue) |
GetUlMcs. | |
static std::vector< uint16_t > & | GetUlRBG (const UePtr &ue) |
GetUlRBG. | |
static std::vector< uint8_t > & | GetUlSym (const UePtr &ue) |
GetUlSym. | |
static uint32_t & | GetUlTBS (const UePtr &ue) |
GetUlTBS. | |
static void | PrintLcInfo (uint16_t ue, uint8_t lcgId, uint8_t lcId, uint8_t cqi, uint8_t P, uint8_t minP) |
Prints information related to the QCI of a UEs LC. | |
Public Attributes | |
float | m_alpha {0.0} |
PF fairness metric. | |
double | m_avgTputDl {0.0} |
Average throughput in downlink during all the slots. | |
double | m_avgTputUl {0.0} |
Average throughput in uplink during all the slots. | |
double | m_currTputDl {0.0} |
Current slot throughput in downlink. | |
double | m_currTputUl {0.0} |
Current slot throughput in uplink. | |
double | m_lastAvgTputDl {0.0} |
Last average throughput in downlink. | |
double | m_lastAvgTputUl {0.0} |
Last average throughput in uplink. | |
double | m_potentialTputDl {0.0} |
double | m_potentialTputUl {0.0} |
![]() | |
BeamId | m_beamId |
Beam ID of the UE (kept updated as much as possible by MAC) | |
Ptr< NrAmc > | m_dlAmc |
AMC instance of scheduler associated with DL. | |
CqiInfo | m_dlCqi |
DL CQI information. | |
NrMacHarqVector | m_dlHarq |
HARQ process vector for DL. | |
std::unordered_map< uint8_t, LCGPtr > | m_dlLCG |
DL LCG. | |
uint8_t | m_dlMcs {0} |
DL MCS. | |
uint32_t | m_dlMRBRetx {0} |
Ptr< const ComplexMatrixArray > | m_dlPrecMats {nullptr} |
DL Precoding matrices. | |
uint8_t | m_dlRank {1} |
DL rank (number of MIMO layers) | |
std::vector< uint16_t > | m_dlRBG |
DL Resource Block Group assigned in this slot. | |
std::vector< SbMcsInfo > | m_dlSbMcsInfo |
std::vector< uint8_t > | m_dlSym |
Corresponding symbol of m_dlRBG in this slot. | |
uint32_t | m_dlTbSize {0} |
std::optional< uint8_t > | m_fhMaxMcsAssignable |
Maximum DL MCS assignable due to FH limitations. | |
McsCsiSource | m_mcsCsiSource |
Source of MCS computation based on CSI feedback. | |
std::vector< uint8_t > | m_rbgToSb |
Precomputed RBG to SB mapping. | |
uint16_t | m_rnti {0} |
RNTI of the UE. | |
uint32_t | m_srsOffset {0} |
SRS offset. | |
uint32_t | m_srsPeriodicity {0} |
SRS periodicity. | |
uint8_t | m_startMcsDlUe {0} |
Starting DL MCS to be used. | |
Ptr< NrAmc > | m_ulAmc |
AMC instance of scheduler associated with UL. | |
CqiInfo | m_ulCqi |
UL CQI information. | |
NrMacHarqVector | m_ulHarq |
HARQ process vector for UL. | |
std::unordered_map< uint8_t, LCGPtr > | m_ulLCG |
UL LCG. | |
uint8_t | m_ulMcs {0} |
UL MCS. | |
uint32_t | m_ulMRBRetx {0} |
Ptr< const ComplexMatrixArray > | m_ulPrecMats {nullptr} |
UL Precoding matrices. | |
uint8_t | m_ulRank {1} |
UL rank (number of MIMO layers) | |
std::vector< uint16_t > | m_ulRBG |
UL Resource Block Group assigned in this slot. | |
std::vector< uint8_t > | m_ulSym |
Corresponding symbol of m_ulRBG in this slot. | |
uint32_t | m_ulTbSize {0} |
Additional Inherited Members | |
![]() | |
typedef std::function< NrMacHarqVector &(const UePtr &ue)> | GetHarqVectorFn |
typedef std::function< std::unordered_map< uint8_t, LCGPtr > &(const UePtr &ue)> | GetLCGFn |
typedef std::function< uint32_t()> | GetRbPerRbgFn |
enum class | McsCsiSource { AVG_MCS , AVG_SPEC_EFF , AVG_SINR , WIDEBAND_MCS } |
![]() | |
uint32_t | GetNumRbPerRbg () const |
Retrieve the number of RB per RBG. | |
UE representation for a QoS-based scheduler.
The representation stores the current throughput, the average throughput, and the last average throughput, as well as providing comparison functions to sort the UEs in case of a QoS scheduler, according to its QCI and priority.
Definition at line 22 of file nr-mac-scheduler-ue-info-qos.h.
|
inline |
NrMacSchedulerUeInfoQos constructor.
rnti | RNTI of the UE |
beamId | BeamId of the UE |
fn | A function that tells how many RB per RBG |
Definition at line 31 of file nr-mac-scheduler-ue-info-qos.h.
|
inlinestatic |
This function calculates the Delay Budget Factor for the case of DC-GBR LC. This value will then be used for the calculation of the QoS metric (weight). Notice that in order to avoid the case that a packet has not been dropped when HOL >= PDB, even though it is in this state (currently our code does not implement packet drop by default), we give very high priority to this packet. We do this by considering a very small value for the denominator (i.e. (PDB - HOL) = 0.1).
pdb | The Packet Delay Budget associated to the QCI |
hol | The HeadOfLine Delay of the transmission queue |
Definition at line 198 of file nr-mac-scheduler-ue-info-qos.h.
Referenced by CalculateDlWeight().
|
inlinestatic |
This function calculates the min Priority for the DL.
lue | Left UE |
rue | Right UE |
The ordering is made by considering the minimum Priority among all the Priorities of all the LCs set for this UE. A UE that has a Priority = 5 will always be the first (i.e., has a higher priority) in a QoS scheduler.
Definition at line 252 of file nr-mac-scheduler-ue-info-qos.h.
|
inlinestatic |
comparison function object (i.e. an object that satisfies the requirements of Compare) which returns true if the first argument is less than (i.e. is ordered before) the second.
lue | Left UE ![]() |
Alpha is a fairness metric. P is the priority associated to the QCI. Please note that the throughput is calculated in bit/symbol.
Definition at line 156 of file nr-mac-scheduler-ue-info-qos.h.
References CalculateDelayBudgetFactor().
Referenced by CompareUeWeightsDl().
void ns3::NrMacSchedulerUeInfoQos::CalculatePotentialTPutDl | ( | const NrMacSchedulerNs3::FTResources & | assignableInIteration | ) |
Calculate the Potential throughput for downlink.
assignableInIteration | resources assignable |
Definition at line 54 of file nr-mac-scheduler-ue-info-qos.cc.
References ns3::NrMacSchedulerUeInfo::GetNumRbPerRbg(), m_avgTputDl, ns3::NrMacSchedulerUeInfo::m_dlAmc, ns3::NrMacSchedulerUeInfo::m_dlMcs, ns3::NrMacSchedulerUeInfo::m_dlRank, m_lastAvgTputDl, m_potentialTputDl, ns3::NrMacSchedulerNs3::PointInFTPlane::m_rbg, ns3::NrMacSchedulerUeInfo::m_rnti, and ns3::NrMacSchedulerNs3::PointInFTPlane::m_sym.
void ns3::NrMacSchedulerUeInfoQos::CalculatePotentialTPutUl | ( | const NrMacSchedulerNs3::FTResources & | assignableInIteration | ) |
Calculate the Potential throughput for uplink.
assignableInIteration | resources assignable |
Definition at line 72 of file nr-mac-scheduler-ue-info-qos.cc.
References ns3::NrMacSchedulerUeInfo::GetNumRbPerRbg(), m_avgTputUl, m_lastAvgTputUl, m_potentialTputUl, ns3::NrMacSchedulerNs3::PointInFTPlane::m_rbg, ns3::NrMacSchedulerUeInfo::m_rnti, ns3::NrMacSchedulerNs3::PointInFTPlane::m_sym, ns3::NrMacSchedulerUeInfo::m_ulAmc, ns3::NrMacSchedulerUeInfo::m_ulMcs, and ns3::NrMacSchedulerUeInfo::m_ulRank.
|
inlinestatic |
This function calculates the min Priority for the UL.
lue | Left UE |
rue | Right UE |
The ordering is made by considering the minimum Priority among all the Priorities of all the LCs set for this UE. A UE that has a Priority = 5 will always be the first (i.e., has a higher priority) in a QoS scheduler.
Definition at line 291 of file nr-mac-scheduler-ue-info-qos.h.
Referenced by CompareUeWeightsUl().
|
inlinestatic |
comparison function object (i.e. an object that satisfies the requirements of Compare) which returns true if the first argument is less than (i.e. is ordered before) the second.
lue | Left UE |
rue | Right UE |
The QoS metric is calculated in CalculateDlWeight()
Definition at line 133 of file nr-mac-scheduler-ue-info-qos.h.
References CalculateDlWeight().
Referenced by ns3::NrMacSchedulerOfdmaAi::GetUeCompareDlFn(), ns3::NrMacSchedulerOfdmaQos::GetUeCompareDlFn(), ns3::NrMacSchedulerTdmaAi::GetUeCompareDlFn(), and ns3::NrMacSchedulerTdmaQos::GetUeCompareDlFn().
|
inlinestatic |
comparison function object (i.e. an object that satisfies the requirements of Compare) which returns true if the first argument is less than (i.e. is ordered before) the second.
lue | Left UE |
rue | Right UE |
The QoS metric is calculated as following:
Alpha is a fairness metric. P is the priority associated to the QCI. Please note that the throughput is calculated in bit/symbol.
Definition at line 222 of file nr-mac-scheduler-ue-info-qos.h.
References CalculateUlMinPriority().
Referenced by ns3::NrMacSchedulerOfdmaAi::GetUeCompareUlFn(), ns3::NrMacSchedulerOfdmaQos::GetUeCompareUlFn(), ns3::NrMacSchedulerTdmaAi::GetUeCompareUlFn(), and ns3::NrMacSchedulerTdmaQos::GetUeCompareUlFn().
|
inlineoverridevirtual |
Reset the DL avg Th to the last value.
Reimplemented from ns3::NrMacSchedulerUeInfo.
Definition at line 74 of file nr-mac-scheduler-ue-info-qos.h.
References m_avgTputDl, m_lastAvgTputDl, and ns3::NrMacSchedulerUeInfo::ResetDlMetric().
|
inlineoverridevirtual |
Reset DL QoS scheduler info.
Set the last average throughput to the current average throughput, and zeroes the average throughput as well as the current throughput.
It calls also NrMacSchedulerUeInfoQos::ResetDlSchedInfo.
Reimplemented from ns3::NrMacSchedulerUeInfo.
Definition at line 45 of file nr-mac-scheduler-ue-info-qos.h.
References m_avgTputDl, m_currTputDl, m_lastAvgTputDl, m_potentialTputDl, and ns3::NrMacSchedulerUeInfo::ResetDlSchedInfo().
Referenced by ns3::NrMacSchedulerUeInfoAi::ResetDlSchedInfo().
|
inlineoverridevirtual |
Reset the UL avg Th to the last value.
Reimplemented from ns3::NrMacSchedulerUeInfo.
Definition at line 83 of file nr-mac-scheduler-ue-info-qos.h.
References m_avgTputUl, m_lastAvgTputUl, and ns3::NrMacSchedulerUeInfo::ResetUlMetric().
|
inlineoverridevirtual |
Reset UL QoS scheduler info.
Set the last average throughput to the current average throughput, and zeroes the average throughput as well as the current throughput.
It also calls NrMacSchedulerUeInfoQos::ResetUlSchedInfo.
Reimplemented from ns3::NrMacSchedulerUeInfo.
Definition at line 62 of file nr-mac-scheduler-ue-info-qos.h.
References m_avgTputUl, m_currTputUl, m_lastAvgTputUl, m_potentialTputUl, and ns3::NrMacSchedulerUeInfo::ResetUlSchedInfo().
Referenced by ns3::NrMacSchedulerUeInfoAi::ResetUlSchedInfo().
void ns3::NrMacSchedulerUeInfoQos::UpdateDlQosMetric | ( | const NrMacSchedulerNs3::FTResources & | totAssigned, |
double | timeWindow | ||
) |
Update the QoS metric for downlink.
totAssigned | the resources assigned |
timeWindow | the time window |
Updates m_currTputDl and m_avgTputDl by keeping in consideration the assigned resources (in form of TBS) and the time window. It gets the tbSize by calling NrMacSchedulerUeInfo::UpdateDlMetric.
Definition at line 15 of file nr-mac-scheduler-ue-info-qos.cc.
References m_avgTputDl, m_currTputDl, ns3::NrMacSchedulerUeInfo::m_dlTbSize, m_lastAvgTputDl, m_potentialTputDl, ns3::NrMacSchedulerUeInfo::m_rnti, ns3::NrMacSchedulerNs3::PointInFTPlane::m_sym, and ns3::NrMacSchedulerUeInfo::UpdateDlMetric().
void ns3::NrMacSchedulerUeInfoQos::UpdateUlQosMetric | ( | const NrMacSchedulerNs3::FTResources & | totAssigned, |
double | timeWindow | ||
) |
Update the QoS metric for uplink.
totAssigned | the resources assigned |
timeWindow | the time window |
Updates m_currTputUl and m_avgTputUl by keeping in consideration the assigned resources (in form of TBS) and the time window. It gets the tbSize by calling NrMacSchedulerUeInfo::UpdateUlMetric.
Definition at line 34 of file nr-mac-scheduler-ue-info-qos.cc.
References m_avgTputUl, m_currTputUl, m_lastAvgTputUl, m_potentialTputUl, ns3::NrMacSchedulerUeInfo::m_rnti, ns3::NrMacSchedulerNs3::PointInFTPlane::m_sym, ns3::NrMacSchedulerUeInfo::m_ulTbSize, and ns3::NrMacSchedulerUeInfo::UpdateUlMetric().
float ns3::NrMacSchedulerUeInfoQos::m_alpha {0.0} |
PF fairness metric.
Definition at line 324 of file nr-mac-scheduler-ue-info-qos.h.
Referenced by ns3::NrMacSchedulerUeInfoAi::GetDlReward(), and ns3::NrMacSchedulerUeInfoAi::GetUlReward().
double ns3::NrMacSchedulerUeInfoQos::m_avgTputDl {0.0} |
Average throughput in downlink during all the slots.
Definition at line 320 of file nr-mac-scheduler-ue-info-qos.h.
Referenced by CalculatePotentialTPutDl(), ns3::NrMacSchedulerUeInfoAi::GetDlReward(), ResetDlMetric(), ResetDlSchedInfo(), and UpdateDlQosMetric().
double ns3::NrMacSchedulerUeInfoQos::m_avgTputUl {0.0} |
Average throughput in uplink during all the slots.
Definition at line 327 of file nr-mac-scheduler-ue-info-qos.h.
Referenced by CalculatePotentialTPutUl(), ns3::NrMacSchedulerUeInfoAi::GetUlReward(), ResetUlMetric(), ResetUlSchedInfo(), and UpdateUlQosMetric().
double ns3::NrMacSchedulerUeInfoQos::m_currTputDl {0.0} |
Current slot throughput in downlink.
Definition at line 319 of file nr-mac-scheduler-ue-info-qos.h.
Referenced by ResetDlSchedInfo(), and UpdateDlQosMetric().
double ns3::NrMacSchedulerUeInfoQos::m_currTputUl {0.0} |
Current slot throughput in uplink.
Definition at line 326 of file nr-mac-scheduler-ue-info-qos.h.
Referenced by ResetUlSchedInfo(), and UpdateUlQosMetric().
double ns3::NrMacSchedulerUeInfoQos::m_lastAvgTputDl {0.0} |
Last average throughput in downlink.
Definition at line 321 of file nr-mac-scheduler-ue-info-qos.h.
Referenced by CalculatePotentialTPutDl(), ResetDlMetric(), ResetDlSchedInfo(), and UpdateDlQosMetric().
double ns3::NrMacSchedulerUeInfoQos::m_lastAvgTputUl {0.0} |
Last average throughput in uplink.
Definition at line 328 of file nr-mac-scheduler-ue-info-qos.h.
Referenced by CalculatePotentialTPutUl(), ResetUlMetric(), ResetUlSchedInfo(), and UpdateUlQosMetric().
double ns3::NrMacSchedulerUeInfoQos::m_potentialTputDl {0.0} |
Potential throughput in downlink in one assignable resource (can be a symbol or a RBG)
Definition at line 322 of file nr-mac-scheduler-ue-info-qos.h.
Referenced by CalculatePotentialTPutDl(), ns3::NrMacSchedulerUeInfoAi::GetDlReward(), ResetDlSchedInfo(), and UpdateDlQosMetric().
double ns3::NrMacSchedulerUeInfoQos::m_potentialTputUl {0.0} |
Potential throughput in uplink in one assignable resource (can be a symbol or a RBG)
Definition at line 329 of file nr-mac-scheduler-ue-info-qos.h.
Referenced by CalculatePotentialTPutUl(), ns3::NrMacSchedulerUeInfoAi::GetUlReward(), ResetUlSchedInfo(), and UpdateUlQosMetric().