IP Library Granted Patent US 9,734,086
Granted Patent B2
US 9,734,086 · App. 11/952,121 · Granted Aug 15, 2017

Apparatus, system, and method for a device shared between multiple independent hosts

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,734,086
App. No.
11/952,121
Granted
Aug 15, 2017
Kind
B2
Abstract

The invention includes a proxy request receiver module and a proxy request command module. The proxy request receiver module executes on a designated command proxy host and receives a proxy request from a requesting host. The requesting host is one of two or more hosts. Each of the hosts executes an operating system independent from the other hosts and a shared device. One of the hosts is designated as the command proxy host. A system bus connects the hosts and shared device. The proxy request includes a control request to be executed by the shared device sufficient to configure the shared device for a data transfer between the requesting host and shared device independent of the command proxy host. The control request is free of data. The proxy request command module transmits the control request to the shared device.

Claims (72)

1. An apparatus, comprising:

a command proxy host configured to communicate with a system bus, the command proxy host comprising:

a proxy request receiver module configured to receive a proxy request for a shared device from a requesting host, wherein the proxy request comprises a control request executable by the shared device to configure the shared device for a plurality of direct memory access data transfers via a data path between the requesting host and the shared device independent of the command proxy host, the plurality of data transfers comprising data corresponding to a plurality of requests initiated by the requesting host after the shared device executes the control request, the control request comprising control information including an intermediate buffer identification, the control request being executed during an initialization process;

a path module configured to create a communication path comprising the data path and a shared resource control path between the command proxy host and the shared device, wherein the shared resource control path is configurable to control allocation of the shared device to the requesting host;

a proxy request command module configured to transmit the control request via the shared resource control path to the shared device in response to the proxy request receiver module receiving the proxy request; and

wherein the proxy request receiver module, the path module, the proxy request command module, comprise one or more of logic hardware and a non-transitory computer readable medium having executable code stored thereon.

2. The apparatus of claim 1 , further comprising:

the shared device, wherein the shared device comprises a network interface configured to:

transfer data received from the requesting host over a computer network to a network device; and

transfer data received through the computer network from the network device to the requesting host.

3. The apparatus of claim 1 , further comprising:

the shared device, wherein the shared device comprises a storage device and a storage controller.

4. The apparatus of claim 3 , wherein the storage device further comprises a solid-state storage device, and wherein the storage controller comprises a solid-state storage controller.

5. The apparatus of claim 4 , wherein the storage device is configured to store at least a portion of transmitted data on a storage division of the storage device, the storage division comprising a sequence indicator to preserve an ordered sequence of storage operations on the shared storage device.

6. The apparatus of claim 4 , wherein the storage device is configured to:

store a first portion of transmitted data on a first one of a plurality of solid-state storage elements of the solid-state storage device; and

store a second portion of the transmitted data on a second one of the solid-state storage elements.

7. The apparatus of claim 4 , wherein the storage device is configured to:

generate an error-correcting code (ECC) block comprising transmitted data and an error-correcting code capable of correcting an error in the ECC block; and

store a first portion of the ECC block on a first one of a plurality of solid-state storage elements of the solid-state storage device and a second portion of the ECC block on a second one of the solid-state storage elements.

8. The apparatus of claim 4 , wherein the storage device is configured to write data sequentially on the solid-state storage device to preserve an ordered sequence of storage operations.

9. The apparatus of claim 1 , wherein the system bus comprises a peripheral component interconnect express (PCI-e) bus.

10. The apparatus of claim 9 wherein the command proxy host is configured to support PCI-e input/output virtualization (PCie-IOV).

11. The apparatus of claim 1 , further comprising:

the shared device, wherein the shared device comprises the command proxy host.

12. The apparatus of claim 1 , further comprising:

the requesting host, wherein the command proxy host and the requesting host are configured to execute separate operating systems, and wherein the command proxy or the requesting host is configured to execute one of the operating systems above a virtual machine layer.

13. The apparatus of claim 1 , wherein the command proxy host is configured to create the data path for a remote direct memory access (RDMA) transfer between the requesting host and the shared device.

14. The apparatus of claim 1 , wherein the command proxy host further comprises:

a standard device emulation module configured to emulate the shared device to an independent host as a standard device attached to the system bus during device discovery and prior to the independent host loading a device driver specific to the shared device; and

wherein the standard device emulation module comprises one or more of logic hardware and a non-transitory computer readable medium having executable code stored thereon.

15. The apparatus of claim 14 , wherein the standard device emulation module is configured to support I/O virtualization.

16. The apparatus of claim 1 , further comprising:

