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 <kirr(a)nexedi.com>
Gerrit-CC: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-CC: osmith <osmith(a)sysmocom.de>
Gerrit-CC: pespin <pespin(a)sysmocom.de>