All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] Add env vars for session and cpu-affinity
@ 2024-08-22  8:07 Simon Graber
  2024-08-22  8:07 ` [PATCH 1/3] lib/copperplate: Get session name from env var Simon Graber
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Simon Graber @ 2024-08-22  8:07 UTC (permalink / raw)
  To: xenomai; +Cc: upstream+xenomai, Simon Graber

Hello,

This patch set introduces two environment variables, for session
and cpu-affinity. This is to avoid having to pass them as args which
was suboptimal for larger projects with many helper programs.

The first two patches in lib/ add checks for the presence of env vars,
the third patch utilizes these for the alchemy tests.

Simon Graber (3):
  lib/copperplate: Get session name from env var
  lib/boilerplate: Get cpu-affinity from env var
  alchemytests: Set cpu-affinity by env var

 lib/boilerplate/setup.c                      | 16 +++++++++++++++
 lib/copperplate/init.c                       | 21 ++++++++++++++------
 testsuite/smokey/alchemytests/alchemytests.c | 10 +++++++++-
 3 files changed, 40 insertions(+), 7 deletions(-)

-- 
2.46.0


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/3] lib/copperplate: Get session name from env var
  2024-08-22  8:07 [PATCH 0/3] Add env vars for session and cpu-affinity Simon Graber
@ 2024-08-22  8:07 ` Simon Graber
  2024-08-22 10:51   ` Jan Kiszka
  2024-08-22  8:07 ` [PATCH 2/3] lib/boilerplate: Get cpu-affinity " Simon Graber
  2024-08-22  8:07 ` [PATCH 3/3] alchemytests: Set cpu-affinity by " Simon Graber
  2 siblings, 1 reply; 10+ messages in thread
From: Simon Graber @ 2024-08-22  8:07 UTC (permalink / raw)
  To: xenomai; +Cc: upstream+xenomai, Simon Graber

At present, for two Xenomai processes to share resources, they must
be started with identical --session= parameters.
This is cumbersome for extensive projects involving numerous helper
processes. This commit allows the specification of the session name
via a global environment variable, namely XENO_SESSION_NAME.
The --session= parameter overrules the environment variable.

Signed-off-by: Simon Graber <simon.graber@sigma-star.at>
---
 lib/copperplate/init.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/lib/copperplate/init.c b/lib/copperplate/init.c
index 16fc59f..e695c52 100644
--- a/lib/copperplate/init.c
+++ b/lib/copperplate/init.c
@@ -114,19 +114,28 @@ static int get_session_root(int *regflags_r)
 {
 	char *sessdir, *session;
 	struct passwd *pw;
+	char *sn_env;
 	int ret;
 
 	pw = getpwuid(geteuid());
 	if (pw == NULL)
 		return -errno;
 
+	sn_env = getenv("XENO_SESSION_NAME");
 	if (__copperplate_setup_data.session_label == NULL) {
-		ret = asprintf(&session, "anon@%d", __node_id);
-		if (ret < 0)
-			return -ENOMEM;
-		__copperplate_setup_data.session_label = session;
-		*regflags_r |= REGISTRY_ANON;
-	} else if (strchr(__copperplate_setup_data.session_label, '/')) {
+		if (sn_env) {
+			__copperplate_setup_data.session_label = strdup(sn_env);
+			if (__copperplate_setup_data.session_label == NULL)
+				return -ENOMEM;
+		} else {
+			ret = asprintf(&session, "anon@%d", __node_id);
+			if (ret < 0)
+				return -ENOMEM;
+			__copperplate_setup_data.session_label = session;
+			*regflags_r |= REGISTRY_ANON;
+		}
+	}
+	if (strchr(__copperplate_setup_data.session_label, '/')) {
 		warning("session name may not contain slashes");
 		return -EINVAL;
 	}
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/3] lib/boilerplate: Get cpu-affinity from env var
  2024-08-22  8:07 [PATCH 0/3] Add env vars for session and cpu-affinity Simon Graber
  2024-08-22  8:07 ` [PATCH 1/3] lib/copperplate: Get session name from env var Simon Graber
@ 2024-08-22  8:07 ` Simon Graber
  2024-08-22  8:07 ` [PATCH 3/3] alchemytests: Set cpu-affinity by " Simon Graber
  2 siblings, 0 replies; 10+ messages in thread
