Hi,

Does anyone have experience with dsplink on a Linux PCI platform? We're
experiencing some performance issues and wondering whether it's
something we're doing wrong or whether it's dsplink which has some
serious performance issues.

We're currently evaluating DSPLink as a possible IPC solution for a new
low latency audio streaming product. The test setup is as follows:

    * Pentium 4 (2.4GHz) running 2.6.31 kernel with RT and bigphysarea
patches
    * DSP/BIOS Link version 1.64 (with minor changes to support 2.6.31
kernel)
    * Following options used to configure dsplink: --platform=LINUXPC
--nodsp=1 --dspcfg_0=DM648PCI --dspos_0=DSPBIOS5XX --gppos=RHEL4
--comps=ponslrmc --dspdma=1
    * DM648 EVM from Lyrtech plugged into Pentium 4 PCI bus

I've modified the MSGQ samples supplied with dsplink 1.64 slightly by
making the gpp the message initiator and adding a usleep() call in the
for loop. This is to vary the message send rate to match audio frame
rates that we expect to handle in our final system. The following are
some observations:

With no usleep() call I see a round-trip delay of about 480us. CPU
loading is about 70%. See output of top below (modified msgq sample app
is called atest):

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2726 root     -96   0 11560 1096  924 S 38.4  0.1   0:08.87 atest
 2732 root      10 -10     0    0    0 S 29.8  0.0   0:06.82
DSPLINK_DPC_2
 2728 root      10 -10     0    0    0 R  4.6  0.0   0:01.09
DSPLINK_DPC_0
 2729 root     -51  -5     0    0    0 S  1.0  0.0   0:00.21
irq/9-DSPLINK

With usleep() call to set loop rate to 1ms (i.e. one MSGQ_put followed
by one MSGQ_get every 1ms) CPU loading is about 32%.

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2577 root     -96   0 11560 1104  928 S 16.9  0.1   0:05.15 atest
 2583 root      10 -10     0    0    0 S 12.9  0.0   0:03.89
DSPLINK_DPC_2
 2579 root      10 -10     0    0    0 R  2.0  0.0   0:00.65
DSPLINK_DPC_0
 2580 root     -51  -5     0    0    0 S  0.7  0.0   0:00.16
irq/9-DSPLINK

With usleep() call to set loop rate to 4ms (i.e. one MSGQ_put followed
by one MSGQ_get every 4ms) CPU loading is about 9%.

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2698 root     -96   0 11560 1100  928 S  5.0  0.1   0:02.65 atest
 2703 root      10 -10     0    0    0 S  3.3  0.0   0:01.91
DSPLINK_DPC_2
 2699 root      10 -10     0    0    0 S  0.7  0.0   0:00.32
DSPLINK_DPC_0
  186 root     -51  -5     0    0    0 S  0.3  0.0   0:00.84 irq/9-acpi
 2700 root     -51  -5     0    0    0 S  0.3  0.0   0:00.05
irq/9-DSPLINK

My question is, has anyone tested dsplink in a similar scenario and do
the latency and cpu loading figures look comparable? I was expecting to
see lower latency than this and much lower CPU loading. I read somewhere
in the CodecEngine documentation that applications should limit
CodecEngine transaction rate to about 7000 transactions per second (not
sure which platform this applies to - maybe DM644x?). I would have
expected that raw dsplink on a 2.4GHz P4 would be able to achieve far
better performance than the measly 4000 transactions per second that I'm
seeing (assuming that CE uses the MSGQ protocol of course, which I think
it does). Ideas anyone?
 

Regards,

Grant

This email has been processed by SmoothZap - www.smoothwall.net

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to