Remove two mallocs in the stack:

1) Extend the small buffer to 64bytes for the move_callback class.
2) Replace a std::map for a fixed size circular map in sched_time_pf.
master
faluco 4 years ago committed by faluco
parent e3b77fd82a
commit 7df308c756

@ -183,7 +183,7 @@ template <typename R, typename... Args, size_t Capacity, bool ForbidAlloc>
constexpr task_details::empty_table_t<R, Args...> move_callback<R(Args...), Capacity, ForbidAlloc>::empty_table; constexpr task_details::empty_table_t<R, Args...> move_callback<R(Args...), Capacity, ForbidAlloc>::empty_table;
//! Generic move task //! Generic move task
using move_task_t = move_callback<void()>; using move_task_t = move_callback<void(), 64>;
} // namespace srsran } // namespace srsran

@ -14,6 +14,8 @@
#define SRSRAN_SCHED_TIME_PF_H #define SRSRAN_SCHED_TIME_PF_H
#include "sched_base.h" #include "sched_base.h"
#include "srsenb/hdr/common/common_enb.h"
#include "srsran/adt/circular_map.h"
#include <queue> #include <queue>
namespace srsenb { namespace srsenb {
@ -61,7 +63,9 @@ private:
uint32_t dl_nof_samples = 0; uint32_t dl_nof_samples = 0;
uint32_t ul_nof_samples = 0; uint32_t ul_nof_samples = 0;
}; };
std::map<uint16_t, ue_ctxt> ue_history_db;
srsran::static_circular_map<uint16_t, ue_ctxt, SRSENB_MAX_UES> ue_history_db;
struct ue_dl_prio_compare { struct ue_dl_prio_compare {
bool operator()(const ue_ctxt* lhs, const ue_ctxt* rhs) const; bool operator()(const ue_ctxt* lhs, const ue_ctxt* rhs) const;
}; };

@ -39,7 +39,7 @@ void sched_time_pf::new_tti(sched_ue_list& ue_db, sf_sched* tti_sched)
for (auto& u : ue_db) { for (auto& u : ue_db) {
auto it = ue_history_db.find(u.first); auto it = ue_history_db.find(u.first);
if (it == ue_history_db.end()) { if (it == ue_history_db.end()) {
it = ue_history_db.insert(std::make_pair(u.first, ue_ctxt{u.first, fairness_coeff})).first; it = ue_history_db.insert(u.first, ue_ctxt{u.first, fairness_coeff}).value();
} }
it->second.new_tti(*cc_cfg, *u.second, tti_sched); it->second.new_tti(*cc_cfg, *u.second, tti_sched);
if (it->second.dl_newtx_h != nullptr or it->second.dl_retx_h != nullptr) { if (it->second.dl_newtx_h != nullptr or it->second.dl_retx_h != nullptr) {

Loading…
Cancel
Save