From: Simon Graber @ 2024-08-22  8:07 UTC (permalink / raw)
  To: xenomai; +Cc: upstream+xenomai, Simon Graber

It might be helpful to specify the cpu-affinity via an env var,
XENO_CPU_AFFINITY.
This commit adds a helper function, called in __xenomai_init.
The --cpu-affinity= parameter overrules the environment variable.

Signed-off-by: Simon Graber <simon.graber@sigma-star.at>
---
 lib/boilerplate/setup.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/lib/boilerplate/setup.c b/lib/boilerplate/setup.c
index 26c8c4c..4249cd2 100644
--- a/lib/boilerplate/setup.c
+++ b/lib/boilerplate/setup.c
@@ -383,6 +383,19 @@ void xenomai_usage(void)
         fprintf(stderr, "--help				display help\n");
 }
 
+static int get_affinity_env(void)
+{
+	char *affinity_env;
+
+	int ret = 0;
+
+	affinity_env = getenv("XENO_CPU_AFFINITY");
+	if (affinity_env) {
+		ret = collect_cpu_affinity(affinity_env);
+	}
+	return ret;
+}
+
 static int parse_base_options(int *argcp, char **uargv,
 			      const struct option *options,
 			      int base_opt_start)
@@ -560,6 +573,9 @@ static void __xenomai_init(int *argcp, char *const **argvp, const char *me)
 	/* Retrieve the default CPU affinity. */
 	retrieve_default_cpu_affinity();
 
+	/* Environment variables can be overruled by arguments */
+	get_affinity_env();
+
 	/*
 	 * Parse the base options first, to bootstrap the core with
 	 * the right config values.
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/3] alchemytests: Set cpu-affinity by env var
  2024-08-22  8:07 [PATCH 0/3] Add env vars for session and cpu-affinity Simon Graber
  2024-08-22  8:07 ` [PATCH 1/3] lib/copperplate: Get session name from env var Simon Graber
  2024-08-22  8:07 ` [PATCH 2/3] lib/boilerplate: Get cpu-affinity " Simon Graber
@ 2024-08-22  8:07 ` Simon Graber
  2 siblings, 0 replies; 10+ messages in thread
From: Simon Graber @ 2024-08-22  8:07 UTC (permalink / raw)
  To: xenomai; +Cc: upstream+xenomai, Simon Graber

The alchemy test runner can now make use of
the XENO_CPU_AFFINITY environment variable by setting it before
dispatching to the inidvidual test programs.

Signed-off-by: Simon Graber <simon.graber@sigma-star.at>
---
 testsuite/smokey/alchemytests/alchemytests.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/testsuite/smokey/alchemytests/alchemytests.c b/testsuite/smokey/alchemytests/alchemytests.c
index cf9f970..edbafe6 100644
--- a/testsuite/smokey/alchemytests/alchemytests.c
+++ b/testsuite/smokey/alchemytests/alchemytests.c
@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 #include <string.h>
+#include <stdlib.h>
 #include <smokey/smokey.h>
 
 static const char * const tests[] = {
@@ -31,12 +32,19 @@ static const char * const tests[] = {
 
 static int run_alchemytests(struct smokey_test *t, int argc, char *const argv[])
 {
-	const char *args = "--vm --cpu-affinity=0";
 	const char *const mod = "xeno_rtipc";
+	const char *args = "--vm";
 	int test_ret = 0;
 	int ret = 0;
 	int tmp;
 
+	ret = setenv("XENO_CPU_AFFINITY", "0", 0);
+	if (ret != 0) {
+		fprintf(stderr, "%s failed to set XENO_CPU_AFFINITY: %m\n",
+			__func__);
+		return ret;
+	}
+
 	/* Try loading the xeno_rtipc module as the pipe test depends on it */
 	tmp = smokey_modprobe(mod, true);
 	if (tmp)
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/3] lib/copperplate: Get session name from env var
  2024-08-22  8:07 ` [PATCH 1/3] lib/copperplate: Get session name from env var Simon Graber
@ 2024-08-22 10:51   ` Jan Kiszka
  2024-08-22 10:57     ` Richard Weinberger
  2024-08-22 11:38     ` Simon
  0 siblings, 2 replies; 10+ messages in thread
