module BTS_Tests_perf { /* Performance Tests for OsmoBTS * (C) 2020 by sysmocom s.f.m.c. GmbH * All rights reserved. * * Released under the terms of GNU General Public License, Version 2 or * (at your option) any later version. * * SPDX-License-Identifier: GPL-2.0-or-later * * This test suite tests performance of OsmoBTS under different heavy load scenarios. */ import from Misc_Helpers all; import from General_Types all; import from Osmocom_Types all; import from GSM_Types all; import from L1CTL_PortType all; import from L1CTL_Types all; import from LAPDm_Types all; import from IPA_Emulation all; import from GSM_RR_Types all; import from RSL_Types all; import from RSL_Emulation all; import from PCUIF_Types all; import from PCUIF_CodecPort all; import from Osmocom_VTY_Functions all; import from BTS_Tests all; /*********************************************************************** * Performance tests. Expect osmo-bts to be configured with all TRX as TCH/H. ***********************************************************************/ modulepar { float mp_wait_time := 10.0; } /* This test requires BTS with 1 TRX to be configured with following timeslots: TS[0]=CCCH+SDCCH4, TS[1..7]: TCH/H * One can simply take the osmo-bsc.cfg in the same dir and change TS1..7, that's all needed. * It will activate TS1..7 TCH/Hchannels (2 TCH/H per TS, that's 14 channels) * and wait for requested time. This test is useful to bring the BTS (+BTS-TRX) * into a high channel load state to check that the system it runs on can keep * on with full load. */ function f_TC_highchanload_tchh(charstring id) runs on ConnHdlr { var ChannelNrs chan_nr := { /* TS 1..7: TCH/H */ valueof(ts_RslChanNr_Lm(1,0)), valueof(ts_RslChanNr_Lm(1,1)), valueof(ts_RslChanNr_Lm(2,0)), valueof(ts_RslChanNr_Lm(2,1)), valueof(ts_RslChanNr_Lm(3,0)), valueof(ts_RslChanNr_Lm(3,1)), valueof(ts_RslChanNr_Lm(4,0)), valueof(ts_RslChanNr_Lm(4,1)), valueof(ts_RslChanNr_Lm(5,0)), valueof(ts_RslChanNr_Lm(5,1)), valueof(ts_RslChanNr_Lm(6,0)), valueof(ts_RslChanNr_Lm(6,1)), valueof(ts_RslChanNr_Lm(7,0)), valueof(ts_RslChanNr_Lm(7,1)) }; log("Started"); for (var integer i := 0; i < sizeof(chan_nr); i := i+1) { log("Registering ", chan_nr[i]); f_rslem_register(0, chan_nr[i]); } log("Registered"); for (var integer i := 0; i < sizeof(chan_nr); i := i+1) { f_rsl_transceive(ts_RSL_CHAN_ACT(chan_nr[i], ts_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3 /* AMR*/)), tr_RSL_CHAN_ACT_ACK(chan_nr[i]), log2str("RSL CHAN ACT [", i, "]")); } log("Activated, now waiting ", mp_wait_time, " seconds"); f_sleep(mp_wait_time); log("sleep done, deactivating"); for (var integer i := 0; i < sizeof(chan_nr); i := i+1) { f_rsl_transceive(ts_RSL_RF_CHAN_REL(chan_nr[i]), tr_RSL_RF_CHAN_REL_ACK(chan_nr[i]), log2str("RF CHAN REL [", i, "]"), true); } setverdict(pass); } testcase TC_highchanload_tchh() runs on test_CT { var ConnHdlr vc_conn; /* 1..7 * 2 */ var ConnHdlrPars pars := valueof(t_Pars(t_RslChanNr_Bm(1), ts_RSL_ChanMode_SIGN, t_guard := 60.0 + mp_wait_time)); f_init(); vc_conn := f_start_handler(refers(f_TC_highchanload_tchh), pars); vc_conn.done; } control { execute( TC_highchanload_tchh() ); } }