# US 2021/0278968 A1 · Generation of a volume-level of an io request

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 2021/0278968 A1
- Document ID: US20210278968A1
- Status: Published application
- Kind: A1
- Application number: 17/245,303
- Filed: 2021-04-30
- Published: 2021-09-09
- Earliest claimed: 2019-10-04
- Assignees: Hewlett Packard Enterprise Development LP
- Applicants: Hewlett Packard Enterprise Development LP
- Inventors: Matti Vanninen; Christopher J. Corsi; Xiaokang Sang
- Web page: https://patentgrep.com/patent/US20210278968A1

## CPC

- G06F 3/061: {Improving I/O performance}
- G06F 3/0611: {in relation to response time}
- G06F 3/0635: {by changing the path, e.g. traffic rerouting, path reconfiguration}
- G06F 3/0658: {Controller construction arrangements}
- G06F 3/0659: {Command handling arrangements, e.g. command buffers, queues, command scheduling}
- G06F 3/0662: {Virtualisation aspects}
- G06F 3/0689: {Disk arrays, e.g. RAID, JBOD}
- G06F 9/545: {where tasks reside in different layers, e.g. user- and kernel-space}
- G06F 13/4027: {using bus bridges (G06F13/4022 takes precedence)}
- G06F 13/4221: {being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus}
- G06F 3/067: {Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]}
- G06F 3/0679: {Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Examples may forward an input/output (IO) request with use of kernel-level instructions. Examples may receive the IO request via a port of a standby controller, generate an alternate version of the IO request using at least kernel-level instructions of the standby controller, and provide the alternate version of the IO request to physical memory of the active controller by providing the alternate version of the IO request to a designated region of physical memory of the standby controller that is mapped to a designated region of the physical memory of the active controller.

## Claims

### Claim 1

A method of a storage array, the method comprising:
receiving an input/output (IO) request via a port of a first controller, the IO request specifying an IO operation targeting a volume of the storage array, and wherein the storage array comprises the first controller and a second controller, the IO request received when the first controller is not enabled to perform IO operations on the targeted volume and the second controller is enabled to perform IO operations on the targeted volume;
with the first controller, generating a volume-level version of the IO request expressed in terms of a volume and at least one offset and useable by user space instructions of the second controller to perform the IO operation specified by the IO request;
with the first controller, providing the volume-level version of the IO request to physical memory of the second controller by providing the volume-level version of the IO request to a designated region of physical memory of the first controller that is mapped to a designated region of the physical memory of the second controller;
with the second controller, retrieving the volume-level version of the IO request from the designated region of the physical memory of the second controller; and
with the second controller, performing the IO operation, which is specified by the volume-level version of the IO request, on the targeted volume of the storage array.

### Claim at position 2

2-3. (canceled)

### Claim 4 (depends on 9)

The method of claim 9, wherein the hardware bridge devices are respective non-transparent bridge (NTB) devices that map the designated region of the physical memory of the first controller to the designated region of the physical memory of the second controller.

### Claim at position 4

5-6. (canceled)

### Claim 7 (depends on 1)

The method of claim 1, wherein the providing the volume-level version of the IO request to physical memory of the first controller comprises:
with the at least one user space process, writing the volume-level version of the IO request to a region of virtual memory of user space of the first controller that is mapped to at least a portion of the designated region of the physical memory of the first controller.

### Claim 8

(canceled).

### Claim 9 (depends on 1)

The method of claim 1, comprising:
with the first controller, determining that the received IO request is to be forwarded to the second controller;
in response to the determination, providing the volume-level version of the IO request to the designated region of the physical memory of the first controller; and
using respective hardware bridge devices of the first and second controllers, providing the volume-level version of the IO request from the designated region of the physical memory of the first controller to the designated region of the physical memory of the second controller.

### Claim at position 8

10-20. (canceled)

### Claim 21 (depends on 1)

The method of claim 1, wherein:
the first controller is a standby controller; and
the second controller is an active controller.

### Claim 22 (depends on 1)

The method of claim 1, wherein generating the volume-level version of the IO request comprises:
with a fibre channel driver of the first controller, generating a packaged version of the IO request that is packaged for placement on an event queue of the fibre channel driver; and
with at least one user space process of the first controller:
acquiring the packaged version of the IO request from the event queue of the fibre channel driver of the first controller; and
generating the volume-level version of the IO request from the packaged version of the IO request.

### Claim 23

A storage array comprising:
a first controller comprising first instructions executable by the first controller; and
a second controller comprising second instructions executable by the second controller;
wherein the first controller is to receive an input/output (IO) request via a port of the first controller, when the first controller is not enabled to perform IO operations on a volume of the storage array and the second controller is enabled to perform IO operations on the volume of the storage array, the IO request specifying an IO operation targeting the volume of the storage array;
wherein the first instructions are executable by the first controller to:
generate a volume-level version of the IO request expressed in terms of a volume and at least one offset and useable by user space instructions of the second controller to perform the IO operation specified by the IO request;
provide the volume-level version of the IO request to physical memory of the second controller by providing the volume-level version of the IO request to a designated region of physical memory of the first controller that is mapped to a designated region of the physical memory of the second controller;
wherein the second instructions are executable by the second controller to:
retrieve the volume-level version of the IO request from the designated region of the physical memory of the second controller; and
perform the IO operation, which is specified by the volume-level version of the IO request, on the targeted volume of the storage array.

### Claim 24 (depends on 23)

The storage array of claim 23, wherein the first instructions comprise:
instructions of a protocol driver of the first controller for a given protocol and executable by the first controller to generate a packaged version of the IO request that is packaged for placement on an event queue of the protocol driver of the first controller; and
instructions to implement at least one user space process executable by the first controller to:
acquire the packaged version of the IO request from the event queue of the protocol driver of the first controller; and
generate the volume-level version of the IO request from the packaged version of the IO request.

### Claim 25 (depends on 24)

The storage array of claim 24, wherein the instructions to implement the at least one user space process are executable by the first controller to:
write the volume-level version of the IO request to the designated region of the physical memory of the first controller by writing the volume-level version of the IO request to a region of virtual memory addresses that are mapped to the designated region of the physical memory of the first controller.

### Claim 26 (depends on 25)

The storage array of claim 25, wherein the second instructions comprise:
instructions, executable by the second controller, to implement at least one user space process to:
determine that data is available in a virtual memory region of user space of the second controller that is mapped to the designated region of the physical memory of second controller; and
in response to the determination:
acquire the volume-level version of IO request from the virtual memory region of the second controller; and
perform the IO operation specified by the volume-level version of the IO request on the targeted volume of the storage array.

### Claim 27 (depends on 24)

The storage array of claim 24, wherein:
the received IO request is a fibre channel IO request received via a fibre channel port of a host-bus adapter of the first controller; and
the given protocol is fibre channel.

### Claim 28 (depends on 23)

The storage array of claim 23, wherein:
the first controller is a standby controller; and
the second controller is an active controller.

### Claim 29 (depends on 23)

The storage array of claim 23, wherein the first instructions comprise protocol layer instructions to implement an Internet Small Computer System Interface (iSCSI) protocol layer in user space of the first controller, the protocol layer instructions executable by the first controller to generate the volume-level version of the IO request.

### Claim 30 (depends on 23)

The storage array of claim 23, comprising:
a first hardware bridge device of the first controller; and
a second hardware bridge device of the second controller;
wherein the first and second hardware bridge devices are to provide the alternate version of the IO request from the designated region of physical memory of the first controller to the designated region of the physical memory of the second controller.

### Claim 31 (depends on 30)

The storage array of claim 30, wherein the first and second hardware bridge devices are respective non-transparent bridge (NTB) devices that map the designated region of the physical memory of the first controller to the designated region of the physical memory of the second controller.

### Claim 32

An article comprising at least one non-transitory machine-readable storage medium comprising instructions executable by a storage array comprising first and second controllers, wherein the instructions comprise:
first instructions executable by the first controller to determine to forward an input/output (IO) request specifying an IO operation targeting a volume of the storage array, the IO request received by the first controller when the first controller is not enabled to perform IO operations on the targeted volume of the storage array and when the second controller is enabled to perform IO operations on the targeted volume of the storage array;
wherein the first instructions are executable by the first controller to:
generate a volume-level version of the IO request expressed in terms of a volume and at least one offset and useable by user space instructions of the second controller to perform the IO operation specified by the IO request;
provide the volume-level version of the IO request to physical memory of the second controller by providing the volume-level version of the IO request to a designated region of physical memory of the first controller that is mapped to a designated region of the physical memory of the second controller;
wherein the second instructions are executable by the second controller to:
retrieve the volume-level version of the IO request from the designated region of the physical memory of the second controller; and
perform the IO operation, which is specified by the volume-level version of the IO request, on the targeted volume of the storage array.

### Claim 33 (depends on 32)

The article of claim 32, wherein the first instructions comprise:
instructions of a protocol driver of the first controller for a given protocol and executable by the first controller to generate a packaged version of the IO request that is packaged for placement on an event queue of the protocol driver of the first controller; and
instructions to implement at least one user space process executable by the first controller to:
acquire the packaged version of the IO request from the event queue of the protocol driver of the first controller; and
generate the volume-level version of the IO request from the packaged version of the IO request.

### Claim 34 (depends on 33)

The article of claim 33, wherein the instructions to implement the at least one user space process are executable by the first controller to:
write the volume-level version of the IO request to the designated region of the physical memory of the first controller by writing the volume-level version of the IO request to a region of virtual memory addresses that are mapped to the designated region of the physical memory of the first controller.

### Claim 35 (depends on 34)

The article of claim 34, wherein the second instructions comprise:
instructions, executable by the second controller, to implement at least one user space process to:
determine that data is available in a virtual memory region of user space of the second controller that is mapped to the designated region of the physical memory of second controller; and
in response to the determination:
acquire the volume-level version of IO request from the virtual memory region of the second controller; and
perform the IO operation specified by the volume-level version of the IO request on the targeted volume of the storage array.

### Claim 36 (depends on 31)

The article of claim 31, wherein:
the received IO request is a fibre channel IO request received via a fibre channel port of a host-bus adapter of the first controller; and
the given protocol is fibre channel.
