# US 10,599,477 B1 · Methods and apparatus for command list processing in performing parallel IO operations

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

- Number: US 10,599,477 B1
- Document ID: US10599477B1
- Status: Granted
- Kind: B1
- Application number: 16/395,638
- Filed: 2019-04-26
- Granted: 2020-03-24
- Earliest claimed: 2017-05-22
- Assignees: DataCore Software Corporation
- Applicants: DataCore Software Corporation
- Inventors: Ziya Aral; Nicholas C. Connolly; Robert Bassett; Roni J. Putra
- Web page: https://patentgrep.com/patent/US10599477B1

## CPC

- G06F 9/5027: {the resource being a machine, e.g. CPUs, Servers, Terminals}
- G06F 9/5038: {considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration (scheduling strategies G06F9/4881 and subgroups)}
- G06F 9/5005: {to service a request}
- G06F 3/061: {Improving I/O performance}
- G06F 3/0659: {Command handling arrangements, e.g. command buffers, queues, command scheduling}
- G06F 9/50: Allocation of resources, e.g. of the central processing unit [CPU]
- G06F 2209/5018: Thread allocation
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Command list processing in performing parallel IO operations is disclosed. In one example, handling IO requests directed to an operating system having an IO scheduling component entails allocating a command to a thread in association with an IO request. The command is allocated from one of a plurality of command lists accessible in parallel, and the command is also linked to one of a plurality of active command lists that are accessible in parallel. The command lists can be arranged as per-CPU command lists, with each per-CPU command list corresponding to one of a plurality of CPUs on a multi-core processing platform on which the IO requests are processed. Similarly, each of the active command lists can respectively correspond to one of the plurality of CPUs on the multi-core processing platform. Per-volume queues can also be implemented for respective volumes presented to applications.

## Claims

### Claim 1

A method for handling IO requests directed to an operating system having an IO scheduling component, the method comprising:
allocating a command to a thread in association with one of the IO requests, the command being allocated from one of a plurality of command lists accessible in parallel;
linking the command to one of a plurality of active command lists that are accessible in parallel;
returning a success indication to the thread, unlinking the command from the one of the plurality of active command lists, and freeing the command to one of the plurality of command lists following a cache hit corresponding to the one of the IO requests,
wherein each of the active command lists respectively corresponds to one of a plurality of CPUs on a multi-core processing platform on which the IO requests are processed.

### Claim 2 (depends on 1)

The method of claim 1, wherein each of the active command lists includes a cell, a singly linked list, and a doubly linked list.

### Claim 3

A non-transitory computer readable medium storing program code for handling IO requests directed to an operating system having an IO scheduling component, the program code being executable by a processor to perform operations comprising:
allocating a command to a thread in association with one of the IO requests, the command being allocated from one of a plurality of command lists accessible in parallel;
linking the command to one of a plurality of active command lists that are accessible in parallel;
returning a success indication to the thread, unlinking the command from the one of the plurality of active command lists, and freeing the command to one of the plurality of command lists following a cache hit corresponding to the one of the IO requests,
wherein each of the active command lists respectively corresponds to one of a plurality of CPUs on a multi-core processing platform on which the IO requests are processed.

### Claim 4 (depends on 3)

The computer readable medium of claim 3, wherein each of the active command lists includes a cell, a singly linked list, and a doubly linked list.

### Claim 5

An apparatus for handling IO requests directed to an operating system having an IO scheduling component, the apparatus comprising:
a processor; and
a memory, the memory storing program code executable by the processor to perform operations comprising:
allocating a command to a thread in association with one of the IO requests, the command being allocated from one of a plurality of command lists accessible in parallel;
linking the command to one of a plurality of active command lists that are accessible in parallel;
returning a success indication to the thread, unlinking the command from the one of the plurality of active command lists, and freeing the command to one of the plurality of command lists following a cache hit corresponding to the one of the IO requests,
wherein each of the active command lists respectively corresponds to one of a plurality of CPUs on a multi-core processing platform on which the IO requests are processed.

### Claim 6 (depends on 5)

The apparatus of claim 5, wherein each of the active command lists includes a cell, a singly linked list, and a doubly linked list.
