So it looks like interrupts shouldn't be a problem if we are a bit careful.
We have 4 cores in the Pi3. modep is single threaded. So it can be pinned to a core. In fact I want to play with using nohz_full and isolcpus to see if we can pin it to a completely isolated core (not even timer interrupts other than the ones requested by userspace). We can also ensure all interrupts (other maybe than the audio ones, see below) are routed to other cores.
That leaves 3 cores to handle buttons, GUI, web, network .. that's plenty and none of it needs to have real-time characteristics.
What I'm not sure is whether it's worth pinning jackd as well, and whether it should be on the same core as modep or can be on a different one. I'll do some experiments over the next few days see if I can come with a sane "default setup" that tries to avoid anything bothering the cpu doing audio processing.
Once we have that, we might want to generalize the use of interrupts for polling controls to see if we can reduce the speed of the main polling loop. I suppose we'll still need it for the ADC .. how often do we really need to poll this ? I'm thinking things like expression pedals might be a tad "sensitive". Reducing that speed would reduce CPU usage on the non-processing cores, thus reducing heat and power consumption.
We have 4 cores in the Pi3. modep is single threaded. So it can be pinned to a core. In fact I want to play with using nohz_full and isolcpus to see if we can pin it to a completely isolated core (not even timer interrupts other than the ones requested by userspace). We can also ensure all interrupts (other maybe than the audio ones, see below) are routed to other cores.
That leaves 3 cores to handle buttons, GUI, web, network .. that's plenty and none of it needs to have real-time characteristics.
What I'm not sure is whether it's worth pinning jackd as well, and whether it should be on the same core as modep or can be on a different one. I'll do some experiments over the next few days see if I can come with a sane "default setup" that tries to avoid anything bothering the cpu doing audio processing.
Once we have that, we might want to generalize the use of interrupts for polling controls to see if we can reduce the speed of the main polling loop. I suppose we'll still need it for the ADC .. how often do we really need to poll this ? I'm thinking things like expression pedals might be a tad "sensitive". Reducing that speed would reduce CPU usage on the non-processing cores, thus reducing heat and power consumption.