1. A method comprising: receiving a plurality of memory operations in a memory controller, wherein each memory operation of the plurality of memory operations has an associated quality of service (QoS) parameter indicating a requested quality of service for the memory operation; and grouping the plurality of memory operations into a plurality of affinity groups, wherein the memory operations within a given affinity group consume less memory bandwidth when scheduled as a group then when scheduled separately; and scheduling memory operations directed to each memory channel of a plurality of memory channels responsive to the QoS parameters associated with the memory operations, a state of the memory controller, and sizes of the plurality of affinity groups.