logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

nvme-io-passthru - Submit an arbitrary io command, return results

Description

       Submits an arbitrary NVMe IO command and returns the applicable results. This may be the simply the
       command’s result and status, or may also include a buffer if the command returns one. This command does
       no interpretation of the opcodes or options.

       The <device> parameter is mandatory and may be either the NVMe character device (ex: /dev/nvme0), or a
       namespace block device (ex: /dev/nvme0n1).

       On success, the returned structure (if applicable) may be returned in one of several ways depending on
       the option flags; the structure may printed by the program as a hex dump, or may be returned as a raw
       buffer printed to stdout for another program to parse.

Examples

       nvme io-passthru /dev/nvme0n1 --opcode=2 --namespace-id=1 --data-len=4096 --read --cdw10=0 --cdw11=0
       --cdw12=0x70000 --raw-binary

Name

       nvme-io-passthru - Submit an arbitrary io command, return results

Nvme

       Part of the nvme-user suite

NVMe                                               02/16/2025                                NVME-IO-PASSTHRU(1)

Options

       -O <opcode>, --opcode=<opcode>
           The NVMe opcode to send to the device in the command

       -f <flags>, --flags=<flags>
           The NVMe command flags to send to the device in the command

       -R <rsvd>, --rsvd=<rsvd>
           The value for the reserved field in the command.

       -n <nsid>, --namespace-id=<nsid>
           The value for the ns-id in the command. Defaults to 0.

       -[2-9] <cdw>, --cdw[2-3,10-15]=<cdw>
           Specifies the command dword value for that specified entry in the command

       -r, --read, -w, --write
           Used for the data-direction for the command and required for commands sending/receiving data. Don’t
           use both read and write at the same time.

       -i <file>, --input-file=<file>
           If the command is a data-out (write) command, use this file to fill the buffer sent to the device. If
           no file is given, assumed to use STDIN. If the command is a data-in (read) command, the data returned
           from the device will be saved here.

       -M <file>, --metadata=<file>
           If the command is a data-out (write) command, use this file to fill the metadata buffer sent to the
           device. If no file is given, assumed to use STDIN. If the command is a data-in (read) command, the
           metadata returned from the device will be saved here.

       -l <data-len>, --data-len=<data-len>
           The data length for the buffer used for this command.

       -m <data-len>, --metadata-len=<data-len>
           The metadata length for the buffer used for this command.

       -s, --show-cmd
           Print out the command to be sent.

       -d, --dry-run
           Do not actually send the command. If want to use --dry-run option, --show-cmd option must be set.
           Otherwise --dry-run option will be ignored.

       -b, --raw-binary
           Print the raw returned buffer to stdout if the command returns data or a structure.

       -p <prefill>, --prefill <prefill>
           Prefill the buffer with a predetermined byte value. Defaults to 0. This may be useful if the data you
           are writing is shorter than the required buffer, and you need to pad it with a known value. It may
           also be useful if you need to confirm if a device is overwriting a buffer on a data-in command.

       -T, --latency
           Print out the latency the IOCTL took (in us).

       -o <fmt>, --output-format=<fmt>
           Set the reporting format to normal, json or binary. Only one output format can be used at a time.

       -v, --verbose
           Increase the information detail in the output.

       -t <timeout>, --timeout=<timeout>
           Override default timeout value. In milliseconds.

Synopsis

nvme-io-passthru <device> [--opcode=<opcode> | -O <opcode>]
                               [--flags=<flags> | -f <flags>] [-rsvd=<rsvd> | -R <rsvd>]
                               [--namespace-id=<nsid> | -n <nsid>] [--cdw2=<cdw2> | -2 <cdw2>]
                               [--cdw3=<cdw3> | -3 <cdw3>] [--cdw10=<cdw10> | -4 <cdw10>]
                               [--cdw11=<cdw11> | -5 <cdw11>] [--cdw12=<cdw12> | -6 <cdw12>]
                               [--cdw13=<cdw13> | -7 <cdw13>] [--cdw14=<cdw14> | -8 <cdw14>]
                               [--cdw15=<cdw15> | -9 <cdw15>]
                               [--data-len=<data-len> | -l <data-len>]
                               [--metadata-len=<len> | -m <len>]
                               [--read | -r] [--write | -w]
                               [--input-file=<file> | -i <file>]
                               [--metadata=<file> | -M <file>]
                               [--timeout=<timeout> | -t <timeout>] [--show-command | -s]
                               [--dry-run | -d] [--raw-binary | -b]
                               [--prefill=<prefill> | -p <prefill>]
                               [--latency | -T]
                               [--output-format=<fmt> | -o <fmt>] [--verbose | -v]

See Also