kirr has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmocom-bb/+/40057?usp=email )
Change subject: trx_toolkit/*: Invoke UDPLink.send via C from data/clock plane ......................................................................
trx_toolkit/*: Invoke UDPLink.send via C from data/clock plane
As can be seen from http://navytux.spb.ru/~kirr/osmo/fake_trx/pyx-base.html (DATAInterface_15send_msg) the system spends some time in py-overhead before reaching UDPLink.send
-> Avoid that overhead via providing cdef UDPLink._send and use that from performance-sensitive places.
Change-Id: I3774beebfd37e6b36d3d119ec19b0d3c2a88b10d --- M src/target/trx_toolkit/_clck_gen.pyx M src/target/trx_toolkit/data_if.pyx M src/target/trx_toolkit/udp_link.pxd M src/target/trx_toolkit/udp_link.pyx 4 files changed, 9 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/57/40057/1
diff --git a/src/target/trx_toolkit/_clck_gen.pyx b/src/target/trx_toolkit/_clck_gen.pyx index 914b821..6eb5717 100644 --- a/src/target/trx_toolkit/_clck_gen.pyx +++ b/src/target/trx_toolkit/_clck_gen.pyx @@ -22,6 +22,7 @@ import os import sys
+from udp_link cimport UDPLink from gsm_shared import *
@@ -94,6 +95,8 @@ self.send_clck_ind()
def send_clck_ind(self): + cdef UDPLink link + # We don't need to send so often if self.clck_src % self.ind_period == 0: # Create UDP payload @@ -101,7 +104,7 @@
# Send indication to all UDP links for link in self.clck_links: - link.send(payload) + link._send(payload)
# Debug print log.debug(payload.rstrip("\0")) diff --git a/src/target/trx_toolkit/data_if.pyx b/src/target/trx_toolkit/data_if.pyx index 5ae2bc1..ca4d82d 100644 --- a/src/target/trx_toolkit/data_if.pyx +++ b/src/target/trx_toolkit/data_if.pyx @@ -111,4 +111,4 @@ return
# Send message - self.send(payload) + self._send(payload) diff --git a/src/target/trx_toolkit/udp_link.pxd b/src/target/trx_toolkit/udp_link.pxd index d50fe5f..8698cab 100644 --- a/src/target/trx_toolkit/udp_link.pxd +++ b/src/target/trx_toolkit/udp_link.pxd @@ -17,5 +17,7 @@ cdef int sock_fd cdef sockaddr_in remote_addr
+ cdef _send(self, object data) # bytes|bytearray|str +
cdef _raise_oserr() diff --git a/src/target/trx_toolkit/udp_link.pyx b/src/target/trx_toolkit/udp_link.pyx index d75e058..c54845b 100644 --- a/src/target/trx_toolkit/udp_link.pyx +++ b/src/target/trx_toolkit/udp_link.pyx @@ -66,6 +66,8 @@ return "L:%s <-> R:%s" % (self.desc_local(), self.desc_remote())
def send(self, data): + self._send(data) + cdef _send(self, object data): cdef const char *buf cdef Py_ssize_t buflen if type(data) is bytearray: