I have test IPCF transfer data from A core to M core, and M core send back the same data.
After finished all the transmission, I saw too much cpuload with ksoftirqd, the stacktrace is in function of ipc_queue_pop.
Following is top result and perf result:
top - 14:30:15 up 2 min, 1 user, load average: 0.95, 0.32, 0.11
Tasks: 107 total, 2 running, 105 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.5 sy, 0.0 ni, 49.4 id, 0.3 wa, 0.0 hi, 49.6 si, 0.0 st
MiB Mem : 991.6 total, 888.7 free, 62.9 used, 40.0 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 916.1 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10 root 20 0 0 0 0 R 99.3 0.0 1:05.50 ksoftirqd+
Samples: 15K of event 'cycles', 4000 Hz, Event count (approx.): 3603202572 lost:
Overhead Shared Object Symbol
79.10% [ipc_shm_dev] [k] ipc_queue_pop
5.78% [ipc_shm_dev] [k] ipc_hw_irq_enable
2.02% [kernel] [k] tasklet_action_common.constprop.0
1.65% [ipc_shm_dev] [k] $x
1.57% [kernel] [k] __softirqentry_text_start
1.43% [kernel] [k] wake_up_var
1.10% [kernel] [k] __tasklet_schedule
0.63% [ipc_shm_dev] [k] 0x00000000000000d4
0.56% [kernel] [k] rcu_softirq_qs
I am sure the problem is caused by following patch in release of IPCF bsp37.0
commit 3df0b2e261b0c6be50e70bf6e54c1b3eb0e9dd6b
Author: Hoang Nguyen Le <[email protected]>
Date: Fri Mar 3 17:56:35 2023 +0700
Add do while statement to process
all BDs until no data left
Issue: IPCF-2948
Signed-off-by: Hoang Nguyen Le <[email protected]>
How to solve the problem?