rpmsg on iMx6 SoloX

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

rpmsg on iMx6 SoloX

3,863 Views
pazzodalegare
Contributor II

Hi,

After testing a bit my iMx6 SoloX  (using FreeRTOS BSP v1.0.1 for i.MX7D/i.MX6SX) I realized that there could be a bandwidth issue. I played with imx_rpmsg_tty first, then with rpmsg-lite , using rpmsg_multiept, (see GitHub - EmbeddedRPC/erpc-imx-demos: eRPC demos for i.MX devices ) but I cannot go faster than 90KB/s...I would expect, at least, a couple of MB/s. Do you have any link for a good benchmark example? What is the expected speed one could expect?

Thank you in advance for you help.

pazzodalegare

ps: the test environment imx_rpmsg_tty demo I use has the M4 pushgin data to iMx6, once the rpmsg connection is available. If data has goes faster than around 15KB/s I got (on linux console)

imx_rpmsg_tty rpmsg0: No memory for tty_prepare_flip_string. If help to understand I can attach both tests (openamp rtos based, from FreeRTOS BSP, and rpmsg-lite one).

Labels (1)
Tags (1)
9 Replies

2,530 Views
vadimfilippenko
Contributor II

have the same problem, see Increasing transfer speed between cores · Issue #20 · EmbeddedRPC/erpc · GitHub

now I am continuing to increase the data rate.......

2,530 Views
pazzodalegare
Contributor II

Hi Filippenkon and thank you for your link!

Actually I have a throughput of 130KB/s (on iMx6 SoloX M4->A9) using imx_rpmsg_tty.

I could increase the speed from 90 to 130 KB/s collecting bigger buffer and removing some

debug messages from virtio_rpmsg_bus.c (as ablaylock suggested on Github)

Do you have any benchmark about erpc? Are you using python or c++ code on Linux side?

Could you share your test code?

From my point of view the performances of rpmsg on solox (at the moment) are very bad, far from what I'm expecting to reach.

Thank a lot,

pazzo

0 Kudos

2,530 Views
vadimfilippenko
Contributor II

I use c++ code on Linux side.

I test iMXSolox via specific Ethernet protocol + additional device + Wireshark.

Perfomance of A9 alone is OK. The big delays appears between M4 A9.

Also I use button on M4 and measure time with help of oscillograph from button click to relay responce on other device. The other device time delay is standard, so I can see the delay between A9 and M4 (up to 16mc using eRPC library).

I will share simple code.

2,530 Views
pazzodalegare
Contributor II

Hi Fillippenko and thanks a lot for your help!

eRPC is more than what I need., I think that rpmsg alone would be enough.

Removing debug infos from rpmsg drivers, as indicated on git  #20 issue you shared, is enough for my application (altough far from the best).

pz

0 Kudos

2,530 Views
BiyongSUN
NXP Employee
NXP Employee

It is easy to improve the throughput. Allocate another memory block. Just notify the data are ready there. You get almost any throughput. 

0 Kudos

2,530 Views
pazzodalegare
Contributor II

Hi Sun and thank you again for your time.

Could you share more info?

Thanks,

pz

0 Kudos

2,530 Views
pazzodalegare
Contributor II

Hi Biyong Sun and thank you for your answer.

Could you please give more information?

> Allocate another memory block

How can I do it? I started from NXP rpmsg examples, could you indicate how can I allocate another memory block?

Should I modify Linux rpmsg drivers?  Could you please share an example to reach "almost anyh throughput"?

BR,

pz

2,530 Views
igorpadykov
NXP Employee
NXP Employee

Hi Pazzo

unfortunately I am not aware of benchmarks, but delays are caused by operating

system and other tasks which processor executes. One can try to decrease them disabling

bus frequency driver, described in Chapter 24 Dynamic Bus Frequency Driver

attached Linux Manual, change cpu frequency to max. - use Chapter 23
CPU Frequency Scaling (CPUFREQ) Driver, try enable_wait_mode=off in

kernel boot parameters.

Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos

2,530 Views
pazzodalegare
Contributor II

Thank you Igor for your advice and your help!

I checked chapters you mentioned and I tried to disable bus frequency

driver and the enable_wait_mode param but without any improvement.

I wonder if there is a faster way to exchange data between M4 and iMx6

i.e. something like circular buffer in the shared memory.

Thank you again for your help,

pz

0 Kudos