From: Jan Kiszka @ 2024-08-22 10:51 UTC (permalink / raw)
  To: Simon Graber, xenomai; +Cc: upstream+xenomai

On 22.08.24 10:07, Simon Graber wrote:
> At present, for two Xenomai processes to share resources, they must
> be started with identical --session= parameters.
> This is cumbersome for extensive projects involving numerous helper
> processes. This commit allows the specification of the session name
> via a global environment variable, namely XENO_SESSION_NAME.
> The --session= parameter overrules the environment variable.

Hmm, did we discuss priorities already, and did I say that this ordering
would be best? Then I'm no longer that sure, and my feeling is rather
that env should overrule command line. Still looking for other examples,
though.

> 
> Signed-off-by: Simon Graber <simon.graber@sigma-star.at>
> ---
>  lib/copperplate/init.c | 21 +++++++++++++++------
>  1 file changed, 15 insertions(+), 6 deletions(-)
> 
> diff --git a/lib/copperplate/init.c b/lib/copperplate/init.c
> index 16fc59f..e695c52 100644
> --- a/lib/copperplate/init.c
> +++ b/lib/copperplate/init.c
> @@ -114,19 +114,28 @@ static int get_session_root(int *regflags_r)
>  {
>  	char *sessdir, *session;
>  	struct passwd *pw;
> +	char *sn_env;
>  	int ret;
>  
>  	pw = getpwuid(geteuid());
>  	if (pw == NULL)
>  		return -errno;
>  
> +	sn_env = getenv("XENO_SESSION_NAME");

Why fetching sn_env uncondtionally?

>  	if (__copperplate_setup_data.session_label == NULL) {
> -		ret = asprintf(&session, "anon@%d", __node_id);
> -		if (ret < 0)
> -			return -ENOMEM;
> -		__copperplate_setup_data.session_label = session;
> -		*regflags_r |= REGISTRY_ANON;
> -	} else if (strchr(__copperplate_setup_data.session_label, '/')) {
> +		if (sn_env) {
> +			__copperplate_setup_data.session_label = strdup(sn_env);
> +			if (__copperplate_setup_data.session_label == NULL)
> +				return -ENOMEM;
> +		} else {
> +			ret = asprintf(&session, "anon@%d", __node_id);
> +			if (ret < 0)
> +				return -ENOMEM;
> +			__copperplate_setup_data.session_label = session;
> +			*regflags_r |= REGISTRY_ANON;
> +		}
> +	}
> +	if (strchr(__copperplate_setup_data.session_label, '/')) {
>  		warning("session name may not contain slashes");
>  		return -EINVAL;
>  	}

Jan

-- 
Siemens AG, Technology
Linux Expert Center


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/3] lib/copperplate: Get session name from env var
  2024-08-22 10:51   ` Jan Kiszka
@ 2024-08-22 10:57     ` Richard Weinberger
  2024-08-22 10:59       ` Jan Kiszka
  2024-08-22 11:38     ` Simon
  1 sibling, 1 reply; 10+ messages in thread
From: Richard Weinberger @ 2024-08-22 10:57 UTC (permalink / raw)
  To: Simon Graber, xenomai, upstream+xenomai, Jan Kiszka

Am Donnerstag, 22. August 2024, 12:51:34 CEST schrieb 'Jan Kiszka' via upstream:
> On 22.08.24 10:07, Simon Graber wrote:
> > At present, for two Xenomai processes to share resources, they must
> > be started with identical --session= parameters.
> > This is cumbersome for extensive projects involving numerous helper
> > processes. This commit allows the specification of the session name
> > via a global environment variable, namely XENO_SESSION_NAME.
> > The --session= parameter overrules the environment variable.
> 
> Hmm, did we discuss priorities already, and did I say that this ordering
> would be best? Then I'm no longer that sure, and my feeling is rather
> that env should overrule command line. Still looking for other examples,
> though.

I remember, but the other way around.
Env overruling commandline seems not natural too me.
Passing --session= to an application and seeing no effect is not
user friendly.
IMHO, the environment should be a default/fallback.

Thanks,
//richard

