Project Home
Project Home
Documents
Documents
Wiki
Wiki
Discussion Forums
Discussions
Project Information
Project Info
Forum Topic - QNX support for allocating I/O channels to different processor cores in a multicore system?: (1 Item)
   
QNX support for allocating I/O channels to different processor cores in a multicore system?  
All -

I was just thrown into a new project that uses QNX as the RTOS on which a legacy application runs.  I'm new to QNX 
(though not to Unix/Linux), and not yet up to speed on all of the underlying technical details, so I figured I'd post a 
question at the same time I'm reading the documentation (so far, search tools have proved useless for this topic).

To add new capabilities to this legacy software application (built for QNX Neutrino 6.3.2), which has stringent real-
time requirements (fast application clock cycle) and multiple high-speed I/O channels, the project would like to upgrade
 the hardware to a multicore system and assign I/O channels to different processor cores.  Here's the theory:

The platform would be a modern PC desktop/workstation-class machine with an Intel Xeon 5500/5600 CPU and chipset that 
supports VT-x / VT-d virtualization technology.  These processor features would not be used for their common application
 (a hypervisor that supports multiple virtual machines on the same physical host), but would be configured so that, 
within a single QNX host OS, separate I/O channels could be assigned to different processor cores, thus spreading the I/
O processing load among the multiple available cores (on the current platform, even with an older dual- or quad-core 
processor, all of the I/O is handled by core 0 and cannot be offloaded onto another core).  This would be accomplished 
using the VT-d capabilities of DMA remapping and interrupt migration.  The legacy application could then be updated to 
utilize BMP to assign threads to different processor cores, matching I/O channels with the threads responsible for 
managing them.

My question is this: Does any version of QNX Neutrino support these processor features, or provide a mechanism for 
dividing the I/O load as described above?  As I mentioned above, the legacy application runs on 6.3.2, and I've been 
researching 6.5.0, but so far have found nothing.  If this is not supported now, are there plans to support it in the 
near future?  If not, would it be possible for me to develop this capability myself (via drivers, etc.)?  How much 
effort would it be to develop (my initial research tells me that it would not be trivial)?

I would appreciate any insight that those with more expertise than me can offer.

Thank you,
EP