<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-trx/+/19403">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Transceiver: Add several rate_ctr for rx error conditions<br><br>Since there's now a rate counter, we can drop log level for those events<br>which can be bursty and hence print lots of output in short periods of<br>time, which may affect performance. This way setting them to INFO it's<br>enough to avoid getting them in stderr unless explicitly configured by<br>the user (for instance to debug stuff), while still allowing a good<br>enough level to be enabled for other targets such as gsmtap.<br><br>Related: OS#4679<br>Change-Id: I000f7112e35ac68d3d922444f78468b1ea74cbba<br>---<br>M CommonLibs/osmo_signal.h<br>M CommonLibs/trx_rate_ctr.cpp<br>M CommonLibs/trx_rate_ctr.h<br>M Transceiver52M/Transceiver.cpp<br>4 files changed, 33 insertions(+), 5 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-trx refs/changes/03/19403/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/CommonLibs/osmo_signal.h b/CommonLibs/osmo_signal.h</span><br><span>index 13646a1..003e7af 100644</span><br><span>--- a/CommonLibs/osmo_signal.h</span><br><span>+++ b/CommonLibs/osmo_signal.h</span><br><span>@@ -65,4 +65,7 @@</span><br><span>      unsigned int tx_trxd_fn_repeated;</span><br><span>    unsigned int tx_trxd_fn_outoforder;</span><br><span>  unsigned int tx_trxd_fn_skipped;</span><br><span style="color: hsl(120, 100%, 40%);">+      unsigned int rx_empty_burst;</span><br><span style="color: hsl(120, 100%, 40%);">+  unsigned int rx_clipping;</span><br><span style="color: hsl(120, 100%, 40%);">+     unsigned int rx_no_burst_detected;</span><br><span> };</span><br><span>diff --git a/CommonLibs/trx_rate_ctr.cpp b/CommonLibs/trx_rate_ctr.cpp</span><br><span>index 1f44404..e902ff1 100644</span><br><span>--- a/CommonLibs/trx_rate_ctr.cpp</span><br><span>+++ b/CommonLibs/trx_rate_ctr.cpp</span><br><span>@@ -107,6 +107,9 @@</span><br><span>      { TRX_CTR_TRX_TRXD_FN_REPEATED, "tx_trxd_fn_repeated" },</span><br><span>   { TRX_CTR_TRX_TRXD_FN_OUTOFORDER, "tx_trxd_fn_outoforder" },</span><br><span>       { TRX_CTR_TRX_TRXD_FN_SKIPPED,  "tx_trxd_fn_skipped" },</span><br><span style="color: hsl(120, 100%, 40%);">+     { TRX_CTR_TRX_RX_EMPTY_BURST,   "rx_empty_burst" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { TRX_CTR_TRX_RX_CLIPPING,      "rx_clipping" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { TRX_CTR_TRX_RX_NO_BURST_DETECTED, "rx_no_burst_detected" },</span><br><span>      { 0, NULL }</span><br><span> };</span><br><span> </span><br><span>@@ -122,6 +125,9 @@</span><br><span>  [TRX_CTR_TRX_TRXD_FN_REPEATED]          = { "trx:tx_trxd_fn_repeated",        "Number of Tx burts received from TRXD with repeated FN" },</span><br><span>        [TRX_CTR_TRX_TRXD_FN_OUTOFORDER]        = { "trx:tx_trxd_fn_outoforder","Number of Tx burts received from TRXD with a past FN" },</span><br><span>        [TRX_CTR_TRX_TRXD_FN_SKIPPED]           = { "trx:tx_trxd_fn_skipped", "Number of Tx burts potentially skipped due to FN jumps" },</span><br><span style="color: hsl(120, 100%, 40%);">+ [TRX_CTR_TRX_RX_EMPTY_BURST]            = { "trx:rx_empty_burst",     "Number of Rx bursts empty" },</span><br><span style="color: hsl(120, 100%, 40%);">+      [TRX_CTR_TRX_RX_CLIPPING]               = { "trx:rx_clipping",                "Number of Rx bursts discarded due to clipping" },</span><br><span style="color: hsl(120, 100%, 40%);">+  [TRX_CTR_TRX_RX_NO_BURST_DETECTED]      = { "trx:rx_no_burst_detected",       "Number of Rx burts discarded due to burst detection error" },</span><br><span> };</span><br><span> </span><br><span> static const struct rate_ctr_group_desc trx_chan_ctr_group_desc = {</span><br><span>@@ -182,6 +188,12 @@</span><br><span>             rate_ctr_add(ctr, trx_ctrs_pending[chan].tx_trxd_fn_outoforder - ctr->current);</span><br><span>           ctr = &rate_ctrs[chan]->ctr[TRX_CTR_TRX_TRXD_FN_SKIPPED];</span><br><span>             rate_ctr_add(ctr, trx_ctrs_pending[chan].tx_trxd_fn_skipped - ctr->current);</span><br><span style="color: hsl(120, 100%, 40%);">+               ctr = &rate_ctrs[chan]->ctr[TRX_CTR_TRX_RX_EMPTY_BURST];</span><br><span style="color: hsl(120, 100%, 40%);">+               rate_ctr_add(ctr, trx_ctrs_pending[chan].rx_empty_burst - ctr->current);</span><br><span style="color: hsl(120, 100%, 40%);">+           ctr = &rate_ctrs[chan]->ctr[TRX_CTR_TRX_RX_CLIPPING];</span><br><span style="color: hsl(120, 100%, 40%);">+          rate_ctr_add(ctr, trx_ctrs_pending[chan].rx_clipping - ctr->current);</span><br><span style="color: hsl(120, 100%, 40%);">+              ctr = &rate_ctrs[chan]->ctr[TRX_CTR_TRX_RX_NO_BURST_DETECTED];</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_add(ctr, trx_ctrs_pending[chan].rx_no_burst_detected - ctr->current);</span><br><span>            /* Mark as done */</span><br><span>           trx_ctrs_pending[chan].chan = PENDING_CHAN_NONE;</span><br><span>     }</span><br><span>diff --git a/CommonLibs/trx_rate_ctr.h b/CommonLibs/trx_rate_ctr.h</span><br><span>index c4c05ef..72125c2 100644</span><br><span>--- a/CommonLibs/trx_rate_ctr.h</span><br><span>+++ b/CommonLibs/trx_rate_ctr.h</span><br><span>@@ -15,6 +15,9 @@</span><br><span>       TRX_CTR_TRX_TRXD_FN_REPEATED,</span><br><span>        TRX_CTR_TRX_TRXD_FN_OUTOFORDER,</span><br><span>      TRX_CTR_TRX_TRXD_FN_SKIPPED,</span><br><span style="color: hsl(120, 100%, 40%);">+  TRX_CTR_TRX_RX_EMPTY_BURST,</span><br><span style="color: hsl(120, 100%, 40%);">+   TRX_CTR_TRX_RX_CLIPPING,</span><br><span style="color: hsl(120, 100%, 40%);">+      TRX_CTR_TRX_RX_NO_BURST_DETECTED,</span><br><span> };</span><br><span> </span><br><span> struct ctr_threshold {</span><br><span>diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp</span><br><span>index c92a61b..c3ef377 100644</span><br><span>--- a/Transceiver52M/Transceiver.cpp</span><br><span>+++ b/Transceiver52M/Transceiver.cpp</span><br><span>@@ -638,6 +638,7 @@</span><br><span>   GSM::Time burstTime;</span><br><span>   SoftVector *rxBurst;</span><br><span>   TransceiverState *state = &mStates[chan];</span><br><span style="color: hsl(120, 100%, 40%);">+  bool ctr_changed = false;</span><br><span> </span><br><span>   /* Blocking FIFO read */</span><br><span>   radioVector *radio_burst = mReceiveFIFO[chan]->read();</span><br><span>@@ -687,7 +688,9 @@</span><br><span>   }</span><br><span> </span><br><span>   if (max_i < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-    LOGCHAN(chan, DTRXDUL, FATAL) << "Received empty burst";</span><br><span style="color: hsl(120, 100%, 40%);">+    LOGCHAN(chan, DTRXDUL, INFO) << "Received empty burst";</span><br><span style="color: hsl(120, 100%, 40%);">+    state->ctrs.rx_empty_burst++;</span><br><span style="color: hsl(120, 100%, 40%);">+    ctr_changed = true;</span><br><span>     goto ret_idle;</span><br><span>   }</span><br><span> </span><br><span>@@ -713,10 +716,15 @@</span><br><span>   /* Detect normal or RACH bursts */</span><br><span>   rc = detectAnyBurst(*burst, mTSC, BURST_THRESH, mSPSRx, type, max_toa, &ebp);</span><br><span>   if (rc <= 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-    if (rc == -SIGERR_CLIP)</span><br><span style="color: hsl(0, 100%, 40%);">-      LOGCHAN(chan, DTRXDUL, NOTICE) << "Clipping detected on received RACH or Normal Burst";</span><br><span style="color: hsl(0, 100%, 40%);">-    else if (rc != SIGERR_NONE)</span><br><span style="color: hsl(0, 100%, 40%);">-      LOGCHAN(chan, DTRXDUL, NOTICE) << "Unhandled RACH or Normal Burst detection error";</span><br><span style="color: hsl(120, 100%, 40%);">+    if (rc == -SIGERR_CLIP) {</span><br><span style="color: hsl(120, 100%, 40%);">+      LOGCHAN(chan, DTRXDUL, INFO) << "Clipping detected on received RACH or Normal Burst";</span><br><span style="color: hsl(120, 100%, 40%);">+      state->ctrs.rx_clipping++;</span><br><span style="color: hsl(120, 100%, 40%);">+      ctr_changed = true;</span><br><span style="color: hsl(120, 100%, 40%);">+    } else if (rc != SIGERR_NONE) {</span><br><span style="color: hsl(120, 100%, 40%);">+      LOGCHAN(chan, DTRXDUL, INFO) << "Unhandled RACH or Normal Burst detection error";</span><br><span style="color: hsl(120, 100%, 40%);">+      state->ctrs.rx_no_burst_detected++;</span><br><span style="color: hsl(120, 100%, 40%);">+      ctr_changed = true;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span>     goto ret_idle;</span><br><span>   }</span><br><span> </span><br><span>@@ -743,6 +751,8 @@</span><br><span>   return 0;</span><br><span> </span><br><span> ret_idle:</span><br><span style="color: hsl(120, 100%, 40%);">+  if (ctr_changed)</span><br><span style="color: hsl(120, 100%, 40%);">+    dispatch_trx_rate_ctr_change(state, chan);</span><br><span>   bi->idle = true;</span><br><span>   delete radio_burst;</span><br><span>   return 0;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-trx/+/19403">change 19403</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-trx/+/19403"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-trx </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I000f7112e35ac68d3d922444f78468b1ea74cbba </div>
<div style="display:none"> Gerrit-Change-Number: 19403 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>