The disclosure relates generally to devices, and more particularly to devices supporting content distribution.
To distribute content (for example, to stream video data) across a network, the content may be loaded from a storage device into memory. Once in memory, the content may be transcoded (that is, encoded in a format acceptable to the recipient). Once the content is ready for transmission, the content may be moved from memory to a network interface card and sent to the recipient.
A need remains for to improve processing of content for distribution.
The drawings described below are examples of how embodiments of the disclosure may be implemented, and are not intended to limit embodiments of the disclosure. Individual embodiments of the disclosure may include elements not shown in particular figures and/or may omit elements shown in particular figures. The drawings are intended to provide illustration and may not be to scale.
Embodiments of the disclosure include a device. The device may include a storage device and a network interface card. Data may be accessed from the storage device and delivered to the network interface device for content delivery.
Reference will now be made in detail to embodiments of the disclosure, examples of which are illustrated in the accompanying drawings. In the following detailed description, numerous specific details are set forth to enable a thorough understanding of the disclosure. It should be understood, however, that persons having ordinary skill in the art may practice the disclosure without these specific details. In other instances, well-known methods, procedures, components, circuits, and networks have not been described in detail so as not to unnecessarily obscure aspects of the embodiments.
It will be understood that, although the terms first, second, etc. may be used herein to describe various elements, these elements should not be limited by these terms. These terms are only used to distinguish one element from another. For example, a first module could be termed a second module, and, similarly, a second module could be termed a first module, without departing from the scope of the disclosure.
The terminology used in the description of the disclosure herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the disclosure. As used in the description of the disclosure and the appended claims, the singular forms “a”, “an”, and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will also be understood that the term “and/or” as used herein refers to and encompasses any and all possible combinations of one or more of the associated listed items. It will be further understood that the terms “comprises” and/or “comprising,” when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof. The components and features of the drawings are not necessarily drawn to scale.
Content distribution—for example, video-on-demand services—are becoming increasingly popular. Rather than owning physical copies, such as Digital Video Discs (DVDs) or Blu-ray discs, of their favorite content, customers may access their content on demand, leaving the storage of the content to the content providers.
When a customer requests access to a particular content, the content provider may first verify that the customer is entitled to access the content. Assuming the customer is entitled to access the content, the content provider may then locate the desired content on their storage devices. The content may be converted into a format that the customer may use, and the content may then be distributed (streamed) to the customer.
Aside from not having to have a physical copy of the content, this model has other advantages to the customer. With a DVD or Blu-ray disc, the customer may be limited to viewing the content when they have access to an appropriate player; with content distributed over a network, no such player may be needed. Content may be accessed regardless of physical location, as long as an appropriate network connection is available.
In addition, the customer may be able to view the content on any number of devices, rather than being limited to the particular devices that may be connected to an appropriate player, and content may be passed from one device to another. For example, the customer might start viewing the content on a high definition television, transfer the content to a smartphone, and conclude viewing the content on a standard definition television. The content provider may appropriately encode the content based on the device being used at a particular time, or bandwidth limitations imposed by a network service provider, or based on network traffic conditions.
But to distribute such content, the content provider may load the content from a storage device into a memory connected to a processor. The processor may then perform transcoding of the data in the memory into an encoding appropriate for the customer's device. After transcoding is complete, the content may then be transferred to a network interface card to transmit the content across the network to the customer.
This model for content distribution includes some inherent limitations. First, even if the data is not transcoded (but can be transmitted in the form stored on the storage device), the data is moved first from storage device into memory, and then to the network interface card. There may be latencies associated with moving the data twice (once from storage device to memory, and once from memory to network interface card), which may increase the amount of time needed to transmit the data to the customer. In addition, by having the processor perform the transcoding, the number of cycles available to the processor for other operations may be reduced, which may slow down or delay other operations.
Embodiments of the disclosure may address these limitations by combining a storage device and a network interface card into a single device. The device may expose functions to the processor to access both the storage side and the network interface side of the device, enabling the processor to orchestrate device operations. The device may also include a buffer that may be used to store data being transferred from the storage side to the network interface side. In this manner, the data may be moved directly from the storage side to the network interface side without having to pass through the memory of the host system, expediting distribution of the content. The device may perform content transmission without the direct involvement of the processor.
Embodiments of the disclosure may also include a circuit (such as a Field Programmable Gate Array (FPGA), an Application-Specific Integrated Circuit (ASIC), a System-on-a-Chip (SoC), or a processor) that may perform transcoding of data while resident in the buffer. In this manner, the processor may avoid spending time performing the transcoding when other operations may be waiting.
Embodiments of the disclosure may include more than one storage functions and/or more than one network interface functions, thereby expanding the overall storage from which content may be accessed and/or how much data may be distributed by the device. Embodiments of the disclosure may also include one or more root ports or other mechanisms to connect multiple devices that may be used to establish connections to storage devices and/or network interface cards.
Processor 110 may be coupled to memory 115. Memory 115 may be any variety of memory, such as flash memory, Dynamic Random Access Memory (DRAM), Static Random Access Memory (SRAM), Persistent Random Access Memory, Ferroelectric Random Access Memory (FRAM), or Non-Volatile Random Access Memory (NVRAM), such as Magnetoresistive Random Access Memory (MRAM) etc. Memory 115 may be a volatile or non-volatile memory, as desired. Memory 115 may also be any desired combination of different memory types, and may be managed by memory controller 125. Memory 115 may be used to store data that may be termed “short-term”: that is, data not expected to be stored for extended periods of time. Examples of short-term data may include temporary files, data being used locally by applications (which may have been copied from other storage locations), and the like.
Processor 110 and memory 115 may also support an operating system under which various applications may be running. These applications may issue requests (which may also be termed commands) to read data from or write data to memory 115, or to device 120. As discussed further with reference to
While the above description uses the generic term “storage device”, embodiments of the disclosure may include any storage device formats that may benefit from the use of computational storage units, examples of which may include hard disk drives and Solid State Drives (SSDs). Any reference to “SSD” below should be understood to include such other embodiments of the disclosure. Further, different types of storage devices may be mixed. For example, one storage device might be a hard disk drive, and another storage device might be an SSD.
Network 130 may be any desired type of network. For example, network 130 may be a local area network (LAN), a wide area network (WAN), a metropolitan area network (MAN), or a world-wide network, such as the Internet. Network 130 may also include any desired combination of these networks. For example, the connection between machine 105 and client device 135 might include a LAN (to which machine 105 is connected), another LAN (to which client device 135 is connected), and a larger network such as a MAN or the Internet connecting the two LANs. Network 130 may include wired connections, wireless, connections, or both. In addition, network 130 may support the use of virtual private networks, to secure at least part of the connections between machine 105 and client device 135.
Although
Network interface device 310 may function like any network interface device, and may include a connection to network 130, as shown. Network interface device 310 may be used to send or receive data at machine 105 of
Storage device 305 and network interface device 310 may include functions that may be used to issue requests to the devices. For example, storage device 305 may include physical function (PF) 315, and network interface device 310 may include PF 320. A request received at PF 315 may then be processed by storage device 305, and a request received at PF 320 may then be processed by network interface device 310.
Because storage device 305 and network interface device 310 may be part of device 120, functions 315 and 320 might not be directly visible to processor 110 of
In some embodiments of the disclosure, storage device 305 and/or network interface device 310 may expose more than one PF. In such embodiments of the disclosure, host interface 325 may expose equivalent numbers of functions, enabling processor 110 of
In some embodiments of the disclosure, storage device 305 and/or network interface device 310 may also expose one or more virtual functions (VFs). A VF may be distinguished from a PF in that a VF may share hardware with a PF (whereas two PFs may each use separate hardware). In such embodiments of the disclosure, host interface 325 may expose functions that may correspond to both PFs and VFs. In some embodiments of the disclosure, host interface 325 may expose a PF corresponding to each PF of storage device 305 and/or network interface device 310, and may expose a VF corresponding to each VF of storage device 305 and/or network interface device 310. In other embodiments of the disclosure, host interface 325 may only expose PFs, with each exposed PF corresponding to either a PF or a VF of either storage device 305 and/or network interface device 310.
In systems without device 120 (and with separate storage devices 305 and network interface devices 310), processor 110 of
In some embodiments of the disclosure, network interface device 310 may read the data directly from storage device 305, as shown by dashed line 335. If network interface device 310 reads the data directly from storage device 305, there may be only one operation to transfer the data (from storage device 305 to network interface device 310), which means that data may be transmitted as efficiently as possible.
But for content delivery systems, having network interface device 310 read the data directly from storage device 305 might not be the most efficient approach. For one thing, storage device 305 might be storing data that might be used in different ways at the same time. For example, storage device 305 might be asked to store new data, or to read data so that an application (perhaps running on processor 110 of
As an alternative to network interface device 310 reading data directly from storage device 305, storage device 305 may copy data to be transmitted using network interface device 310 first to buffer 340. Buffer 340 may then store the data as long as needed until network interface device is ready to send the data. Put another way, storage device 305 may prefetch data that is expected to be sent by network interface device 310 and store that data in buffer 340, so that network interface device 310 may read the data from buffer 340 when network interface device 310 is ready to transmit more data across network 130.
Buffer 340 may be implemented as any desired form of memory. In some embodiments of the disclosure, buffer 340 may be implemented as volatile storage, such as DRAM or SRAM. In other embodiments of the disclosure, buffer 340 may also be implemented as non-volatile storage, such as flash storage. In general, buffer 340 may be implemented using storage that has a low latency, to minimize the time needed to move data into and out of buffer 340.
For buffer 340 to be used to stage data between storage device 305 and network interface device 310, buffer 340 may be implemented as a portion of memory in device 120 (other implementations are also possible, such as linked list structures, may also be used). Buffer 340 may have two pointers associated with it: a head pointer (pointing to the next data to be read from buffer 340) and a tail pointer (pointing to the next address in buffer 340 where data may be written). Buffer 340 may be implemented like an array, with addresses looping back around. For example, if buffer 340 includes a range of addresses starting at 0x1000 and ending at 0x2000, after data is written at address 0x2000, the next data may be written to address 0x1000 (as though address 0x1000 followed address 0x2000). If the head pointer and the tail pointer are equal, it may be concluded that buffer 340 is empty; if the tail pointer points to the address after the head pointer, it may be concluded that buffer 340 is full. Storage device 305 and network interface device 310 may each be able to access the head pointer and tail pointer to check for these conditions (although normally storage device 305 might only update the tail pointer as data is written to buffer 340 and network interface device 310 might only update the head pointer after data is read from buffer 340).
In some embodiments of the disclosure, processor 110 of
The reason processor 110 of
As just mentioned, data in buffer 340 may be processed by device 120 before the data is delivered using network interface device 310. For example, assume that the data being transmitted is video data (such as a video clip or a movie from a content provider). The video data might be stored using one encoding: for example, in 4K high definition video. But if the video data is being viewed on client device 135 that cannot support 4K high definition video, or client device 135 does not support the particular encoding of the video data, or the network connection between device 120 and client device 135 lacks the bandwidth to support 4K high definition video (for example, if the network service provider caps bandwidth for client device 135), it may be useful (or necessary) to transcode the data into another format before transmission.
Circuit 345 may perform such transcoding of the data while the data is in buffer 340. Circuit 345 may take the data in buffer 340 and transform the data into a format that client device 135 may be able to process or otherwise use. Circuit 345 may be implemented in any desired manner: for example, using a Field Programmable Gate Array (FPGA), an Application-Specific Integrated Circuit (ASIC), a Graphics Processing Unit (GPU), a General Purpose GPU (GPGPU), a System-on-a-Chip (SoC), a Tensor Processing Unit (TPU), a Neural Processing Unit (NPU), or a central processing unit (CPU) or other suitably programmed general purpose processor, among other possibilities.
Note that, depending in the overall size of the data to be transmitted to client device 135, the entirety of the data to be delivered may be larger than buffer 340. For example, buffer 340 might be large enough to store 500 megabytes (MB) of data, but the data to be transmitted is several gigabytes (GB) in size. This situation may arise, for example, if the data to be delivered is a feature-length movie. In such situations, buffer 340 might only store part of the data at any one time. Circuit 345 may process the portion of the data in buffer 340; then as buffer 340 is emptied (by network interface device 310) and filled (by storage device 305), circuit 345 may process the new data when it occupies buffer 340.
In embodiments of the disclosure that include circuit 345, host interface 325 may also expose function 330-3, which may be used to send requests to circuit 345. For example, processor 110 of
Note that while transcoding (or other processing) of data in buffer 340 might be avoided if storage device 305 stores multiple versions of the data, in which case the version requested by client device 135 may already be present on storage device 305. Thus, there may be a tradeoff: processing may reduce the amount of data stored on storage device 305 (storing fewer versions of the data may reduce the amount of storage required for the data), but may take time that may be saved if the desired version is already stored and ready for delivery.
While the discussion above focuses on using circuit 345 to transcode the data in buffer 340, embodiments of the disclosure may use circuit 345 to process the data in buffer 340 in any desired manner. For example, circuit 345 might be used to implement a function that transforms data in a table stored in buffer 340. Or, circuit 345 might be used to package the data in buffer 340 for transmission to client device 135 that expects data packets to be in a special format. More generally, circuit 345 may also be referred to as an accelerator.
In some embodiments of the disclosure, circuit 345 may apply Quality of Service (QoS) criteria to the use of buffer 340. For example, circuit 345 may instruct storage device 305 to perform data read/prefetch into buffer 340 based on the transcoding characteristics and/or the needs of client device 135. In other words, the data prefetch/read policy may be a function of the QoS and end-user content delivery needs.
In some embodiments of the disclosure, buffer 340 may be allocated for transmission of the data. That is, when client device 135 of
In some situations, a failure of network 130 might result in data not being delivered to client device 135. In some embodiments of the disclosure, if there is a failure of network 130, the data may remain in buffer 340 until transmission completes, enabling network interface device 310 to retransmission or replay of the data from buffer 340 until the data is successfully transmitted (at which point the data may be removed from buffer 340). In other embodiments of the disclosure, if there is a failure of network 130, the data may be stored on storage device 305 to support resending the data. This may free up buffer 340 for new data to be processed by circuit 345. Note that even if the data is successfully sent across network 130, the data (as processed by circuit 345) might still be copied from buffer 340 back to storage device 305, so that the processed data may be sent in response to later requests without being processed anew.
In other embodiments of the disclosure, buffer 340 may be determined in advance. Then, as data is transferred into buffer 340, portions of buffer 340 may be allocated to store the data, and when the data has been delivered (and no longer needs to be stored in buffer 340), the portions of buffer 340 may be deallocated. Note that in such embodiments of the disclosure, the components that allocate memory (which may be circuit 345 or storage device 305) may be different from the component that deallocates memory (which may be network interface device 310).
While
In some embodiments of the disclosure, processor 110 of
While
In the above discussion, storage device 305 and network interface device 310 are suggested as being discrete devices within device 120.
Processor 110 may then send request 415. Request 415 may specify how the data is to be transcoded by circuit 345 of
Processor 110 may then send request 425. Request 425 may instruct network interface device 310 of
Note that requests 415 and 425 are shown with dashed lines. In some embodiments of the disclosure, either or both of requests 415 and 425 may be omitted. For example, request 405 might include all of the information that might otherwise be contained in requests 415 and/or 425, in which case processor 110 may not need to send requests 415 or 425 separately. Or, if the data to be transmitted is already in an appropriate format and transcoding is not needed, then request 415 may be omitted (and operation 420 might not be performed). Embodiments of the disclosure may include any and all such variations on what requests 405, 415, and/or 425 might be sent, and which operations 410, 420, 430, and/or 435 might be performed.
Connector 505 may be a physical connector included with storage device 305. Connector 505 may be used to connect storage device 305 to other components in machine 105 of
Connector 505 may include one or more pins to send and receive data. These pins may be male pins in the classic sense (approximately cylindrical pieces of metal projecting outward from the main part of connector 505, ignoring any material that may be used to align connector 505 with another piece of equipment). But connector 505 may also support other forms of connection that are not male pins. For example, connector 505 may include a female receiver for a male pin that may be part of another piece of equipment connected to connector 505. Or connector 505 may include a surface other than a cylinder (or the mate to a cylinder) appropriately designed to contact another piece of equipment, thereby establish a connection between a point of contact on connector 505 and another point of contact on the other equipment. The term “pin”, as used herein, is intended to encompass all such mechanisms for contact between connector 505 and any equipment designed to connect to connector 505.
Host interface layer 510 may manage communications between storage device 305 and other components (such as processor 110 of
Host interface layer 510 may manage an interface across only a single port, or it may manage interfaces across multiple ports. That is, host interface layer 510 may communicate with a single connector 505, or may communicate using two or more connectors 505 (should storage device 305 include and support multiple connectors 505). In addition, if storage device 305 include multiple connectors 505, storage device 305 may include a separate host interface layer 510 for each connector 505. Embodiments of the inventive concept may also mix the possibilities (for example, an SSD with three connectors 505 might have one host interface layer 510 to manage one connectors 505 and a second host interface layer 510 to manage the other two connectors 505).
Controller 515 may manage the read and write operations, along with garbage collection and other operations, on flash memory chips 520 using flash memory controller 530. (While
In some embodiments of the disclosure, connector 505 may be part of storage device 305, as shown. But in other embodiments of the disclosure, connector 505 may actually be a part of device 120 of
While
As discussed above, storage device 305 may prefetch data into buffer 340 of
In
In embodiments of the disclosure where processor 110 of
While
In the above discussion, the focus has been on a single buffer 340, being used to store data requested by a single client device 135 of
In addition to multi-casting or broadcasting data, device 120 of
In
In some embodiments of the disclosure, each buffer 340 may be “dedicated” to a particular storage device 305 of
Note that some embodiments of the disclosure might mix these implementations, having some buffers 340 that are dedicated to particular storage devices 305 of
In some embodiments of the disclosure, each buffer 340 may be “dedicated” to a particular network interface device 310 of
Note that some embodiments of the disclosure might mix these implementations, having some buffers 340 that are dedicated to particular network interface devices 310 of
Note that some embodiments of the disclosure may omit demultiplexer 705 and/or multiplexer 710. For example, if each buffer 340 has a unique address range, then the address to which data is to be written or from which data is to be read may uniquely identify a particular buffer 340, obviating the need for demultiplexer 705 or multiplexer 710. But including demultiplexer 705 or multiplexer 710 may enable writing data to multiple buffers 340, and/or may avoid the need for each buffer 340 to have a unique address range (although buffers 340 may still need to be uniquely identified in some way).
The question may arise: why would data be written to multiple buffers 340? The answer is that in some embodiments of the disclosure, circuit 345 of
But this explanation might lead to another question: why would circuit 345 of
It might be considered wasteful to have circuit 345 of
Each buffer 340 may use different thresholds 605 and 610 of
While
In contrast with
In addition, embodiments of the disclosure may combine these variations. For example, device 120 of
In
Note that circuit 345 may change the encoding for data 805 as conditions change. For example, the user might start viewing video data on a high definition television, in which case encoding 810-1 might be appropriate. Partway through the viewing, the user might switch to viewing the video data on a smartphone over a cellular network that might only support 900 Kbps data, in which circuit 345 might switch to encoding 810-4. Then later, the user might switch to viewing the data on a laptop computer over a wireless network connection, in which case circuit 345 might switch to encodings 810-2 or 810-3.
Encodings 810 may represent only a subset of possible encodings supported by circuit 345. For example, other encodings 810 may support video output at 4K or 8K resolutions (with corresponding bit rates). Encodings 810 may also include formats that are not limited to specific encodings. Thus, embodiments of the disclosure may include any desired encodings, whether or not shown as encodings 810 in
While
An objective of embodiments of the disclosure is to limit any impact to the software stack and/or the network stack of machine 105. Embodiments of the disclosure may achieve this objective by taking main memory 115 of
In some embodiments of the disclosure, device 120 may include root ports (or root complexes) 1005-1 and/or 1005-2 (which may be referred to collectively as root ports 1005 or root complexes 1005). Root ports 1005 may be used to determine other devices that are connected (downstream) from device 120. For example,
By having root ports 1005, device 120 may support any number of attached storage devices 305 and/or network interface devices 310. That is, device 120 may support any number of storage devices 305 and/or network interface devices 310. While
In addition, in some embodiments of the disclosure, root ports 1005 may be replaced with alternative structures. For example, root ports 1005 may be replaced with other FPGAs, ASICs, GPUs, GPGPUs, SoCs, TPUs, NPUs, or CPUs. Such embodiments of the disclosure may be useful, for example, for protocol translation. For example, consider the situation where storage devices 305 use the NVMe protocol for communication, but network interface devices 310 use the PCIe protocol for communication. Root ports 1005, or alternative structures, may handle the translation from one protocol to another. This structure may enable device 120 to communicate with processor 110 of
In
At block 1215, device 120 of
At block 1225, device 120 of
Not shown in
If the capacity of buffer 340 of
In
In
Embodiments of the disclosure may have a device that includes a storage device and a network interface device. When content is to be delivered to a client device, the data may be transferred from the storage device to the network interface device. Embodiments of the disclosure offer a technical advantage in that data may be delivered to the client device without going through the main memory of the host system, thereby reducing latency.
If any processing of the data is needed—for example, transcoding of the data—the processing may be performed by a circuit of the device. By having a circuit of the device handle processing, the load on the processor of the system may be reduced, offering the technical advantage of freeing processor cycles for other operations.
In some embodiments, one or more elements may be indicated with initials, acronyms, and/or abbreviations as follows: Peripheral Component Interconnect Express (PCIe), Non-Volatile Memory Express (NVMe), physical function (PF), virtual function (VF), endpoint port (EP), root port (RP), field programmable gate array (FPGA), application-specific integrated circuit (ASIC), system on chip (SoC), network interface card (NIC), peer-to-peer (P2P), solid state drive (SSD), base address register (BAR), dynamic random access memory (DRAM, static random access memory (SRAM), and/or others as indicated below.
An embodiment of the disclosure may include a storage device having an integrated network interface in accordance with example embodiments of the disclosure. In some embodiments of the disclosure, a NIC may be connected to a storage device, for example by plugging using a connector. In some embodiments of the disclosure, a NIC may be connected without a connector, for example, in a direct and/or permanent manner. In some embodiments, the methods and apparatus described herein may provide efficient content distribution using an integrated storage device and NIC.
In some embodiments of the disclosure, one or more PCIe PFs or VFs in the FPGA EP may be presented as one or more NVMe controllers to a host.
In some embodiments of the disclosure, one or more PCIe PFs or VFs in the FPGA EP may be presented as one or more NICs to the host.
In some embodiments of the disclosure, an FPGA may be alternatively implemented as an ASIC, SoC, and/or the like.
In some embodiments of the disclosure, one or more SSD controllers may be connected to an FPGA through one or more RPs for providing persistent storage.
In some embodiments of the disclosure, one or more NICs may be connected to an FPGA through one or more RPs for providing content requests and/or transmission service.
In some embodiments of the disclosure, one or more PCIe-PCIe bridges may be used to connect to one or more SSD controllers, for example, in a pass-through manner.
In some embodiments of the disclosure, one or more bridges may be used to connect to one or more NICs in a pass-through manner. The bridges may be, for example, PCIe-PCIe, PCIe-CXL, PCIe-undisclosed, CXL-CXL, CXL-PCIe, or CXL-undisclosed, among other possibilities.
In some embodiments of the disclosure, instead of a pass-through bridge, an FPGA may be used as a higher level protocol terminate-regenerate bridge architecture, for example, to connect to an SSD controller and/or a NIC to a host.
In some embodiments of the disclosure, content may be provided (e.g., directly provided) from an SSD to a NIC under host software control which may also be referred to as orchestration.
Some embodiments of the disclosure may implement Peer-to-Peer (P2P) content data transfers using, for example, using an NVMe protocol, a file read protocol, and/or the like.
In some embodiments of the disclosure, a P2P Buffer may be exposed through a BAR and/or a host programmed physical address range.
In some embodiments of the disclosure, a P2P buffer may be implemented with on-chip memory, off-chip SRAM and/or DRAM, and/or the like.
In some embodiments of the disclosure, a P2P buffer may be partitioned and/or shared among multiple bridges.
In some embodiments of the disclosure, a P2P buffer may be used as a replay and/or retransmission buffer, for example, until one or more packets are transferred successfully.
In some embodiments of the disclosure, a specified amount of content may be streamed from an SSD to a NIC through a P2P buffer, for example, by accounting for any back-pressures, retransmissions, P2P buffer sizes, and/or the like.
In some embodiments of the disclosure, a host may specify content specifics such as length, LBA ranges, and/or KV keys, and let the device transfer some or all of the content (e.g., the whole content) without further intervention by the host.
In some embodiments of the disclosure, a host may offload some or all of the content transmission process (e.g., completely) to the device.
For purposes of illustration, some embodiments of the disclosure may be described in the context of one or more storage devices implemented as solid state drives (SSDs) with flash memory storage media. The principles of this disclosure, however, may be implemented with any type of storage device using any type of storage media including any other type of solid state media, magnetic media, optical media, and/or the like. For example, in some embodiments of the disclosure, a storage device may be implemented as a hard disk drive (HDD), an SSD based on not-AND (NAND) flash memory, persistent memory such as cross-gridded nonvolatile memory, memory with bulk resistance change, phase change memory (PCM) and/or the like, and/or any combination thereof.
Any of the storage devices disclosed herein may be implemented in any form factor such as 3.5 inch, 2.5 inch, 1.8 inch, M.2, Enterprise and Data Center SSD Form Factor (EDSFF), NF1, and/or the like, using any connector configuration such as Serial ATA (SATA), Small Computer System Interface (SCSI), Serial Attached SCSI (SAS), U.2, and/or the like.
Any of the storage devices disclosed herein may be implemented entirely or partially with, and/or used in connection with, a server chassis, server rack, dataroom, datacenter, edge datacenter, mobile edge datacenter, and/or any combinations thereof.
Any of the storage devices disclosed herein may communicate through any interfaces and/or protocols including Peripheral Component Interconnect Express (PCIe), Nonvolatile Memory Express (NVMe), NVMe-over-fabric (NVMe-oF), Ethernet, Transmission Control Protocol/Internet Protocol (TCP/IP), User Datagram Protocol (UDP), remote direct memory access (RDMA), RDMA over Converged Ethernet (ROCE), FibreChannel, InfiniBand, Serial ATA (SATA), Small Computer Systems Interface (SCSI), Serial Attached SCSI (SAS), iWARP, Hypertext Transfer Protocol (HTTP), and/or the like, or any combination thereof.
In some embodiments of the disclosure, an SSD controller may be implemented with NVMe, SAS, SATA, HDD, and/or the like.
In some embodiments of the disclosure, a NIC protocol may be implemented with Ethernet, TCP, IP, UDP, RDMA, RoCE, iWARP, HTTP, and/or the like.
Any of the functionality disclosed herein may be implemented with hardware, software, or a combination thereof including combinational logic, sequential logic, one or more timers, counters, registers, and/or state machines, one or more complex programmable logic devices (CPLDs), field programmable gate arrays (FPGAs), application specific integrated circuits (ASICs), central processing units (CPUs) such as complex instruction set computer (CISC) processors such as x86 processors and/or reduced instruction set computer (RISC) processors such as ARM processors, graphics processing units (GPUs), neural processing units (NPUs), tensor processing units (TPUs) and/or the like, executing instructions stored in any type of memory, or any combination thereof. In some embodiments, one or more components may be implemented as a system-on-chip (SOC).
In the embodiments described herein, the operations are example operations, and may involve various additional operations not explicitly illustrated. In some embodiments, some of the illustrated operations may be omitted. In some embodiments, one or more of the operations may be performed by components other than those illustrated herein. Additionally, in some embodiments, the temporal order of the operations may be varied. Moreover, the figures are not necessarily drawn to scale.
The following discussion is intended to provide a brief, general description of a suitable machine or machines in which certain aspects of the disclosure may be implemented. The machine or machines may be controlled, at least in part, by input from conventional input devices, such as keyboards, mice, etc., as well as by directives received from another machine, interaction with a virtual reality (VR) environment, biometric feedback, or other input signal. As used herein, the term “machine” is intended to broadly encompass a single machine, a virtual machine, or a system of communicatively coupled machines, virtual machines, or devices operating together. Exemplary machines include computing devices such as personal computers, workstations, servers, portable computers, handheld devices, telephones, tablets, etc., as well as transportation devices, such as private or public transportation, e.g., automobiles, trains, cabs, etc.
The machine or machines may include embedded controllers, such as programmable or non-programmable logic devices or arrays, Application Specific Integrated Circuits (ASICs), embedded computers, smart cards, and the like. The machine or machines may utilize one or more connections to one or more remote machines, such as through a network interface, modem, or other communicative coupling. Machines may be interconnected by way of a physical and/or logical network, such as an intranet, the Internet, local area networks, wide area networks, etc. One skilled in the art will appreciate that network communication may utilize various wired and/or wireless short range or long range carriers and protocols, including radio frequency (RF), satellite, microwave, Institute of Electrical and Electronics Engineers (IEEE) 802.11, Bluetooth®, optical, infrared, cable, laser, etc.
Embodiments of the present disclosure may be described by reference to or in conjunction with associated data including functions, procedures, data structures, application programs, etc. which when accessed by a machine results in the machine performing tasks or defining abstract data types or low-level hardware contexts. Associated data may be stored in, for example, the volatile and/or non-volatile memory, e.g., RAM, ROM, etc., or in other storage devices and their associated storage media, including hard-drives, floppy-disks, optical storage, tapes, flash memory, memory sticks, digital video disks, biological storage, etc. Associated data may be delivered over transmission environments, including the physical and/or logical network, in the form of packets, serial data, parallel data, propagated signals, etc., and may be used in a compressed or encrypted format. Associated data may be used in a distributed environment, and stored locally and/or remotely for machine access.
Embodiments of the disclosure may include a tangible, non-transitory machine-readable medium comprising instructions executable by one or more processors, the instructions comprising instructions to perform the elements of the disclosures as described herein.
The various operations of methods described above may be performed by any suitable means capable of performing the operations, such as various hardware and/or software component(s), circuits, and/or module(s). The software may comprise an ordered listing of executable instructions for implementing logical functions, and may be embodied in any “processor-readable medium” for use by or in connection with an instruction execution system, apparatus, or device, such as a single or multiple-core processor or processor-containing system.
The blocks or steps of a method or algorithm and functions described in connection with the embodiments disclosed herein may be embodied directly in hardware, in a software module executed by a processor, or in a combination of the two. If implemented in software, the functions may be stored on or transmitted over as one or more instructions or code on a tangible, non-transitory computer-readable medium. A software module may reside in Random Access Memory (RAM), flash memory, Read Only Memory (ROM), Electrically Programmable ROM (EPROM), Electrically Erasable Programmable ROM (EEPROM), registers, hard disk, a removable disk, a CD ROM, or any other form of storage medium known in the art.
Having described and illustrated the principles of the disclosure with reference to illustrated embodiments, it will be recognized that the illustrated embodiments may be modified in arrangement and detail without departing from such principles, and may be combined in any desired manner. And, although the foregoing discussion has focused on particular embodiments, other configurations are contemplated. In particular, even though expressions such as “according to an embodiment of the disclosure” or the like are used herein, these phrases are meant to generally reference embodiment possibilities, and are not intended to limit the disclosure to particular embodiment configurations. As used herein, these terms may reference the same or different embodiments that are combinable into other embodiments.
The foregoing illustrative embodiments are not to be construed as limiting the disclosure thereof. Although a few embodiments have been described, those skilled in the art will readily appreciate that many modifications are possible to those embodiments without materially departing from the novel teachings and advantages of the present disclosure. Accordingly, all such modifications are intended to be included within the scope of this disclosure as defined in the claims.
Embodiments of the disclosure may extend to the following statements, without limitation:
Statement 1. An embodiment of the disclosure includes a device, comprising:
a storage device, the storage device including storage for a data and a controller to manage access to the storage;
a network interface device to send the data across a network; and
a host interface, the host interface to receive a request for the storage device or the network interface device.
Statement 2. An embodiment of the disclosure includes the device according to statement 1, wherein:
the storage device includes a Solid State Drive (SSD);
the controller includes an SSD controller; and
the storage includes a not-AND flash storage.
Statement 3. An embodiment of the disclosure includes the device according to statement 1, wherein the host interface includes a Peripheral Component Interconnect Express (PCIe) interface or a cache-coherent interconnect interface.
Statement 4. An embodiment of the disclosure includes the device according to statement 3, wherein the cache-coherent interconnect interface includes a Compute Express Link (CXL) interface.
Statement 5. An embodiment of the disclosure includes the device according to statement 1, wherein the network interface device is configured to access the data from the storage of the storage device.
Statement 6. An embodiment of the disclosure includes the device according to statement 5, wherein the network interface device is further configured to access the data from the storage of the storage device using the controller.
Statement 7. An embodiment of the disclosure includes the device according to statement 1, further comprising a buffer connected to the storage device and the network interface device.
Statement 8. An embodiment of the disclosure includes the device according to statement 7, wherein:
the storage device is configured to store the data in the buffer; and
the network interface device is configured to read the data from the buffer.
Statement 9. An embodiment of the disclosure includes the device according to statement 8, wherein:
the storage device is further configured to store the data in the buffer based at least in part on the request from a host processor; and
the network interface device is further configured to read the data from the buffer based at least in part on the request from the host processor.
Statement 10. An embodiment of the disclosure includes the device according to statement 8, wherein the storage device is further configured to pause storing the data in the buffer based at least in part on the buffer reaching a first threshold.
Statement 11. An embodiment of the disclosure includes the device according to statement 10, wherein the storage device is further configured to store the data in the buffer based at least in part on the buffer reaching a second threshold.
Statement 12. An embodiment of the disclosure includes the device according to statement 10, wherein the storage device is further configured to signal a host processor based at least in part on the data in the buffer reaching the first threshold.
Statement 13. An embodiment of the disclosure includes the device according to statement 8, further comprising a circuit to process the data in the buffer.
Statement 14. An embodiment of the disclosure includes the device according to statement 13, wherein the circuit includes a Field Programmable Gate Array (FPGA), an Application-Specific Integrated Circuit (ASIC), a System-on-a-Chip (SoC), a Graphics Processing Unit (GPU), a General Purpose GPU (GPGPU), a Tensor Processing Unit (TPU), a Neural Processing Unit (NPU), or a processor.
Statement 15. An embodiment of the disclosure includes the device according to statement 13, wherein the circuit includes the buffer.
Statement 16. An embodiment of the disclosure includes the device according to statement 13, wherein:
the host interface, is configured to receive the request for the storage device and to receive a second request for the network interface device;
the request is sent from the host interface to the circuit and from the circuit to the storage device; and
the second request is sent from the host interface to the circuit and from the circuit to the network interface device.
Statement 17. An embodiment of the disclosure includes the device according to statement 13, wherein the circuit is configured to transcode the data in the buffer.
Statement 18. An embodiment of the disclosure includes the device according to statement 8, wherein:
the buffer is partitioned into a first region and a second region;
the storage device is further configured to store the data in the first region of the buffer; and
the device further comprises a second storage device, the second storage device including a second storage for a second data and a second controller, the second storage device connected to the buffer, the second storage device configured to store the second data in the second region of the buffer.
Statement 19. An embodiment of the disclosure includes the device according to statement 18, wherein the network interface device is further configured to read the data from the first region of the buffer and the second data from the second region of the buffer.
Statement 20. An embodiment of the disclosure includes the device according to statement 18, wherein:
the network interface device is configured to read the data from the first region of the buffer; and
the device further comprises a second network interface device to send the second data across the network, the second network interface device connected to the buffer, the second network interface device configured to read the second data from the second region of the buffer.
Statement 21. An embodiment of the disclosure includes the device according to statement 8, wherein:
the buffer is partitioned into a first region and a second region;
the storage stores a second data; and
the storage device is further configured to store the data in the first region of the buffer and the second data in the second region of the buffer.
Statement 22. An embodiment of the disclosure includes the device according to statement 21, wherein:
the network interface device is configured to read the data from the first region of the buffer; and
the device further comprises a second network interface device to send the second data across the network, the second network interface device connected to the buffer, the second network interface device configured to read the second data from the second region of the buffer.
Statement 23. An embodiment of the disclosure includes the device according to statement 8, wherein:
the device further comprises a second buffer; and
the device further comprises a second storage device, the second storage device including a second storage for a second data and a second controller, the second storage device connected to the second buffer, the second storage device configured to store the second data in the second buffer.
Statement 24. An embodiment of the disclosure includes the device according to statement 23, wherein:
the network interface device is connected to the second buffer; and
the network interface device is further configured to read the second data from the second buffer.
Statement 25. An embodiment of the disclosure includes the device according to statement 24, further comprising a multiplexer connected to the network interface device, the buffer, and the second buffer.
Statement 26. An embodiment of the disclosure includes the device according to statement 23, further comprising a second network interface device to send the second data across the network, the second network interface device connected to the second buffer, the second network interface device configured to read the second data from the second buffer.
Statement 27. An embodiment of the disclosure includes the device according to statement 8, wherein:
the device further comprises a second buffer;
the storage stores a second data;
the storage device is connected to the second buffer; and
the storage device is further configured to store the second data in the second buffer.
Statement 28. An embodiment of the disclosure includes the device according to statement 27, further comprising a demultiplexer connected to the storage device, the buffer, and the second buffer.
Statement 29. An embodiment of the disclosure includes the device according to statement 27, further comprising a second network interface device to send the second data across the network, the second network interface device connected to the second buffer, the second network interface device configured to read the second data from the second buffer.
Statement 30. An embodiment of the disclosure includes the device according to statement 1, wherein the host interface includes an endpoint exposing a first function to issue a first request to the storage device and a second function to issue a second request to the network interface device.
Statement 31. An embodiment of the disclosure includes the device according to statement 1, further comprising a root port.
Statement 32. An embodiment of the disclosure includes the device according to statement 31, wherein the root port connects to the storage device.
Statement 33. An embodiment of the disclosure includes the device according to statement 32, wherein:
the device further comprises a second storage device; and
the root port further connects to the second storage device.
Statement 34. An embodiment of the disclosure includes the device according to statement 32, further comprising a second root port connected to the network interface device.
Statement 35. An embodiment of the disclosure includes the device according to statement 34, wherein:
the device further comprises a second network interface device; and
the second root port further connects to the second network interface device.
Statement 36. An embodiment of the disclosure includes the device according to statement 31, wherein the root port connects to the network interface device.
Statement 37. An embodiment of the disclosure includes the device according to statement 36, wherein:
the device further comprises a second network interface device; and
the root port further connects to the second network interface device.
Statement 38. An embodiment of the disclosure includes the device according to statement 1, wherein:
the storage device communicates with a host processor using a first protocol; and
the network interface device communicates with the host processor using a second protocol.
Statement 39. An embodiment of the disclosure includes the device according to statement 1, wherein:
the device further comprises a circuit;
the storage device communicates with the circuit using a first protocol; and
the network interface device communicates with the circuit using a second protocol.
Statement 40. An embodiment of the disclosure includes the device according to statement 39, wherein the circuit communicates with a host processor using a third protocol.
Statement 41. An embodiment of the disclosure includes a method, comprising:
receiving a request at a device;
accessing a data from a storage device of the device based at least in part on the request; and
transmitting the data using a network interface device of the device.
Statement 42. An embodiment of the disclosure includes the method according to statement 41, wherein receiving the request at the device includes receiving the request at the device from a host processor.
Statement 43. An embodiment of the disclosure includes the method according to statement 41, wherein receiving the request at the device includes receiving the request at a host interface of the device.
Statement 44. An embodiment of the disclosure includes the method according to statement 43, wherein receiving the request at the host interface of the device includes receiving the request at a function exposed by the host interface of the device.
Statement 45. An embodiment of the disclosure includes the method according to statement 44, wherein receiving the request at the function exposed by the host interface of the device includes receiving the request at the function exposed by an endpoint of the device.
Statement 46. An embodiment of the disclosure includes the method according to statement 43, wherein the host interface includes a Peripheral Component Interconnect Express (PCIe) interface or a cache-coherent interconnect interface.
Statement 47. An embodiment of the disclosure includes the method according to statement 46, wherein the cache-coherent interconnect interface includes a Compute Express Link (CXL) interface.
Statement 48. An embodiment of the disclosure includes the method according to statement 41, wherein accessing the data from the storage device of the device includes accessing the data from a storage of the storage device of the device.
Statement 49. An embodiment of the disclosure includes the method according to statement 48, wherein:
the storage device includes a Solid State Drive (SSD);
the SSD includes an SSD controller; and
the storage includes a not-AND flash storage.
Statement 50. An embodiment of the disclosure includes the method according to statement 41, wherein accessing the data from the storage device of the device includes accessing the data from the storage device of the device by the network interface device of the device.
Statement 51. An embodiment of the disclosure includes the method according to statement 41, wherein:
the method further comprises receiving a second request at the device; and
transmitting the data using a network interface device of the device includes transmitting the data using a network interface device of the device based at least in part on the second request.
Statement 52. An embodiment of the disclosure includes the method according to statement 51, wherein receiving the second request at the device includes receiving the second request at the device from a host processor.
Statement 53. An embodiment of the disclosure includes the method according to statement 51, wherein receiving the second request at the device includes receiving the second request at a host interface of the device.
Statement 54. An embodiment of the disclosure includes the method according to statement 53, wherein receiving the second request at the host interface of the device includes receiving the second request at a function exposed by the host interface of the device.
Statement 55. An embodiment of the disclosure includes the method according to statement 54, wherein receiving the second request at the second function exposed by the host interface of the device includes receiving the second request at the second function exposed by an endpoint of the device.
Statement 56. An embodiment of the disclosure includes the method according to statement 41, wherein:
accessing the data from the storage device of the device based at least in part on the request includes storing the data in a buffer by the storage device based at least in part on the request, the device including the buffer, the buffer connected to the storage device of the device and the network interface of the device; and
transmitting the data using the network interface device of the device includes reading the data from the buffer by the network interface device of the device.
Statement 57. An embodiment of the disclosure includes the method according to statement 56, wherein storing the data in the buffer by the storage device based at least in part on the request includes storing the data in the buffer by a storage controller of the storage device based at least in part on the request.
Statement 58. An embodiment of the disclosure includes the method according to statement 56, wherein storing the data in the buffer by the storage device based at least in part on the request includes prefetching the data by the storage device into the buffer based at least in part on the buffer crossing a threshold.
Statement 59. An embodiment of the disclosure includes the method according to statement 56, wherein storing the data in the buffer by the storage device based at least in part on the request includes pausing a prefetching of the data by the storage device into the buffer based at least in part on the buffer crossing a threshold.
Statement 60. An embodiment of the disclosure includes the method according to statement 56, further comprising processing the data in the buffer using a circuit of the device.
Statement 61. An embodiment of the disclosure includes the method according to statement 60, wherein the circuit of the device includes a Field Programmable Gate Array (FPGA), an Application-Specific Integrated Circuit (ASIC), a System-on-a-Chip (SoC), a Graphics Processing Unit (GPU), a General Purpose GPU (GPGPU), a Tensor Processing Unit (TPU), a Neural Processing Unit (NPU), or a processor.
Statement 62. An embodiment of the disclosure includes the method according to statement 60, wherein the circuit of the device includes the buffer.
Statement 63. An embodiment of the disclosure includes the method according to statement 60, wherein receiving the request at the device includes:
receiving the request at the circuit of the device; and
sending the request from the circuit of the device to the storage device of the device.
Statement 64. An embodiment of the disclosure includes the method according to statement 63, wherein:
receiving the request at the circuit of the device includes receiving the request using a first protocol at the circuit of the device; and
sending the request from the circuit of the device to the storage device of the device includes sending the request using a second protocol from the circuit of the device to the storage device of the device.
Statement 65. An embodiment of the disclosure includes the method according to statement 60, wherein;
the method further comprises receiving a second request at the circuit of the device; and
transmitting the data using a network interface device of the device includes sending the second request from the circuit of the device to the network interface device of the device.
Statement 66. An embodiment of the disclosure includes the method according to statement 65, wherein:
receiving the second request at the circuit of the device includes receiving the second request using a first protocol at the circuit of the device; and
sending the request from the circuit of the device to the storage device of the device includes sending the request using a second protocol from the circuit of the device to the network interface device of the device.
Statement 67. An embodiment of the disclosure includes the method according to statement 60, wherein processing the data in the buffer using the circuit of the device includes transcoding the data in the buffer using the circuit of the device.
Statement 68. An embodiment of the disclosure includes the method according to statement 56, wherein:
storing the data in the buffer based at least in part on the request includes storing the data in a first region of the buffer based at least in part on the request; and
the method further comprises storing a second data in a second region of the buffer.
Statement 69. An embodiment of the disclosure includes the method according to statement 68, wherein storing the second data in the second region of the buffer includes accessing the second data from the storage device of the device.
Statement 70. An embodiment of the disclosure includes the method according to statement 68, wherein storing the second data in the second region of the buffer includes accessing the second data from a second storage device of the device, the buffer further connected to the second storage device of the device.
Statement 71. An embodiment of the disclosure includes the method according to statement 68, wherein reading the data from the buffer by the network interface device of the device includes reading the data from the first region of the buffer by the network interface device of the device.
Statement 72. An embodiment of the disclosure includes the method according to statement 71, further comprising:
reading the second data from the second region of the buffer by the network interface device; and
transmitting the second data using the network interface device of the device.
Statement 73. An embodiment of the disclosure includes the method according to statement 71, further comprising:
reading the second data from the second region of the buffer by a second network interface device of the device, the buffer further connected to the second network interface of the device; and
transmitting the second data using the second network interface device of the device.
Statement 74. An embodiment of the disclosure includes the method according to statement 56, further comprising storing a second data in a second buffer, the device including the second buffer, the second buffer connected to the storage device of the device and the network interface of the device.
Statement 75. An embodiment of the disclosure includes the method according to statement 74, wherein storing the second data in the second buffer includes accessing the second data from the storage device of the device.
Statement 76. An embodiment of the disclosure includes the method according to statement 75, wherein storing the second data in the second buffer further includes storing the second data in the second buffer via a demultiplexer.
Statement 77. An embodiment of the disclosure includes the method according to statement 74, wherein storing the second data in the second buffer includes accessing the second data from a second storage device of the device, the second buffer further connected to the second storage device of the device.
Statement 78. An embodiment of the disclosure includes the method according to statement 74, further comprising:
reading the second data from the second buffer by the network interface device; and
transmitting the second data using the network interface device of the device.
Statement 79. An embodiment of the disclosure includes the method according to statement 78, wherein reading the second data from the second buffer by the network interface device includes reading the second data from the second buffer by the network interface device via a multiplexer.
Statement 80. An embodiment of the disclosure includes the method according to statement 78, further comprising:
reading the second data from the second buffer by a second network interface device of the device, the second buffer further connected to the second network interface of the device; and
transmitting the second data using the second network interface device of the device.
Statement 81. An embodiment of the disclosure includes the method according to statement 41, wherein receiving the request at the device includes sending the request to the storage device of the device using a root port of the device.
Statement 82. An embodiment of the disclosure includes the method according to statement 81, wherein the storage device of the device and a second storage device of the device connect to the root port of the device.
Statement 83. An embodiment of the disclosure includes the method according to statement 41, wherein receiving the request at the device includes sending the request to the network interface device of the device using a root port of the device.
Statement 84. An embodiment of the disclosure includes the method according to statement 83, wherein the network interface device of the device and a second network interface device of the device connect to the root port of the device.
Statement 85. An embodiment of the disclosure includes a method, comprising:
sending a first request from a host processor to a storage device of a device, the device including the storage device and a network interface device; and
sending a second request from the host processor to the network interface device of the device,
wherein a data of storage device of the device is transmitted by the network interface device of the device.
Statement 86. An embodiment of the disclosure includes the method according to statement 85, wherein:
the data is read from the storage device of the device based at least in part on the first request; and
the data is transmitted by the network interface device of the device based at least in part on the second request.
Statement 87. An embodiment of the disclosure includes the method according to statement 85, wherein the data of the storage device of the device is transmitted by the network interface device of the device without transferring the data to a main memory associated with the host processor.
Statement 88. An embodiment of the disclosure includes the method according to statement 85, wherein sending the first request from the host processor to the storage device of the device includes sending the second request from the host processor to the network interface device of the device.
Statement 89. An embodiment of the disclosure includes the method according to statement 85, wherein
sending the first request from the host processor to the storage device of the device includes sending the first request using a first protocol from the host processor to the storage device of the device; and
sending the second request from the host processor to the network interface device of the device includes sending the second request using a second protocol from the host processor to the network interface device of the device.
Statement 90. An embodiment of the disclosure includes the method according to statement 85, further comprising sending a third request from the host processor to a circuit of the device.
Statement 91. An embodiment of the disclosure includes the method according to statement 90, wherein the circuit includes a Field Programmable Gate Array (FPGA), an Application-Specific Integrated Circuit (ASIC), a System-on-a-Chip (SoC), a Graphics Processing Unit (GPU), a General Purpose GPU (GPGPU), a Tensor Processing Unit (TPU), a Neural Processing Unit (NPU), or a processor.
Statement 92. An embodiment of the disclosure includes the method according to statement 90, wherein the circuit transcodes the data from the storage device of the device for transmission by the network interface device of the device.
Statement 93. An embodiment of the disclosure includes the method according to statement 92, where the circuit transcodes the data from the storage device of the device for transmission by the network interface device of the device based at least in part on the third request.
Statement 94. An embodiment of the disclosure includes the method according to statement 85, further comprising sending a third request from the host processor to the device.
Statement 95. An embodiment of the disclosure includes the method according to statement 94, wherein the device transcodes the data from the storage device of the device for transmission by the network interface device of the device.
Statement 96. An embodiment of the disclosure includes the method according to statement 95, where the device transcodes the data from the storage device of the device for transmission by the network interface device of the device based at least in part on the third request.
Statement 97. An embodiment of the disclosure includes an article, comprising a non-transitory storage medium, the non-transitory storage medium having stored thereon instructions that, when executed by a machine, result in:
receiving a request at a device;
accessing a data from a storage device of the device based at least in part on the request; and
transmitting the data using a network interface device of the device.
Statement 98. An embodiment of the disclosure includes the article according to statement 97, wherein receiving the request at the device includes receiving the request at the device from a host processor.
Statement 99. An embodiment of the disclosure includes the article according to statement 97, wherein receiving the request at the device includes receiving the request at a host interface of the device.
Statement 100. An embodiment of the disclosure includes the article according to statement 99, wherein receiving the request at the host interface of the device includes receiving the request at a function exposed by the host interface of the device.
Statement 101. An embodiment of the disclosure includes the article according to statement 100, wherein receiving the request at the function exposed by the host interface of the device includes receiving the request at the function exposed by an endpoint of the device.
Statement 102. An embodiment of the disclosure includes the article according to statement 99, wherein the host interface includes a Peripheral Component Interconnect Express (PCIe) interface or a cache-coherent interconnect interface.
Statement 103. An embodiment of the disclosure includes the article according to statement 102, wherein the cache-coherent interconnect interface includes a Compute Express Link (CXL) interface.
Statement 104. An embodiment of the disclosure includes the article according to statement 97, wherein accessing the data from the storage device of the device includes accessing the data from a storage of the storage device of the device.
Statement 105. An embodiment of the disclosure includes the article according to statement 104, wherein:
the storage device includes a Solid State Drive (SSD);
the SSD includes an SSD controller; and
the storage includes a not-AND flash storage.
Statement 106. An embodiment of the disclosure includes the article according to statement 97, wherein accessing the data from the storage device of the device includes accessing the data from the storage device of the device by the network interface device of the device.
Statement 107. An embodiment of the disclosure includes the article according to statement 97, wherein:
the non-transitory storage medium has stored thereon further instructions that, when executed by the machine, result in receiving a second request at the device; and
transmitting the data using a network interface device of the device includes transmitting the data using a network interface device of the device based at least in part on the second request.
Statement 108. An embodiment of the disclosure includes the article according to statement 107, wherein receiving the second request at the device includes receiving the second request at the device from a host processor.
Statement 109. An embodiment of the disclosure includes the article according to statement 107, wherein receiving the second request at the device includes receiving the second request at a host interface of the device.
Statement 110. An embodiment of the disclosure includes the article according to statement 109, wherein receiving the second request at the host interface of the device includes receiving the second request at a function exposed by the host interface of the device.
Statement 111. An embodiment of the disclosure includes the article according to statement 110, wherein receiving the second request at the second function exposed by the host interface of the device includes receiving the second request at the second function exposed by an endpoint of the device.
Statement 112. An embodiment of the disclosure includes the article according to statement 97, wherein:
accessing the data from the storage device of the device based at least in part on the request includes storing the data in a buffer by the storage device based at least in part on the request, the device including the buffer, the buffer connected to the storage device of the device and the network interface of the device; and
transmitting the data using the network interface device of the device includes reading the data from the buffer by the network interface device of the device.
Statement 113. An embodiment of the disclosure includes the article according to statement 112, wherein storing the data in the buffer by the storage device based at least in part on the request includes storing the data in the buffer by a storage controller of the storage device based at least in part on the request.
Statement 114. An embodiment of the disclosure includes the article according to statement 112, wherein storing the data in the buffer by the storage device based at least in part on the request includes prefetching the data by the storage device into the buffer based at least in part on the buffer crossing a threshold.
Statement 115. An embodiment of the disclosure includes the article according to statement 112, wherein storing the data in the buffer by the storage device based at least in part on the request includes pausing a prefetching of the data by the storage device into the buffer based at least in part on the buffer crossing a threshold.
Statement 116. An embodiment of the disclosure includes the article according to statement 112, the non-transitory storage medium having stored thereon further instructions that, when executed by the machine, result in processing the data in the buffer using a circuit of the device.
Statement 117. An embodiment of the disclosure includes the article according to statement 116, wherein the circuit of the device includes a Field Programmable Gate Array (FPGA), an Application-Specific Integrated Circuit (ASIC), a System-on-a-Chip (SoC), a Graphics Processing Unit (GPU), a General Purpose GPU (GPGPU), a Tensor Processing Unit (TPU), a Neural Processing Unit (NPU), or a processor.
Statement 118. An embodiment of the disclosure includes the article according to statement 116, wherein the circuit of the device includes the buffer.
Statement 119. An embodiment of the disclosure includes the article according to statement 116, wherein receiving the request at the device includes:
receiving the request at the circuit of the device; and
sending the request from the circuit of the device to the storage device of the device.
Statement 120. An embodiment of the disclosure includes the article according to statement 119, wherein:
receiving the request at the circuit of the device includes receiving the request using a first protocol at the circuit of the device; and
sending the request from the circuit of the device to the storage device of the device includes sending the request using a second protocol from the circuit of the device to the storage device of the device.
Statement 121. An embodiment of the disclosure includes the article according to statement 116, wherein;
the non-transitory storage medium has stored thereon further instructions that, when executed by the machine, result in receiving a second request at the circuit of the device; and
transmitting the data using a network interface device of the device includes sending the second request from the circuit of the device to the network interface device of the device.
Statement 122. An embodiment of the disclosure includes the article according to statement 121, wherein:
receiving the second request at the circuit of the device includes receiving the second request using a first protocol at the circuit of the device; and
sending the request from the circuit of the device to the storage device of the device includes sending the request using a second protocol from the circuit of the device to the network interface device of the device.
Statement 123. An embodiment of the disclosure includes the article according to statement 116, wherein processing the data in the buffer using the circuit of the device includes transcoding the data in the buffer using the circuit of the device.
Statement 124. An embodiment of the disclosure includes the article according to statement 112, wherein:
storing the data in the buffer based at least in part on the request includes storing the data in a first region of the buffer based at least in part on the request; and
the non-transitory storage medium has stored thereon further instructions that, when executed by the machine, result in storing a second data in a second region of the buffer.
Statement 125. An embodiment of the disclosure includes the article according to statement 124, wherein storing the second data in the second region of the buffer includes accessing the second data from the storage device of the device.
Statement 126. An embodiment of the disclosure includes the article according to statement 124, wherein storing the second data in the second region of the buffer includes accessing the second data from a second storage device of the device, the buffer further connected to the second storage device of the device.
Statement 127. An embodiment of the disclosure includes the article according to statement 124, wherein reading the data from the buffer by the network interface device of the device includes reading the data from the first region of the buffer by the network interface device of the device.
Statement 128. An embodiment of the disclosure includes the article according to statement 127, the non-transitory storage medium having stored thereon further instructions that, when executed by the machine, result in:
reading the second data from the second region of the buffer by the network interface device; and
transmitting the second data using the network interface device of the device.
Statement 129. An embodiment of the disclosure includes the article according to statement 127, the non-transitory storage medium having stored thereon further instructions that, when executed by the machine, result in:
reading the second data from the second region of the buffer by a second network interface device of the device, the buffer further connected to the second network interface of the device; and
transmitting the second data using the second network interface device of the device.
Statement 130. An embodiment of the disclosure includes the article according to statement 112, the non-transitory storage medium having stored thereon further instructions that, when executed by the machine, result in storing a second data in a second buffer, the device including the second buffer, the second buffer connected to the storage device of the device and the network interface of the device.
Statement 131. An embodiment of the disclosure includes the article according to statement 130, wherein storing the second data in the second buffer includes accessing the second data from the storage device of the device.
Statement 132. An embodiment of the disclosure includes the article according to statement 131, wherein storing the second data in the second buffer further includes storing the second data in the second buffer via a demultiplexer.
Statement 133. An embodiment of the disclosure includes the article according to statement 130, wherein storing the second data in the second buffer includes accessing the second data from a second storage device of the device, the second buffer further connected to the second storage device of the device.
Statement 134. An embodiment of the disclosure includes the article according to statement 130, the non-transitory storage medium having stored thereon further instructions that, when executed by the machine, result in:
reading the second data from the second buffer by the network interface device; and
transmitting the second data using the network interface device of the device.
Statement 135. An embodiment of the disclosure includes the article according to statement 134, wherein reading the second data from the second buffer by the network interface device includes reading the second data from the second buffer by the network interface device via a multiplexer.
Statement 136. An embodiment of the disclosure includes the article according to statement 134, the non-transitory storage medium having stored thereon further instructions that, when executed by the machine, result in:
reading the second data from the second buffer by a second network interface device of the device, the second buffer further connected to the second network interface of the device; and
transmitting the second data using the second network interface device of the device.
Statement 137. An embodiment of the disclosure includes the article according to statement 97, wherein receiving the request at the device includes sending the request to the storage device of the device using a root port of the device.
Statement 138. An embodiment of the disclosure includes the article according to statement 137, wherein the storage device of the device and a second storage device of the device connect to the root port of the device.
Statement 139. An embodiment of the disclosure includes the article according to statement 97, wherein receiving the request at the device includes sending the request to the network interface device of the device using a root port of the device.
Statement 140. An embodiment of the disclosure includes the article according to statement 139, wherein the network interface device of the device and a second network interface device of the device connect to the root port of the device.
Statement 141. An embodiment of the disclosure includes an article, comprising a non-transitory storage medium, the non-transitory storage medium having stored thereon instructions that, when executed by a machine, result in:
sending a first request from a host processor to a storage device of a device, the device including the storage device and a network interface device; and
sending a second request from the host processor to the network interface device of the device,
wherein a data of storage device of the device is transmitted by the network interface device of the device.
Statement 142. An embodiment of the disclosure includes the article according to statement 141, wherein:
the data is read from the storage device of the device based at least in part on the first request; and
the data is transmitted by the network interface device of the device based at least in part on the second request.
Statement 143. An embodiment of the disclosure includes the article according to statement 141, wherein the data of the storage device of the device is transmitted by the network interface device of the device without transferring the data to a main memory associated with the host processor.
Statement 144. An embodiment of the disclosure includes the article according to statement 141, wherein sending the first request from the host processor to the storage device of the device includes sending the second request from the host processor to the network interface device of the device.
Statement 145. An embodiment of the disclosure includes the article according to statement 141, wherein
sending the first request from the host processor to the storage device of the device includes sending the first request using a first protocol from the host processor to the storage device of the device; and
sending the second request from the host processor to the network interface device of the device includes sending the second request using a second protocol from the host processor to the network interface device of the device.
Statement 146. An embodiment of the disclosure includes the article according to statement 141, the non-transitory storage medium having stored thereon further instructions that, when executed by the machine, result in sending a third request from the host processor to a circuit of the device.
Statement 147. An embodiment of the disclosure includes the article according to statement 146, wherein the circuit includes a Field Programmable Gate Array (FPGA), an Application-Specific Integrated Circuit (ASIC), a System-on-a-Chip (SoC), a Graphics Processing Unit (GPU), a General Purpose GPU (GPGPU), a Tensor Processing Unit (TPU), a Neural Processing Unit (NPU), or a processor.
Statement 148. An embodiment of the disclosure includes the article according to statement 146, wherein the circuit transcodes the data from the storage device of the device for transmission by the network interface device of the device.
Statement 149. An embodiment of the disclosure includes the article according to statement 148, where the circuit transcodes the data from the storage device of the device for transmission by the network interface device of the device based at least in part on the third request.
Statement 150. An embodiment of the disclosure includes the article according to statement 141, the non-transitory storage medium having stored thereon further instructions that, when executed by the machine, result in sending a third request from the host processor to the device.
Statement 151. An embodiment of the disclosure includes the article according to statement 150, wherein the device transcodes the data from the storage device of the device for transmission by the network interface device of the device.
Statement 152. An embodiment of the disclosure includes the article according to statement 151, where the device transcodes the data from the storage device of the device for transmission by the network interface device of the device based at least in part on the third request.
Consequently, in view of the wide variety of permutations to the embodiments described herein, this detailed description and accompanying material is intended to be illustrative only, and should not be taken as limiting the scope of the disclosure. What is claimed as the disclosure, therefore, is all such modifications as may come within the scope and spirit of the following claims and equivalents thereto.
This application claims the benefit of U.S. Provisional Patent Application Ser. No. 63/292,421, filed Dec. 21, 2021, which is incorporated by reference herein for all purposes.
Number | Date | Country | |
---|---|---|---|
63292421 | Dec 2021 | US |