Re: [Xenomai-core] SCHED_RR

2008-12-06 Thread Gilles Chanteperdrix
Jan Kiszka wrote:
> Gilles Chanteperdrix wrote:
>> Jan Kiszka wrote:
>>> Gilles Chanteperdrix wrote:
 Jan Kiszka wrote:
> Gilles Chanteperdrix wrote:
>> Jan Kiszka wrote:
>>> Hi Gilles,
>>>
>>> here is a trivial test case on my desk that points to SCHED_RR issues of
>>> the POSIX skin: simple pthread_create with an attribute block that has
>>> SCHED_RR set, but neither SCHED_RR nor the priority reach the new 
>>> thread.
>>>
>>> The way the scheduling policy and parameters get to that user space
>>> thread leads via __real_pthread_setschedparam after
>>> __pse51_thread_create. This triggers do_setsched_event in shadow.c. But
>>> here we filter out all policies except for SCHED_FIFO. So neither the
>>> priority nor the required XNRRB flag make it to the target therefore.
>>>
>>> Even worse, we are running aperiodic timer mode, so this would not have
>>> worked anyway due to the scheduler limitations. Fortunately, it turned
>>> out that the customer is fine with SCHED_FIFO as well, but the broken
>>> priorities and/or lacking error codes on creation are annoying + the
>>> fact that it likely wouldn't work even with periodic timer mode.
>> The fact that it does not work with aperiodic timer is documented.
>> However, this used to work and was tested with periodic timer (you can
>> find the tests under sim/skins/posix/testsuite), that is why there is no
>> reason to return any error code.
> ...which is bogus IMHO. Expecting to read the doc when something does
> not work as expected is ok. But more or less silently failing even if it
> is documented that it will somehow fail is not what Xenomai is usually
> known for.
>
> That said, I still don't see (looking at TRUNK) how SCHED_RR should work
> even under periodic mode. Guess I have to enable and test it.
>
> But I guess the best we can do is to finally remove this limitation by
> allowing the use to create a periodic tick timer over aperiodic mode if
> there is a need for RR scheduling.
 In ksrc/skins/posix/syscall.c, function __pthread_create:

 pthread_attr_init(&attr);
 attr.policy = p->policy;
 param.sched_priority = p->rt_priority;
 attr.detachstate = PTHREAD_CREATE_DETACHED;

 So, the priority and policy are taken from the underlying Linux thread.
>>> Yep, but its prio/policy is set *after* the chunk above. Maybe it is
>>> already a sufficient hot-fix to move __real_pthread_setschedparam before
>>> __pse51_thread_create if this has no unwanted side effects.
>> Useless. Since do_setsched_event ignores the priority change, everything
>> should work as expected.
>>
> 
> Don't get what you mean.
> 
> Anyway, that reordering doesn't work for shadow threads as they do not
> go through xnpod_start_thread from pthread_create, so the XNRRB is not
> applied this way.

That is the point I missed.

> 
> Thus the only fix to get SCHED_RR working again is to call
> __wrap_pthread_setschedparam (or some extract of it) from
> __pthread_trampoline, as you suggested. That works, but I cannot asses
> right now if it may have side effects.

Ok.

-- 
Gilles.

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] SCHED_RR

2008-12-06 Thread Jan Kiszka
Gilles Chanteperdrix wrote:
> Jan Kiszka wrote:
>> Gilles Chanteperdrix wrote:
>>> Jan Kiszka wrote:
 Gilles Chanteperdrix wrote:
> Jan Kiszka wrote:
>> Hi Gilles,
>>
>> here is a trivial test case on my desk that points to SCHED_RR issues of
>> the POSIX skin: simple pthread_create with an attribute block that has
>> SCHED_RR set, but neither SCHED_RR nor the priority reach the new thread.
>>
>> The way the scheduling policy and parameters get to that user space
>> thread leads via __real_pthread_setschedparam after
>> __pse51_thread_create. This triggers do_setsched_event in shadow.c. But
>> here we filter out all policies except for SCHED_FIFO. So neither the
>> priority nor the required XNRRB flag make it to the target therefore.
>>
>> Even worse, we are running aperiodic timer mode, so this would not have
>> worked anyway due to the scheduler limitations. Fortunately, it turned
>> out that the customer is fine with SCHED_FIFO as well, but the broken
>> priorities and/or lacking error codes on creation are annoying + the
>> fact that it likely wouldn't work even with periodic timer mode.
> The fact that it does not work with aperiodic timer is documented.
> However, this used to work and was tested with periodic timer (you can
> find the tests under sim/skins/posix/testsuite), that is why there is no
> reason to return any error code.
 ...which is bogus IMHO. Expecting to read the doc when something does
 not work as expected is ok. But more or less silently failing even if it
 is documented that it will somehow fail is not what Xenomai is usually
 known for.

 That said, I still don't see (looking at TRUNK) how SCHED_RR should work
 even under periodic mode. Guess I have to enable and test it.

 But I guess the best we can do is to finally remove this limitation by
 allowing the use to create a periodic tick timer over aperiodic mode if
 there is a need for RR scheduling.
