From 9241d89dc1ae4df37016fbae3037bf099fba319f Mon Sep 17 00:00:00 2001 From: Marco Miozzo Date: Thu, 13 Sep 2012 17:10:01 +0200 Subject: [PATCH] Reorder RLC PDU list generation in DoSchedDlTriggerReq for both RR and PF schedulers for having them organized per LC and layer basis --- src/lte/model/pf-ff-mac-scheduler.cc | 5 ++--- src/lte/model/rr-ff-mac-scheduler.cc | 27 ++++++++++----------------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/lte/model/pf-ff-mac-scheduler.cc b/src/lte/model/pf-ff-mac-scheduler.cc index d1c37388e..35e861449 100644 --- a/src/lte/model/pf-ff-mac-scheduler.cc +++ b/src/lte/model/pf-ff-mac-scheduler.cc @@ -564,7 +564,6 @@ PfFfMacScheduler::DoSchedDlTriggerReq (const struct FfMacSchedSapProvider::Sched newEl.m_rnti = (*itMap).first; // create the DlDciListElement_s DlDciListElement_s newDci; - std::vector 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 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 ::iterator it; it = m_flowStatsDl.find ((*itMap).first); diff --git a/src/lte/model/rr-ff-mac-scheduler.cc b/src/lte/model/rr-ff-mac-scheduler.cc index 5a6402cfd..ab3fbe274 100644 --- a/src/lte/model/rr-ff-mac-scheduler.cc +++ b/src/lte/model/rr-ff-mac-scheduler.cc @@ -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 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 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) {