1. A storage subsystem, comprising: a non-volatile solid-state memory array; and a controller comprising a garbage collection module and configured to receive and execute memory commands from a host system and the garbage collection module, the controller further configured to: maintain, for a first memory block in the memory array, an invalid page counter for storing data related to a number of invalid pages within the first memory block, the first memory block assigned by the number of invalid pages into a first pool, wherein the garbage collection module is configured to select memory blocks from a plurality of pools based on the number of invalid pages; upon executing a memory command from the host system that causes a change in a validity of a page within the first memory block, update an invalid page counter associated with the first memory block; and reassign the first memory block to a second pool when the updated invalid page counter exceeds a threshold.