the system bus, wherein the system bus further comprises a system bus switch with a non-transparent port configured such that a first initialization process of the requesting host discovers the command proxy host and fails to discover the shared device.

17. The apparatus of claim 16 , wherein the non-transparent port is further configured such that a second initialization process of the command proxy host discovers the shared device and identifies the shared device for communication with the command proxy host.

18. The apparatus of claim 1 , further comprising:

an interrupt receiver module, executing on the command proxy host, configured to receive receives an interrupt from the shared device via the shared resource control path, wherein the interrupt comprises information indicating that the shared device has data to be transmitted to the requesting host; and

an interrupt transmission module configured to transmit the information included in the interrupt to the requesting host via the shared resource control path, wherein the interrupt receiver module comprises one or more of logic hardware and a non-transitory computer readable medium having executable code stored thereon.

19. The apparatus of claim 18 , wherein the path module is configured to determine, in response to the interrupt from the shared device, whether the communication path exists.

20. An apparatus, comprising:

a command proxy host that communicates with a system bus, the command proxy host comprising:

a proxy request receiver module that receives a proxy request from a requesting host;

a path module that creates a data path between a shared device and the requesting host and a shared resource control path between the command proxy host and the shared device, wherein the data path is created by sending a control request, corresponding to the proxy request, to the shared device via the shared resource control path, the control request is executable to configure the shared device for a plurality of direct memory access data transfers via the data path independent of the command proxy host, and the plurality of data transfers comprise data corresponding to a plurality of requests initiated by the requesting host after the shared device executes the control request, the control request comprising control information including an intermediate buffer identification, the control request being executed during an initialization process; and

an interrupt module that receives, from the shared device, an interrupt comprising information specifying that the shared device has data to be transmitted to the requesting host;

wherein the interrupt module transmits the information to the requesting host, and wherein the proxy request receiver module, the path module, and the interrupt module comprise one or more of logic hardware and a non-transitory computer readable medium having executable code stored thereon.

21. The apparatus of claim 20 , wherein the command proxy host comprises:

a standard device emulation module that emulates the shared device to the requesting host as a standard device attached to the system bus during device discovery and prior to the requesting host loading a device driver for the shared device,

wherein the standard device emulation module comprises one or more of logic hardware and a non-transitory computer readable medium having executable code stored thereon.

22. An apparatus, comprising:

a requesting host configurable to communicate with a command proxy host via a system bus, the requesting host comprising:

a proxy request transmitter module configurable to transmit a proxy request to the command proxy host via a shared resource control path between the requesting host and the command proxy host, wherein the proxy request comprises a control request executable by a shared device to configure the shared device for a plurality of direct memory access data transfers between the requesting host and the shared device via a data path created by the command proxy host independent of the command proxy host, the plurality of data transfers comprising data corresponding to a plurality of requests initiated by the requesting host after the shared device executes the control request, the control request comprising control information including an intermediate buffer identification, the control request being executed during an initialization process; and

a host data transmitter module configurable to initiate a plurality of data transfers between the requesting host and the shared device via the data path, wherein the plurality of data transfers is executable independently of the command proxy host;

wherein the proxy request transmitter module, and the host data transmitter module, comprise one or more of logic hardware and a non-transitory computer readable medium having executable code stored thereon.

23. The apparatus of claim 22 , wherein the requesting host further comprises:

a host interrupt receiver module configurable to receive, from the command proxy host, interrupt information specifying that the shared device has data to be transmitted to the requesting host; and

a host data receiver module configurable to continue a process of receiving the transfer of data; and

wherein the host interrupt receiver module and the host data receiver module comprises one or more of logic hardware and a non-transitory computer readable medium having executable code stored thereon.

24. A non-transitory computer readable medium having program code stored thereon, wherein the program code is executable to cause a computer system to perform operations, the operations comprising:

receiving a proxy request from a requesting host, the proxy request comprising a control request executable by a shared device to configure the shared device for a plurality of direct memory access data transfers between the requesting host and the shared device independent of the command proxy host, the plurality of data transfers comprising data corresponding to a plurality of requests initiated by the requesting host after the shared device executes the control request, the control request comprising control information including an intermediate buffer identification, the control request being executed during an initialization process;

creating a communication path, the communication path comprising a data path between the shared device and the requesting host and a shared resource control path between the command proxy host and the shared device, wherein the shared resource control path is configurable to control allocation of the shared device to the requesting host; and

transmitting the control request to the shared device via the shared resource control path.

25. A method, comprising:

