* [Xenomai-help] pSOS+ skin: unique task names
@ 2010-09-22 19:24 ronny meeus
2010-09-23 5:38 ` Philippe Gerum
0 siblings, 1 reply; 2+ messages in thread
From: ronny meeus @ 2010-09-22 19:24 UTC (permalink / raw)
To: Xenomai-help
[-- Attachment #1: Type: text/plain, Size: 3212 bytes --]
Hello
I have a question related to the pSOS+ skin. It might be relevant for other
skins as well.
What I observe is that the taskname while creating a task should be unique.
If I use the same taskname twice, I get a failure. I think this is not a
restriction in the real pSOS+ implementation, so this means that some
applications will not be portable.
I second issue I see is that since the main task is also registered under
the name "MAIN". This means I can have only 1 process that makes use of the
pSOS skin. If I start a second process, an error code is returned since the
"MAIN" task already exists (it is automatically created during the
initialization phase).
I made a workaround for this by appending the PID to the task names created
in the application.
I also to the same for the "MAIN" task.
After applying the change and starting the same application 2 times, I get
following result when I dump the scheduler information:
# cat /proc/xenomai/sched
CPU PID CLASS PRI TIMEOUT TIMEBASE STAT NAME
0 0 idle -1 - master R ROOT
0 1046 rt 0 5370t psos D MAIN_1046
0 1048 rt 10 100t psos D TST5_1046
0 1049 rt 64 0t psos Wl TTT0_1048
0 1050 rt 64 0t psos Wl TTT1_1048
0 1051 rt 64 0t psos Wl TTT2_1048
0 1052 rt 64 0t psos Wl TTT3_1048
0 1053 rt 64 0t psos Wl TTT4_1048
0 1054 rt 64 0t psos Wl TTT5_1048
0 1055 rt 64 0t psos Wl TTT6_1048
0 1056 rt 64 0t psos Wl TTT7_1048
0 1057 rt 64 0t psos Wl TTT8_1048
0 1058 rt 64 0t psos Wl TTT9_1048
0 1059 rt 0 6802t psos D MAIN_1059
0 1061 rt 10 100t psos D TST5_1059
0 1062 rt 64 0t psos Wl TTT0_1061
0 1063 rt 64 0t psos Wl TTT1_1061
0 1064 rt 64 0t psos Wl TTT2_1061
0 1065 rt 64 0t psos Wl TTT3_1061
0 1066 rt 64 0t psos Wl TTT4_1061
0 1067 rt 64 0t psos Wl TTT5_1061
0 1068 rt 64 0t psos Wl TTT6_1061
0 1069 rt 64 0t psos Wl TTT7_1061
0 1070 rt 64 0t psos Wl TTT8_1061
0 1071 rt 64 0t psos Wl TTT9_1061
Now the question is: is this the right technique or do other means exist to
start multiple clients (processes) of the pSOS skin.
It might be better to use a unique ID per "application" instead of the PID
since now the full name depends on the actual thread that has created the
new process. To be more clear: all tasks belonging to a certain process
could be appended with the same unique number.
Please comment.
Best regards,
Ronny
[-- Attachment #2: Type: text/html, Size: 3459 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Xenomai-help] pSOS+ skin: unique task names
2010-09-22 19:24 [Xenomai-help] pSOS+ skin: unique task names ronny meeus
@ 2010-09-23 5:38 ` Philippe Gerum
0 siblings, 0 replies; 2+ messages in thread
From: Philippe Gerum @ 2010-09-23 5:38 UTC (permalink / raw)
To: ronny meeus; +Cc: Xenomai-help
On Wed, 2010-09-22 at 21:24 +0200, ronny meeus wrote:
> Hello
>
> I have a question related to the pSOS+ skin. It might be relevant for
> other skins as well.
>
> What I observe is that the taskname while creating a task should be
> unique.
> If I use the same taskname twice, I get a failure. I think this is not
> a restriction in the real pSOS+ implementation, so this means that
> some applications will not be portable.
That variation from pSOS is wanted; allowing duplicate names would make
the *_ident() calls basically useless like in the original
implementation. pSOS does not check for uniqueness to keep things simple
internally, but there would be no valid reason to prevent the emulator
from using the arbitrarily long labels Xenomai supports, provided this
does neither change the API nor the semantics. Even more importantly,
allowing duplicates would prevent the emulator from using a number of
built-in Xenomai features, such as accessing the pSOS object states via
reading /proc/xenomai/registry/psos/*. The same goes when reading the
output of /proc/xenomai/sched and so on. Generally speaking, using
different names to label different objects seems a reasonable idea.
>
> I second issue I see is that since the main task is also registered
> under the name "MAIN". This means I can have only 1 process that makes
> use of the pSOS skin. If I start a second process, an error code is
> returned since the "MAIN" task already exists (it is automatically
> created during the initialization phase).
>
This is definitely a useless restriction from the emulator. You already
applied the fix, by tackling the pid to the MAIN label.
> I made a workaround for this by appending the PID to the task names
> created in the application.
> I also to the same for the "MAIN" task.
>
> After applying the change and starting the same application 2 times, I
> get following result when I dump the scheduler information:
> # cat /proc/xenomai/sched
> CPU PID CLASS PRI TIMEOUT TIMEBASE STAT NAME
> 0 0 idle -1 - master R ROOT
> 0 1046 rt 0 5370t psos D MAIN_1046
> 0 1048 rt 10 100t psos D TST5_1046
> 0 1049 rt 64 0t psos Wl TTT0_1048
> 0 1050 rt 64 0t psos Wl TTT1_1048
> 0 1051 rt 64 0t psos Wl TTT2_1048
> 0 1052 rt 64 0t psos Wl TTT3_1048
> 0 1053 rt 64 0t psos Wl TTT4_1048
> 0 1054 rt 64 0t psos Wl TTT5_1048
> 0 1055 rt 64 0t psos Wl TTT6_1048
> 0 1056 rt 64 0t psos Wl TTT7_1048
> 0 1057 rt 64 0t psos Wl TTT8_1048
> 0 1058 rt 64 0t psos Wl TTT9_1048
> 0 1059 rt 0 6802t psos D MAIN_1059
> 0 1061 rt 10 100t psos D TST5_1059
> 0 1062 rt 64 0t psos Wl TTT0_1061
> 0 1063 rt 64 0t psos Wl TTT1_1061
> 0 1064 rt 64 0t psos Wl TTT2_1061
> 0 1065 rt 64 0t psos Wl TTT3_1061
> 0 1066 rt 64 0t psos Wl TTT4_1061
> 0 1067 rt 64 0t psos Wl TTT5_1061
> 0 1068 rt 64 0t psos Wl TTT6_1061
> 0 1069 rt 64 0t psos Wl TTT7_1061
> 0 1070 rt 64 0t psos Wl TTT8_1061
> 0 1071 rt 64 0t psos Wl TTT9_1061
>
> Now the question is: is this the right technique or do other means
> exist to start multiple clients (processes) of the pSOS skin.
> It might be better to use a unique ID per "application" instead of the
> PID since now the full name depends on the actual thread that has
> created the new process. To be more clear: all tasks belonging to a
> certain process could be appended with the same unique number.
The only sane way to handle this issue is to expect the application code
to deal with name uniqueness internally. Having the emulator tackle any
"application ID" automatically to names would be a useless annoyance to
the applications which do name their objects uniquely, usually to be
able to refer to the objects unambiguously, later. Besides, this would
break the *_ident() calls, unless we assign two names to each object,
which would be massively overkill, only to solve an arguable corner
case.
It seems your code is running over the legacy linuxthreads support,
which would explain why you get different return values for getpid()
depending on the calling thread. An easy way to introduce unique naming
in your application would be to call getpid() once in the main thread
and save this value to some global variable, then use that variable to
format all other name labels within the application. This would work for
both linuxthreads and nptl implementations.
> Please comment.
>
> Best regards,
> Ronny
> _______________________________________________
> Xenomai-help mailing list
> Xenomai-help@domain.hid
> https://mail.gna.org/listinfo/xenomai-help
--
Philippe.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-09-23 5:38 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-22 19:24 [Xenomai-help] pSOS+ skin: unique task names ronny meeus
2010-09-23 5:38 ` Philippe Gerum
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.