The way CPU usage is measured includes time waiting for memory reads. Only a hyperthreaded core would be able to schedule a different task on such a core. For the M1 Pro, which is not hyperthreaded, if all dispatched instructions are waiting for memory reads, then the retired instruction counter simply does not get incremented for that cycle.