Add real-time capable API to CA client
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
EPICS Base |
Triaged
|
Wishlist
|
Ralph Lange |
Bug Description
One of the common methods to communicate between a C/C++ application and an EPICS system for supervisory control and monitoring is by using Channel Access to access EPICS records (on the same box or remote).
When trying to send CA updates from a real-time thread it becomes obvious that even the "fire and forget" CA put operation may allocate memory, leading (on a Linux controller) to execution times of that non-blocking call of possibly over 1ms, which is likely to be unacceptable for a real-time setup.
Is there a way to split the CA put call into two parts, a "reservation" part that may malloc() and an "execution" part that is guaranteed to not allocate and has a deterministic timing?!
On top of that, the existing call could be implemented as calling the reservation immediately followed by execution.
A real-time thread, on the other hand, would do the reservation(s) in the non-critical "free" time at the end of the cycle and could do deterministic CA puts using the reservations during the real-time phase of the following cycle.
Changed in epics-base: | |
assignee: | nobody → Ralph Lange (ralph-lange) |
importance: | Undecided → Wishlist |
status: | New → In Progress |
In progress? Nope, sorry.