My kernel_task
process has high CPU usage (150%+) on a late 2016 MacBook Pro running 10.12.5 when transmitting/receiving lots of data from the network and I think it's a bottleneck. I'm using a Anker USB-C 3-port USB 3 Hub + GbE adapter, so maybe it's a driver thing, but my CPU usage is also proportionately lower (relative to transfer speed) when I use wi-fi and I pretty much top out the bandwidth that the airport menubar TX rate (from holding option and clicking the airport icon) suggests I should be getting.
At first I thought it was due to lack of use of hardware encryption via an ssh
tunnel and sftp
, but I've tried iperf
, iperf3
, and plain cat /dev/zero | nc host port
. These all result in high CPU usage. Direct connection -- bypassing my switch -- has no effect. It's not the cable, either.
Is CPU usage of 150%+ normal for networking on macOS? And is there anything I can do to improve my transfer rates (prefer software changes, but networking hardware is okay, too)? kernel_task
appears to not use more than 180% or so of processor time and my transmission rate keeps increasing until I hit that utilization rate (which can be sooner, if I'm using ssh
). The computers I'm connecting to (Solaris, FreeBSD, and Debian) never use more than 25% of CPU to to saturate a GbE connection amongst themselves, with and without ssh
.