Modern computing systems can execute a wide range of software applications that may use different amounts of resources such as processor execution time and memory consumption, among others. For example, some software applications may perform complex operations that result in the use of a significant amount of processor execution time. In other examples, some software applications may be memory intensive and thus use a large amount of memory to store results during execution of the software applications. In some embodiments, software applications can share data between multiple computing devices.
Certain examples are described in the following detailed description and in reference to the drawings, in which:
According to embodiments of the subject matter described herein, a computing system can share data between a local memory device and an external memory device using two separate memory spaces. In some embodiments, a local memory device resides in a first computing system, while an external memory device resides in a second computing system. The local memory device and the external memory device can both store data that is accessible from a processor through a memory controller using memory address spaces. A memory address space, as referred to herein, includes any suitable range of discrete memory addresses, wherein each discrete memory address can correspond to data stored in any suitable computing device. In some examples, a discrete memory address may correspond to a sector of a hard drive, solid state drive, a network host, a peripheral storage device, or a cache line in DRAM, PCM, STT_MRAM, or ReRAM memory, among others. In some embodiments, a computing system can retrieve data stored in an external memory device by translating a local memory address space corresponding with a local memory device into an external memory address space corresponding with an external memory device.
The processor 102 may be connected through a system bus 104 (e.g., AMBA®, PCI®, PCI Express®, HyperTransport®, Serial ATA, among others) to an input/output (I/O) device interface 106 adapted to connect the computing system 100 to one or more I/O devices 108. The I/O devices 108 may include, for example, a keyboard and a pointing device, wherein the pointing device may include a touchpad or a touchscreen, among others. The I/O devices 108 may be built-in components of the computing system 100, or may be devices that are externally connected to the computing system 100.
The processor 102 may also be linked through the system bus 104 to a display device interface 110 adapted to connect the computing system 100 to a display device 112. The display device 112 may include a display screen that is a built-in component of the computing system 100. The display device 112 may also include a computer monitor, television, or projector, among others, that is externally connected to the computing system 100. Additionally, the processor 102 may also be linked through the system bus 104 to a network interface card (NIC) 114. The NIC 114 may be adapted to connect the computing system 100 through the system bus 104 to a network (not depicted). The network (not depicted) may be a wide area network (WAN), local area network (LAN), or the Internet, among others.
The processor 102 may also be linked through the system bus 104 to a memory device 116. In some embodiments, the memory device 116 can include random access memory (e.g., SRAM, DRAM, eDRAM, EDO RAM, DDR RAM, RRAM®, PRAM, among others), read only memory (e.g., Mask ROM, EPROM, EEPROM, among others), non-volatile memory (PCM, STT_MRAM, ReRAM, Memristor), or any other suitable memory systems. In some examples, the memory device 116 can include any suitable number of memory addresses that each correspond to any suitable number of data values. In some embodiments, the memory addresses associated with the memory device 116 correspond to a local memory address space. For example, the local memory address space may include any suitable number of unambiguous memory addresses which correspond to the stored data in the memory device 116.
In some embodiments, the memory device 116 can be accessed by the processor 102 through a memory controller 118. The memory controller 118 can include logic that enables a processor 102 to read data from the memory device 116 and write data to the memory device 116.
The processor may also be linked through the system bus 104 to a data translation module 120. In some embodiments, the data translation module 120 may be integrated into the memory controller 118. In some embodiments, the data translation module 120 can detect a request for data from an external memory device 122 in a second computing device 124 through a second memory controller 125 and a system connect 126 (e.g., Ethernet, PCI®, PCI Express®, HyperTransport®, Serial ATA, message passing interface, among others). The external memory device 122 can include random access memory (e.g., SRAM, DRAM, eDRAM, EDO RAM, DDR RAM, RRAM®, PRAM, among others), read only memory (e.g., Mask ROM, EPROM, EEPROM, among others), non-volatile memory, or any other suitable memory systems. In some embodiments, the external memory device 122 can include the second memory controller 125. In some embodiments, each memory device, such as the memory device 116 and the external memory device 122, can store data using a unique memory address space. For example, the external memory device 122 may access stored data by associating the stored data with memory addresses in an external memory address space. Similarly, the memory device 116 may access stored data by associating the stored data with memory addresses in the local memory address space.
In some embodiments, the second computing device 124 may also include a second data translation module 128 that can store data in the external memory device 122. Periodically, the second data translation module 128 can retrieve data from the external memory device 122 that is requested by the data translation module 120 in the computing device 100. The second data translation module 128 may also send the requested data retrieved from the external memory device 122 to the data translation module 120 in the computing system 100. In some embodiments, the data translation module 120 can translate a memory address associated with the requested data from the external memory address space to a local memory address space. The data translation module 120 can then provide the requested data to any requesting operating system, application, or hardware component using the memory address associated with the local memory address space.
It is to be understood that the block diagram of
At block 202, the data translation module 120 of a first computing device can configure the local memory device to store data for the external memory device. In some embodiments, configuration can include allocating any suitable portion of the local memory device to store data for the external memory device. For example, the data translation module 120 can use any suitable allocation technique, such as dynamic memory allocation or static memory allocation, to allocate a portion of the local memory device to store data for an external storage device. In some examples, the processor in the computing device with the local memory device cannot detect that the memory allocated to a remote node or a second computing system is present. In some examples, the data translation module 120 can manage the allocation of memory space in the local memory device during the initialization of a computing device such as the boot process. In some examples, the data translation module 120 can also manage the allocation of memory space in the local memory device dynamically. For example, the data translation module 120 may re-allocate a different amount of memory in a local memory device for external data storage in response to the termination of a software application.
At block 204, the data translation module 120 can detect a request for data from an external data translation module. In some embodiments, the request for data from an external data translation module can be transmitted to the local memory device through the data translation module 120. For example, the data translation module 120 may connect to any suitable system interconnect such as a bus, Ethernet, infiniband, or PCIe, among others. When an external data translation module in a second computing system is to retrieve data from the local memory device, the external data translation module can transmit a request for data to the data translation module 120 of the first computing device through the system interconnect.
At block 206, the data translation module 120 can translate a memory address that corresponds to the requested data from an external memory address space to a local memory address space. In some embodiments, the data translation module 120 can maintain a configuration table that includes a list of memory addresses in the local memory address space and a list of corresponding memory addresses in the external memory address space. The configuration table can enable the data translation module 120 to translate a memory address from a first memory address space to a second memory address space. In some embodiments, the configuration table is stored in a memory controller in each computing system. The configuration table can be updated periodically such as during initialization of the computing system or after the termination of an application, among other scenarios. The configuration table is described in greater detail below in relation to
At block 208, the data translation module 120 can retrieve the requested data based on a local memory address from the local memory address space. In some embodiments, the data translation module 120 can use the local memory address from the configuration table to retrieve data requested from an external memory device. At block 210, the data translation module 120 can send the retrieved data to an external data translation module in a second computing system. In some embodiments, the data translation module 120 can transmit the retrieved data to the external memory device using any suitable communication protocol such as TCP/IP, or a message passing interface, among others. The process flow diagram of
The configuration table 300 can include any suitable number of columns 302 and 304 and rows 306 and 308. In some embodiments, the columns 302 and 304 can include memory address ranges in separate memory address spaces that correspond with the same data value. For example, one column 302 or 304 can include any number of memory address ranges in a local memory address space or an external memory address space. The rows 306 or 308 from the configuration table 300 can include a memory address range from each memory address space that corresponds with a data value. For example, the configuration table 300 may include memory address ranges that correspond with a data block from any number of computing devices.
In some embodiments, the configuration table 300 may include two columns 302 and 304, wherein each column 302 or 304 includes the memory address ranges for a particular memory address space for a computing device. For example, each memory address range from row 306 or 308 of the configuration table 300 corresponds to the same data block. In the example configuration table 300, the memory address ranges 0x0001:0064 310 and 0x012D:0190 312 may be memory address ranges for data values that correspond to a local memory address space. The memory address range 0x01F5:0258 314 may be a memory address range that corresponds to data values in an external memory address space. In some examples, each data value can correspond to a local memory address and multiple, external memory addresses.
At block 402, the data translation module 120 can generate an allocation request. An allocation request, as referred to herein, can instruct a second computing system to allocate memory for a first memory device. For example, the allocation request may indicate any suitable amount of data from a first computing device that may be stored on a second computing device. In some embodiments, the second computing device can use any suitable technique to allocate the data in a memory device in the second computing device.
At block 404, the data translation module 120 can detect a request for data. In some embodiments, the request for data can be generated by an operating system, a software application, or a hardware component, among others. At block 406, the data translation module 120 can determine if the requested data resides in a local memory device or an external memory device. For example, the data translation module 120 can detect if the requested data has a memory address corresponding to a local memory device or an external memory device. In some embodiments, the data translation module 120 can translate the memory address corresponding to the requested data from a local memory address space to an external memory address space. If the requested data resides in an external memory device, the process flow continues at block 408. If the requested data resides in a local memory device, the process flow continues at block 410.
At block 408, the data translation module 120 sends a request for data to a second computing system that includes an external memory device. As discussed above, the external memory device stores data locally in the second computing device and stores data externally for a first computing device. In some embodiments, the request for data includes any suitable number of memory addresses that correspond to the external memory address space.
At block 412, the data translation module 120 receives the requested data from the external memory device in the second computing system. In some embodiments, the data translation module 120 receives any suitable number of data values in response to the request for data. In some examples, the received data may have memory addresses that correspond to the external memory address space.
At block 414, the data translation module 120 can translate the external memory addresses to local memory addresses. For example, the data translation module 120 can use a configuration table to translate the memory addresses from the external memory address space into memory addresses from the local memory address space. In some examples, the data translation module 120 can reverse the translation of the memory address in block 406 by translating the memory address from an external memory address space to a local memory address space.
At block 416, the data translation module 120 can return the requested data based on the memory address from the local memory address space. The data translation module 120 can return the requested data to any suitable requestor such as an operating system, application, or hardware component, among others. The process flow ends at block 418.
If the requested data resides in a local memory device at block 406, the process flow continues at block 410. At block 410, the data translation module 120 uses the local memory address space to retrieve the requested data from a local memory device. The process flow ends at block 418.
The process flow diagram of
The various software components discussed herein may be stored on the tangible, non-transitory, computer-readable medium 500, as indicated in
The present examples may be susceptible to various modifications and alternative forms and have been shown only for illustrative purposes. Furthermore, it is to be understood that the present techniques are not intended to be limited to the particular examples disclosed herein. Indeed, the scope of the appended claims is deemed to include all alternatives, modifications, and equivalents that are apparent to persons skilled in the art to which the disclosed subject matter pertains.
Filing Document | Filing Date | Country | Kind |
---|---|---|---|
PCT/US2013/034491 | 3/28/2013 | WO | 00 |