a command proxy host receiving a proxy request from a requesting host via a system bus, wherein the proxy request includes information for configuring the shared device for a plurality of direct memory access data transfers between the requesting host and the shared device independent of the command proxy host, the plurality of data transfers comprising data corresponding to a plurality of requests initiated by the requesting host after the shared device executes the control request, the control request comprising control information including an intermediate buffer identification, the control request being executed during an initialization process;

creating a communication path using the system bus, the communication path comprising a data path between the shared device and the requesting host and a shared resource control path between the command proxy host and the shared device, wherein the shared resource control path is configurable to control allocation of the shared device; and

the command proxy host transmitting the information to the shared device via the shared resource control path to configure the shared device for a plurality of direct data transfers between the requesting host and the shared device, wherein the plurality of direct data transfers is executable independently of the command proxy host and the plurality of data transfers comprise data corresponding to a plurality of requests initiated by the requesting host.

26. The method of claim 25 , wherein the shared device comprises a storage device, wherein the storage device stores at least a portion of data from the direct data transfer on a storage division of the storage device, the storage division comprising a sequence indicator to preserve an ordered sequence of storage operations on the storage device.

27. The method of claim 25 , wherein the shared device comprises a storage device, wherein the storage device stores a first portion of data from the direct data transfer on a first one of a plurality of solid-state storage elements, and stores a second portion of data from the direct data transfer on a second one of the solid-state storage elements.

28. The method of claim 25 , wherein the shared device comprises a storage device, and wherein the method further comprises:

generating an error-correcting code (ECC) block comprising transmitted data and an error-correcting code capable of correcting an error in the ECC block; and

storing a first portion of the ECC block on a first one of a plurality of solid-state storage elements of the storage device and a second portion of the ECC block on a second one of the solid-state storage elements.

29. The method of claim 25 , wherein the shared device comprises a storage device, and wherein the method further comprises writing data sequentially on the storage device to preserve an ordered sequence of storage operations completed on the storage device.

30. The method of claim 25 , further comprising the command proxy host receiving an interrupt from the shared device, wherein the interrupt is indicative of the shared device having data to transfer to the requesting host; and the command proxy host forwarding the interrupt to the requesting host.

Assignments (14)
PARTIAL RELEASE OF SECURITY INTERESTS Recorded Apr 25, 2025
From: JPMORGAN CHASE BANK, N.A., AS AGENT
To: SANDISK TECHNOLOGIES, INC.
Reel/Frame 071382/0001 →
SECURITY AGREEMENT Recorded Apr 25, 2025
From: SANDISK TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 071050/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 31, 2024
From: SANDISK TECHNOLOGIES LLC
To: SANDISK TECHNOLOGIES, INC.
Reel/Frame 069796/0423 →
PATENT COLLATERAL AGREEMENT (AR) Recorded Feb 22, 2024
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS THE AGENT
Reel/Frame 066648/0284 →
PATENT COLLATERAL AGREEMENT (DDTL) Recorded Feb 22, 2024
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS THE AGENT
Reel/Frame 066648/0206 →
CHANGE OF NAME Recorded May 25, 2016
From: SANDISK TECHNOLOGIES INC
To: SANDISK TECHNOLOGIES LLC
Reel/Frame 038807/0807 →
RELEASE OF SECURITY INTEREST Recorded May 4, 2016
From: FUSION-IO, INC.
To: SANDISK CORPORATION
Reel/Frame 038748/0880 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 13, 2016
From: INTELLIGENT INTELLECTUAL PROPERTY HOLDINGS 2 LLC
To: PS12 LUXCO S.A.R.L.
Reel/Frame 038362/0575 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 13, 2016
From: PS12 LUXCO S.A.R.L.
To: LONGITUDE ENTERPRISE FLASH S.A.R.L.
Reel/Frame 038362/0604 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 31, 2016
From: LONGITUDE ENTERPRISE FLASH SARL
To: SANDISK TECHNOLOGIES, INC.
Reel/Frame 038324/0628 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 26, 2014
From: FUSION-IO, INC.
To: INTELLIGENT INTELLECTUAL PROPERTY HOLDINGS 2 LLC
Reel/Frame 033419/0748 →
SECURITY INTEREST Recorded Jul 24, 2014
From: INTELLIGENT INTELLECTUAL PROPERTY HOLDINGS 2 LLC
To: FUSION-IO, INC.
Reel/Frame 033410/0158 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 23, 2014
From: FUSION-IO, INC.
To: INTELLECTUAL PROPERTY HOLDINGS 2 LLC
Reel/Frame 033389/0511 →
CHANGE OF NAME Recorded Jul 9, 2010
From: FUSION MULTISYSTEMS, INC.
To: FUSION-IO, INC.
Reel/Frame 024651/0914 →