Reorder RLC PDU list generation in DoSchedDlTriggerReq for both RR and PF schedulers for having them organized per LC and layer basis

This commit is contained in:
Marco Miozzo
2012-09-13 17:10:01 +02:00
parent 44d63447e8
commit 9241d89dc1
2 changed files with 12 additions and 20 deletions

View File

@@ -564,7 +564,6 @@ PfFfMacScheduler::DoSchedDlTriggerReq (const struct FfMacSchedSapProvider::Sched
newEl.m_rnti = (*itMap).first;
// create the DlDciListElement_s
DlDciListElement_s newDci;
std::vector <struct RlcPduListElement_s> newRlcPduLe;
newDci.m_rnti = (*itMap).first;
uint16_t lcActives = LcActivePerFlow ((*itMap).first);
@@ -649,6 +648,7 @@ PfFfMacScheduler::DoSchedDlTriggerReq (const struct FfMacSchedSapProvider::Sched
|| ((*itBufReq).second.m_rlcRetransmissionQueueSize > 0)
|| ((*itBufReq).second.m_rlcStatusPduSize > 0) ))
{
std::vector <struct RlcPduListElement_s> newRlcPduLe;
for (uint8_t j = 0; j < nLayer; j++)
{
RlcPduListElement_s newRlcEl;
@@ -658,6 +658,7 @@ PfFfMacScheduler::DoSchedDlTriggerReq (const struct FfMacSchedSapProvider::Sched
newRlcPduLe.push_back (newRlcEl);
UpdateDlRlcBufferInfo (newDci.m_rnti, newRlcEl.m_logicalChannelIdentity, newRlcEl.m_size);
}
newEl.m_rlcPduList.push_back (newRlcPduLe);
}
if ((*itBufReq).first.m_rnti > (*itMap).first)
{
@@ -670,9 +671,7 @@ PfFfMacScheduler::DoSchedDlTriggerReq (const struct FfMacSchedSapProvider::Sched
newEl.m_dci = newDci;
// ...more parameters -> ingored in this version
newEl.m_rlcPduList.push_back (newRlcPduLe);
ret.m_buildDataList.push_back (newEl);
// update UE stats
std::map <uint16_t, pfsFlowPerf_t>::iterator it;
it = m_flowStatsDl.find ((*itMap).first);

View File

@@ -470,9 +470,8 @@ RrFfMacScheduler::DoSchedDlTriggerReq (const struct FfMacSchedSapProvider::Sched
int rbgAllocated = 0;
FfMacSchedSapUser::SchedDlConfigIndParameters ret;
// round robin assignment to all UE-LC registered starting from the subsequent of the one
// served last scheduling trigger
//NS_LOG_DEBUG (this << " next to be served " << m_nextRntiDl << " nflows " << nflows);
// round robin assignment to all UEs registered starting from the subsequent of the one
// served last scheduling trigger event
if (m_nextRntiDl != 0)
{
for (it = m_rlcBufferReq.begin (); it != m_rlcBufferReq.end (); it++)
@@ -535,15 +534,12 @@ RrFfMacScheduler::DoSchedDlTriggerReq (const struct FfMacSchedSapProvider::Sched
newDci.m_mcs.push_back ( m_amc->GetMcsFromCqi ((*itCqi).second) );
}
}
// group the LCs of this RNTI
std::vector <struct RlcPduListElement_s> newRlcPduLe;
// int totRbg = lcNum * rbgPerFlow;
// totRbg = rbgNum / nTbs;
int tbSize = (m_amc->GetTbSizeFromMcs (newDci.m_mcs.at (0), rbgPerTb * rbgSize) / 8);
NS_LOG_DEBUG (this << " DL - Allocate user " << newEl.m_rnti << " LCs " << (uint16_t)(*itLcRnti).second << " bytes " << tbSize << " PRBs " << rbgAllocated * rbgSize << "..." << (rbgAllocated* rbgSize) + (rbgPerTb * rbgSize) - 1 << " mcs " << (uint16_t) newDci.m_mcs.at (0) << " layers " << nLayer);
uint16_t rlcPduSize = tbSize / lcNum;
for (int i = 0; i < lcNum ; i++)
{
std::vector <struct RlcPduListElement_s> newRlcPduLe;
for (uint8_t j = 0; j < nLayer; j++)
{
RlcPduListElement_s newRlcEl;
@@ -553,12 +549,13 @@ RrFfMacScheduler::DoSchedDlTriggerReq (const struct FfMacSchedSapProvider::Sched
UpdateDlRlcBufferInfo ((*it).m_rnti, newRlcEl.m_logicalChannelIdentity, rlcPduSize);
newRlcPduLe.push_back (newRlcEl);
}
it++;
if (it == m_rlcBufferReq.end ())
{
// restart from the first
it = m_rlcBufferReq.begin ();
}
newEl.m_rlcPduList.push_back (newRlcPduLe);
it++;
if (it == m_rlcBufferReq.end ())
{
// restart from the first
it = m_rlcBufferReq.begin ();
}
}
uint32_t rbgMask = 0;
for (int i = 0; i < rbgPerTb; i++)
@@ -577,10 +574,6 @@ RrFfMacScheduler::DoSchedDlTriggerReq (const struct FfMacSchedSapProvider::Sched
newEl.m_dci = newDci;
// ...more parameters -> ignored in this version
newEl.m_rlcPduList.push_back (newRlcPduLe);
ret.m_buildDataList.push_back (newEl);
if (rbgAllocated == rbgNum)
{