-- 
​​​​​sigma star gmbh | Eduard-Bodem-Gasse 6, 6020 Innsbruck, AUT
UID/VAT Nr: ATU 66964118 | FN: 374287y



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/3] lib/copperplate: Get session name from env var
  2024-08-22 10:57     ` Richard Weinberger
@ 2024-08-22 10:59       ` Jan Kiszka
  2024-08-22 11:16         ` Richard Weinberger
  0 siblings, 1 reply; 10+ messages in thread
From: Jan Kiszka @ 2024-08-22 10:59 UTC (permalink / raw)
  To: Richard Weinberger, Simon Graber, xenomai, upstream+xenomai

On 22.08.24 12:57, Richard Weinberger wrote:
> Am Donnerstag, 22. August 2024, 12:51:34 CEST schrieb 'Jan Kiszka' via upstream:
>> On 22.08.24 10:07, Simon Graber wrote:
>>> At present, for two Xenomai processes to share resources, they must
>>> be started with identical --session= parameters.
>>> This is cumbersome for extensive projects involving numerous helper
>>> processes. This commit allows the specification of the session name
>>> via a global environment variable, namely XENO_SESSION_NAME.
>>> The --session= parameter overrules the environment variable.
>>
>> Hmm, did we discuss priorities already, and did I say that this ordering
>> would be best? Then I'm no longer that sure, and my feeling is rather
>> that env should overrule command line. Still looking for other examples,
>> though.
> 
> I remember, but the other way around.
> Env overruling commandline seems not natural too me.
> Passing --session= to an application and seeing no effect is not
> user friendly.
> IMHO, the environment should be a default/fallback.
> 

I'm all for least surprise, that's why I'm looking for existing patterns
now, rather than personal (my included) feelings.

Jan

-- 
Siemens AG, Technology
Linux Expert Center


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/3] lib/copperplate: Get session name from env var
  2024-08-22 10:59       ` Jan Kiszka
@ 2024-08-22 11:16         ` Richard Weinberger
  2024-08-22 12:35           ` Jan Kiszka
  0 siblings, 1 reply; 10+ messages in thread
From: Richard Weinberger @ 2024-08-22 11:16 UTC (permalink / raw)
  To: Simon Graber, xenomai, upstream+xenomai, Jan Kiszka

Am Donnerstag, 22. August 2024, 12:59:54 CEST schrieb Jan Kiszka:
> On 22.08.24 12:57, Richard Weinberger wrote:
> > Am Donnerstag, 22. August 2024, 12:51:34 CEST schrieb 'Jan Kiszka' via upstream:
> >> On 22.08.24 10:07, Simon Graber wrote:
> >>> At present, for two Xenomai processes to share resources, they must
> >>> be started with identical --session= parameters.
> >>> This is cumbersome for extensive projects involving numerous helper
> >>> processes. This commit allows the specification of the session name
> >>> via a global environment variable, namely XENO_SESSION_NAME.
> >>> The --session= parameter overrules the environment variable.
> >>
> >> Hmm, did we discuss priorities already, and did I say that this ordering
> >> would be best? Then I'm no longer that sure, and my feeling is rather
> >> that env should overrule command line. Still looking for other examples,
> >> though.
> > 
> > I remember, but the other way around.
> > Env overruling commandline seems not natural too me.
> > Passing --session= to an application and seeing no effect is not
> > user friendly.
> > IMHO, the environment should be a default/fallback.
> > 
> 
> I'm all for least surprise, that's why I'm looking for existing patterns
> now, rather than personal (my included) feelings.

AFAIK, at least git, curl and GNU make give command line options precedence
over environment.

Thanks,
//richard

-- 
​​​​​sigma star gmbh | Eduard-Bodem-Gasse 6, 6020 Innsbruck, AUT
UID/VAT Nr: ATU 66964118 | FN: 374287y



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/3] lib/copperplate: Get session name from env var
  2024-08-22 10:51   ` Jan Kiszka
  2024-08-22 10:57     ` Richard Weinberger
