* [Xenomai] Suggested approach to schedule N-RT work in kernel on a specific CPU core
@ 2016-03-20 7:15 Alex Plits
2016-03-20 7:25 ` Gilles Chanteperdrix
0 siblings, 1 reply; 7+ messages in thread
From: Alex Plits @ 2016-03-20 7:15 UTC (permalink / raw)
To: xenomai@xenomai.org
Hi,
We have a requirement to schedule N-RT linux kernel specific work (e.g. workQ) on a dedicated core from an RTDM driver running
In Xenomai "context".
The current RTDM API does in fact provide an API to schedule a N-RT workQ but this does not meet our needs as we need the N-RT job to run on
A dedicated CPU. Current API implementation will run this special workQ on the CPU where the RT scheduling call occurred, so I have 2 queries we need help with -
1. Is there an API/example/configuration that will achieve our needs?
2. In case there isn't what would be the best approach to implement such a mechanism - I can think of solutions but it seems excessive:
a. Run another Xenomai thread that has CPU affinity on the target cpu Core which will call a dedicated RTDM blocking call (e.g. IOCTL with semTake) and then the scheduling RTDM driver will release that semaphore - which will re-schedule the thread on the core we need and now it can call a N-RT IOCTL for example.
b. Initialize a new WorkQ on I-Pipe init which will be binded on the target cpu Core only then add new RTDM api to schedule work on that WorkQ - although I'm not sure this will work as it will use the VIRQ mechanism which will somehow need to change cores.
Thanks,
Alex P.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Xenomai] Suggested approach to schedule N-RT work in kernel on a specific CPU core
2016-03-20 7:15 [Xenomai] Suggested approach to schedule N-RT work in kernel on a specific CPU core Alex Plits
@ 2016-03-20 7:25 ` Gilles Chanteperdrix
2016-03-20 7:49 ` Alex Plits
0 siblings, 1 reply; 7+ messages in thread
From: Gilles Chanteperdrix @ 2016-03-20 7:25 UTC (permalink / raw)
To: Alex Plits; +Cc: xenomai@xenomai.org
On Sun, Mar 20, 2016 at 07:15:42AM +0000, Alex Plits wrote:
> Hi,
>
> We have a requirement to schedule N-RT linux kernel specific work (e.g. workQ) on a dedicated core from an RTDM driver running
> In Xenomai "context".
> The current RTDM API does in fact provide an API to schedule a N-RT workQ but this does not meet our needs as we need the N-RT job to run on
> A dedicated CPU. Current API implementation will run this special workQ on the CPU where the RT scheduling call occurred, so I have 2 queries we need help with -
>
> 1. Is there an API/example/configuration that will achieve our needs?
>
> 2. In case there isn't what would be the best approach to implement such a mechanism - I can think of solutions but it seems excessive:
>
> a. Run another Xenomai thread that has CPU affinity on the target cpu Core which will call a dedicated RTDM blocking call (e.g. IOCTL with semTake) and then the scheduling RTDM driver will release that semaphore - which will re-schedule the thread on the core we need and now it can call a N-RT IOCTL for example.
>
> b. Initialize a new WorkQ on I-Pipe init which will be binded on the target cpu Core only then add new RTDM api to schedule work on that WorkQ - although I'm not sure this will work as it will use the VIRQ mechanism which will somehow need to change cores.
If the Linux kernel provides a function to do this, we could
implement a function mirroring that function in the RTDM API. Looks
simple. Am I missing something ?
--
Gilles.
https://click-hack.org
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Xenomai] Suggested approach to schedule N-RT work in kernel on a specific CPU core
2016-03-20 7:25 ` Gilles Chanteperdrix
@ 2016-03-20 7:49 ` Alex Plits
2016-03-20 7:59 ` Gilles Chanteperdrix
0 siblings, 1 reply; 7+ messages in thread
From: Alex Plits @ 2016-03-20 7:49 UTC (permalink / raw)
To: Gilles Chanteperdrix; +Cc: xenomai@xenomai.org
> -----Original Message-----
> From: Gilles Chanteperdrix [mailto:gilles.chanteperdrix@xenomai.org]
> Sent: Sunday, March 20, 2016 9:25 AM
> To: Alex Plits
> Cc: xenomai@xenomai.org
> Subject: Re: [Xenomai] Suggested approach to schedule N-RT work in kernel
> on a specific CPU core
>
> On Sun, Mar 20, 2016 at 07:15:42AM +0000, Alex Plits wrote:
> > Hi,
> >
> > We have a requirement to schedule N-RT linux kernel specific work
> > (e.g. workQ) on a dedicated core from an RTDM driver running In Xenomai
> "context".
> > The current RTDM API does in fact provide an API to schedule a N-RT
> > workQ but this does not meet our needs as we need the N-RT job to run
> > on A dedicated CPU. Current API implementation will run this special
> > workQ on the CPU where the RT scheduling call occurred, so I have 2
> > queries we need help with -
> >
> > 1. Is there an API/example/configuration that will achieve our needs?
> >
> > 2. In case there isn't what would be the best approach to implement
> such a mechanism - I can think of solutions but it seems excessive:
> >
> > a. Run another Xenomai thread that has CPU affinity on the target cpu
> Core which will call a dedicated RTDM blocking call (e.g. IOCTL with semTake)
> and then the scheduling RTDM driver will release that semaphore - which will
> re-schedule the thread on the core we need and now it can call a N-RT IOCTL
> for example.
> >
> > b. Initialize a new WorkQ on I-Pipe init which will be binded on the target
> cpu Core only then add new RTDM api to schedule work on that WorkQ -
> although I'm not sure this will work as it will use the VIRQ mechanism which
> will somehow need to change cores.
>
> If the Linux kernel provides a function to do this, we could implement a
> function mirroring that function in the RTDM API. Looks simple. Am I missing
> something ?
>
[Alex Plits]
The Linux provides an option to configure the workQ on specific CPU's on it's initialization stage of the WorkQ. I'm unsure
Of how/whether it actually schedules it's execution when schedule_work is called from a different CPU core that it was configured up-on. I'm guessing that if it were trivial the same mechanism would also be used in the current API for N-RT or xenomai printk mechanism (both use dedicated workQs which are different than Linux WorkQs awaken via VIRQs).
> --
> Gilles.
> https://click-hack.org
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Xenomai] Suggested approach to schedule N-RT work in kernel on a specific CPU core
2016-03-20 7:49 ` Alex Plits
@ 2016-03-20 7:59 ` Gilles Chanteperdrix
2016-03-20 8:20 ` Alex Plits
2016-03-20 8:29 ` Alex Plits
0 siblings, 2 replies; 7+ messages in thread
From: Gilles Chanteperdrix @ 2016-03-20 7:59 UTC (permalink / raw)
To: Alex Plits; +Cc: xenomai@xenomai.org
On Sun, Mar 20, 2016 at 07:49:16AM +0000, Alex Plits wrote:
>
>
> > -----Original Message-----
> > From: Gilles Chanteperdrix [mailto:gilles.chanteperdrix@xenomai.org]
> > If the Linux kernel provides a function to do this, we could implement a
> > function mirroring that function in the RTDM API. Looks simple. Am I missing
> > something ?
> >
>
> [Alex Plits] The Linux provides an option to configure the workQ
> on specific CPU's on it's initialization stage of the WorkQ. I'm
> unsure Of how/whether it actually schedules it's execution when
> schedule_work is called from a different CPU core that it was
> configured up-on.
I doubt very much this does not work. Have you tried it and observed
that it does not work?
> I'm guessing that if it were trivial the same
> mechanism would also be used in the current API for N-RT or
> xenomai printk mechanism (both use dedicated workQs which are
> different than Linux WorkQs awaken via VIRQs).
There is no xenomai printk mechanism. printk is implemented by the
I-pipe patch, a layer below Xenomai, so can not use an RTDM service.
Besides, the I-pipe patch printk implementation predates
ipipe_post_work_root.
The way RTDM work works is with the ipipe_post_work_root service,
so it does not use virqs, and since the schedule_work gets invoked
in a plain linux context, anything which works with schedule_work
(like triggering a work queue on a different cpu) should work with
the RTDM service.
So, again, have you tried running the RTDM service with a work queue
pinned on a different cpu and observed that it did not work?
--
Gilles.
https://click-hack.org
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Xenomai] Suggested approach to schedule N-RT work in kernel on a specific CPU core
2016-03-20 7:59 ` Gilles Chanteperdrix
@ 2016-03-20 8:20 ` Alex Plits
2016-03-20 8:38 ` Gilles Chanteperdrix
2016-03-20 8:29 ` Alex Plits
1 sibling, 1 reply; 7+ messages in thread
From: Alex Plits @ 2016-03-20 8:20 UTC (permalink / raw)
To: Gilles Chanteperdrix; +Cc: xenomai@xenomai.org
> -----Original Message-----
> From: Gilles Chanteperdrix [mailto:gilles.chanteperdrix@xenomai.org]
> Sent: Sunday, March 20, 2016 10:00 AM
> To: Alex Plits
> Cc: xenomai@xenomai.org
> Subject: Re: [Xenomai] Suggested approach to schedule N-RT work in kernel
> on a specific CPU core
>
> On Sun, Mar 20, 2016 at 07:49:16AM +0000, Alex Plits wrote:
> >
> >
> > > -----Original Message-----
> > > From: Gilles Chanteperdrix [mailto:gilles.chanteperdrix@xenomai.org]
> > > If the Linux kernel provides a function to do this, we could
> > > implement a function mirroring that function in the RTDM API. Looks
> > > simple. Am I missing something ?
> > >
> >
> > [Alex Plits] The Linux provides an option to configure the workQ on
> > specific CPU's on it's initialization stage of the WorkQ. I'm unsure
> > Of how/whether it actually schedules it's execution when schedule_work
> > is called from a different CPU core that it was configured up-on.
>
> I doubt very much this does not work. Have you tried it and observed that it
> does not work?
>
>
>
> > I'm guessing that if it were trivial the same mechanism would also be
> > used in the current API for N-RT or xenomai printk mechanism (both use
> > dedicated workQs which are different than Linux WorkQs awaken via
> > VIRQs).
>
> There is no xenomai printk mechanism. printk is implemented by the I-pipe
> patch, a layer below Xenomai, so can not use an RTDM service.
> Besides, the I-pipe patch printk implementation predates
> ipipe_post_work_root.
>
> The way RTDM work works is with the ipipe_post_work_root service, so it
> does not use virqs, and since the schedule_work gets invoked in a plain linux
> context, anything which works with schedule_work (like triggering a work
> queue on a different cpu) should work with the RTDM service.
>
> So, again, have you tried running the RTDM service with a work queue
> pinned on a different cpu and observed that it did not work?
>
[Alex Plits]
First off, thanks for such quick replies!
Secondly no I have not tried since I have not seen such an example.
So basically what you're saying -
Run schedule_work in handler which is scheduled by rtdm_schedule_nrt_work and use some linux defined workQ with cpu "affinity" - right?
Thanks,
AlexP.
> --
> Gilles.
> https://click-hack.org
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Xenomai] Suggested approach to schedule N-RT work in kernel on a specific CPU core
2016-03-20 7:59 ` Gilles Chanteperdrix
2016-03-20 8:20 ` Alex Plits
@ 2016-03-20 8:29 ` Alex Plits
1 sibling, 0 replies; 7+ messages in thread
From: Alex Plits @ 2016-03-20 8:29 UTC (permalink / raw)
To: Gilles Chanteperdrix; +Cc: xenomai@xenomai.org
> -----Original Message-----
> From: Alex Plits
> Sent: Sunday, March 20, 2016 10:21 AM
> To: 'Gilles Chanteperdrix'
> Cc: xenomai@xenomai.org
> Subject: RE: [Xenomai] Suggested approach to schedule N-RT work in kernel
> on a specific CPU core
>
>
>
> > -----Original Message-----
> > From: Gilles Chanteperdrix [mailto:gilles.chanteperdrix@xenomai.org]
> > Sent: Sunday, March 20, 2016 10:00 AM
> > To: Alex Plits
> > Cc: xenomai@xenomai.org
> > Subject: Re: [Xenomai] Suggested approach to schedule N-RT work in
> > kernel on a specific CPU core
> >
> > On Sun, Mar 20, 2016 at 07:49:16AM +0000, Alex Plits wrote:
> > >
> > >
> > > > -----Original Message-----
> > > > From: Gilles Chanteperdrix
> > > > [mailto:gilles.chanteperdrix@xenomai.org]
> > > > If the Linux kernel provides a function to do this, we could
> > > > implement a function mirroring that function in the RTDM API.
> > > > Looks simple. Am I missing something ?
> > > >
> > >
> > > [Alex Plits] The Linux provides an option to configure the workQ on
> > > specific CPU's on it's initialization stage of the WorkQ. I'm unsure
> > > Of how/whether it actually schedules it's execution when
> > > schedule_work is called from a different CPU core that it was configured
> up-on.
> >
> > I doubt very much this does not work. Have you tried it and observed
> > that it does not work?
> >
> >
> >
> > > I'm guessing that if it were trivial the same mechanism would also
> > > be used in the current API for N-RT or xenomai printk mechanism
> > > (both use dedicated workQs which are different than Linux WorkQs
> > > awaken via VIRQs).
> >
> > There is no xenomai printk mechanism. printk is implemented by the
> > I-pipe patch, a layer below Xenomai, so can not use an RTDM service.
> > Besides, the I-pipe patch printk implementation predates
> > ipipe_post_work_root.
> >
> > The way RTDM work works is with the ipipe_post_work_root service, so
> > it does not use virqs, and since the schedule_work gets invoked in a
> > plain linux context, anything which works with schedule_work (like
> > triggering a work queue on a different cpu) should work with the RTDM
> service.
> >
> > So, again, have you tried running the RTDM service with a work queue
> > pinned on a different cpu and observed that it did not work?
> >
> [Alex Plits]
> First off, thanks for such quick replies!
> Secondly no I have not tried since I have not seen such an example.
> So basically what you're saying -
> Run schedule_work in handler which is scheduled by
> rtdm_schedule_nrt_work and use some linux defined workQ with cpu
> "affinity" - right?
>
> Thanks,
> AlexP.
[Alex Plits]
Umm, No - either my interpretation is wrong or the suggested method is not what we're looking for.
We cannot involve the core which schedules the N-RT work in N-RT jobs like linux kernel workQ re-scheduling.
> > --
> > Gilles.
> > https://click-hack.org
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Xenomai] Suggested approach to schedule N-RT work in kernel on a specific CPU core
2016-03-20 8:20 ` Alex Plits
@ 2016-03-20 8:38 ` Gilles Chanteperdrix
0 siblings, 0 replies; 7+ messages in thread
From: Gilles Chanteperdrix @ 2016-03-20 8:38 UTC (permalink / raw)
To: Alex Plits; +Cc: xenomai@xenomai.org
On Sun, Mar 20, 2016 at 08:20:36AM +0000, Alex Plits wrote:
>
>
> > -----Original Message-----
> > From: Gilles Chanteperdrix [mailto:gilles.chanteperdrix@xenomai.org]
> > Sent: Sunday, March 20, 2016 10:00 AM
> > To: Alex Plits
> > Cc: xenomai@xenomai.org
> > Subject: Re: [Xenomai] Suggested approach to schedule N-RT work in kernel
> > on a specific CPU core
> >
> > On Sun, Mar 20, 2016 at 07:49:16AM +0000, Alex Plits wrote:
> > >
> > >
> > > > -----Original Message-----
> > > > From: Gilles Chanteperdrix [mailto:gilles.chanteperdrix@xenomai.org]
> > > > If the Linux kernel provides a function to do this, we could
> > > > implement a function mirroring that function in the RTDM API. Looks
> > > > simple. Am I missing something ?
> > > >
> > >
> > > [Alex Plits] The Linux provides an option to configure the workQ on
> > > specific CPU's on it's initialization stage of the WorkQ. I'm unsure
> > > Of how/whether it actually schedules it's execution when schedule_work
> > > is called from a different CPU core that it was configured up-on.
> >
> > I doubt very much this does not work. Have you tried it and observed that it
> > does not work?
> >
> >
> >
> > > I'm guessing that if it were trivial the same mechanism would also be
> > > used in the current API for N-RT or xenomai printk mechanism (both use
> > > dedicated workQs which are different than Linux WorkQs awaken via
> > > VIRQs).
> >
> > There is no xenomai printk mechanism. printk is implemented by the I-pipe
> > patch, a layer below Xenomai, so can not use an RTDM service.
> > Besides, the I-pipe patch printk implementation predates
> > ipipe_post_work_root.
> >
> > The way RTDM work works is with the ipipe_post_work_root service, so it
> > does not use virqs, and since the schedule_work gets invoked in a plain linux
> > context, anything which works with schedule_work (like triggering a work
> > queue on a different cpu) should work with the RTDM service.
> >
> > So, again, have you tried running the RTDM service with a work queue
> > pinned on a different cpu and observed that it did not work?
> >
> [Alex Plits]
> First off, thanks for such quick replies!
> Secondly no I have not tried since I have not seen such an example.
> So basically what you're saying -
> Run schedule_work in handler which is scheduled by rtdm_schedule_nrt_work and use some linux defined workQ with cpu "affinity" - right?
I meant simply use rtdm_schedule_nrt_work with a work queue that has
been pinned on a given cpu. rtdm_schedule_nrt_work simply gets
schedule_work invoked in a plain linux context. So, there should not
be much difference between using rtdm_schedule_nrt_work and
schedule_work. The only difference being that rtdm_schedule_nrt_work
can be invoked in head domain.
--
Gilles.
https://click-hack.org
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-03-20 8:38 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-20 7:15 [Xenomai] Suggested approach to schedule N-RT work in kernel on a specific CPU core Alex Plits
2016-03-20 7:25 ` Gilles Chanteperdrix
2016-03-20 7:49 ` Alex Plits
2016-03-20 7:59 ` Gilles Chanteperdrix
2016-03-20 8:20 ` Alex Plits
2016-03-20 8:38 ` Gilles Chanteperdrix
2016-03-20 8:29 ` Alex Plits
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.