Selects the UE with the highest CQI. If two UEs have the same CQI,
choses the one with highest number of bytes in RLC queue. Allocates as
many RBGs as possible, and potentially continues with the next UE.
Selects UE with highest coefficient. Allocates until there are no more
RBGs to allocate, or UE has no more data. In the latter case, continues
with the next UE (second-highest coefficient).
- Loop only to next UE instead of jumping multiple
- mark used RBGs in rbg_mask
- Only calculate number of RBs based on CQI when UE is selected, instead
of calculating for all UEs which might be unnecessary.
- When looping the list of UEs for RB allocation, remove UEs that have
no data anymore instead of skipping them.
The preprocessor pre-allocates a CCE. Thus, when arriving at the check
for the number of RBs for retransmission, it is too late to skip the UE.
Therefore, only print a warning.
The default schedulers allocate a correct amount of RBs for
retransmissions, therefore it is ok.
The test seemingly ensures that this code block is hit only once.
However, if we enable later activation of MMEs, it will be hit a second
(and third, ...) time. The only thing in guards against, though, is an
INIT message to the L1L2 thread, when register_enb_pending == 0, which
should only be sent once. Therefore, functionality won't be changed if
register_enb_pending becomes negative, and the assert can be removed.
Selects the UE with the highest CQI. If two UEs have the same CQI,
choses the one with highest number of bytes in RLC queue. Allocates as
many RBGs as possible, and potentially continues with the next UE.
Selects UE with highest coefficient. Allocates until there are no more
RBGs to allocate, or UE has no more data. In the latter case, continues
with the next UE (second-highest coefficient).
- Loop only to next UE instead of jumping multiple
- mark used RBGs in rbg_mask
- Only calculate number of RBs based on CQI when UE is selected, instead
of calculating for all UEs which might be unnecessary.
- When looping the list of UEs for RB allocation, remove UEs that have
no data anymore instead of skipping them.
The preprocessor pre-allocates a CCE. Thus, when arriving at the check
for the number of RBs for retransmission, it is too late to skip the UE.
Therefore, only print a warning.
The default schedulers allocate a correct amount of RBs for
retransmissions, therefore it is ok.
The test seemingly ensures that this code block is hit only once.
However, if we enable later activation of MMEs, it will be hit a second
(and third, ...) time. The only thing in guards against, though, is an
INIT message to the L1L2 thread, when register_enb_pending == 0, which
should only be sent once. Therefore, functionality won't be changed if
register_enb_pending becomes negative, and the assert can be removed.
Instead of looping over UEs and all DL config Req/HI DCI0, loop first
over all DL config Req/HI DCI0, and for each, match UE. Lowers CPU
traffic for high traffic situations.
This refactors the preprocessor. The new preprocessor implements the
same scheduling strategy (Modified Round-Robin: give resources according
to round-robin, then group) but should be fairer by changing every time
the RR start UE (i.e., 1st TTI UE 0 starts, 2nd TTI UE 1, etc) when the
UE number is not a divisor/multiple of the RBG size (and the last RBG is
often smaller). This also removes all unneeded code of the preprocessor
such as allocate(), positioning(), etc.
* do not check rlc_ind()
* Simplify retransmission part and remove nb_rb_available var
* Simplify new transmission code
* Simplify fill_DLSCH_dci(), avoid unnecessary copies
* fix: first check No. RBs, then check CCE alloc
Previously, the various rlc_*_ind() functions had a parameter to enable
the MAC to specify the max TB size that a subsequent call to the
corresponding rlc_*_req() (!) function would return. This patch removes
this parameter from the rlc_*_ind() functions and makes the parameter
working that is already in the rlc_*_req() functions.
store_dlsch_buffer() puts the RLC buffer status results in the
UE_TEMPLATE, which is per-CC. Since the DLSCH scheduler works per-CC,
too, we pass the right CC. However, this is not strictly necessary, as
we could do this once before every CC, and it might be updated.
UE_list_t is now used as a separate list. It can be e.g. used in the
scheduler to mark groups of users. The original UE_list_t is renamed to
UE_info_t to reflect that it is a container for information about UEs.
* Simplify store_dlsch_buffer()
* Simplify assign_rbs_required()
* Simplify dlsch_scheduler_pre_processor_partitioning()
* Simplify dlsch_scheduler_pre_processor_accounting() and dlsch_scheduler_pre_processor_accounting_allocate()
* Simplify allocation printing
The original functions used in the fairRR scheduler have been moved to
eNB_scheduler_fairRR
* Remove MIMO_mode_indicator: it is simply not used ATM
* Remove min_rb_unit as parameter: function auto-detects
* Remove commented code
* Remove slice sharing/multiplexing: it is broken
* Remove UE sorting, add UE with add_new_ue() in MAC
- UE sorting is useless overhead on every iteration, instead it should
be governed by a scheduling algorithm (e.g., RR or PF)
- The MAC keeps a UE list and automatically adds a UE
- UE_list empty, set head to -1
* Remove slice_positioning: the slicing functionality is broken
* Remove unused/untested code