@70a89920-abf3-4 wrote:
Are the CPUs actually running 100%?
The answer to this gets into how preemptive multitasking works and how utilization is measured. Most processors can't actually be idle. Sometimes the OS kernel can shut off cores it isn't using to save power and heat, and sometimes it can adjust the clock speed, but a processor core which is on and not in a debugging mode is always running an instruction.
Preemptive multitasking (how most operating-system-level multitasking works today) works by splitting instructions up into chunks, then a piece of code called the scheduler determines which chunks will run where during a given time slice. The scheduler also has something called an idle loop which it schedules when there is no work to be done on a given core in a given time slice. The scheduler reports the processor's utilization to top and other tools based on how many time slices in the last second were spent running work chunks versus running the idle loop.
User-mode networking involves running essentially a whole other operating system kernel with its own scheduler in a VM. This normally increases the latency of scheduling decisions, since the inner scheduler has to make the decision, then request time from the outer scheduler, which has to make its own decision. To avoid this scheduler-within-a-scheduler problem, it's common to have the outer OS kernel dedicate particular cores to the inner user-mode kernel's scheduler. From the perspective of the outer OS kernel's scheduler, it's scheduling work for the user 100% of the time slices on the specific cores, and never scheduling the idle loop. This is what top reports.
cpview is able to get information from the user-mode kernel's scheduler, which more accurately reflects the processor time capacity available for handling traffic. Both tools are correct, they're just asking different parts of the system.