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