From e33be771e4d9e5a88119f4e3af6259e01257c8a5 Mon Sep 17 00:00:00 2001 From: Dimitri Staessens Date: Sun, 11 Jul 2021 14:01:15 +0200 Subject: ipcpd: Reduce Linux slack timer This will reduce the linux high resolution slack timer in IPCPs. Linux default for userspace processes is 50us. It is configurable at build using IPCP_LINUX_SLACKTIMER_NS. Default is now 1us. Signed-off-by: Dimitri Staessens Signed-off-by: Sander Vrijders --- src/ipcpd/CMakeLists.txt | 4 ++++ src/ipcpd/config.h.in | 2 ++ src/ipcpd/ipcp.c | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/src/ipcpd/CMakeLists.txt b/src/ipcpd/CMakeLists.txt index fb6162cd..1ce1bc0d 100644 --- a/src/ipcpd/CMakeLists.txt +++ b/src/ipcpd/CMakeLists.txt @@ -16,6 +16,10 @@ set(IPCP_CONN_WAIT_DIR TRUE CACHE BOOL "Check the running state of the directory when adding a dt connection") set(DHT_ENROLL_SLACK 50 CACHE STRING "DHT enrollment waiting time (0-999, ms)") +if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(IPCP_LINUX_TIMERSLACK_NS 1000 CACHE STRING + "Slack value for high resolution timers on Linux systems.") +endif () if ((IPCP_QOS_CUBE_BE_PRIO LESS 0) OR (IPCP_QOS_CUBE_BE_PRIO GREATER 99)) message(FATAL_ERROR "Invalid priority for best effort QoS cube") diff --git a/src/ipcpd/config.h.in b/src/ipcpd/config.h.in index ba4c3260..0bf3ad69 100644 --- a/src/ipcpd/config.h.in +++ b/src/ipcpd/config.h.in @@ -39,6 +39,8 @@ #define IPCP_ADD_THREADS @IPCP_ADD_THREADS@ #cmakedefine HAVE_LIBGCRYPT +#define IPCP_LINUX_SLACK_NS @IPCP_LINUX_TIMERSLACK_NS@ + /* unicast IPCP */ #define QOS_PRIO_BE @IPCP_QOS_CUBE_BE_PRIO@ #define QOS_PRIO_VIDEO @IPCP_QOS_CUBE_VIDEO_PRIO@ diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c index 59fbdba6..ab2f88f8 100644 --- a/src/ipcpd/ipcp.c +++ b/src/ipcpd/ipcp.c @@ -53,6 +53,7 @@ #include #include #include +#include #include #if defined(__linux__) && !defined(DISABLE_CORE_LOCK) #include @@ -710,6 +711,9 @@ int ipcp_init(int argc, ipcpi.state = IPCP_NULL; ipcpi.type = type; +#if defined (__linux__) + prctl(PR_SET_TIMERSLACK, IPCP_LINUX_SLACK_NS, 0, 0, 0); +#endif ipcpi.sock_path = ipcp_sock_path(getpid()); if (ipcpi.sock_path == NULL) goto fail_sock_path; -- cgit v1.2.3