Fix logger for NR PHY

This commit is contained in:
Xavier Arteaga 2021-02-01 19:26:10 +01:00 committed by Xavier Arteaga
parent 194670a2a3
commit 92c4a38fc2
8 changed files with 39 additions and 55 deletions

View File

@ -24,8 +24,8 @@
namespace srsenb {
namespace nr {
cc_worker::cc_worker(uint32_t cc_idx_, srslte::log* log, phy_nr_state* phy_state_) :
cc_idx(cc_idx_), phy_state(phy_state_), log_h(log)
cc_worker::cc_worker(uint32_t cc_idx_, srslog::basic_logger& log, phy_nr_state* phy_state_) :
cc_idx(cc_idx_), phy_state(phy_state_), logger(log)
{
cf_t* buffer_c[SRSLTE_MAX_PORTS] = {};
@ -108,7 +108,6 @@ uint32_t cc_worker::get_buffer_len()
int cc_worker::encode_pdcch_dl(stack_interface_phy_nr::dl_sched_grant_t* grants, uint32_t nof_grants)
{
for (uint32_t i = 0; i < nof_grants; i++) {
// Get PHY config for UE
// ...
@ -118,8 +117,8 @@ int cc_worker::encode_pdcch_dl(stack_interface_phy_nr::dl_sched_grant_t* grants,
return SRSLTE_ERROR;
}
if (log_h->get_level() >= srslte::LOG_LEVEL_INFO) {
log_h->info("PDCCH: cc=%d, ...", cc_idx);
if (logger.info.enabled()) {
logger.info("PDCCH: cc=%d, ...", cc_idx);
}
}
@ -129,7 +128,6 @@ int cc_worker::encode_pdcch_dl(stack_interface_phy_nr::dl_sched_grant_t* grants,
int cc_worker::encode_pdsch(stack_interface_phy_nr::dl_sched_grant_t* grants, uint32_t nof_grants)
{
for (uint32_t i = 0; i < nof_grants; i++) {
// Get PHY config for UE
// ...
srslte_pdsch_cfg_nr_t pdsch_hl_cfg = {};
@ -151,10 +149,10 @@ int cc_worker::encode_pdsch(stack_interface_phy_nr::dl_sched_grant_t* grants, ui
}
// Logging
if (log_h->get_level() >= srslte::LOG_LEVEL_INFO) {
if (logger.info.enabled()) {
char str[512];
srslte_enb_dl_nr_pdsch_info(&enb_dl, &pdsch_cfg, str, sizeof(str));
log_h->info("PDSCH: cc=%d, %s", cc_idx, str);
logger.info("PDSCH: cc=%d, %s", cc_idx, str);
}
}

View File

@ -147,7 +147,7 @@ public:
class cc_worker
{
public:
cc_worker(uint32_t cc_idx, srslte::log* log, phy_nr_state* phy_state_);
cc_worker(uint32_t cc_idx, srslog::basic_logger& log, phy_nr_state* phy_state_);
~cc_worker();
bool set_carrier(const srslte_carrier_nr_t* carrier);
@ -168,7 +168,7 @@ private:
uint32_t buffer_sz = 0;
phy_nr_state* phy_state = nullptr;
srslte_ue_dl_nr_t ue_dl = {};
srslte::log* log_h = nullptr;
srslog::basic_logger& logger;
// Temporal attributes
srslte_softbuffer_rx_t softbuffer_rx = {};

View File

@ -40,7 +40,7 @@ namespace nr {
class sf_worker final : public srslte::thread_pool::worker
{
public:
sf_worker(phy_common* phy, phy_nr_state* phy_state_, srslte::log* log);
sf_worker(phy_common* phy, phy_nr_state* phy_state_, srslog::basic_logger& logger);
~sf_worker() = default;
bool set_carrier_unlocked(uint32_t cc_idx, const srslte_carrier_nr_t* carrier_);
@ -60,9 +60,9 @@ private:
std::vector<std::unique_ptr<cc_worker> > cc_workers;
phy_common* phy = nullptr;
phy_nr_state* phy_state = nullptr;
srslte::log* log_h = nullptr;
phy_common* phy = nullptr;
phy_nr_state* phy_state = nullptr;
srslog::basic_logger& logger;
cf_t* prach_ptr = nullptr;
float prach_power = 0;

View File

@ -31,20 +31,17 @@ namespace nr {
class worker_pool
{
private:
std::vector<std::unique_ptr<srslte::log_filter> > log_vec;
srslte::thread_pool pool;
std::vector<std::unique_ptr<sf_worker> > workers;
phy_nr_state phy_state;
prach prach_buffer;
std::unique_ptr<prach> prach_buffer = nullptr;
public:
sf_worker* operator[](std::size_t pos) { return workers.at(pos).get(); }
worker_pool(uint32_t max_workers);
bool init(phy_common* common, srslte::logger* logger, int prio);
bool init(phy_common* common, srslog::sink& log_sink, int prio);
sf_worker* wait_worker(uint32_t tti);
void start_worker(sf_worker* w);
void stop();

View File

@ -24,8 +24,8 @@
namespace srsue {
namespace nr {
cc_worker::cc_worker(uint32_t cc_idx_, srslte::log* log, phy_nr_state* phy_state_) :
cc_idx(cc_idx_), phy_state(phy_state_), log_h(log)
cc_worker::cc_worker(uint32_t cc_idx_, srslog::basic_logger& log, phy_nr_state* phy_state_) :
cc_idx(cc_idx_), phy_state(phy_state_), logger(log)
{
cf_t* buffer_c[SRSLTE_MAX_PORTS] = {};
@ -151,10 +151,10 @@ bool cc_worker::work_dl()
const srslte_dci_dl_nr_t* dci_dl = &dci_dl_rx[i];
// Log found DCI
if (log_h->get_level() >= srslte::LOG_LEVEL_INFO) {
if (logger.info.enabled()) {
std::array<char, 512> str;
srslte_dci_nr_to_str(dci_dl, str.data(), str.size());
log_h->info("PDCCH: cc=%d, %s", cc_idx, str.data());
logger.info("PDCCH: cc=%d, %s", cc_idx, str.data());
}
// Compute DL grant
@ -180,10 +180,10 @@ bool cc_worker::work_dl()
// ...
// Logging
if (log_h->get_level() >= srslte::LOG_LEVEL_INFO) {
if (logger.info.enabled()) {
std::array<char, 512> str;
srslte_ue_dl_nr_pdsch_info(&ue_dl, &pdsch_cfg, pdsch_res.data(), str.data(), str.size());
log_h->info("PDSCH: cc=%d, %s", cc_idx, str.data());
logger.info("PDSCH: cc=%d, %s", cc_idx, str.data());
}
}

View File

@ -35,8 +35,8 @@ static int plot_worker_id = -1;
namespace srsue {
namespace nr {
sf_worker::sf_worker(phy_common* phy_, phy_nr_state* phy_state_, srslte::log* log) :
phy_state(phy_state_), phy(phy_), log_h(log)
sf_worker::sf_worker(phy_common* phy_, phy_nr_state* phy_state_, srslog::basic_logger& log) :
phy_state(phy_state_), phy(phy_), logger(log)
{
for (uint32_t i = 0; i < phy_state->args.nof_carriers; i++) {
cc_worker* w = new cc_worker(i, log, phy_state);
@ -69,7 +69,7 @@ uint32_t sf_worker::get_buffer_len()
void sf_worker::set_tti(uint32_t tti)
{
log_h->step(tti);
logger.set_context(tti);
for (auto& w : cc_workers) {
w->set_tti(tti);
}

View File

@ -25,7 +25,7 @@ namespace nr {
worker_pool::worker_pool(uint32_t max_workers) : pool(max_workers) {}
bool worker_pool::init(phy_common* common, srslte::logger* logger, int prio)
bool worker_pool::init(phy_common* common, srslog::sink& log_sink, int prio)
{
// Set carrier attributes
phy_state.carrier.id = 500;
@ -40,21 +40,13 @@ bool worker_pool::init(phy_common* common, srslte::logger* logger, int prio)
return true;
}
// Create logs
// Create array of pointers to phy_logs
for (uint32_t i = 0; i < common->args->nof_phy_threads; i++) {
auto* mylog = new srslte::log_filter;
char tmp[16];
sprintf(tmp, "PHY%d", i);
mylog->init(tmp, logger, true);
mylog->set_level(common->args->log.phy_level);
mylog->set_hex_limit(common->args->log.phy_hex_limit);
log_vec.push_back(std::unique_ptr<srslte::log_filter>(mylog));
}
// Add workers to workers pool and start threads
for (uint32_t i = 0; i < common->args->nof_phy_threads; i++) {
auto w = new sf_worker(common, &phy_state, (srslte::log*)log_vec[i].get());
auto& log = srslog::fetch_basic_logger(fmt::format("PHY{}", i), log_sink);
log.set_level(srslog::str_to_basic_level(common->args->log.phy_level));
log.set_hex_dump_max_size(common->args->log.phy_hex_limit);
auto w = new sf_worker(common, &phy_state, log);
pool.init_worker(i, w, prio, common->args->worker_cpu_mask);
workers.push_back(std::unique_ptr<sf_worker>(w));
@ -64,19 +56,17 @@ bool worker_pool::init(phy_common* common, srslte::logger* logger, int prio)
}
// Initialise PRACH
auto* prach_log = new srslte::log_filter;
prach_log->init("NR-PRACH", logger, false);
prach_log->set_level(common->args->log.phy_level);
prach_log->set_hex_limit(common->args->log.phy_hex_limit);
log_vec.push_back(std::unique_ptr<srslte::log_filter>(prach_log));
prach_buffer.init(phy_state.args.dl.nof_max_prb, prach_log);
auto& prach_log = srslog::fetch_basic_logger("NR-PRACH", log_sink);
prach_log.set_level(srslog::str_to_basic_level(common->args->log.phy_level));
prach_buffer = std::unique_ptr<prach>(new prach(prach_log));
prach_buffer->init(phy_state.args.dl.nof_max_prb);
// Set PRACH hard-coded cell
srslte_cell_t cell = {};
cell.nof_prb = 50;
cell.id = phy_state.carrier.id;
if (not prach_buffer.set_cell(cell, phy_state.cfg.prach)) {
prach_log->error("Setting PRACH cell\n");
if (not prach_buffer->set_cell(cell, phy_state.cfg.prach)) {
prach_log.error("Setting PRACH cell");
return false;
}
@ -93,15 +83,14 @@ sf_worker* worker_pool::wait_worker(uint32_t tti)
sf_worker* worker = (sf_worker*)pool.wait_worker(tti);
// Prepare PRACH, send always sequence 0
prach_buffer.prepare_to_send(0);
prach_buffer->prepare_to_send(0);
// Generate PRACH if ready
if (prach_buffer.is_ready_to_send(tti, phy_state.carrier.id)) {
if (prach_buffer->is_ready_to_send(tti, phy_state.carrier.id)) {
uint32_t nof_prach_sf = 0;
float prach_target_power = 0.0f;
cf_t* prach_ptr = prach_buffer.generate(0.0f, &nof_prach_sf, &prach_target_power);
cf_t* prach_ptr = prach_buffer->generate(0.0f, &nof_prach_sf, &prach_target_power);
worker->set_prach(prach_ptr, prach_target_power);
log_vec.front().get()->info("tti=%d; Sending PRACH\n", tti);
}
return worker;

View File

@ -148,7 +148,7 @@ void phy::run_thread()
// Initialise workers
lte_workers.init(&common, log_sink, WORKERS_THREAD_PRIO);
nr_workers.init(&common, logger, WORKERS_THREAD_PRIO);
nr_workers.init(&common, log_sink, WORKERS_THREAD_PRIO);
// Warning this must be initialized after all workers have been added to the pool
sfsync.init(