Commit ad7e2ac3 authored by aligungr's avatar aligungr

Performance improvements

parent 5bef5620
...@@ -214,7 +214,7 @@ void UeCmdHandler::handleCmdImpl(NmUeCliCommand &msg) ...@@ -214,7 +214,7 @@ void UeCmdHandler::handleCmdImpl(NmUeCliCommand &msg)
} }
case app::UeCliCommand::RLS_STATE: { case app::UeCliCommand::RLS_STATE: {
Json json = Json::Obj({ Json json = Json::Obj({
{"sti", OctetString::FromOctet8(m_base->rlsTask->m_shCtx->sti).toHexString()}, {"sti", OctetString::FromOctet8(m_base->shCtx.sti).toHexString()},
{"gnb-search-space", ::ToJson(m_base->config->gnbSearchList)}, {"gnb-search-space", ::ToJson(m_base->config->gnbSearchList)},
}); });
sendResult(msg.address, json.dumpYaml()); sendResult(msg.address, json.dumpYaml());
......
...@@ -9,8 +9,8 @@ static constexpr const int MAX_PDU_TTL = 3000; ...@@ -9,8 +9,8 @@ static constexpr const int MAX_PDU_TTL = 3000;
namespace nr::ue namespace nr::ue
{ {
RlsCtlLayer::RlsCtlLayer(TaskBase *base, RlsSharedContext *shCtx) RlsCtlLayer::RlsCtlLayer(TaskBase *base)
: m_base{base}, m_shCtx{shCtx}, m_servingCell{}, m_pduMap{}, m_pendingAck{} : m_base{base}, m_servingCell{}, m_pduMap{}, m_pendingAck{}
{ {
m_logger = base->logBase->makeUniqueLogger(base->config->getLoggerPrefix() + "rls-ctl"); m_logger = base->logBase->makeUniqueLogger(base->config->getLoggerPrefix() + "rls-ctl");
} }
...@@ -95,7 +95,7 @@ void RlsCtlLayer::handleUplinkRrcDelivery(int cellId, uint32_t pduId, rrc::RrcCh ...@@ -95,7 +95,7 @@ void RlsCtlLayer::handleUplinkRrcDelivery(int cellId, uint32_t pduId, rrc::RrcCh
m_pduMap[pduId].sentTime = utils::CurrentTimeMillis(); m_pduMap[pduId].sentTime = utils::CurrentTimeMillis();
} }
rls::RlsPduTransmission msg{m_shCtx->sti}; rls::RlsPduTransmission msg{m_base->shCtx.sti};
msg.pduType = rls::EPduType::RRC; msg.pduType = rls::EPduType::RRC;
msg.pdu = std::move(data); msg.pdu = std::move(data);
msg.payload = static_cast<uint32_t>(channel); msg.payload = static_cast<uint32_t>(channel);
...@@ -106,7 +106,7 @@ void RlsCtlLayer::handleUplinkRrcDelivery(int cellId, uint32_t pduId, rrc::RrcCh ...@@ -106,7 +106,7 @@ void RlsCtlLayer::handleUplinkRrcDelivery(int cellId, uint32_t pduId, rrc::RrcCh
void RlsCtlLayer::handleUplinkDataDelivery(int psi, OctetString &&data) void RlsCtlLayer::handleUplinkDataDelivery(int psi, OctetString &&data)
{ {
rls::RlsPduTransmission msg{m_shCtx->sti}; rls::RlsPduTransmission msg{m_base->shCtx.sti};
msg.pduType = rls::EPduType::DATA; msg.pduType = rls::EPduType::DATA;
msg.pdu = std::move(data); msg.pdu = std::move(data);
msg.payload = static_cast<uint32_t>(psi); msg.payload = static_cast<uint32_t>(psi);
...@@ -149,7 +149,7 @@ void RlsCtlLayer::onAckSendTimerExpired() ...@@ -149,7 +149,7 @@ void RlsCtlLayer::onAckSendTimerExpired()
if (!item.second.empty()) if (!item.second.empty())
continue; continue;
rls::RlsPduTransmissionAck msg{m_shCtx->sti}; rls::RlsPduTransmissionAck msg{m_base->shCtx.sti};
msg.pduIds = std::move(item.second); msg.pduIds = std::move(item.second);
m_base->rlsTask->udp().send(item.first, msg); m_base->rlsTask->udp().send(item.first, msg);
......
...@@ -16,13 +16,12 @@ class RlsCtlLayer ...@@ -16,13 +16,12 @@ class RlsCtlLayer
private: private:
TaskBase *m_base; TaskBase *m_base;
std::unique_ptr<Logger> m_logger; std::unique_ptr<Logger> m_logger;
RlsSharedContext *m_shCtx;
int m_servingCell; int m_servingCell;
std::unordered_map<uint32_t, rls::PduInfo> m_pduMap; std::unordered_map<uint32_t, rls::PduInfo> m_pduMap;
std::unordered_map<int, std::vector<uint32_t>> m_pendingAck; std::unordered_map<int, std::vector<uint32_t>> m_pendingAck;
public: public:
explicit RlsCtlLayer(TaskBase *base, RlsSharedContext *shCtx); explicit RlsCtlLayer(TaskBase *base);
~RlsCtlLayer() = default; ~RlsCtlLayer() = default;
private: private:
......
...@@ -25,11 +25,10 @@ UeRlsTask::UeRlsTask(TaskBase *base) : m_base{base} ...@@ -25,11 +25,10 @@ UeRlsTask::UeRlsTask(TaskBase *base) : m_base{base}
{ {
m_logger = m_base->logBase->makeUniqueLogger(m_base->config->getLoggerPrefix() + "rls"); m_logger = m_base->logBase->makeUniqueLogger(m_base->config->getLoggerPrefix() + "rls");
m_shCtx = new RlsSharedContext(); base->shCtx.sti = Random::Mixed(base->config->getNodeName()).nextL();
m_shCtx->sti = Random::Mixed(base->config->getNodeName()).nextL();
m_udpLayer = std::make_unique<RlsUdpLayer>(base, m_shCtx); m_udpLayer = std::make_unique<RlsUdpLayer>(base);
m_ctlLayer = std::make_unique<RlsCtlLayer>(base, m_shCtx); m_ctlLayer = std::make_unique<RlsCtlLayer>(base);
} }
void UeRlsTask::onStart() void UeRlsTask::onStart()
...@@ -80,7 +79,7 @@ void UeRlsTask::onLoop() ...@@ -80,7 +79,7 @@ void UeRlsTask::onLoop()
break; break;
} }
case NmUeRrcToRls::RESET_STI: { case NmUeRrcToRls::RESET_STI: {
m_shCtx->sti = Random::Mixed(m_base->config->getNodeName()).nextL(); m_base->shCtx.sti = Random::Mixed(m_base->config->getNodeName()).nextL();
break; break;
} }
} }
...@@ -116,8 +115,6 @@ void UeRlsTask::onQuit() ...@@ -116,8 +115,6 @@ void UeRlsTask::onQuit()
{ {
m_udpLayer->onQuit(); m_udpLayer->onQuit();
m_ctlLayer->onQuit(); m_ctlLayer->onQuit();
delete m_shCtx;
} }
RlsCtlLayer &UeRlsTask::ctl() RlsCtlLayer &UeRlsTask::ctl()
......
...@@ -34,8 +34,6 @@ class UeRlsTask : public NtsTask ...@@ -34,8 +34,6 @@ class UeRlsTask : public NtsTask
TaskBase *m_base; TaskBase *m_base;
std::unique_ptr<Logger> m_logger; std::unique_ptr<Logger> m_logger;
RlsSharedContext* m_shCtx;
std::unique_ptr<RlsUdpLayer> m_udpLayer; std::unique_ptr<RlsUdpLayer> m_udpLayer;
std::unique_ptr<RlsCtlLayer> m_ctlLayer; std::unique_ptr<RlsCtlLayer> m_ctlLayer;
......
...@@ -15,9 +15,8 @@ static constexpr const int HEARTBEAT_THRESHOLD = 2000; // (LOOP_PERIOD + RECEIVE ...@@ -15,9 +15,8 @@ static constexpr const int HEARTBEAT_THRESHOLD = 2000; // (LOOP_PERIOD + RECEIVE
namespace nr::ue namespace nr::ue
{ {
RlsUdpLayer::RlsUdpLayer(TaskBase *base, RlsSharedContext *shCtx) RlsUdpLayer::RlsUdpLayer(TaskBase *base)
: m_base{base}, m_server{}, m_shCtx{shCtx}, m_searchSpace{}, m_cells{}, m_cellIdToSti{}, m_lastLoop{}, : m_base{base}, m_server{}, m_searchSpace{}, m_cells{}, m_cellIdToSti{}, m_lastLoop{}, m_cellIdCounter{}
m_cellIdCounter{}
{ {
m_logger = base->logBase->makeUniqueLogger(base->config->getLoggerPrefix() + "rls-udp"); m_logger = base->logBase->makeUniqueLogger(base->config->getLoggerPrefix() + "rls-udp");
...@@ -136,7 +135,7 @@ void RlsUdpLayer::heartbeatCycle(uint64_t time, const Vector3 &simPos) ...@@ -136,7 +135,7 @@ void RlsUdpLayer::heartbeatCycle(uint64_t time, const Vector3 &simPos)
for (auto &address : m_searchSpace) for (auto &address : m_searchSpace)
{ {
rls::RlsHeartBeat msg{m_shCtx->sti}; rls::RlsHeartBeat msg{m_base->shCtx.sti};
msg.simPos = simPos; msg.simPos = simPos;
sendRlsPdu(address, msg); sendRlsPdu(address, msg);
} }
......
...@@ -28,7 +28,6 @@ class RlsUdpLayer ...@@ -28,7 +28,6 @@ class RlsUdpLayer
TaskBase *m_base; TaskBase *m_base;
std::unique_ptr<Logger> m_logger; std::unique_ptr<Logger> m_logger;
std::unique_ptr<udp::UdpServerTask> m_server; std::unique_ptr<udp::UdpServerTask> m_server;
RlsSharedContext *m_shCtx;
std::vector<InetAddress> m_searchSpace; std::vector<InetAddress> m_searchSpace;
std::unordered_map<uint64_t, CellInfo> m_cells; std::unordered_map<uint64_t, CellInfo> m_cells;
std::unordered_map<int, uint64_t> m_cellIdToSti; std::unordered_map<int, uint64_t> m_cellIdToSti;
...@@ -39,7 +38,7 @@ class RlsUdpLayer ...@@ -39,7 +38,7 @@ class RlsUdpLayer
friend class UeCmdHandler; friend class UeCmdHandler;
public: public:
explicit RlsUdpLayer(TaskBase *base, RlsSharedContext *shCtx); explicit RlsUdpLayer(TaskBase *base);
~RlsUdpLayer() = default; ~RlsUdpLayer() = default;
private: private:
......
...@@ -180,16 +180,13 @@ struct UeSharedContext ...@@ -180,16 +180,13 @@ struct UeSharedContext
Locked<std::optional<GutiMobileIdentity>> providedGuti; Locked<std::optional<GutiMobileIdentity>> providedGuti;
Locked<std::optional<GutiMobileIdentity>> providedTmsi; Locked<std::optional<GutiMobileIdentity>> providedTmsi;
std::atomic<uint64_t> sti{};
Plmn getCurrentPlmn(); Plmn getCurrentPlmn();
Tai getCurrentTai(); Tai getCurrentTai();
bool hasActiveCell(); bool hasActiveCell();
}; };
struct RlsSharedContext
{
std::atomic<uint64_t> sti{};
};
struct TaskBase struct TaskBase
{ {
UserEquipment *ue{}; UserEquipment *ue{};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment