<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>