Quick investigation shown that CPU0 is maxed out at 100% by ksoftirqd/0. This was in turn caused by USB port stuck on CPU0.
Quick & dirty workaround is to push it out to big cores. That gave instant bump to max out switch (100Mbps) and get out of it 98Mbps.
To automate that for after the reboot I've following script started automatically. It could be added to /etc/rc.local or as I've it as part of customer systemd service.
Code: Select all
############ cat usb_simaffinity.sh #!/bin/bash # Adjust USB related interrupts to Big Core # - if not, USB GigabitEthernet adapter maxes at 30Mb/s # with ksoftirqd/0 at 100% CPU0 and makes system unresponsive source /etc/environment if [ -z "$1" ]; then exit 1; fi AFF=$1 IRQS=`cat /proc/interrupts |grep usb|cut -d":" -f1|tr -d '[:blank:]'` while read -r i; do echo "$AFF" >> /proc/irq/$i/smp_affinity_list done <<< $IRQS
Speed issue might be applicable to embedded interface too - I just didn't have time to test it. If that would be the case, above script would need to be modified to identify also embedded interface irq id and amend sim_affinity.
- if you'd plan to switch of cores 2-5, I'm not sure about behavior if adapter would be still limited to 2-5.