Project Home
Project Home
Documents
Documents
Wiki
Wiki
Discussion Forums
Discussions
Project Information
Project Info
Forum Topic - Multi independent QNX instances in a x86 multi-core system: (6 Items)
   
Multi independent QNX instances in a x86 multi-core system  
We are using QNX in a telecom area where throughput is the most important goal and often data flow consists of a 
multitude of small packets going from/to high speed links (i.e. Gigabit Ethernet, STM-1, etc).

In our applications many system calls are required to exchange packets between the device drivers and the upper level 
protocol modules. When we try to take benefit of having multiple cores these system calls interfere each other and cut 
the performance at the level of a single core and sometime even less.

By the way we would like a configuration where multiple independent OS instances run on the separate cores (or group of 
them) being connected through an internal virtual network based on qnet. In this way the inter-working of the core would
 be limited only to what is strictly required.

The management of the hardware device should be distributed between the OS instances by means of some configuration 
mechanism taking advantage of the Intel HW virtualization functions. 

In our case the disk and the console would be handled by the first core. The high speed interfaces would be distributed 
between the other cores.

There are products on the market that should do the job, I do not how effectively. I would prefer to solve this issue 
without additional stuff.

Maybe somebody is working on it already ?
RE: Multi independent QNX instances in a x86 multi-core system  

> -----Original Message-----
> From: Enrico Bendinelli [mailto:community-noreply@qnx.com]
> Sent: Wednesday, November 18, 2009 6:59 PM
> To: ostech-core_os
> Subject: Multi independent QNX instances in a x86 multi-core system
> 
> We are using QNX in a telecom area where throughput is the most
> important goal and often data flow consists of a multitude of small
> packets going from/to high speed links (i.e. Gigabit Ethernet, STM-1,
> etc).
> 
> In our applications many system calls are required to exchange packets
> between the device drivers and the upper level protocol modules. When
> we try to take benefit of having multiple cores these system calls
> interfere each other and cut the performance at the level of a single
> core and sometime even less.

You have to figure out where the bottleneck is.

> 
> By the way we would like a configuration where multiple independent OS
> instances run on the separate cores (or group of them) being connected
> through an internal virtual network based on qnet. In this way the
> inter-working of the core would be limited only to what is strictly
> required.

To my knowledge that is not possible, unless you use something like vmware.

But that would most probably not solve your problem.

> 
> The management of the hardware device should be distributed between the
> OS instances by means of some configuration mechanism taking advantage
> of the Intel HW virtualization functions.

QNX doesn`t make use of that.

> 
> In our case the disk and the console would be handled by the first
> core. The high speed interfaces would be distributed between the other
> cores.

That is under your control. Check -C and -R argument of the on command.

> 
> There are products on the market that should do the job, I do not how
> effectively. I would prefer to solve this issue without additional
> stuff.
> 
> Maybe somebody is working on it already ?
> 
> 
> 
> 
> _______________________________________________
> 
> OSTech
> http://community.qnx.com/sf/go/post42207
> 
Re: RE: Multi independent QNX instances in a x86 multi-core system  
We have been running many tests using dynamic or static allocation of the process on the cores without significant 
results.

If we increase the traffic targeted to a certain core, unfortunately this affect the operation of the other cores.

We noticed that any operation even local to one core affects the operation of the other cores.  I think the current 
protection mechanism of the kernel is too simple for our applications. Unfortunately we do not have in average too much 
code in between two system calls, so the performance of the OS has a major weight in the aggregated performances.

By the way, on a Gigabit Ethernet, assuming a length of 400 bytes, you can have a swarm of packet spaced of 4 us. How 
many system calls are required by the software to transfer the received packet in the context of the receiving process ?
 If each of these calls affects the operation of all cores there is no way out but using a different approach as I 
described already.
Re: Multi independent QNX instances in a x86 multi-core system  
maybe you should check hypervisors like this: http://www.real-time-systems.com
this gives you the chance to setup a virtual network between multiple cores using shmem
and it also asigns hardware to specific cores.
From what I know (embedded Nürnberg 2009) it needs a system with a BIOS.


Re: Multi independent QNX instances in a x86 multi-core system  
What you need is classical asynchronous multi-processing.

IBV (http://www.ibv-augsburg.net), one of the German QNX distributors, works on such technologies. For QNX + Windows, 
IBV already has a product named QWin. The technology works without any intermediate layers or "stuff".
Re: Multi independent QNX instances in a x86 multi-core system  
> maybe you should check hypervisors like this: http://www.real-time-systems.com
> 
> this gives you the chance to setup a virtual network between multiple cores 
> using shmem
> and it also asigns hardware to specific cores.
> From what I know (embedded Nürnberg 2009) it needs a system with a BIOS.
> 

We did experiment internally with RTS' product recently and it did support  mutliple QNX instances running on a multi-
core x86 platform and communicate via shared mem, virtual network interface, etc between cores/QNX instances. We also 
ran mutliple QNX instances and a Windows XP instance as well.

Grant