# US 2018/0024778 A1 · SYSTEM AND METHOD OF ORCHESTRATING EXECUTION OF COMMANDS IN A NON-VOLATILE MEMORY EXPRESS (NVMe) DEVICE

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

- Number: US 2018/0024778 A1
- Document ID: US20180024778A1
- Status: Published application
- Kind: A1
- Application number: 15/647,662
- Filed: 2017-07-12
- Published: 2018-01-25
- Earliest claimed: 2016-07-22
- Assignees: Samsung Electronics Co., Ltd.
- Applicants: Samsung Electronics Co., Ltd.
- Inventors: VIKRAM SINGH; ANSHUL JINDAL; SAURABH PRADEEP BONDARDE; AISHWARYA RAVICHANDRAN
- Web page: https://patentgrep.com/patent/US20180024778A1

## CPC

- G06F 3/0659: {Command handling arrangements, e.g. command buffers, queues, command scheduling}
- G06F 3/0604: {Improving or facilitating administration, e.g. storage management}
- G06F 3/061: {Improving I/O performance}
- G06F 3/0634: {by changing the state or mode of one or more devices}
- G06F 3/0679: {Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]}
- G06F 3/0688: {Non-volatile semiconductor memory arrays}
- G06F 13/00: Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units (interface circuits for specific input/output devices G06F3/00 {; multiprogram control therefor G06F9/46}; multiprocessor systems G06F15/16 )
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

A method of orchestrating the execution of commands in a non-volatile memory express (NVMe) device includes receiving one or more commands, to be executed, from one or more host devices in one or more submission queues. One or more configuration commands are identified, from the one or more received commands, that will alter the attributes/characteristics of the NVMe device. One or more commands operating with the same attributes as the identified one or more configuration commands are also identified. And selective fencing of the identified one or more commands is initiated to orchestrate execution of commands in the NVMe device.

## Claims

### Claim 1

A method of orchestrating execution of commands in a nonvolatile memory express (NVMe) device, the method executed by the NVMe device and comprising:
receiving, in a submission queue and from a host device, a plurality of commands to be executed;
identifying, from the received commands, a configuration command that changes a state or an attribute of the NVMe device, where the attribute of the NVMe device comprises at least one of Logical Block Address (LBA) size, protection information, aborting a previously sent command; and
executing, in response to identifying the configuration command, selective command fencing that orchestrates the execution of the commands in the NVMe device.

### Claim 2 (depends on 1)

The method of claim 1, wherein for each of a plurality of first commands, the selective command fencing comprises:
determining whether the first command is to be executed before or after execution of the configuration command;
executing the first command before the execution of the configuration command in response to determining that the first command is to be executed before the execution of the configuration command;
executing the configuration command; and
executing the first command after the execution of the configuration command in response to determining that the first command is to be executed after the execution of the configuration command.

### Claim 3 (depends on 2)

The method of claim 2, wherein the determination as to whether the first command is to be executed before or after the execution of the configuration command is based upon whether first command operates with an attribute that the configuration command will alter.

### Claim 4 (depends on 2)

The method of claim 2, wherein each of the first commands exists in a controller execution pipeline before the configuration command is received in the controller execution pipeline.

### Claim 5 (depends on 2)

The method of claim 2, wherein each of the first commands is not within a controller execution pipeline at the time the configuration command is received within the controller execution pipeline.

### Claim 6 (depends on 1)

The method of claim 1, further comprising for each of the received commands:
identifying an attribute upon which the received command is based;
determining a state of the identified attribute;
deferring entry of the command into a controller execution pipeline until the attribute is changed to an idle state;
determining whether the command is the configuration command;
incrementing a counter value of the attribute in response to determining both that the state of the attribute is the idle state and that the command is not the configuration command;
allowing entry of the command into the controller execution pipeline for execution;
decrementing the counter value of the attribute after executing the command; and
posting a response of the executed command in an NVMe host completion queue.

