kirr has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmocom-bb/+/40086?usp=email )
Change subject: trx_toolkit/burst_fwd: Reuse RxMsg object ...................................................................... trx_toolkit/burst_fwd: Reuse RxMsg object To forward each received TxMsg BurstForwarder currently creates RxMsg via TxMsg.trans(), then sends created RxMsg to destination trx. Creating RxMsg and convertion TxMsg .burst to RxMsg .burst all show in the profile. -> Optimize the first part of this story: create RxMsg only once and reuse it, by resetting, each time we need to forward a message. This is safe to do as that RxMsg is created by BurstForwarder internally and is not exposed to any upper layer at all. In other words it has strictly controlled lifetime limited by the forwarding activity. Change-Id: Ie0690da0f901f4f19a7e4cf048bdc244a24235b0 --- M src/target/trx_toolkit/burst_fwd.pxd M src/target/trx_toolkit/burst_fwd.pyx M src/target/trx_toolkit/data_msg.pxd M src/target/trx_toolkit/data_msg.pyx 4 files changed, 24 insertions(+), 5 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/86/40086/1 diff --git a/src/target/trx_toolkit/burst_fwd.pxd b/src/target/trx_toolkit/burst_fwd.pxd index 486faa1..87ae95d 100644 --- a/src/target/trx_toolkit/burst_fwd.pxd +++ b/src/target/trx_toolkit/burst_fwd.pxd @@ -1,9 +1,10 @@ # cython: language_level=3 -from data_msg cimport TxMsg +from data_msg cimport TxMsg, RxMsg from transceiver cimport Transceiver cdef class BurstForwarder: cdef list[Transceiver] trx_list + cdef RxMsg tx_msg # reused RxMsg to avoid object allocation at every forward_msg cdef forward_msg(self, Transceiver src_trx, TxMsg rx_msg) diff --git a/src/target/trx_toolkit/burst_fwd.pyx b/src/target/trx_toolkit/burst_fwd.pyx index d13f784..db910ad 100644 --- a/src/target/trx_toolkit/burst_fwd.pyx +++ b/src/target/trx_toolkit/burst_fwd.pyx @@ -42,6 +42,7 @@ def __cinit__(self, list trx_list): self.trx_list = trx_list + self.tx_msg = RxMsg() cdef forward_msg(self, Transceiver src_trx, TxMsg rx_msg): # Originating Transceiver may use frequency hopping, @@ -66,5 +67,13 @@ continue # Transform from TxMsg to RxMsg and forward - tx_msg = rx_msg.trans(ver = trx.data_if._hdr_ver) + tx_msg = self.tx_msg # reuse tx_msg object instead of allocating it each time + tx_msg._reset() + tx_msg.fn = rx_msg.fn + tx_msg.tn = rx_msg.tn + tx_msg.ver = trx.data_if._hdr_ver + if rx_msg.burst is not None: + tx_msg.burst = RxMsg._ubit2sbit(rx_msg.burst) + tx_msg.nope_ind = (rx_msg.burst is None) + trx.handle_data_msg(src_trx, rx_msg, tx_msg) diff --git a/src/target/trx_toolkit/data_msg.pxd b/src/target/trx_toolkit/data_msg.pxd index 2eb6ed3..2ddd248 100644 --- a/src/target/trx_toolkit/data_msg.pxd +++ b/src/target/trx_toolkit/data_msg.pxd @@ -31,6 +31,7 @@ cdef int CHDR_LEN() noexcept cdef int HDR_LEN(self) except -1 + cdef _reset(self) cdef append_hdr_to(self, bytearray buf) cdef append_burst_to(self, bytearray buf) cdef parse_hdr(self, bytearray msg) diff --git a/src/target/trx_toolkit/data_msg.pyx b/src/target/trx_toolkit/data_msg.pyx index 304dbdb..07b3d38 100644 --- a/src/target/trx_toolkit/data_msg.pyx +++ b/src/target/trx_toolkit/data_msg.pyx @@ -87,10 +87,15 @@ CHDR_VERSION_MAX = 0b1111 KNOWN_VERSIONS = tuple(range(KNOWN_VERSION_MAX+1)) - def __cinit__(self, int64_t fn = -1, int64_t tn = -1, int ver = 0): + def __init__(self, int64_t fn = -1, int64_t tn = -1, int ver = 0): + self._reset() self.ver = ver self.fn = fn self.tn = tn + cdef _reset(self): + self.ver = 0 + self.fn = -1 + self.tn = -1 self.nope_ind = False @staticmethod @@ -323,7 +328,8 @@ cdef class TxMsg(Msg): ''' Tx (L1 -> TRX) message coding API. ''' - def __cinit__(self): + cdef _reset(self): + Msg._reset(self) self.burst = None self.pwr = -1 @@ -479,7 +485,9 @@ cdef class RxMsg(Msg): ''' Rx (TRX -> L1) message coding API. ''' - def __cinit__(self): + cdef _reset(self): + Msg._reset(self) + self.burst = None self.rssi = RSSI_UNSET self.toa256 = TOA256_UNSET -- To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/40086?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: newchange Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Change-Id: Ie0690da0f901f4f19a7e4cf048bdc244a24235b0 Gerrit-Change-Number: 40086 Gerrit-PatchSet: 1 Gerrit-Owner: kirr <k...@nexedi.com> Gerrit-CC: fixeria <vyanits...@sysmocom.de> Gerrit-CC: osmith <osm...@sysmocom.de> Gerrit-CC: pespin <pes...@sysmocom.de>