>>> In ksrc/skins/posix/syscall.c, function __pthread_create:
>>>
>>> pthread_attr_init(&attr);
>>> attr.policy = p->policy;
>>> param.sched_priority = p->rt_priority;
>>> attr.detachstate = PTHREAD_CREATE_DETACHED;
>>>
>>> So, the priority and policy are taken from the underlying Linux thread.
>> Yep, but its prio/policy is set *after* the chunk above. Maybe it is
>> already a sufficient hot-fix to move __real_pthread_setschedparam before
>> __pse51_thread_create if this has no unwanted side effects.
> 
> Useless. Since do_setsched_event ignores the priority change, everything
> should work as expected.
> 

Don't get what you mean.

Anyway, that reordering doesn't work for shadow threads as they do not
go through xnpod_start_thread from pthread_create, so the XNRRB is not
applied this way.

Thus the only fix to get SCHED_RR working again is to call
__wrap_pthread_setschedparam (or some extract of it) from
__pthread_trampoline, as you suggested. That works, but I cannot asses
right now if it may have side effects.

Jan



signature.asc
Description: OpenPGP digital signature
___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] SCHED_RR

2008-12-05 Thread Gilles Chanteperdrix
Jan Kiszka wrote:
> Gilles Chanteperdrix wrote:
>> Jan Kiszka wrote:
>>> Gilles Chanteperdrix wrote:
 Jan Kiszka wrote:
> Hi Gilles,
>
> here is a trivial test case on my desk that points to SCHED_RR issues of
> the POSIX skin: simple pthread_create with an attribute block that has
> SCHED_RR set, but neither SCHED_RR nor the priority reach the new thread.
>
> The way the scheduling policy and parameters get to that user space
> thread leads via __real_pthread_setschedparam after
> __pse51_thread_create. This triggers do_setsched_event in shadow.c. But
> here we filter out all policies except for SCHED_FIFO. So neither the
> priority nor the required XNRRB flag make it to the target therefore.
>
> Even worse, we are running aperiodic timer mode, so this would not have
> worked anyway due to the scheduler limitations. Fortunately, it turned
> out that the customer is fine with SCHED_FIFO as well, but the broken
> priorities and/or lacking error codes on creation are annoying + the
> fact that it likely wouldn't work even with periodic timer mode.
 The fact that it does not work with aperiodic timer is documented.
 However, this used to work and was tested with periodic timer (you can
 find the tests under sim/skins/posix/testsuite), that is why there is no
 reason to return any error code.
>>> ...which is bogus IMHO. Expecting to read the doc when something does
>>> not work as expected is ok. But more or less silently failing even if it
>>> is documented that it will somehow fail is not what Xenomai is usually
>>> known for.
>>>
>>> That said, I still don't see (looking at TRUNK) how SCHED_RR should work
>>> even under periodic mode. Guess I have to enable and test it.
>>>
>>> But I guess the best we can do is to finally remove this limitation by
>>> allowing the use to create a periodic tick timer over aperiodic mode if
>>> there is a need for RR scheduling.
>> In ksrc/skins/posix/syscall.c, function __pthread_create:
>>
>> pthread_attr_init(&attr);
>> attr.policy = p->policy;
>> param.sched_priority = p->rt_priority;
>> attr.detachstate = PTHREAD_CREATE_DETACHED;
>>
>> So, the priority and policy are taken from the underlying Linux thread.
> 
> Yep, but its prio/policy is set *after* the chunk above. Maybe it is
> already a sufficient hot-fix to move __real_pthread_setschedparam before
> __pse51_thread_create if this has no unwanted side effects.

Useless. Since do_setsched_event ignores the priority change, everything
should work as expected.

-- 
 Gilles.

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] SCHED_RR

2008-12-05 Thread Jan Kiszka
Gilles Chanteperdrix wrote:
> Jan Kiszka wrote:
>> Gilles Chanteperdrix wrote:
>>> Jan Kiszka wrote:
 Hi Gilles,

 here is a trivial test case on my desk that points to SCHED_RR issues of
 the POSIX skin: simple pthread_create with an attribute block that has
 SCHED_RR set, but neither SCHED_RR nor the priority reach the new thread.

 The way the scheduling policy and parameters get to that user space
 thread leads via __real_pthread_setschedparam after
 __pse51_thread_create. This triggers do_setsched_event in shadow.c. But
 here we filter out all policies except for SCHED_FIFO. So neither the
 priority nor the required XNRRB flag make it to the target therefore.

 Even worse, we are running aperiodic timer mode, so this would not have
 worked anyway due to the scheduler limitations. Fortunately, it turned
 out that the customer is fine with SCHED_FIFO as well, but the broken
 priorities and/or lacking error codes on creation are annoying + the
 fact that it likely wouldn't work even with periodic timer mode.
