Increasingly, information is stored in large data storage systems. At a base level, these data storage systems are configured with multiple processors, each controlling access to corresponding memory. Generally, such processors are configured to control up to a certain amount of memory. However, scaling of memory by adding processors with corresponding memory can be unable to keep current with demands to increase memory capacity due to such issues as processor cost constraints and limited increases in memory per processor.
MA—memory appliance
NPU—network processing unit
OCP—open compute project
FPGA—field programmable gate array
KV—key/value
AXI—Advanced eXtensible Interface
RegEx or regexp—regular expression
QoS—quality of service
FF—form factor
PDU—power distribution unit
PS—power supply
POR—plan of record
RAS—reliability, availability, and serviceability
MC—memory controller
HW or H/W—hardware
SW—software
DMA—direct memory access
CRC—cyclic redundancy check
Rd or RD—read
Wr or WR—write
FIFO—first-in first-out
PHY—physical layer
IO or I/O—input/output
ASIC—application specific integrated circuit
DIMM—dual in-line memory module
LR-DIMM—load reduced or reducing DIMM
R-DIMM—registered DIMM
U-DIMM—unregistered DIMM
CPU—central processing unit
CA or C/A—command/address
ECC—error correcting code
DDR—double data rate
Addr—address
RAM—random access memory
DRAM—dynamic random access memory
RDIMM—registered DIMM
B/W—bandwidth
OS—operating system
GPU—graphics processing unit
NVM—nonvolatile memory
SSD—solid state disk
DFS—distributed file system
IOPS—I/Os per second
PCB—printed circuit board
IP—internet protocol
NIC—network interface card
PCI—peripheral component interconnect
PCIe—peripheral component interconnect express
TCP—transmission control protocol
UDP—user datagram protocol
EEPROM—electrically erasable programmable read-only memory
DPA—differential power analysis
PCQ—physical command queue
CCD—command control or copy daemon
RET—the last command in a chain
ROM—read only memory
CD-ROM—compact disc ROM
DVD—digital versatile disk
RF—radio frequency
USB—universal serial bus
WAN—wide area network
LAN—local area network
PAN—personal area network
NAS—network attached storage
NFS—network file system
SMB—server message block
CIFS—common internet file system
SAN—storage area network
Further aspects of the present disclosure will become apparent from the following description which is given by way of example only and with reference to the accompanying drawings in which:
Reference will now be made in detail to the various embodiments of the present disclosure, examples of which are illustrated in the accompanying drawings. Furthermore, in the following detailed description of the present disclosure, numerous specific details are set forth in order to provide a thorough understanding of the present disclosure. However, it will be understood that the present disclosure may be practiced without these specific details. In other instances, well-known methods, procedures, components, and circuits have not been described in detail so as not to unnecessarily obscure aspects of the present disclosure.
The memory appliance 100 includes a plurality of smart memory units or Smart Memory Cubes (SMCs) 140A-N, each of which includes memory. The term “SMCs” is used throughout this disclosure for ease of reference but is not meant to impart a special definition or suggest that particular functions or aspects are required. As such, memory is distributed throughout the memory appliance 100 in the plurality of SMCs 140A-N. The memory appliance 100 can be configured as a stand-alone unit, or as a scalable unit. That is, in a scalable configuration a plurality of similarly configured memory appliances may be combined to form a non-limited and scalable configuration of memory.
In either the stand-alone or scalable configurations, an appliance controller 120 is coupled to the plurality of SMCs 140A-N through a command interface in order to provide configuration information for memory contained within the SMCs 140A-N. The appliance controller 120 may be coupled to higher level controller that remotely manages one or more memory appliances through an external management network 108. For example, operations performed by the appliance controller 120 alone or in cooperation with a remote manager include discovery of memory, provision of memory (e.g., within a virtual memory device), event logging, remote management, power and/or thermal management, monitor, and control.
As shown in
The host controller 110 includes a processor 112 and an optional switch 114, in one implementation. The processor 112 generates and communicates commands over the one or more communication channels, wherein the commands are configured for accessing memory distributed throughout a plurality of SMCs. For example, the processor 112 is configured to receive high level commands (e.g., from a client side database application implementing Memecached) and translate those commands to a series of primitive commands that are operable within each of the SMCs for accessing and/or operating on data stored in memory. In addition, the switch 114 is configurable to deliver a corresponding command or series of commands to the proper SMC for accessing and/or performing operations on memory.
The processor 112 in the host controller 110 is configured to receive and send communications over an external network 105. In one example, the external network provides an interface with a client device. In another example, an external network 106 is configured to provide communications between memory appliances. In one embodiment, the external networks 105 and 106 are similarly configured. In one embodiment, the processor 112 is coupled to a NIC to provide access to the external network. In another embodiment, the processor 112 is configured as a NPU that includes an internal communication interface for communicating with the external network. In still another embodiment, the processor 112 is configured as an FPGA.
Various configurations are supported for the host controller. For illustration purposes only, as shown in
The processor 112 is configured to manage memory throughout the plurality of SMCs in the memory appliance system when performing host controller duties. For example, the processor 112 in the host controller 110 is configured to provide memory services, such as, load balancing, quality of service, connection management, and traffic routing. Further, in one embodiment, the host controller 110 manages memory in the memory appliance system as a virtual memory system.
The plurality of SMCs 140A-N is coupled to the processor 112 through one or more communication channels established through a command interface 125, also referred to as the SMC interface 125. In that manner, commands generated by or passed through the processor 112 are delivered to the plurality of SMCs 140A-N through the command interface 125.
In one embodiment, the communication channels in the command interface 125 comprises a network interface for providing communication between the host controller 110 and the plurality of SMCs 140A-N. That is, communication between the processor and the plurality of SMCs is accomplished using networking protocols. For instance, the network interface may be configured using one of the following protocols: a TCP; a UDP; Ethernet; Infiniband; Fiber Channel, and other networking protocols.
In another embodiment, the communication channels in the command interface 125 comprise a direct interface. That is, the processor 112 and each of the plurality of SMCs communicate over a point-to-point communication channel or link between two ports. For example, the link may establish a point-to-point communication using the PCIe interface, or one of its derivatives, that is a high-speed serial computer expansion bus standard.
Each SMC includes a brick or unit controller (also referred to as the SMC controller) that is hardwired or programmable to execute application specific commands and/or operations generated by an external client and/or application. For illustration, SMC 140A, including its components, is representative of each of the plurality of SMCs 140A-N. For example, SMC controller 141 is configured to perform data operations on the content that is included in memory 142. In one embodiment, the data operations are performed transparently to the command interface and/or requesting client (communicatively coupled through the external network 105). That is, once a high level command or instruction is delivered over the command interface from the requesting client, control over execution of the primitive data operations based on the high level command is handed over to the SMC controller 141. For example, data operations include search, sort, and other custom accelerations.
In one embodiment, the SMC controller 141 in SMC 140A is configured as a FPGA that is pre-programmed with the proper functionality to handle a requested command. In another embodiment, the FPGA is programmed on-the-fly depending on the request made on the memory 142 contained within SMC 140A. For example, the FPGA is configured to generate and compile primitive operations when receiving one or more high level commands, wherein the primitive operations are executable by the FPGA. In another embodiment, the FPGA is configured to access configuration files for programming with the proper functionality. In still another embodiment, the SMC controller 141 is implemented through an ASIC device providing application specific operations.
In embodiments, the SMC controller 141 is configured to respond to primitive commands delivered over the command/SMC interface 125 to access and/or perform operations on content stored in memory 142. More specifically, processor 112 is configured to receive high level commands over the external network 105 (e.g., from a client application) and translate each of the commands to one or more primitive operations. The primitive operations are delivered over the command/SMC interface 125 for handling by the SMC controller 141. In that manner, by handling these primitive operations at the memory, the step by step control of the primitive operations associated with a particular high level command need not be controlled by processor 112, thereby reducing and/or avoiding latency due to increased scaling of memory in the plurality of SMCs 140A-N.
For example, the plurality of memory devices in memory appliance 100 may be configured as a Memecached memory system that is a general-purpose distributed memory caching system. As such, the primitive commands are designed to implement access and manipulation of data within the Memecached memory system. In particular, access to memory in the Memcached memory system is performed using a key value pair or key value functions as implemented through the primitive operations. For example, using one or more primitive operations, a key within a command is hashed using the appropriate algorithm in order to determine proper addressing within the memory. Typical key value commands/functions include “GET” and “SET” and “DELETE” operations that are each further translated into one or more primitive operations handled by the corresponding SMC.
Further, in one embodiment the SMC controller 141 in SMC 140A is configured to respond to high level commands delivered over the command/SMC interface 125 to access and/or perform operations on content stored in memory 142. That is, the SMC controller 141 can be configured to translate the high level commands into a format suitable for use within the SMC controller 141 when interfacing with memory 142. That is, instead of performing translation at processor 112, the translation of high level commands into primitive operations suitable for use within the SMC controller 141 is performed locally.
In one embodiment, SMC controller 141 is configured to provide custom acceleration of data operations. Some examples of custom accelerations include, but is not limited to, error recovery, data manipulation, and data compression. For example, SMC controller 141 may be configured to handle one or more application specific operations (e.g., Memecached search operation). In one embodiment, SMC controller 141 is programmable such as through an FPGA to handle a specific operation. In another embodiment, SMC controller 141 is programmed on-the-fly to handle an incoming operation. In still another embodiment, SMC controller is implemented through an ASIC that is configured to handle one or more application specific operations.
Further, the SMC controller 141 may include an additional processor for handling less time sensitive functions, such as, management and control of the memory devices. For instance, instructions coming from the appliance controller 120 are handled by this additional processor (e.g., SMC micro-controller described in
In addition, each SMC includes a plurality of memory devices. For example, SMC 140A includes memory 142. In one embodiment, the plurality of memory devices in a corresponding SMC includes memory devices packaged in a DIMM, registered memory module (RDIMM), and/or load reduced memory (LRDIMM). In one further embodiment, the memory devices packaged in a corresponding DIMM include DRAM memory devices. In another embodiment, the memory devices packaged in a corresponding DIMM include non-volatile read/write memory (e.g., FLASH). In still another embodiment, the memory devices packaged in a corresponding DIMM include non-volatile memory devices (e.g., FLASH, EEPROM).
In one embodiment, each SMC is configured with multiple channels (e.g., four), each of which is suitable for handling multiple DIMMs (e.g., six). In an example, SMC 140A is able to handle up to and more than twenty-four DIMMs given four channels, and six DIMMs per channel. In one embodiment, SMC 140A s able to handle up to and more than thirty-two DIMMs given four channels. In still other embodiments, the number of channels may number 4 or more, with up to and more than 8 DIMMs per channel. As demonstrated, embodiments of the present disclosure provide for a larger amount of DIMMs per SMC for increased scalability.
For illustration, memory appliance 260A provides access to memory 262A through host controller 261A, wherein memory 262A includes one or more SMCs; memory appliance 260B provides access to memory 262B through host controller 261B, wherein memory 262B includes one or more SMCs; and memory appliance 260N provides access to memory 262N through host controller 261N, wherein memory 262N includes one or more SMCs. In one embodiment, the memory devices are configured as virtual memory, wherein distributed memory devices are accessible by each of the host controllers of the plurality of memory appliances.
In one embodiment, the host controllers of the plurality of memory appliances 260A-N are in communication to facilitate a distributed memory system 200. For example, an external communication interface is configured to provide communication between host controllers within the plurality of memory appliances 260A-N to provide access to memory virtualized across one or more memory appliance systems. The communication interface can include a fat pipe configured as a higher speed and higher bandwidth communications channel for communicating data, and a skinny pipe as a lower speed and lower bandwidth communications channel configured for communicating instructions/control.
Embodiments of the present disclosure can be implemented within the SMCs of
In particular, embodiments of the present disclosure are able to improve memory capacity by reusing the same DIMM buffer chips on the mother board to buffer the signal. For DDR4, this can include the use of an address buffer and multiple data buffers on the mother board. As such, the memory system is configured to support eight to 12 DIMMs per logical memory channel of a memory controller in an SMC.
While embodiments of the present disclosure are described within the context of increasing the number of DIMMs per memory channel of a memory controller within an SMC, other embodiments are well suited to increasing the number of DIMMs per channel of any memory controller that may not be configured as an SMC.
For purposes of clarity, in
As a further advantage, since DIMM buffers typically have a much higher production volume than any other custom buffer solution, by reusing the same DIMM buffers, embodiments of the present disclosure should allow for lower production and development costs.
As shown in
Memory 320 includes a plurality of memory devices. In one embodiment, the plurality of memory devices in a corresponding SMC includes memory devices packaged in DIMM, R-DIMM, U-DIMM, LR-DIMM, SO-DIMM, SOR-DIMM, VLP R-DIMM, VLP Mini-R-DIMM, Mini-R-DIMM, VLP-U-DIMM, Mini-U-DIMM, VLP-Mini-U-DIMM, etc. configurations. As shown in
Embodiments of the present disclosure are described using JEDEC standardized DDR synchronous DRAM in a DDR SDRAM memory system. For example, the DDR SDRAM memory system complies with the DDR standard or one or its derivatives (e.g., DDR3, DDR4, etc.).
In particular, the plurality of memory devices is distributed throughout a first and second set of DIMMs, wherein the processor is configured to respond to commands to access content stored in one or more of the plurality of memory devices, and to perform data operations on content accessed from the plurality of memory devices. Specifically, memory 320 includes a first set of two or more DIMMs 330. For instance, the first set 330 includes DIMMs 330A-D. Also, memory 320 includes a second set of two or more DIMMs 340. For instance, the second set 340 includes DIMMs 340A-D. Although only four DIMMs are shown in each of the first and second sets of DIMMs 330 and 340, it is appreciated that any number of DIMMs may be included depending on the rank timing limitations of the primary data buffer. As shown in
As shown in
In addition, command, address, control and clock connections are provided to each of the DIMMs in the first and second sets of DIMMs 330 and 340. As shown in
The primary RCD buffer 360 forwards the command, address, and clock signals to an internal RCD address buffer in a corresponding DIMM. That is, each DIMM includes an internal RCD address buffer. As a representative example, DIMM 330A includes internal RCD address buffer 332A. For instance, primary RCD buffer 360 is electrically coupled in parallel to RCD address buffers in each of the DIMMs in the first and second sets of DIMMs 330 and 340. As shown, command, address, and clock signals are delivered over channels 363 that are coupled in parallel to DIMMs 330A-D in the first set of DIMMs 330. Also, command, address, and clock signals are delivered over channel 367 that are coupled in parallel to DIMMs 340A-D in the second set of DIMMs 340. In particular, an address signal is driven by primary RCD buffer 360 over path 361 in parallel to each of the internal RCDs address buffers in DIMMs 330A-D in the first set of DIMMs 330. Also, an address signal is driven by primary RCD 360 over path 366 in parallel to each of the RCD address buffers in DIMMs 340A-D in the second set of DIMMs 340. Further, P-RCD QA/B outputs drive four DIMMs, and P-RCD clock outputs drive 2 DIMMs each.
More particularly, the memory topology in the memory unit 300 includes a first communication channel 370 electrically coupling a first set of two or more DIMMs 330 and a first primary data buffer 375, for example on a mother board. The communication channel 370 is coupled in parallel from the first primary data buffer 375 to each of the DIMMs 330A-D in the first set of DIMMs 330. As shown, primary data buffer 375 drives four DIMMs.
Also, the memory topology in the memory unit 300 includes a second communication channel 380 electrically coupling a second set of two or more DIMMs 340 and a second primary data buffer 385, for example on the mother board. The communication channel 380 is coupled in parallel from the second primary data buffer 385 to each of the DIMMs 340A-D in the second set of DIMMs 340. As shown, primary data buffer 385 drives four DIMMs.
Furthermore, the memory topology in the memory unit 300 includes a third communication channel 390 electrically coupling the first primary data buffer 375 to the second primary data buffer 385. In addition, the third communication channel 390 is coupled to the processor 310. In that manner, data signals generated and/or forwarded by the processor 310 are delivered of the primary data buffer 375 and 385. The data signals are then delivered to the DIMMs in the first and second sets of DIMMs 330 and 340.
The primary data buffers 375 and 385 help to re-drive the data signals coming from the processor 310, and provides them to the ranks in the DIMMs of the first and second sets of DIMMs 330 and 340. In particular, the primary data buffer 375 and 385 help to isolate the memory devices from the processor 310, which thus reduces the electrical load on the interfaces between components. This allows for a higher memory capacity (e.g., greater number of DIMMs per channel). In one embodiment, the primary data buffers 375 and 385, in addition performing passive coupling and power splitting, also perform sampling and retransmission of the data signal. As such, data buffers 375 and 385 (e.g., buffers on board [BoBs]) help with timing and electrical isolation, and are used to increase the number of DIMMs without changing the hardware in each DIMM. Further, in one embodiment data buffers 375 and 385 are identical to the internal data buffers located in the DIMMs, and as such, by using existing technology, limited or no redesign of components (e.g., for data buffers 375 and 385) and/or layout of the motherboard is realized.
In still another embodiment, each DIMM 330A-D in the first set of DIMMs 330 includes an internal data buffer. As a representative example, DIMM 330A includes internal data buffer 331A. Furthermore, each DIMM in the first set of DIMMs 330 is electrically coupled to the primary data buffer 375 via the communication channel 370. For example, DIMMs 330A-D are coupled in parallel to the primary data buffer 375 via communication channel 370. In one embodiment, the internal data buffers are identical to the primary data buffers 375 and 385 to reduce production and development cost.
Correspondingly, each DIMM 340A-D in the second set of DIMMs 340 includes an internal data buffer. Further, each DIMM in the second set of DIMMs 340 is electrically coupled to the primary data buffer 385 via the communication channel 380. For example, DIMMs 340A-D are coupled in parallel to the primary data buffer 385 via communication channel 380. In one embodiment, the internal data buffers are identical to the primary data buffers 375 and 385 to reduce production and development cost.
Each of the internal DIMM data buffers also helps to re-drive the data signals coming from a corresponding primary data buffer 375 and 385, and provides them to the ranks in the corresponding DIMMs of the first and second sets of DIMMs 330 and 340. These internal data buffers helps to further isolate the memory devices from the primary data buffers 375 and 385, which reduces the electrical load on the interfaces between components (e.g., reduces the loads that affect buffers 375 and 385, and also reduces the rank timing requirements of the buffers 375 and 385), thereby allowing for higher memory capacity (e.g., up to and more than 8 DIMMs per channel).
In particular, memory unit 400 is similar in configuration as to the memory unit 300 of
Notably, the R-DIMMs do not include any internal data buffers. As such, DIMMs 330A-D in the first set of DIMMs 330 only include the internal RCD address buffer. As such, the communication channel 370 couples the primary data buffer 375 directly to memory devices in each of the DIMMs 330A-D. Also, DIMMs 340A-D in the second set of DIMMs 340 only include the internal RCD address buffer. As such, the communication channel 380 couples the primary data buffer 385 directly to memory devices in each of the DIMMs 340A-D.
As shown in
Further, the memory devices are distributed throughout a first and second set of DIMMs, wherein the processor 510 responds to commands to access and perform operations on content stored in the memory devices. The first set of DIMMs 530 includes four DIMMs, and the second set of DIMMs 540 includes four DIMMs. In one embodiment, the memory unit 500 includes eight LR-DIMMs per channel, and four ranks per DIMM.
The first set of DIMMs 530 is coupled to the processor 510 through primary data buffer 550 over a first communication channel. As shown, primary data buffer 550 comprises nine separate physical chips or sub-data buffers, wherein each of the nine sub-data buffers is coupled in parallel to corresponding internal data buffers in each of the DIMMs over a corresponding connection in the first communication channel. For example, sub-data buffer 551 in primary data buffer 550 is coupled in parallel to internal DIMM data buffers 531, 532, 533, and 534.
The second set of DIMMs is coupled to the processor 510 through primary data buffer 560 over a second communication channel. As shown, primary data buffer 560 comprises nine separate physical chips or sub-data buffers, wherein each of the nine data buffers is coupled in parallel to corresponding internal data buffers in each of the DIMMs over a corresponding connection in the second communication channel. For example, data buffer 561 in primary data buffer 560 is coupled in parallel to internal DIMM data buffers 541, 542, 543, and 544.
In addition, a third communication channel is configured to electrically couple the first primary data buffer 550 to the second primary data buffer 560 and the processor 510. For example, the BCOM buses 570 and 571 are electrically coupled to the primary data buffers 550 and 560, respectively, and to the processor 510 (e.g., memory controller). As shown in
Additionally, the processor 510 provides a command, address, control, clock signal over path 581 to a primary RCD address buffer 580. For example, command, address and control signals include search, sort, read, wire and other custom accelerations.
In addition, command, address, control, and clock connections are provided to each of the DIMMs in the first and second sets of DIMMs 530 and 540. For example, the primary RCD buffer 580 forwards the command, address, control, and clock signals to an internal RCD address buffer in a corresponding DIMM. That is, each DIMM includes an internal RCD address buffer. For example, primary RCD address buffer 580 forwards command, address, control, and clock signals over path 590 in parallel to internal RCD address buffers 591, 592, 593, and 594 in corresponding DIMMs of the first set of DIMMs 550. Also, primary RCD address buffer 580 forwards command, address, control, and clock signals over path 595 in parallel to internal RCD address buffers 596, 597, 598, and 599 in corresponding DIMMs of the second set of DIMMs 560.
As shown in
Further, the memory devices are distributed throughout a first and second set of DIMMs, wherein the processor 610 responds to commands to access and perform operations on content stored in the memory devices. The first set of DIMMs 630 includes four DIMMs, and the second set of DIMMs 640 also includes four DIMMs. In one embodiment, the memory unit 500 includes eight LR-DIMMs per channel, and four ranks per DIMM. The first set of DIMMs 630 is coupled to processor 610 through primary data buffer 650 over one or more communication channels (not shown). The second set of DIMMs 640 is coupled to processor 610 through primary data buffer 660 over one or more communication channels (not shown). A command, address, or control signal is provided from the processor 610 over a communication path (not shown) to a primary RCD buffer 620. For example, command, address and control signals include memory operations (e.g., search, sort, read, write, etc.). The primary RCD buffer 620 forwards the command, address, and control signals to an internal RCD address buffer in a corresponding DIMM, as previously described.
In addition, memory unit 600 includes a plurality of I2C serial buses. In one embodiment, I2C_A bus 670 couples processor 610 to each DIMM in the first set of DIMMs 630 and/or each DIMM in the second set of DIMMs 640. The I2C_A bus is configured for backdoor access to the internal RCD address buffers in the DIMMs in the first and/or second set of DIMMs 630 and 640. In one embodiment, the I2C A bus 670 is configured for performing calibration of the RCD address buffers in the internal DIMMs.
In another embodiment, I2C_B bus 675 couples processor 610 to the primary RCD address buffer 620. The I2C_B bus 675 is configured for backdoor access, and is configured for performing calibration of the primary RCD address buffer 620.
Further, memory unit 600 includes a plurality of communication paths configured for delivering alert signals. For instance, communication path 680 electrically couples processor 610 in parallel to the primary data buffer 650, primary data buffer 660, and primary RCD 620. In that case, any errors or alerts generated by the primary data buffer 650, primary data buffer 660, and primary RCD 620 is communicated over path 680 to the processor 610.
In addition, multiple communication paths N[7:0] electrically couples processor 610 to each of the DIMMs in the first and second set of DIMMs 630 and 640. Each DIMM is coupled directly to the processor 610 over a corresponding alert path. In that manner, error isolation is quickly performed as an alert is quickly and definitely associated with the DIMM sending the alert. For example, multiple paths 685[7:0] electrically couples processor 610 and DIMMs [7:0].
Portions of the detailed descriptions are presented in terms of procedures, logic blocks, processing, and other symbolic representations of operations on data bits within a computer memory. These descriptions and representations are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. In the present application, a procedure, logic block, process, or the like, is conceived to be a self-consistent sequence of steps or instructions leading to a desired result. The steps are those utilizing physical manipulations of physical quantities. Usually, although not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated in a computer system. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as transactions, bits, values, elements, symbols, characters, samples, pixels, or the like.
It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the following discussions, it is appreciated that throughout the present disclosure, discussions utilizing terms such as “accessing,” “receiving,” “selecting,” “storing,” “loading,” “reprogramming,” “determining,” “searching,” “moving,” “copying,” “deleting,” “identifying,” “executing,” “compiling,” “providing,” or the like, refer to actions and processes of a computer system or similar electronic computing device or processor (e.g., system 810 of
Embodiments described herein may be discussed in the general context of computer-executable instructions residing on some form of computer-readable storage medium, such as program modules, executed by one or more computers or other devices. By way of example, and not limitation, computer-readable storage media may comprise non-transitory computer storage media and communication media. Generally, program modules include routines, programs, objects, components, data structures, etc., that perform particular tasks or implement particular abstract data types. The functionality of the program modules may be combined or distributed as desired in various embodiments.
Computer storage media includes volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, FLASH memory, non-volatile memory or other memory technology, CD-ROM, DVDs or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium that can be used to store the desired information and that can accessed to retrieve that information.
Communication media can embody computer-executable instructions, data structures, and program modules, and includes any information delivery media. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of any of the above can also be included within the scope of computer-readable media.
Processor 714 generally represents any type or form of processing unit capable of processing data or interpreting and executing instructions. In certain embodiments, processor 714 may receive instructions from a software application or module. These instructions may cause processor 714 to perform the functions of one or more of the example embodiments described and/or illustrated herein. For example, processor 714 may perform and/or be a means for performing, either alone or in combination with other elements, one or more of the identifying, determining, using, implementing, translating, tracking, receiving, moving, and providing described herein. Processor 714 may also perform and/or be a means for performing any other steps, methods, or processes described and/or illustrated herein.
System memory 716 generally represents any type or form of volatile or non-volatile storage device or medium capable of storing data and/or other computer-readable instructions. Examples of system memory 716 include, without limitation, RAM, ROM, FLASH memory, or any other suitable memory device. Although not required, in certain embodiments computing system 710 may include both a volatile memory unit (such as, for example, system memory 716) and a non-volatile storage device (such as, for example, primary storage device 732.
Computing system 710 may also include one or more components or elements in addition to processor 714 and system memory 716. For example, in the embodiment of
Memory controller 718 generally represents any type or form of device capable of handling memory or data or controlling communication between one or more components of computing system 710. For example, memory controller 718 may control communication between processor 714, system memory 716, and 1/O controller 720 via communication infrastructure 712. Memory controller may perform and/or be a means for performing, either alone or in combination with other elements, one or more of the operations or features described herein.
I/O controller 720 generally represents any type or form of module capable of coordinating and/or controlling the input and output functions of a computing device. For example, I/O controller 720 may control or facilitate transfer of data between one or more elements of computing system 710, such as processor 714, system memory 716, communication interface 722, display adapter 726, input interface 730, and storage interface 734. I/O controller 720 may be used, for example, to perform and/or be a means for performing, either alone or in combination with other elements, one or more of the operations described herein. I/O controller 720 may also be used to perform and/or be a means for performing other operations and features set forth in the instant disclosure.
Communication interface 722 broadly represents any type or form of communication device or adapter capable of facilitating communication between example computing system 710 and one or more additional devices. For example, communication interface 722 may facilitate communication between computing system 710 and a private or public network including additional computing systems. Examples of communication interface 722 include, without limitation, a wired network interface (such as a network interface card), a wireless network interface (such as a wireless network interface card), a modem, and any other suitable interface. In one embodiment, communication interface 722 provides a direct connection to a remote server via a direct link to a network, such as the Internet. Communication interface 722 may also indirectly provide such a connection through, for example, a local area network (such as an Ethernet network), a personal area network, a telephone or cable network, a cellular telephone connection, a satellite data connection, or any other suitable connection.
Communication interface 722 may also represent a host adapter configured to facilitate communication between computing system 710 and one or more additional network or storage devices via an external bus or communications channel. Examples of host adapters include, without limitation, SCSI host adapters, USB host adapters, IEEE (Institute of Electrical and Electronics Engineers) 1394 host adapters, Serial Advanced Technology Attachment (SATA) and External SATA (eSATA) host adapters, Advanced Technology Attachment (ATA) and Parallel ATA (PATA) host adapters, Fibre Channel interface adapters, Ethernet adapters, or the like. Communication interface 722 may also allow computing system 710 to engage in distributed or remote computing. For example, communication interface 722 may receive instructions from a remote device or send instructions to a remote device for execution. Communication interface 722 may perform and/or be a means for performing, either alone or in combination with other elements, one or more of the operations disclosed herein. Communication interface 722 may also be used to perform and/or be a means for performing other operations and features set forth in the instant disclosure.
As illustrated in
As illustrated in
As illustrated in
In one example, databases 740 may be stored in primary storage device 732. Databases 740 may represent portions of a single database or computing device or a plurality of databases or computing devices. For example, databases 740 may represent (be stored on) a portion of computing system 710 and/or portions of example network architecture 800 in
Continuing with reference to
Storage devices 732 and 733 may be used to perform, and/or be a means for performing, either alone or in combination with other elements, one or more of the operations disclosed herein. Storage devices 732 and 733 may also be used to perform, and/or be a means for performing, other operations and features set forth in the instant disclosure.
Many other devices or subsystems may be connected to computing system 710. Conversely, all of the components and devices illustrated in
The computer-readable medium containing the computer program may be loaded into computing system 710. All or a portion of the computer program stored on the computer-readable medium may then be stored in system memory 716 and/or various portions of storage devices 732 and 733. When executed by processor 714, a computer program loaded into computing system 710 may cause processor 714 to perform and/or be a means for performing the functions of the example embodiments described and/or illustrated herein. Additionally or alternatively, the example embodiments described and/or illustrated herein may be implemented in firmware and/or hardware. For example, computing system 710 may be configured as an ASIC adapted to implement one or more of the embodiments disclosed herein.
Similarly, servers 840 and 845 generally represent computing devices or systems, such as application servers or database servers, configured to provide various database services and/or run certain software applications. Network 850 generally represents any telecommunication or computer network including, for example, an intranet, a WAN, a LAN, a PAN, or the Internet.
As illustrated in
Servers 840 and 845 may also be connected to a SAN fabric 880. SAN fabric 880 generally represents any type or form of computer network or architecture capable of facilitating communication between storage devices. SAN fabric 880 may facilitate communication between servers 840 and 845 and storage devices 890(1)-(M) and/or an intelligent storage array 895. SAN fabric 880 may also facilitate, via network 850 and servers 840 and 845, communication between client systems 810, 820, and 830 and storage devices 890(1)-(M) and/or intelligent storage array 895 in such a manner that devices 890(1)-(M) and array 895 appear as locally attached devices to client systems 810, 820, and 830. As with storage devices 860(1)-(L) and storage devices 870(1)-(N), storage devices 890(1)-(M) and intelligent storage array 895 generally represent any type or form of storage device or medium capable of storing data and/or other computer-readable instructions.
With reference to computing system 710 of
Returning to
The above described embodiments may be used, in whole or in part, in systems that process large amounts of data and/or have tight latency constraints, and, in particular, with systems using one or more of the following protocols and formats: Key-Value (KV) Store, Memcached, Redis, Neo4J (Graph), Fast Block Storage, Swap Device, and Network RAMDisk. In addition, the above described embodiments may be used, in whole or in part, in systems employing virtualization, Virtual Desktop Infrastructure (VDI), distributed storage and distributed processing (e.g., Apache Hadoop), data analytics cluster computing (e.g., Apache Spark), Infrastructure as a Service (laaS), Platform as a Service (PaaS), and other cloud computing platforms (e.g., Vmware vCloud, Open Stack, and Microsoft Azure). Further, the above described embodiments may be used, in whole or in party, in systems conducting various types of computing, including Scale Out, Disaggregation, Multi-Thread/Distributed Processing, RackScale, Data Center Scale Computing, Elastic Memory Provisioning, Memory as a Service, page migration and caching and Application Offloading/Acceleration and Integration, using various types of storage, such as Non-Volatile Memory Express, Flash, Multi-Tenancy, Internet Small Computer System Interface (iSCSI), Object Storage, Scale Out storage, and using various types of networking, such as 10/40/100 GbE, Software-Defined Networking, Silicon Photonics, Rack TOR Networks, and Low-Latency networking.
While the foregoing disclosure sets forth various embodiments using specific block diagrams, flowcharts, and examples, each block diagram component, flowchart step, operation, and/or component described and/or illustrated herein may be implemented, individually and/or collectively, using a wide range of hardware, software, or firmware (or any combination thereof) configurations. In addition, any disclosure of components contained within other components should be considered as examples because many other architectures can be implemented to achieve the same functionality.
The process parameters and sequence of steps described and/or illustrated herein are given by way of example only and can be varied as desired. For example, while the steps illustrated and/or described herein may be shown or discussed in a particular order, these steps do not necessarily need to be performed in the order illustrated or discussed. The various example methods described and/or illustrated herein may also omit one or more of the steps described or illustrated herein or include additional steps in addition to those disclosed.
While various embodiments have been described and/or illustrated herein in the context of fully functional computing systems, one or more of these example embodiments may be distributed as a program product in a variety of forms, regardless of the particular type of computer-readable media used to actually carry out the distribution. The embodiments disclosed herein may also be implemented using software modules that perform certain tasks. These software modules may include script, batch, or other executable files that may be stored on a computer-readable storage medium or in a computing system. These software modules may configure a computing system to perform one or more of the example embodiments disclosed herein. One or more of the software modules disclosed herein may be implemented in a cloud computing environment. Cloud computing environments may provide various services and applications via the Internet. These cloud-based services (e.g., software as a service, platform as a service, infrastructure as a service, etc.) may be accessible through a Web browser or other remote interface. Various functions described herein may be provided through a remote desktop environment or any other cloud-based computing environment.
The foregoing description, for purpose of explanation, has been described with reference to specific embodiments. However, the illustrative discussions above are not intended to be exhaustive or to limit the disclosure to the precise forms disclosed. Many modifications and variations are possible in view of the above teachings. The embodiments were chosen and described in order to best explain the principles of the disclosure and its practical applications, to thereby enable others skilled in the art to best utilize the disclosure and various embodiments with various modifications as may be suited to the particular use contemplated.
Embodiments according to the present disclosure are thus described. While the present disclosure has been described in particular embodiments, it should be appreciated that the disclosure should not be construed as limited by such embodiments, but rather construed according to the below claims.
This application claims the benefit of and priority to the provisional patent application, U.S. Ser. No. 62/173,134, entitled “MEMORY SYSTEM DESIGN USING BUFFER(S) ON A MOTHERBOARD,” with filing date Jun. 9, 2015, and having attorney docket number RMBS-0020-00.00US, which is herein incorporated by reference in its entirety.
Number | Date | Country | |
---|---|---|---|
62173134 | Jun 2015 | US |