A method for memory allocation, the method comprising: receiving, from a process, a memory allocation request (118, 218, 318) for a memory system comprising a first channel having a first channel utilization and a second channel having a second channel utilization; selecting, based on the first channel utilization and the second channel utilization, the first channel; allocating, to the process, a page of memory from the first channel; and characterized by it comprises at least one of: (a) wherein the selecting comprises: initializing a value of a ticket by calculating a random number modulo a total number of free pages across all channels, comparing the value of the ticket to the number of free pages in the first channel, and selecting the first channel if the value of the ticket is less than or equal to the number of free pages in the first channel, and (b) wherein the memory allocation request (118, 218, 318) comprises a requested order, and the allocating comprises checking a first group of one or more lists of pages, and the one or more lists of pages of the first group are based on a first order and arranged by channel. receiving, from a process, a memory allocation request (118, 218, 318) for a memory system comprising a first channel having a first channel utilization and a second channel having a second channel utilization; selecting, based on the first channel utilization and the second channel utilization, the first channel; allocating, to the process, a page of memory from the first channel; and characterized by it comprises at least one of: (a) wherein the selecting comprises: initializing a value of a ticket by calculating a random number modulo a total number of free pages across all channels, comparing the value of the ticket to the number of free pages in the first channel, and selecting the first channel if the value of the ticket is less than or equal to the number of free pages in the first channel, and (b) wherein the memory allocation request (118, 218, 318) comprises a requested order, and the allocating comprises checking a first group of one or more lists of pages, and the one or more lists of pages of the first group are based on a first order and arranged by channel. (a) wherein the selecting comprises: initializing a value of a ticket by calculating a random number modulo a total number of free pages across all channels, comparing the value of the ticket to the number of free pages in the first channel, and selecting the first channel if the value of the ticket is less than or equal to the number of free pages in the first channel, and initializing a value of a ticket by calculating a random number modulo a total number of free pages across all channels, comparing the value of the ticket to the number of free pages in the first channel, and selecting the first channel if the value of the ticket is less than or equal to the number of free pages in the first channel, and (b) wherein the memory allocation request (118, 218, 318) comprises a requested order, and the allocating comprises checking a first group of one or more lists of pages, and the one or more lists of pages of the first group are based on a first order and arranged by channel.