>>> The fact that it does not work with aperiodic timer is documented.
>>> However, this used to work and was tested with periodic timer (you can
>>> find the tests under sim/skins/posix/testsuite), that is why there is no
>>> reason to return any error code.
>> ...which is bogus IMHO. Expecting to read the doc when something does
>> not work as expected is ok. But more or less silently failing even if it
>> is documented that it will somehow fail is not what Xenomai is usually
>> known for.
>>
>> That said, I still don't see (looking at TRUNK) how SCHED_RR should work
>> even under periodic mode. Guess I have to enable and test it.
>>
>> But I guess the best we can do is to finally remove this limitation by
>> allowing the use to create a periodic tick timer over aperiodic mode if
>> there is a need for RR scheduling.
> 
> In ksrc/skins/posix/syscall.c, function __pthread_create:
> 
> pthread_attr_init(&attr);
> attr.policy = p->policy;
> param.sched_priority = p->rt_priority;
> attr.detachstate = PTHREAD_CREATE_DETACHED;
> 
> So, the priority and policy are taken from the underlying Linux thread.

Yep, but its prio/policy is set *after* the chunk above. Maybe it is
already a sufficient hot-fix to move __real_pthread_setschedparam before
__pse51_thread_create if this has no unwanted side effects.

Jan



signature.asc
Description: OpenPGP digital signature
___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] SCHED_RR

2008-12-05 Thread Gilles Chanteperdrix
Jan Kiszka wrote:
> Gilles Chanteperdrix wrote:
>> Jan Kiszka wrote:
>>> Hi Gilles,
>>>
>>> here is a trivial test case on my desk that points to SCHED_RR issues of
>>> the POSIX skin: simple pthread_create with an attribute block that has
>>> SCHED_RR set, but neither SCHED_RR nor the priority reach the new thread.
>>>
>>> The way the scheduling policy and parameters get to that user space
>>> thread leads via __real_pthread_setschedparam after
>>> __pse51_thread_create. This triggers do_setsched_event in shadow.c. But
>>> here we filter out all policies except for SCHED_FIFO. So neither the
>>> priority nor the required XNRRB flag make it to the target therefore.
>>>
>>> Even worse, we are running aperiodic timer mode, so this would not have
>>> worked anyway due to the scheduler limitations. Fortunately, it turned
>>> out that the customer is fine with SCHED_FIFO as well, but the broken
>>> priorities and/or lacking error codes on creation are annoying + the
>>> fact that it likely wouldn't work even with periodic timer mode.
>> The fact that it does not work with aperiodic timer is documented.
>> However, this used to work and was tested with periodic timer (you can
>> find the tests under sim/skins/posix/testsuite), that is why there is no
>> reason to return any error code.
> 
> ...which is bogus IMHO. Expecting to read the doc when something does
> not work as expected is ok. But more or less silently failing even if it
> is documented that it will somehow fail is not what Xenomai is usually
> known for.
> 
> That said, I still don't see (looking at TRUNK) how SCHED_RR should work
> even under periodic mode. Guess I have to enable and test it.
> 
> But I guess the best we can do is to finally remove this limitation by
> allowing the use to create a periodic tick timer over aperiodic mode if
> there is a need for RR scheduling.

In ksrc/skins/posix/syscall.c, function __pthread_create:

pthread_attr_init(&attr);
attr.policy = p->policy;
param.sched_priority = p->rt_priority;
attr.detachstate = PTHREAD_CREATE_DETACHED;

So, the priority and policy are taken from the underlying Linux thread.

-- 
 Gilles.

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] SCHED_RR

