Patent ID: 7774556

Claim:
A method of managing a main memory that includes symmetric memory components associated with a first collection of memory operations and asymmetric memory components associated with a second collection of memory operations, where the symmetric memory components are each configured to enable random access write operations in which an address within a block of the symmetric memory component is written without affecting the availability of other addresses within the block of the symmetric memory component, and where the asymmetric memory components are each configured to enable block write operations in which an address within a block of one of the asymmetric memory components affects the availability of other addresses within the block of the asymmetric memory component, the method comprising: receiving, on a central processing unit (CPU), a first command from an application to read data associated with a virtual address that is mapped to the main memory; determining, using a memory management unit, that the virtual address is mapped to one of the symmetric memory components of the main memory; accessing memory use characteristics indicating how the data associated with the virtual address has been accessed; determining performance characteristics that reflect present application behavior and present memory utilization of a computer system that includes the main memory and the CPU; identifying, based on the determined performance characteristics, a memory migration profile that is presently suitable for the present application behavior and the present memory utilization of the computer system and that includes one or more metrics used in determining whether to load data from symmetric memory to asymmetric memory; analyzing the memory use characteristics with respect to the identified memory migration profile; determining, based on the analysis, that the data associated with the virtual address has access characteristics suited to an asymmetric memory component of the main memory given the present application behavior and the present memory utilization of the computer system; loading, using the CPU, the data associated with the virtual address to the asymmetric memory component of the main memory; receiving, after the loading and using the memory management unit, a second command from the application to read the data associated with the virtual address; and retrieving, responsive to the second command, the data associated with the virtual address from the asymmetric memory component of the main memory.