<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-trx/+/19207">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, but someone else must approve
  daniel: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add rate counter for missing Txbursts when scheduled towards the radioInterface<br><br>Related: OS#4487<br>Change-Id: Ibb2c492b3c67cbab11fbb936ae3a090fb5756aa8<br>---<br>M CommonLibs/osmo_signal.h<br>M CommonLibs/trx_rate_ctr.cpp<br>M CommonLibs/trx_rate_ctr.h<br>M CommonLibs/trx_vty.c<br>M Transceiver52M/Transceiver.cpp<br>5 files changed, 20 insertions(+), 6 deletions(-)<br><br></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 5cd90c6..13646a1 100644</span><br><span>--- a/CommonLibs/osmo_signal.h</span><br><span>+++ b/CommonLibs/osmo_signal.h</span><br><span>@@ -60,7 +60,8 @@</span><br><span> /* signal cb for signal <SS_DEVICE,S_TRX_COUNTER_CHANGE> */</span><br><span> struct trx_counters {</span><br><span>  size_t chan;</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int tx_stale_bursts; /* Amount of Tx bursts dropped to to arriving too late from TRXD */</span><br><span style="color: hsl(120, 100%, 40%);">+     unsigned int tx_stale_bursts;</span><br><span style="color: hsl(120, 100%, 40%);">+ unsigned int tx_unavailable_bursts;</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>diff --git a/CommonLibs/trx_rate_ctr.cpp b/CommonLibs/trx_rate_ctr.cpp</span><br><span>index 8b2597d..e45aba8 100644</span><br><span>--- a/CommonLibs/trx_rate_ctr.cpp</span><br><span>+++ b/CommonLibs/trx_rate_ctr.cpp</span><br><span>@@ -103,6 +103,7 @@</span><br><span>      { TRX_CTR_DEV_TX_DROP_EV,       "tx_drop_events" },</span><br><span>        { TRX_CTR_DEV_TX_DROP_SMPL,     "tx_drop_samples" },</span><br><span>       { TRX_CTR_TRX_TX_STALE_BURSTS,  "tx_stale_bursts" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { TRX_CTR_TRX_TX_UNAVAILABLE_BURSTS, "tx_unavailable_bursts" },</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>@@ -117,6 +118,7 @@</span><br><span>      [TRX_CTR_DEV_TX_DROP_EV]                = { "device:tx_drop_events",  "Number of times Tx samples were dropped by HW" },</span><br><span>         [TRX_CTR_DEV_TX_DROP_SMPL]              = { "device:tx_drop_samples", "Number of Tx samples dropped by HW" },</span><br><span>    [TRX_CTR_TRX_TX_STALE_BURSTS]           = { "trx:tx_stale_bursts",    "Number of Tx burts dropped by TRX due to arriving too late" },</span><br><span style="color: hsl(120, 100%, 40%);">+     [TRX_CTR_TRX_TX_UNAVAILABLE_BURSTS]     = { "trx:tx_unavailable_bursts","Number of Tx burts unavailable (not enqueued) at the time they should be transmitted" },</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>@@ -172,6 +174,8 @@</span><br><span>          LOGCHAN(chan, DMAIN, INFO) << "rate_ctr update";</span><br><span>             ctr = &rate_ctrs[chan]->ctr[TRX_CTR_TRX_TX_STALE_BURSTS];</span><br><span>             rate_ctr_add(ctr, trx_ctrs_pending[chan].tx_stale_bursts - ctr->current);</span><br><span style="color: hsl(120, 100%, 40%);">+          ctr = &rate_ctrs[chan]->ctr[TRX_CTR_TRX_TX_UNAVAILABLE_BURSTS];</span><br><span style="color: hsl(120, 100%, 40%);">+                rate_ctr_add(ctr, trx_ctrs_pending[chan].tx_unavailable_bursts - ctr->current);</span><br><span>           ctr = &rate_ctrs[chan]->ctr[TRX_CTR_TRX_TRXD_FN_REPEATED];</span><br><span>            rate_ctr_add(ctr, trx_ctrs_pending[chan].tx_trxd_fn_repeated - ctr->current);</span><br><span>             ctr = &rate_ctrs[chan]->ctr[TRX_CTR_TRX_TRXD_FN_OUTOFORDER];</span><br><span>diff --git a/CommonLibs/trx_rate_ctr.h b/CommonLibs/trx_rate_ctr.h</span><br><span>index cef3c21..c4c05ef 100644</span><br><span>--- a/CommonLibs/trx_rate_ctr.h</span><br><span>+++ b/CommonLibs/trx_rate_ctr.h</span><br><span>@@ -11,6 +11,7 @@</span><br><span>     TRX_CTR_DEV_TX_DROP_EV,</span><br><span>      TRX_CTR_DEV_TX_DROP_SMPL,</span><br><span>    TRX_CTR_TRX_TX_STALE_BURSTS,</span><br><span style="color: hsl(120, 100%, 40%);">+  TRX_CTR_TRX_TX_UNAVAILABLE_BURSTS,</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>diff --git a/CommonLibs/trx_vty.c b/CommonLibs/trx_vty.c</span><br><span>index 941a435..e37ecaf 100644</span><br><span>--- a/CommonLibs/trx_vty.c</span><br><span>+++ b/CommonLibs/trx_vty.c</span><br><span>@@ -390,7 +390,7 @@</span><br><span>      return -1;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define THRESHOLD_ARGS "(rx_overruns|tx_underruns|rx_drop_events|rx_drop_samples|tx_drop_events|tx_drop_samples|tx_stale_bursts|tx_trxd_fn_repeated|tx_trxd_fn_outoforder|tx_trxd_fn_skipped)"</span><br><span style="color: hsl(120, 100%, 40%);">+#define THRESHOLD_ARGS "(rx_overruns|tx_underruns|rx_drop_events|rx_drop_samples|tx_drop_events|tx_drop_samples|tx_stale_bursts|tx_unavailable_bursts|tx_trxd_fn_repeated|tx_trxd_fn_outoforder|tx_trxd_fn_skipped)"</span><br><span> #define THRESHOLD_STR_VAL(s) "Set threshold value for rate_ctr device:" OSMO_STRINGIFY_VAL(s) "\n"</span><br><span> #define THRESHOLD_STRS \</span><br><span>    THRESHOLD_STR_VAL(rx_overruns) \</span><br><span>@@ -400,6 +400,7 @@</span><br><span>       THRESHOLD_STR_VAL(tx_drop_events) \</span><br><span>  THRESHOLD_STR_VAL(tx_drop_samples) \</span><br><span>         THRESHOLD_STR_VAL(tx_stale_bursts) \</span><br><span style="color: hsl(120, 100%, 40%);">+  THRESHOLD_STR_VAL(tx_unavailable_bursts) \</span><br><span>   THRESHOLD_STR_VAL(tx_trxd_fn_repeated) \</span><br><span>     THRESHOLD_STR_VAL(tx_trxd_fn_outoforder) \</span><br><span>   THRESHOLD_STR_VAL(tx_trxd_fn_skipped) \</span><br><span>diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp</span><br><span>index 7aaf1d4..5e42178 100644</span><br><span>--- a/Transceiver52M/Transceiver.cpp</span><br><span>+++ b/Transceiver52M/Transceiver.cpp</span><br><span>@@ -431,13 +431,14 @@</span><br><span>   std::vector<signalVector *> bursts(mChans);</span><br><span>   std::vector<bool> zeros(mChans);</span><br><span>   std::vector<bool> filler(mChans, true);</span><br><span style="color: hsl(0, 100%, 40%);">-  bool stale_bursts_changed;</span><br><span style="color: hsl(120, 100%, 40%);">+  bool ratectr_changed;</span><br><span> </span><br><span>   TN = nowTime.TN();</span><br><span> </span><br><span>   for (size_t i = 0; i < mChans; i ++) {</span><br><span>     state = &mStates[i];</span><br><span style="color: hsl(0, 100%, 40%);">-    stale_bursts_changed = false;</span><br><span style="color: hsl(120, 100%, 40%);">+    ratectr_changed = false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     zeros[i] = state->chanType[TN] == NONE;</span><br><span> </span><br><span>     Mutex *mtx = mTxPriorityQueues[i].getMutex();</span><br><span>@@ -447,7 +448,7 @@</span><br><span>       LOGCHAN(i, DTRXDDL, NOTICE) << "dumping STALE burst in TRX->SDR interface ("</span><br><span>                   << burst->getTime() <<" vs " << nowTime << "), retrans=" << state->mRetrans;</span><br><span>       state->ctrs.tx_stale_bursts++;</span><br><span style="color: hsl(0, 100%, 40%);">-      stale_bursts_changed = true;</span><br><span style="color: hsl(120, 100%, 40%);">+      ratectr_changed = true;</span><br><span>       if (state->mRetrans)</span><br><span>         updateFillerTable(i, burst);</span><br><span>       delete burst;</span><br><span>@@ -467,11 +468,17 @@</span><br><span>     } else {</span><br><span>       modFN = nowTime.FN() % state->fillerModulus[TN];</span><br><span>       bursts[i] = state->fillerTable[modFN][TN];</span><br><span style="color: hsl(120, 100%, 40%);">+      if (state->chanType[TN] != NONE) {</span><br><span style="color: hsl(120, 100%, 40%);">+        LOGCHAN(i, DTRXDDL, NOTICE) << "No Tx burst available for " << nowTime</span><br><span style="color: hsl(120, 100%, 40%);">+                                    << ", retrans=" << state->mRetrans;</span><br><span style="color: hsl(120, 100%, 40%);">+        state->ctrs.tx_unavailable_bursts++;</span><br><span style="color: hsl(120, 100%, 40%);">+        ratectr_changed = true;</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span>     }</span><br><span> </span><br><span>     mtx->unlock();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (stale_bursts_changed)</span><br><span style="color: hsl(120, 100%, 40%);">+    if (ratectr_changed)</span><br><span>       dispatch_trx_rate_ctr_change(state, i);</span><br><span>   }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-trx/+/19207">change 19207</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/+/19207"/><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: Ibb2c492b3c67cbab11fbb936ae3a090fb5756aa8 </div>
<div style="display:none"> Gerrit-Change-Number: 19207 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>