2008-12-05 Thread Gilles Chanteperdrix
Jan Kiszka wrote:
> Gilles Chanteperdrix wrote:
>> Jan Kiszka wrote:
>>> Hi Gilles,
>>>
>>> here is a trivial test case on my desk that points to SCHED_RR issues of
>>> the POSIX skin: simple pthread_create with an attribute block that has
>>> SCHED_RR set, but neither SCHED_RR nor the priority reach the new thread.
>>>
>>> The way the scheduling policy and parameters get to that user space
>>> thread leads via __real_pthread_setschedparam after
>>> __pse51_thread_create. This triggers do_setsched_event in shadow.c. But
>>> here we filter out all policies except for SCHED_FIFO. So neither the
>>> priority nor the required XNRRB flag make it to the target therefore.
>>>
>>> Even worse, we are running aperiodic timer mode, so this would not have
>>> worked anyway due to the scheduler limitations. Fortunately, it turned
>>> out that the customer is fine with SCHED_FIFO as well, but the broken
>>> priorities and/or lacking error codes on creation are annoying + the
>>> fact that it likely wouldn't work even with periodic timer mode.
>> The fact that it does not work with aperiodic timer is documented.
>> However, this used to work and was tested with periodic timer (you can
>> find the tests under sim/skins/posix/testsuite), that is why there is no
>> reason to return any error code.
> 
> ...which is bogus IMHO.

What is bogus ? Not to return an error when something works ?

> Expecting to read the doc when something does
> not work as expected is ok. But more or less silently failing even if it
> is documented that it will somehow fail is not what Xenomai is usually
> known for.
> 
> That said, I still don't see (looking at TRUNK) how SCHED_RR should work
> even under periodic mode. Guess I have to enable and test it.

It would work if __wrap_pthread_create called
__wrap_pthread_setschedparam which would issue a syscall passing the
policy and priority to kernel-space. I am almost sure that it used to
work, but it may happen that recent changes regarding the way priority
is handled broke it.

> 
> But I guess the best we can do is to finally remove this limitation by
> allowing the use to create a periodic tick timer over aperiodic mode if
> there is a need for RR scheduling.

Yes, a very low priority change on the todo list. Someone needing this
in a real-world application would boost the priority.

-- 
 Gilles.

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] SCHED_RR

2008-12-05 Thread Jan Kiszka
Gilles Chanteperdrix wrote:
> Jan Kiszka wrote:
>> Hi Gilles,
>>
>> here is a trivial test case on my desk that points to SCHED_RR issues of
>> the POSIX skin: simple pthread_create with an attribute block that has
>> SCHED_RR set, but neither SCHED_RR nor the priority reach the new thread.
>>
>> The way the scheduling policy and parameters get to that user space
>> thread leads via __real_pthread_setschedparam after
>> __pse51_thread_create. This triggers do_setsched_event in shadow.c. But
>> here we filter out all policies except for SCHED_FIFO. So neither the
>> priority nor the required XNRRB flag make it to the target therefore.
>>
>> Even worse, we are running aperiodic timer mode, so this would not have
>> worked anyway due to the scheduler limitations. Fortunately, it turned
>> out that the customer is fine with SCHED_FIFO as well, but the broken
>> priorities and/or lacking error codes on creation are annoying + the
>> fact that it likely wouldn't work even with periodic timer mode.
> 
> The fact that it does not work with aperiodic timer is documented.
> However, this used to work and was tested with periodic timer (you can
> find the tests under sim/skins/posix/testsuite), that is why there is no
> reason to return any error code.

...which is bogus IMHO. Expecting to read the doc when something does
not work as expected is ok. But more or less silently failing even if it
is documented that it will somehow fail is not what Xenomai is usually
known for.

That said, I still don't see (looking at TRUNK) how SCHED_RR should work
even under periodic mode. Guess I have to enable and test it.

But I guess the best we can do is to finally remove this limitation by
allowing the use to create a periodic tick timer over aperiodic mode if
there is a need for RR scheduling.

Jan

-- 
Siemens AG, Corporate Technology, CT SE 26
Corporate Competence Center Embedded Linux

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] SCHED_RR

2008-12-05 Thread Gilles Chanteperdrix
Jan Kiszka wrote:
> Hi Gilles,
> 
> here is a trivial test case on my desk that points to SCHED_RR issues of
> the POSIX skin: simple pthread_create with an attribute block that has
> SCHED_RR set, but neither SCHED_RR nor the priority reach the new thread.
> 
> The way the scheduling policy and parameters get to that user space
> thread leads via __real_pthread_setschedparam after
> __pse51_thread_create. This triggers do_setsched_event in shadow.c. But
> here we filter out all policies except for SCHED_FIFO. So neither the
> priority nor the required XNRRB flag make it to the target therefore.
> 
> Even worse, we are running aperiodic timer mode, so this would not have
> worked anyway due to the scheduler limitations. Fortunately, it turned
> out that the customer is fine with SCHED_FIFO as well, but the broken
> priorities and/or lacking error codes on creation are annoying + the
> fact that it likely wouldn't work even with periodic timer mode.

The fact that it does not work with aperiodic timer is documented.
However, this used to work and was tested with periodic timer (you can
find the tests under sim/skins/posix/testsuite), that is why there is no
reason to return any error code.

-- 
 Gilles.

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core