High average load but low CPU usage

I actually solved the issue. Please read on.

Thank you @jeff for your comment. OpenWRT forum didn't send any notification email about your reply. I thought that nobody replied. I got notified today about the new replies.

@Timeless Yes, that's what I did.

@rtau How did you know which parent processes created the sleep processes? I don't have detailed knowledge. So, I want to learn.

@sammo Yes, I am using GL-inet AR-150. The current firmware is in the testing stage. There are quite a few optimization problems IMHO. And @Per Thank you for your comment but it was not a mwan3 issue in my case.

Solution:
GL-inet adds some of their own software on top of the OpenWRT for their admin panel. It loads a module after boot (/etc/rc.d/S99gl_tertf), named ter-traffic which had D (Uninterruptible sleep) process state in the top output. (You can see the process tertf in my top output screenshot on my question). However, the D flag raised my suspicion and I unloaded it: rmmod ter-traffic. The load eventually decreased to about 0.2. I was informed later, it is a traffic statistics module for each client. I don't have their source code, so, I don't know why the module was in D state and whether it would have affected my router performance; but I don't need to see client statistics. So, I have permanently removed the init.d script.