1. A method comprising: receiving an input/output (I/O) request at a storage system, the I/O request processed by a storage I/O stack executing on the storage system, the storage system including one or more processors, each processor including a plurality of processor cores sharing a last level cache, wherein the storage I/O stack includes one or more non-blocking services executing on the processors; associating the I/O request with one or more messages; maintaining a run queue of messages for each non-blocking service of the storage I/O stack, wherein a first non-blocking service executes on an under-utilized processor core of the one or more processors of the storage system and a second non-blocking service executes on an over-utilized processor core of the one or more processors; and migrating the run queue of the second non-blocking service from the over-utilized processor core to be serviced by the under-utilized processor core.