A memory channel interleaving method with selective power or performance optimization, the method comprising: configuring a memory address map for at least a first memory device and a second memory device, wherein the first memory device is connected to a first memory controller and communicates via a first memory channel and wherein the second memory device is connected to a second memory controller and communicates via a second memory channel, wherein the memory address map comprises a linear region and an interleaved region, each region (302, 304) comprising separate allocated memory address space with a corresponding address range divided between the two memory channels (CHo, CH1), the interleaved region comprising an interleaved address space for relatively higher performance use cases and the linear region comprising a linear address space for relatively lower power use cases; receiving, at a memory channel interleaver, memory requests from one or more clients, the memory requests comprising a preference for power savings or performance; assigning, by the memory channel interleaver, the memory requests to the linear region or the interleaved region according to the preference for power savings or performance, wherein the linear address space comprises a first address range associated with the first memory device and accessed via the first memory channel and a second address range associated with the second memory device and accessed via the second memory channel, wherein the assigning the memory requests to the linear region comprises using the first address range associated with the first memory device while the second memory device is placed in a power saving mode, wherein the method further comprises: validating memory requests having the preference for performance against a database comprising a historical log of memory bandwidth; and if not validated, overriding the preference for performance and assigning the unvalidated memory request to the linear region. configuring a memory address map for at least a first memory device and a second memory device, wherein the first memory device is connected to a first memory controller and communicates via a first memory channel and wherein the second memory device is connected to a second memory controller and communicates via a second memory channel, wherein the memory address map comprises a linear region and an interleaved region, each region (302, 304) comprising separate allocated memory address space with a corresponding address range divided between the two memory channels (CHo, CH1), the interleaved region comprising an interleaved address space for relatively higher performance use cases and the linear region comprising a linear address space for relatively lower power use cases; receiving, at a memory channel interleaver, memory requests from one or more clients, the memory requests comprising a preference for power savings or performance; assigning, by the memory channel interleaver, the memory requests to the linear region or the interleaved region according to the preference for power savings or performance, wherein the linear address space comprises a first address range associated with the first memory device and accessed via the first memory channel and a second address range associated with the second memory device and accessed via the second memory channel, wherein the assigning the memory requests to the linear region comprises using the first address range associated with the first memory device while the second memory device is placed in a power saving mode, wherein the method further comprises: validating memory requests having the preference for performance against a database comprising a historical log of memory bandwidth; and if not validated, overriding the preference for performance and assigning the unvalidated memory request to the linear region. validating memory requests having the preference for performance against a database comprising a historical log of memory bandwidth; and if not validated, overriding the preference for performance and assigning the unvalidated memory request to the linear region.