### Claim 7 (depends on 6)

The method of claim 6, further comprising:
updating a universal status of the attribute to be configured in response to determining the command is the configuration command;
deferring execution of the configuration command until the controller execution pipeline has no pending commands dependent on the attribute;
executing, in response to determining that the controller execution pipeline has no pending commands dependent on the attribute, the configuration command to alter the attribute;
updating, after execution of the configuration command, the universal status of the attribute to the idle state; and
posting a response of the executed configuration command in the NVMe host completion queue.

### Claim 8 (depends on 1)

The method of claim 1, wherein the configuration command comprises:
an Abort command;
a Reservation Acquire (Preempt) command;
a Reservation Acquire (Preempt and Abort) command;
a Namespace Attachment (Detach) command;
a Namespace Management (Delete) command;
a Namespace Sanitize command;
a Delete Input/output (I/O) Submission queue command; or
a Delete Input/output (I/O) Completion queue command.

### Claim 9

A system for orchestrating execution of commands in a nonvolatile memory express (NVMe) device, the system comprising:
a host device; and
the nonvolatile memory express (NVMe) device connected to the host device, wherein the nonvolatile memory express (NVMe) device:
receives, in a submission queue and from the host device, a plurality of commands to be executed,
identifies, among the received commands, a configuration command for changing a state or an attribute of the NVMe device, and
initiates, in response to identifying the configuration command, selective command fencing that orchestrates the execution of the commands in the NVMe device.

### Claim 10

A method executed by a nonvolatile memory express (NVMe) device, the method comprising:
receiving, from one or more external hosts, a plurality of commands to be executed by a multi-core processor of the NVMe device in parallel;
identifying, among the commands, a first set of commands that are all directed toward the same attribute of the NVMe device;
identifying a first command, among the first set of commands, whose execution affects an execution outcome of another command within the first set;
submitting the first command to a parallel-processing execution pipeline for execution by the NVMe device in response to determining that a state of the attribute is idle; and
deferring, until after the first command is executed, execution of each command within the first set whose execution is affected by the execution of the first command.

### Claim 11 (depends on 10)

The method of claim 10, further comprising:
executing all commands that are directed toward the attribute and were submitted into the execution pipeline before the first command, and
executing the first command in response to completing the execution of all the commands that are directed toward the attribute and were submitted into the execution pipeline before the first command.

### Claim 12 (depends on 11)

The method of claim 11, further comprising altering the attribute through the execution of the first command.

### Claim 13 (depends on 11)

The method of claim 11, further comprising submitting all commands within the first set whose execution was deferred in response to completing the execution of the first command.

### Claim 14 (depends on 10)

The method of claim 10, wherein the first command is one whose execution: (1) deletes a submission queue of the NVMe device, (2) grants an access permission of a namespace through a reservation, (3) grants access control of a namespace of the NVMe device through namespace management or a namespace attachment, or (4) reformats the namespace with a different namespace attribute.

### Claim 15 (depends on 14)

The method of claim 14, wherein the namespace attribute is a logical block address size, protection information, or an indication to abort a previously received command.

### Claim 16 (depends on 10)

The method of claim 10, further comprising changing the state of the attribute to a state other than the idle state in response to submitting the first command to the execution pipeline.

### Claim 17 (depends on 16)

The method of claim of claim 16, further comprising changing the state of the attribute to the idle state in response to executing the first command.

### Claim 18 (depends on 17)

The method of claim 17, further comprising submitting all commands within the first set whose execution was deferred in response to completing the execution of the first command and changing the state of the attribute to the idle state.

### Claim 19 (depends on 18)

The method of claim of claim 18, further comprising incrementing a command counter for each deferred command submitted to the execution pipeline.

### Claim 20 (depends on 19)

The method of claim 19, decrementing the command counter for each deferred command submitted to the execution pipeline that is subsequently executed.
