Loading prrt/CMakeLists.txt +0 −6 Original line number Diff line number Diff line Loading @@ -4,12 +4,6 @@ if (DEBUG) add_definitions(-DDEBUG) endif() option(THREAD_PINNING "Sender and receiver threads are pinned to a core." OFF) if (THREAD_PINNING) add_definitions(-DTHREAD_PINNING) endif() option(XLAP "Run XLAP to trace packets." OFF) if (XLAP) Loading prrt/cprrt.pxd +4 −4 Original line number Diff line number Diff line Loading @@ -11,9 +11,6 @@ cdef extern from "pthread.h" nogil: ctypedef struct pthread_cond_t: pass cdef extern from "py_defines.h": pass cdef extern from "proto/vdmcode/block_code.h": cdef struct prrtCoder: pass Loading Loading @@ -124,9 +121,12 @@ cdef extern from "proto/socket.h": int32_t PrrtSocket_timedrecv(PrrtSocket *sock_ptr, void *buf_ptr, const uint32_t wait_time) nogil bint PrrtSocket_set_sock_opt(PrrtSocket *sock_ptr, const_char *name, const uint32_t value) uint32_t PrrtSocket_get_sock_opt(PrrtSocket *sock_ptr, const_char *name) bint PrrtSocket_uses_thread_pinning(PrrtSocket *socket) uint32_t PrrtSocket_get_rtt(PrrtSocket *socket) bint PrrtSocket_uses_thread_pinning(PrrtSocket *socket) bint PrrtSocket_enable_thread_pinning(PrrtSocket *socket) cdef extern from "proto/stores/receiveDataQueue.h": ctypedef struct PrrtReceiveDataQueue: Loading prrt/proto/socket.c +20 −8 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ PrrtSocket *PrrtSocket_create(const bool is_sender, prrtTimedelta_t target_delay s->isHardwareTimestamping = false; s->interfaceName = NULL; s->isThreadPinning = false; PrrtClock_init(&s->clock); s->isBound = false; Loading Loading @@ -83,6 +85,16 @@ PrrtSocket *PrrtSocket_create(const bool is_sender, prrtTimedelta_t target_delay return NULL; } bool PrrtSocket_enable_thread_pinning(PrrtSocket *s) { check(s->isBound == false, "Thread pinning can only be enabled before calling PrrtSocket_bind()"); s->isThreadPinning = true; return true; error: PERROR("PrrtSocket_enable_thread_pinning() failed.%s", ""); return false; } bool PrrtSocket_enable_hardware_timestamping(PrrtSocket *s, const char * interface_name) { check(s->isBound == false, "Hardware timestamping can only be enabled before calling PrrtSocket_bind()"); s->isHardwareTimestamping = true; Loading Loading @@ -160,8 +172,10 @@ bool PrrtSocket_bind(PrrtSocket *s, const char *ipAddress, const uint16_t port) pthread_attr_init(s->receiveFeedbackThreadAttr); s->sendDataThreadAttr = calloc(1, sizeof(pthread_attr_t)); pthread_attr_init(s->sendDataThreadAttr); if(s->isThreadPinning) { pin_thread_to_core(s->receiveFeedbackThreadAttr, 1); pin_thread_to_core(s->sendDataThreadAttr, 2); } check(pthread_create(&s->receiveFeedbackThread, s->receiveFeedbackThreadAttr, receive_feedback_loop, Loading @@ -174,7 +188,9 @@ bool PrrtSocket_bind(PrrtSocket *s, const char *ipAddress, const uint16_t port) } else { s->receiveDataThreadAttr = calloc(1, sizeof(pthread_attr_t)); pthread_attr_init(s->receiveDataThreadAttr); if(s->isThreadPinning) { pin_thread_to_core(s->receiveDataThreadAttr, 3); } check(pthread_create(&s->receiveDataThread, s->receiveDataThreadAttr, receive_data_loop, (void *) s) == EXIT_SUCCESS, Loading Loading @@ -518,11 +534,7 @@ bool PrrtSocket_cleanup(PrrtSocket *s) { } bool PrrtSocket_uses_thread_pinning(PrrtSocket *s) { #ifdef THREAD_PINNING return true; #else return false; #endif return atomic_load_explicit(&s->isThreadPinning, memory_order_acquire); } uint32_t PrrtSocket_get_rtt(PrrtSocket *s) { Loading prrt/proto/socket.h +5 −1 Original line number Diff line number Diff line Loading @@ -72,8 +72,10 @@ typedef struct prrtSocket { pthread_attr_t *sendDataThreadAttr; pthread_attr_t *receiveDataThreadAttr; bool isHardwareTimestamping; atomic_bool isHardwareTimestamping; char *interfaceName; atomic_bool isThreadPinning; } PrrtSocket; Loading @@ -81,6 +83,8 @@ PrrtSocket *PrrtSocket_create(bool is_sender, prrtTimedelta_t target_delay_us); bool PrrtSocket_enable_hardware_timestamping(PrrtSocket *s, const char * interface_name); bool PrrtSocket_enable_thread_pinning(PrrtSocket *s); bool PrrtSocket_bind(PrrtSocket *s, const char *ipAddress, const uint16_t port); bool PrrtSocket_set_sock_opt(PrrtSocket *s, const char *name, const uint32_t value); Loading prrt/prrt.pyx +6 −1 Original line number Diff line number Diff line Loading @@ -66,6 +66,9 @@ cdef extern from "util/bptree.c": cdef extern from "util/bitmap.c": pass cdef extern from "util/common.c": pass cdef extern from "util/list.c": pass Loading @@ -76,9 +79,11 @@ cdef class PrrtSocket: cdef cprrt.PrrtSocket* _c_socket cdef bint isSender def __cinit__(self, port, isSender, target_delay = 1): def __cinit__(self, port, isSender, target_delay = 1, thread_pinning = False): target_delay_us = target_delay * 1000**2 self._c_socket = cprrt.PrrtSocket_create(isSender, target_delay_us) if thread_pinning: cprrt.PrrtSocket_enable_thread_pinning(self._c_socket) cprrt.PrrtSocket_bind(self._c_socket, "0.0.0.0", port) self.isSender = isSender Loading Loading
prrt/CMakeLists.txt +0 −6 Original line number Diff line number Diff line Loading @@ -4,12 +4,6 @@ if (DEBUG) add_definitions(-DDEBUG) endif() option(THREAD_PINNING "Sender and receiver threads are pinned to a core." OFF) if (THREAD_PINNING) add_definitions(-DTHREAD_PINNING) endif() option(XLAP "Run XLAP to trace packets." OFF) if (XLAP) Loading
prrt/cprrt.pxd +4 −4 Original line number Diff line number Diff line Loading @@ -11,9 +11,6 @@ cdef extern from "pthread.h" nogil: ctypedef struct pthread_cond_t: pass cdef extern from "py_defines.h": pass cdef extern from "proto/vdmcode/block_code.h": cdef struct prrtCoder: pass Loading Loading @@ -124,9 +121,12 @@ cdef extern from "proto/socket.h": int32_t PrrtSocket_timedrecv(PrrtSocket *sock_ptr, void *buf_ptr, const uint32_t wait_time) nogil bint PrrtSocket_set_sock_opt(PrrtSocket *sock_ptr, const_char *name, const uint32_t value) uint32_t PrrtSocket_get_sock_opt(PrrtSocket *sock_ptr, const_char *name) bint PrrtSocket_uses_thread_pinning(PrrtSocket *socket) uint32_t PrrtSocket_get_rtt(PrrtSocket *socket) bint PrrtSocket_uses_thread_pinning(PrrtSocket *socket) bint PrrtSocket_enable_thread_pinning(PrrtSocket *socket) cdef extern from "proto/stores/receiveDataQueue.h": ctypedef struct PrrtReceiveDataQueue: Loading
prrt/proto/socket.c +20 −8 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ PrrtSocket *PrrtSocket_create(const bool is_sender, prrtTimedelta_t target_delay s->isHardwareTimestamping = false; s->interfaceName = NULL; s->isThreadPinning = false; PrrtClock_init(&s->clock); s->isBound = false; Loading Loading @@ -83,6 +85,16 @@ PrrtSocket *PrrtSocket_create(const bool is_sender, prrtTimedelta_t target_delay return NULL; } bool PrrtSocket_enable_thread_pinning(PrrtSocket *s) { check(s->isBound == false, "Thread pinning can only be enabled before calling PrrtSocket_bind()"); s->isThreadPinning = true; return true; error: PERROR("PrrtSocket_enable_thread_pinning() failed.%s", ""); return false; } bool PrrtSocket_enable_hardware_timestamping(PrrtSocket *s, const char * interface_name) { check(s->isBound == false, "Hardware timestamping can only be enabled before calling PrrtSocket_bind()"); s->isHardwareTimestamping = true; Loading Loading @@ -160,8 +172,10 @@ bool PrrtSocket_bind(PrrtSocket *s, const char *ipAddress, const uint16_t port) pthread_attr_init(s->receiveFeedbackThreadAttr); s->sendDataThreadAttr = calloc(1, sizeof(pthread_attr_t)); pthread_attr_init(s->sendDataThreadAttr); if(s->isThreadPinning) { pin_thread_to_core(s->receiveFeedbackThreadAttr, 1); pin_thread_to_core(s->sendDataThreadAttr, 2); } check(pthread_create(&s->receiveFeedbackThread, s->receiveFeedbackThreadAttr, receive_feedback_loop, Loading @@ -174,7 +188,9 @@ bool PrrtSocket_bind(PrrtSocket *s, const char *ipAddress, const uint16_t port) } else { s->receiveDataThreadAttr = calloc(1, sizeof(pthread_attr_t)); pthread_attr_init(s->receiveDataThreadAttr); if(s->isThreadPinning) { pin_thread_to_core(s->receiveDataThreadAttr, 3); } check(pthread_create(&s->receiveDataThread, s->receiveDataThreadAttr, receive_data_loop, (void *) s) == EXIT_SUCCESS, Loading Loading @@ -518,11 +534,7 @@ bool PrrtSocket_cleanup(PrrtSocket *s) { } bool PrrtSocket_uses_thread_pinning(PrrtSocket *s) { #ifdef THREAD_PINNING return true; #else return false; #endif return atomic_load_explicit(&s->isThreadPinning, memory_order_acquire); } uint32_t PrrtSocket_get_rtt(PrrtSocket *s) { Loading
prrt/proto/socket.h +5 −1 Original line number Diff line number Diff line Loading @@ -72,8 +72,10 @@ typedef struct prrtSocket { pthread_attr_t *sendDataThreadAttr; pthread_attr_t *receiveDataThreadAttr; bool isHardwareTimestamping; atomic_bool isHardwareTimestamping; char *interfaceName; atomic_bool isThreadPinning; } PrrtSocket; Loading @@ -81,6 +83,8 @@ PrrtSocket *PrrtSocket_create(bool is_sender, prrtTimedelta_t target_delay_us); bool PrrtSocket_enable_hardware_timestamping(PrrtSocket *s, const char * interface_name); bool PrrtSocket_enable_thread_pinning(PrrtSocket *s); bool PrrtSocket_bind(PrrtSocket *s, const char *ipAddress, const uint16_t port); bool PrrtSocket_set_sock_opt(PrrtSocket *s, const char *name, const uint32_t value); Loading
prrt/prrt.pyx +6 −1 Original line number Diff line number Diff line Loading @@ -66,6 +66,9 @@ cdef extern from "util/bptree.c": cdef extern from "util/bitmap.c": pass cdef extern from "util/common.c": pass cdef extern from "util/list.c": pass Loading @@ -76,9 +79,11 @@ cdef class PrrtSocket: cdef cprrt.PrrtSocket* _c_socket cdef bint isSender def __cinit__(self, port, isSender, target_delay = 1): def __cinit__(self, port, isSender, target_delay = 1, thread_pinning = False): target_delay_us = target_delay * 1000**2 self._c_socket = cprrt.PrrtSocket_create(isSender, target_delay_us) if thread_pinning: cprrt.PrrtSocket_enable_thread_pinning(self._c_socket) cprrt.PrrtSocket_bind(self._c_socket, "0.0.0.0", port) self.isSender = isSender Loading