Performance

Top  Previous  Next

Any performance figures quoted for link devices are maxima; the actual rates achieved in practice depend on several things:


The size of the transfer. There is a fixed overhead associated with managing any transfer. This overhead becomes negligible when moving large amounts of data, but tends to dominate small transfers.

Availability of DMA. When you start a transfer,the kernel  attempt to allocate a DMA channel to manage moving the data. The number of DMA channels available is limited to three. There are only four external interrupt lines and one needs to be used to synchronise each DMA transfer. One of these lines must be reserved to act as a fallback for transfers that cannot use DMA and must be managed with CPU interrupts. If all available DMA channels are tied up with concurrent transfers or have been claimed for other uses in the application, the transfer  have to use CPU interrupts and  achieve a considerably reduced transfer rate.

The alignment of the data. Because of the inability of the C6000 DMA to maintain coherency between the cache and external memory, the Diamond kernel has to limit the use of DMA to transfers or sections of transfers that are aligned on a cache-line boundary (addresses which are a multiple of 128) and of a size that is a multiple of the cache-line size (128 bytes). Parts of a transfer that are misaligned or not a multiple of 128 bytes are handled by CPU interrupts, and this is considerably slower than using DMA.

 

The configurer  normally choose the links to be used to carry channels created by CONNECT statements. If you need a connection to use a particular wire, for example, to make sure it uses a fast SDB link or a slower comport link, you should explicitly PLACE the connection on the wire. For example:

 

processor root  default

processor node  default

wire            ? root[CP:1] node[CP:4]

wire      sdb   root[SDB:1] node[SDB:1] ! the SDB link

task      rtask data=80K ins=1 outs=1

task      ntask data=80K ins=1 outs=1

connect   c1    rtask[0] ntask[0] physical

connect   c2    ntask[0] rtask[0] physical

place     rtask root

place     ntask node

place     c1    sdb ! use the fast link

place     c2    sdb