@ 2024-08-22 11:38     ` Simon
  1 sibling, 0 replies; 10+ messages in thread
From: Simon @ 2024-08-22 11:38 UTC (permalink / raw)
  To: Jan Kiszka, xenomai; +Cc: upstream+xenomai


On 8/22/24 12:51, Jan Kiszka wrote:
> On 22.08.24 10:07, Simon Graber wrote:
>> At present, for two Xenomai processes to share resources, they must
>> be started with identical --session= parameters.
>> This is cumbersome for extensive projects involving numerous helper
>> processes. This commit allows the specification of the session name
>> via a global environment variable, namely XENO_SESSION_NAME.
>> The --session= parameter overrules the environment variable.
> Hmm, did we discuss priorities already, and did I say that this ordering
> would be best? Then I'm no longer that sure, and my feeling is rather
> that env should overrule command line. Still looking for other examples,
> though.
>
>> Signed-off-by: Simon Graber <simon.graber@sigma-star.at>
>> ---
>>   lib/copperplate/init.c | 21 +++++++++++++++------
>>   1 file changed, 15 insertions(+), 6 deletions(-)
>>
>> diff --git a/lib/copperplate/init.c b/lib/copperplate/init.c
>> index 16fc59f..e695c52 100644
>> --- a/lib/copperplate/init.c
>> +++ b/lib/copperplate/init.c
>> @@ -114,19 +114,28 @@ static int get_session_root(int *regflags_r)
>>   {
>>   	char *sessdir, *session;
>>   	struct passwd *pw;
>> +	char *sn_env;
>>   	int ret;
>>   
>>   	pw = getpwuid(geteuid());
>>   	if (pw == NULL)
>>   		return -errno;
>>   
>> +	sn_env = getenv("XENO_SESSION_NAME");
> Why fetching sn_env uncondtionally?

Right, that's only needed in one branch.

I'll include this in v2 once I know whether args or env should take 
priority.


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/3] lib/copperplate: Get session name from env var
  2024-08-22 11:16         ` Richard Weinberger
@ 2024-08-22 12:35           ` Jan Kiszka
  0 siblings, 0 replies; 10+ messages in thread
From: Jan Kiszka @ 2024-08-22 12:35 UTC (permalink / raw)
  To: Richard Weinberger, Simon Graber, xenomai, upstream+xenomai

On 22.08.24 13:16, Richard Weinberger wrote:
> Am Donnerstag, 22. August 2024, 12:59:54 CEST schrieb Jan Kiszka:
>> On 22.08.24 12:57, Richard Weinberger wrote:
>>> Am Donnerstag, 22. August 2024, 12:51:34 CEST schrieb 'Jan Kiszka' via upstream:
>>>> On 22.08.24 10:07, Simon Graber wrote:
>>>>> At present, for two Xenomai processes to share resources, they must
>>>>> be started with identical --session= parameters.
>>>>> This is cumbersome for extensive projects involving numerous helper
>>>>> processes. This commit allows the specification of the session name
>>>>> via a global environment variable, namely XENO_SESSION_NAME.
>>>>> The --session= parameter overrules the environment variable.
>>>>
>>>> Hmm, did we discuss priorities already, and did I say that this ordering
>>>> would be best? Then I'm no longer that sure, and my feeling is rather
>>>> that env should overrule command line. Still looking for other examples,
>>>> though.
>>>
>>> I remember, but the other way around.
>>> Env overruling commandline seems not natural too me.
>>> Passing --session= to an application and seeing no effect is not
>>> user friendly.
>>> IMHO, the environment should be a default/fallback.
>>>
>>
>> I'm all for least surprise, that's why I'm looking for existing patterns
>> now, rather than personal (my included) feelings.
> 
> AFAIK, at least git, curl and GNU make give command line options precedence
> over environment.
> 

Good points, then let's keep it like proposed.

BTW, all those new variables still have to be documented.

Jan

-- 
Siemens AG, Technology
Linux Expert Center


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2024-08-22 12:36 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-22  8:07 [PATCH 0/3] Add env vars for session and cpu-affinity Simon Graber
2024-08-22  8:07 ` [PATCH 1/3] lib/copperplate: Get session name from env var Simon Graber
2024-08-22 10:51   ` Jan Kiszka
2024-08-22 10:57     ` Richard Weinberger
2024-08-22 10:59       ` Jan Kiszka
2024-08-22 11:16         ` Richard Weinberger
2024-08-22 12:35           ` Jan Kiszka
2024-08-22 11:38     ` Simon
2024-08-22  8:07 ` [PATCH 2/3] lib/boilerplate: Get cpu-affinity " Simon Graber
2024-08-22  8:07 ` [PATCH 3/3] alchemytests: Set cpu-affinity by " Simon Graber

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.