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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bts: Introduce new module for performance tests<br><br>A new module is created since its tests are aimed at running against<br>real HW set ups to check performance of the system under high loads.<br>As a result, tests in here will usually require a specific config file.<br><br>One first test is introduced to activate all TCH/H channels and see if<br>the BTS (+BTS-TRX) can keep on going fine for a while.<br><br>Related: OS#4365<br>Change-Id: I2d5f0043bdee1f8f5edcf46acce79ce547d1333d<br>---<br>M bts/BTS_Tests.ttcn<br>A bts/BTS_Tests_perf.ttcn<br>2 files changed, 103 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn</span><br><span>index 7fa1af6..46c9647 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -66,6 +66,7 @@</span><br><span> friend module BTS_Tests_SMSCB;</span><br><span> friend module BTS_Tests_virtphy;</span><br><span> friend module BTS_Tests_LAPDm;</span><br><span style="color: hsl(120, 100%, 40%);">+friend module BTS_Tests_perf;</span><br><span> </span><br><span> /* The tests assume a BTS with the following timeslot configuration:</span><br><span>  * TS0 : Combined CCCH + SDCCH/4</span><br><span>diff --git a/bts/BTS_Tests_perf.ttcn b/bts/BTS_Tests_perf.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..1e70bc8</span><br><span>--- /dev/null</span><br><span>+++ b/bts/BTS_Tests_perf.ttcn</span><br><span>@@ -0,0 +1,102 @@</span><br><span style="color: hsl(120, 100%, 40%);">+module BTS_Tests_perf {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Performance Tests for OsmoBTS</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2020 by sysmocom s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All rights reserved.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Released under the terms of GNU General Public License, Version 2 or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * SPDX-License-Identifier: GPL-2.0-or-later</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This test suite tests performance of OsmoBTS under different heavy load scenarios.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from Misc_Helpers all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from General_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from GSM_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from L1CTL_PortType all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from L1CTL_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from LAPDm_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from IPA_Emulation all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from GSM_RR_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from RSL_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from RSL_Emulation all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from PCUIF_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from PCUIF_CodecPort all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_VTY_Functions all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from BTS_Tests all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/***********************************************************************</span><br><span style="color: hsl(120, 100%, 40%);">+ * Performance tests. Expect osmo-bts to be configured with all TRX as TCH/H.</span><br><span style="color: hsl(120, 100%, 40%);">+ ***********************************************************************/</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+modulepar {</span><br><span style="color: hsl(120, 100%, 40%);">+ float mp_wait_time := 10.0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* This test requires BTS with 1 TRX to be configured with following timeslots: TS[0]=CCCH+SDCCH4, TS[1..7]: TCH/H</span><br><span style="color: hsl(120, 100%, 40%);">+ * One can simply take the osmo-bsc.cfg in the same dir and change TS1..7, that's all needed.</span><br><span style="color: hsl(120, 100%, 40%);">+ * It will activate TS1..7 TCH/Hchannels (2 TCH/H per TS, that's 14 channels)</span><br><span style="color: hsl(120, 100%, 40%);">+ * and wait for requested time. This test is useful to bring the BTS (+BTS-TRX)</span><br><span style="color: hsl(120, 100%, 40%);">+ * into a high channel load state to check that the system it runs on can keep</span><br><span style="color: hsl(120, 100%, 40%);">+ * on with full load.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_TC_highchanload_tchh(charstring id) runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+  var ChannelNrs chan_nr := { /* TS 1..7: TCH/H */</span><br><span style="color: hsl(120, 100%, 40%);">+              valueof(ts_RslChanNr_Lm(1,0)), valueof(ts_RslChanNr_Lm(1,1)),</span><br><span style="color: hsl(120, 100%, 40%);">+         valueof(ts_RslChanNr_Lm(2,0)), valueof(ts_RslChanNr_Lm(2,1)),</span><br><span style="color: hsl(120, 100%, 40%);">+         valueof(ts_RslChanNr_Lm(3,0)), valueof(ts_RslChanNr_Lm(3,1)),</span><br><span style="color: hsl(120, 100%, 40%);">+         valueof(ts_RslChanNr_Lm(4,0)), valueof(ts_RslChanNr_Lm(4,1)),</span><br><span style="color: hsl(120, 100%, 40%);">+         valueof(ts_RslChanNr_Lm(5,0)), valueof(ts_RslChanNr_Lm(5,1)),</span><br><span style="color: hsl(120, 100%, 40%);">+         valueof(ts_RslChanNr_Lm(6,0)), valueof(ts_RslChanNr_Lm(6,1)),</span><br><span style="color: hsl(120, 100%, 40%);">+         valueof(ts_RslChanNr_Lm(7,0)), valueof(ts_RslChanNr_Lm(7,1))</span><br><span style="color: hsl(120, 100%, 40%);">+          };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  log("Started");</span><br><span style="color: hsl(120, 100%, 40%);">+     for (var integer i := 0; i < sizeof(chan_nr); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+          log("Registering ", chan_nr[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+            f_rslem_register(0, chan_nr[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     log("Registered");</span><br><span style="color: hsl(120, 100%, 40%);">+  for (var integer i := 0; i < sizeof(chan_nr); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+          f_rsl_transceive(ts_RSL_CHAN_ACT(chan_nr[i],</span><br><span style="color: hsl(120, 100%, 40%);">+                           ts_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3 /* AMR*/)),</span><br><span style="color: hsl(120, 100%, 40%);">+                          tr_RSL_CHAN_ACT_ACK(chan_nr[i]),</span><br><span style="color: hsl(120, 100%, 40%);">+                              log2str("RSL CHAN ACT [", i, "]"));</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     log("Activated, now waiting ", mp_wait_time, " seconds");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_sleep(mp_wait_time);</span><br><span style="color: hsl(120, 100%, 40%);">+        log("sleep done, deactivating");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  for (var integer i := 0; i < sizeof(chan_nr); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+          f_rsl_transceive(ts_RSL_RF_CHAN_REL(chan_nr[i]),</span><br><span style="color: hsl(120, 100%, 40%);">+                               tr_RSL_RF_CHAN_REL_ACK(chan_nr[i]),</span><br><span style="color: hsl(120, 100%, 40%);">+                           log2str("RF CHAN REL [", i, "]"),</span><br><span style="color: hsl(120, 100%, 40%);">+                                 true);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_highchanload_tchh() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var ConnHdlr vc_conn; /* 1..7 * 2 */</span><br><span style="color: hsl(120, 100%, 40%);">+  var ConnHdlrPars pars := valueof(t_Pars(t_RslChanNr_Bm(1), ts_RSL_ChanMode_SIGN, 60.0 + mp_wait_time));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn := f_start_handler(refers(f_TC_highchanload_tchh), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+control {</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_highchanload_tchh() );</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17098">change 17098</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-ttcn3-hacks/+/17098"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I2d5f0043bdee1f8f5edcf46acce79ce547d1333d </div>
<div style="display:none"> Gerrit-Change-Number: 17098 </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: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </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-MessageType: merged </div>