Module: kamailio Branch: master Commit: 4e474036be1d862e63536ad94cc284c52e04a8a6 URL: https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad94cc284c5...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2025-07-17T08:48:54+02:00
misctest: modparam and function to test internal locks with pthreads
---
Modified: src/modules/misctest/misctest_mod.c
---
Diff: https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad94cc284c5... Patch: https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad94cc284c5...
---
diff --git a/src/modules/misctest/misctest_mod.c b/src/modules/misctest/misctest_mod.c index 50863ea1554..519d68ab81a 100644 --- a/src/modules/misctest/misctest_mod.c +++ b/src/modules/misctest/misctest_mod.c @@ -59,6 +59,7 @@ static int mt_mem_alloc_f(struct sip_msg *, char *, char *); static int mt_mem_free_f(struct sip_msg *, char *, char *); static int mt_tcp_thread_exec_f(sip_msg_t *, char *, char *); static int mt_lock_test_f(struct sip_msg *, char *, char *); +static int mt_lock_threads_f(sip_msg_t *, char *, char *); static int mod_init(void); static void mod_destroy(void);
@@ -71,12 +72,17 @@ static int misctest_message = 0; static str misctest_message_data = STR_NULL; static str misctest_message_file = STR_NULL;
+static int misctest_lock_threads_mode = 0; +gen_lock_t *_misctest_lock_threads = NULL; + /* clang-format off */ static cmd_export_t cmds[]={ {"mt_mem_alloc", mt_mem_alloc_f, 1, fixup_var_int_1, 0, ANY_ROUTE}, {"mt_mem_free", mt_mem_free_f, 1, fixup_var_int_1, 0, ANY_ROUTE}, {"mt_tcp_thread_exec", mt_tcp_thread_exec_f, 1, fixup_spve_null, 0, ANY_ROUTE}, {"mt_lock_test", mt_lock_test_f, 1, fixup_var_int_1, 0, ANY_ROUTE}, + {"mt_lock_threads", mt_lock_threads_f, 1, fixup_igp_null, + fixup_free_igp_null, ANY_ROUTE}, {0, 0, 0, 0, 0} }; /* clang-format on */ @@ -125,6 +131,7 @@ static param_export_t params[]={ {"message_data", PARAM_STR, &misctest_message_data}, {"message_file", PARAM_STR, &misctest_message_file}, {"mem_check_content", PARAM_INT, &default_mt_cfg.mem_check_content}, + {"lock_threads_mode", PARAM_INT, &misctest_lock_threads_mode}, {0,0,0} }; /* clang-format on */ @@ -285,6 +292,15 @@ static int mod_init(void) return -1; }
+ if(misctest_lock_threads_mode != 0) { + _misctest_lock_threads = lock_alloc(); + if(_misctest_lock_threads == NULL) { + LM_ERR("failed to alloc lock\n"); + goto error; + } + lock_init(_misctest_lock_threads); + } + return 0; error: return -1; @@ -1021,6 +1037,48 @@ static int mt_lock_test_f(struct sip_msg *msg, char *sz, char *foo) return lock_test(size) >= 0 ? 1 : -1; }
+static void *mt_lock_threads_exec(void *param) +{ + int pidx = 0; + + pidx = (int)(long)param; + + while(1) { + LM_INFO("==== before acquiring the lock (idx: %d)\n", pidx); + lock_get(_misctest_lock_threads); + LM_INFO("==== after acquiring the lock (idx: %d)\n", pidx); + } + return NULL; +} + +static int mt_lock_threads_f(sip_msg_t *msg, char *pn, char *p2) +{ + int i; + int n; + pthread_t tid; + + if(fixup_get_ivalue(msg, (gparam_t *)pn, &n) < 0) { + LM_ERR("invalid parameter\n"); + return -1; + } + + if(_misctest_lock_threads == NULL) { + LM_ERR("the lock is not initialized\n"); + goto error; + } + + for(i = 0; i < n; i++) { + if(pthread_create(&tid, NULL, mt_lock_threads_exec, (void *)(long)i)) { + LM_ERR("failed to start all worker threads\n"); + goto error; + } + } + + return 1; + +error: + return -1; +}
/* RPC exports: */
Thanks for adding this. I was thinking of adding a timer-based approach for concurrent locking stress (similar as the memory tests), but this is probably more suitable. We will test it as well today.
Cheers,
Henning
-----Original Message----- From: Daniel-Constantin Mierla via sr-dev sr-dev@lists.kamailio.org Sent: Donnerstag, 17. Juli 2025 09:26 To: sr-dev@lists.kamailio.org Cc: Daniel-Constantin Mierla miconda@gmail.com Subject: [sr-dev] git:master:4e474036: misctest: modparam and function to test internal locks with pthreads
Module: kamailio Branch: master Commit: 4e474036be1d862e63536ad94cc284c52e04a8a6 URL: https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad 94cc284c52e04a8a6
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2025-07-17T08:48:54+02:00
misctest: modparam and function to test internal locks with pthreads
Modified: src/modules/misctest/misctest_mod.c
Diff: https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad 94cc284c52e04a8a6.diff Patch: https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad 94cc284c52e04a8a6.patch
diff --git a/src/modules/misctest/misctest_mod.c b/src/modules/misctest/misctest_mod.c index 50863ea1554..519d68ab81a 100644 --- a/src/modules/misctest/misctest_mod.c +++ b/src/modules/misctest/misctest_mod.c @@ -59,6 +59,7 @@ static int mt_mem_alloc_f(struct sip_msg *, char *, char *); static int mt_mem_free_f(struct sip_msg *, char *, char *); static int mt_tcp_thread_exec_f(sip_msg_t *, char *, char *); static int mt_lock_test_f(struct sip_msg *, char *, char *); +static int mt_lock_threads_f(sip_msg_t *, char *, char *); static int mod_init(void); static void mod_destroy(void);
@@ -71,12 +72,17 @@ static int misctest_message = 0; static str misctest_message_data = STR_NULL; static str misctest_message_file = STR_NULL;
+static int misctest_lock_threads_mode = 0; gen_lock_t +*_misctest_lock_threads = NULL;
/* clang-format off */ static cmd_export_t cmds[]={ {"mt_mem_alloc", mt_mem_alloc_f, 1, fixup_var_int_1, 0, ANY_ROUTE}, {"mt_mem_free", mt_mem_free_f, 1, fixup_var_int_1, 0, ANY_ROUTE}, {"mt_tcp_thread_exec", mt_tcp_thread_exec_f, 1, fixup_spve_null, 0, ANY_ROUTE}, {"mt_lock_test", mt_lock_test_f, 1, fixup_var_int_1, 0, ANY_ROUTE},
- {"mt_lock_threads", mt_lock_threads_f, 1, fixup_igp_null,
{0, 0, 0, 0, 0}fixup_free_igp_null, ANY_ROUTE},
}; /* clang-format on */ @@ -125,6 +131,7 @@ static param_export_t params[]={ {"message_data", PARAM_STR, &misctest_message_data}, {"message_file", PARAM_STR, &misctest_message_file}, {"mem_check_content", PARAM_INT, &default_mt_cfg.mem_check_content},
- {"lock_threads_mode", PARAM_INT, &misctest_lock_threads_mode}, {0,0,0}
}; /* clang-format on */ @@ -285,6 +292,15 @@ static int mod_init(void) return -1; }
- if(misctest_lock_threads_mode != 0) {
_misctest_lock_threads = lock_alloc();
if(_misctest_lock_threads == NULL) {
LM_ERR("failed to alloc lock\n");
goto error;
}
lock_init(_misctest_lock_threads);
- }
- return 0;
error: return -1; @@ -1021,6 +1037,48 @@ static int mt_lock_test_f(struct sip_msg *msg, char *sz, char *foo) return lock_test(size) >= 0 ? 1 : -1; }
+static void *mt_lock_threads_exec(void *param) {
- int pidx = 0;
- pidx = (int)(long)param;
- while(1) {
LM_INFO("==== before acquiring the lock (idx: %d)\n", pidx);
lock_get(_misctest_lock_threads);
LM_INFO("==== after acquiring the lock (idx: %d)\n", pidx);
- }
- return NULL;
+}
+static int mt_lock_threads_f(sip_msg_t *msg, char *pn, char *p2) {
- int i;
- int n;
- pthread_t tid;
- if(fixup_get_ivalue(msg, (gparam_t *)pn, &n) < 0) {
LM_ERR("invalid parameter\n");
return -1;
- }
- if(_misctest_lock_threads == NULL) {
LM_ERR("the lock is not initialized\n");
goto error;
- }
- for(i = 0; i < n; i++) {
if(pthread_create(&tid, NULL, mt_lock_threads_exec, (void
*)(long)i)) {
LM_ERR("failed to start all worker threads\n");
goto error;
}
- }
- return 1;
+error:
- return -1;
+}
/* RPC exports: */
Kamailio - Development Mailing List -- sr-dev@lists.kamailio.org To unsubscribe send an email to sr-dev-leave@lists.kamailio.org Important: keep the mailing list in the recipients, do not reply only to the sender!
The misctest function(s) purpose is to test if internal locks are safe to use across many threads, added them to be able to test easier on different CPUs . Not sure if that's what you look for, you can add more if you need something else.
Cheers, Daniel
On 17.07.25 09:46, Henning Westerholt wrote:
Thanks for adding this. I was thinking of adding a timer-based approach for concurrent locking stress (similar as the memory tests), but this is probably more suitable. We will test it as well today.
Cheers,
Henning
-----Original Message----- From: Daniel-Constantin Mierla via sr-dev sr-dev@lists.kamailio.org Sent: Donnerstag, 17. Juli 2025 09:26 To: sr-dev@lists.kamailio.org Cc: Daniel-Constantin Mierla miconda@gmail.com Subject: [sr-dev] git:master:4e474036: misctest: modparam and function to test internal locks with pthreads
Module: kamailio Branch: master Commit: 4e474036be1d862e63536ad94cc284c52e04a8a6 URL: https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad 94cc284c52e04a8a6
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2025-07-17T08:48:54+02:00
misctest: modparam and function to test internal locks with pthreads
Modified: src/modules/misctest/misctest_mod.c
Diff: https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad 94cc284c52e04a8a6.diff Patch: https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad 94cc284c52e04a8a6.patch
diff --git a/src/modules/misctest/misctest_mod.c b/src/modules/misctest/misctest_mod.c index 50863ea1554..519d68ab81a 100644 --- a/src/modules/misctest/misctest_mod.c +++ b/src/modules/misctest/misctest_mod.c @@ -59,6 +59,7 @@ static int mt_mem_alloc_f(struct sip_msg *, char *, char *); static int mt_mem_free_f(struct sip_msg *, char *, char *); static int mt_tcp_thread_exec_f(sip_msg_t *, char *, char *); static int mt_lock_test_f(struct sip_msg *, char *, char *); +static int mt_lock_threads_f(sip_msg_t *, char *, char *); static int mod_init(void); static void mod_destroy(void);
@@ -71,12 +72,17 @@ static int misctest_message = 0; static str misctest_message_data = STR_NULL; static str misctest_message_file = STR_NULL;
+static int misctest_lock_threads_mode = 0; gen_lock_t +*_misctest_lock_threads = NULL;
/* clang-format off */ static cmd_export_t cmds[]={ {"mt_mem_alloc", mt_mem_alloc_f, 1, fixup_var_int_1, 0, ANY_ROUTE}, {"mt_mem_free", mt_mem_free_f, 1, fixup_var_int_1, 0, ANY_ROUTE}, {"mt_tcp_thread_exec", mt_tcp_thread_exec_f, 1, fixup_spve_null, 0, ANY_ROUTE}, {"mt_lock_test", mt_lock_test_f, 1, fixup_var_int_1, 0, ANY_ROUTE},
- {"mt_lock_threads", mt_lock_threads_f, 1, fixup_igp_null,
{0, 0, 0, 0, 0}fixup_free_igp_null, ANY_ROUTE},
}; /* clang-format on */ @@ -125,6 +131,7 @@ static param_export_t params[]={ {"message_data", PARAM_STR, &misctest_message_data}, {"message_file", PARAM_STR, &misctest_message_file}, {"mem_check_content", PARAM_INT, &default_mt_cfg.mem_check_content},
- {"lock_threads_mode", PARAM_INT, &misctest_lock_threads_mode}, {0,0,0}
}; /* clang-format on */ @@ -285,6 +292,15 @@ static int mod_init(void) return -1; }
- if(misctest_lock_threads_mode != 0) {
_misctest_lock_threads = lock_alloc();
if(_misctest_lock_threads == NULL) {
LM_ERR("failed to alloc lock\n");
goto error;
}
lock_init(_misctest_lock_threads);
- }
- return 0;
error: return -1; @@ -1021,6 +1037,48 @@ static int mt_lock_test_f(struct sip_msg *msg, char *sz, char *foo) return lock_test(size) >= 0 ? 1 : -1; }
+static void *mt_lock_threads_exec(void *param) {
- int pidx = 0;
- pidx = (int)(long)param;
- while(1) {
LM_INFO("==== before acquiring the lock (idx: %d)\n", pidx);
lock_get(_misctest_lock_threads);
LM_INFO("==== after acquiring the lock (idx: %d)\n", pidx);
- }
- return NULL;
+}
+static int mt_lock_threads_f(sip_msg_t *msg, char *pn, char *p2) {
- int i;
- int n;
- pthread_t tid;
- if(fixup_get_ivalue(msg, (gparam_t *)pn, &n) < 0) {
LM_ERR("invalid parameter\n");
return -1;
- }
- if(_misctest_lock_threads == NULL) {
LM_ERR("the lock is not initialized\n");
goto error;
- }
- for(i = 0; i < n; i++) {
if(pthread_create(&tid, NULL, mt_lock_threads_exec, (void
*)(long)i)) {
LM_ERR("failed to start all worker threads\n");
goto error;
}
- }
- return 1;
+error:
- return -1;
+}
/* RPC exports: */
Kamailio - Development Mailing List -- sr-dev@lists.kamailio.org To unsubscribe send an email to sr-dev-leave@lists.kamailio.org Important: keep the mailing list in the recipients, do not reply only to the sender!
Understood, thanks. We are looking right now into a problem (possible performance regression) related to specific Linux kernels FUTEX implementations. So, we were interested in locking performance tests and added the other extension yesterday.
Cheers,
Henning
From: Daniel-Constantin Mierla miconda@gmail.com Sent: Donnerstag, 17. Juli 2025 10:08 To: Henning Westerholt hw@gilawa.com; Kamailio (SER) - Development Mailing List sr-dev@lists.kamailio.org Subject: Re: [sr-dev] git:master:4e474036: misctest: modparam and function to test internal locks with pthreads
The misctest function(s) purpose is to test if internal locks are safe to use across many threads, added them to be able to test easier on different CPUs . Not sure if that's what you look for, you can add more if you need something else.
Cheers, Daniel On 17.07.25 09:46, Henning Westerholt wrote:
Thanks for adding this. I was thinking of adding a timer-based approach for concurrent locking stress (similar as the memory tests), but this is probably more suitable. We will test it as well today.
Cheers,
Henning
-----Original Message-----
From: Daniel-Constantin Mierla via sr-dev sr-dev@lists.kamailio.orgmailto:sr-dev@lists.kamailio.org
Sent: Donnerstag, 17. Juli 2025 09:26
To: sr-dev@lists.kamailio.orgmailto:sr-dev@lists.kamailio.org
Cc: Daniel-Constantin Mierla miconda@gmail.commailto:miconda@gmail.com
Subject: [sr-dev] git:master:4e474036: misctest: modparam and function to
test internal locks with pthreads
Module: kamailio
Branch: master
Commit: 4e474036be1d862e63536ad94cc284c52e04a8a6
URL:
https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad
94cc284c52e04a8a6
Author: Daniel-Constantin Mierla miconda@gmail.commailto:miconda@gmail.com
Committer: Daniel-Constantin Mierla miconda@gmail.commailto:miconda@gmail.com
Date: 2025-07-17T08:48:54+02:00
misctest: modparam and function to test internal locks with pthreads
---
Modified: src/modules/misctest/misctest_mod.c
---
Diff:
https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad
94cc284c52e04a8a6.diff
Patch:
https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad
94cc284c52e04a8a6.patch
---
diff --git a/src/modules/misctest/misctest_mod.c
b/src/modules/misctest/misctest_mod.c
index 50863ea1554..519d68ab81a 100644
--- a/src/modules/misctest/misctest_mod.c
+++ b/src/modules/misctest/misctest_mod.c
@@ -59,6 +59,7 @@ static int mt_mem_alloc_f(struct sip_msg *, char *, char
*); static int mt_mem_free_f(struct sip_msg *, char *, char *); static int
mt_tcp_thread_exec_f(sip_msg_t *, char *, char *); static int
mt_lock_test_f(struct sip_msg *, char *, char *);
+static int mt_lock_threads_f(sip_msg_t *, char *, char *);
static int mod_init(void);
static void mod_destroy(void);
@@ -71,12 +72,17 @@ static int misctest_message = 0; static str
misctest_message_data = STR_NULL; static str misctest_message_file =
STR_NULL;
+static int misctest_lock_threads_mode = 0; gen_lock_t
+*_misctest_lock_threads = NULL;
+
/* clang-format off */
static cmd_export_t cmds[]={
{"mt_mem_alloc", mt_mem_alloc_f, 1, fixup_var_int_1, 0,
ANY_ROUTE},
{"mt_mem_free", mt_mem_free_f, 1, fixup_var_int_1, 0,
ANY_ROUTE},
{"mt_tcp_thread_exec", mt_tcp_thread_exec_f, 1, fixup_spve_null, 0,
ANY_ROUTE},
{"mt_lock_test", mt_lock_test_f, 1, fixup_var_int_1, 0, ANY_ROUTE},
+ {"mt_lock_threads", mt_lock_threads_f, 1, fixup_igp_null,
+ fixup_free_igp_null, ANY_ROUTE},
{0, 0, 0, 0, 0}
};
/* clang-format on */
@@ -125,6 +131,7 @@ static param_export_t params[]={
{"message_data", PARAM_STR, &misctest_message_data},
{"message_file", PARAM_STR, &misctest_message_file},
{"mem_check_content", PARAM_INT,
&default_mt_cfg.mem_check_content},
+ {"lock_threads_mode", PARAM_INT, &misctest_lock_threads_mode},
{0,0,0}
};
/* clang-format on */
@@ -285,6 +292,15 @@ static int mod_init(void)
return -1;
}
+ if(misctest_lock_threads_mode != 0) {
+ _misctest_lock_threads = lock_alloc();
+ if(_misctest_lock_threads == NULL) {
+ LM_ERR("failed to alloc lock\n");
+ goto error;
+ }
+ lock_init(_misctest_lock_threads);
+ }
+
return 0;
error:
return -1;
@@ -1021,6 +1037,48 @@ static int mt_lock_test_f(struct sip_msg *msg,
char *sz, char *foo)
return lock_test(size) >= 0 ? 1 : -1;
}
+static void *mt_lock_threads_exec(void *param) {
+ int pidx = 0;
+
+ pidx = (int)(long)param;
+
+ while(1) {
+ LM_INFO("==== before acquiring the lock (idx: %d)\n", pidx);
+ lock_get(_misctest_lock_threads);
+ LM_INFO("==== after acquiring the lock (idx: %d)\n", pidx);
+ }
+ return NULL;
+}
+
+static int mt_lock_threads_f(sip_msg_t *msg, char *pn, char *p2) {
+ int i;
+ int n;
+ pthread_t tid;
+
+ if(fixup_get_ivalue(msg, (gparam_t *)pn, &n) < 0) {
+ LM_ERR("invalid parameter\n");
+ return -1;
+ }
+
+ if(_misctest_lock_threads == NULL) {
+ LM_ERR("the lock is not initialized\n");
+ goto error;
+ }
+
+ for(i = 0; i < n; i++) {
+ if(pthread_create(&tid, NULL, mt_lock_threads_exec, (void
*)(long)i)) {
+ LM_ERR("failed to start all worker threads\n");
+ goto error;
+ }
+ }
+
+ return 1;
+
+error:
+ return -1;
+}
/* RPC exports: */
_______________________________________________
Kamailio - Development Mailing List -- sr-dev@lists.kamailio.orgmailto:sr-dev@lists.kamailio.org To
unsubscribe send an email to sr-dev-leave@lists.kamailio.orgmailto:sr-dev-leave@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the
sender!
--
Daniel-Constantin Mierla (@ asipto.com)
twitter.com/miconda -- linkedin.com/in/miconda
Kamailio Consultancy, Training and Development Services -- asipto.com