# NVMf Target Configuration File
#
# Please write all parameters using ASCII.
# The parameter must be quoted if it includes whitespace.
#
# Configuration syntax:
# Leading whitespace is ignored.
# Lines starting with '#' are comments.
# Lines ending with '\' are concatenated with the next line.
# Bracketed ([]) names define sections

[Global]
  # Users can restrict work items to only run on certain cores by
  #  specifying a ReactorMask.  Default ReactorMask mask is defined as
  #  -c option in the 'ealargs' setting at beginning of file nvmf_tgt.c.
  #ReactorMask 0x00FF

  # Tracepoint group mask for spdk trace buffers
  # Default: 0x0 (all tracepoint groups disabled)
  # Set to 0xFFFFFFFFFFFFFFFF to enable all tracepoint groups.
  #TpointGroupMask 0x0

  # PciBlacklist and PciWhitelist cannot be used at the same time
  #PciBlacklist 0000:01:00.0
  #PciBlacklist 0000:02:00.0
  #PciWhitelist 0000:03:00.0
  #PciWhitelist 0000:04:00.0

# Users may activate entries in this section to override default values for
# global parameters in the block device (bdev) subsystem.
[Bdev]
  # Number of spdk_bdev_io structures allocated in the global bdev subsystem pool.
  #BdevIoPoolSize 65536

  # Maximum number of spdk_bdev_io structures to cache per thread.
  #BdevIoCacheSize 256

# Users may change this section to create a different number or size of
#  malloc LUNs.
# This will generate 8 LUNs with a malloc-allocated backend.
# Each LUN will be size 64MB and these will be named
# Malloc0 through Malloc7.  Not all LUNs defined here are necessarily
#  used below.
[Malloc]
  NumberOfLuns 8
  LunSizeInMB 64

# Users must change this section to match the /dev/sdX devices to be
# exported as iSCSI LUNs. The devices are accessed using Linux AIO.
# The format is:
# AIO <file name> <bdev name>
# The file name is the backing device
# The bdev name can be referenced from elsewhere in the configuration file.
# Block size may be omitted to automatically detect the block size of a disk.
[AIO]
  AIO /dev/sdb AIO0
  AIO /dev/sdc AIO1
  AIO /tmp/myfile AIO2 4096

# PMDK libpmemblk-based block device
[Pmem]
  # Syntax:
  #   Blk <pmemblk pool file name> <bdev name>
  Blk /path/to/pmem-pool Pmem0

# Define NVMf protocol global options
[Nvmf]
  # Set the maximum number of submission and completion queues per session.
  # Setting this to '8', for example, allows for 8 submission and 8 completion queues
  # per session.
  MaxQueuesPerSession 4

  # Set the maximum number of outstanding I/O per queue.
  #MaxQueueDepth 128

  # Set the maximum in-capsule data size. Must be a multiple of 16.
  # 0 is a valid choice.
  #InCapsuleDataSize 4096

  # Set the maximum I/O size. Must be a multiple of 4096.
  #MaxIOSize 131072

  # Set how often the acceptor polls for incoming connections. The acceptor is also
  # responsible for polling existing connections that have gone idle. 0 means continuously
  # poll. Units in microseconds.
  AcceptorPollRate 10000

[Nvme]
  # NVMe Device Whitelist
  # Users may specify which NVMe devices to claim by their transport id.
  # See spdk_nvme_transport_id_parse() in spdk/nvme.h for the correct format.
  # The second argument is the assigned name, which can be referenced from
  # other sections in the configuration file. For NVMe devices, a namespace
  # is automatically appended to each name in the format <YourName>nY, where
  # Y is the NSID (starts at 1).
  TransportId "trtype:PCIe traddr:0000:00:00.0" Nvme0
  TransportId "trtype:PCIe traddr:0000:01:00.0" Nvme1

  # The number of attempts per I/O when an I/O fails. Do not include
  # this key to get the default behavior.
  RetryCount 4
  # Timeout for each command, in microseconds. If 0, don't track timeouts.
  TimeoutUsec 0
  # Action to take on command time out. Only valid when Timeout is greater
  # than 0. This may be 'Reset' to reset the controller, 'Abort' to abort
  # the command, or 'None' to just print a message but do nothing.
  # Admin command timeouts will always result in a reset.
  ActionOnTimeout None
  # Set how often the admin queue is polled for asynchronous events.
  # Units in microseconds.
  AdminPollRate 100000

  # Disable handling of hotplug (runtime insert and remove) events,
  # users can set to Yes if want to enable it.
  # Default: No
  HotplugEnable No

# The Split virtual block device slices block devices into multiple smaller bdevs.
[Split]
  # Syntax:
  #   Split <bdev> <count> [<size_in_megabytes>]

  # Split Malloc2 into two equally-sized portions, Malloc2p0 and Malloc2p1
  Split Malloc2 2

  # Split Malloc3 into eight 1-megabyte portions, Malloc3p0 ... Malloc3p7,
  # leaving the rest of the device inaccessible
  Split Malloc3 8 1

# Define an NVMf Subsystem.
# - NQN is required and must be unique.
# - Between 1 and 255 Listen directives are allowed. This defines
#   the addresses on which new connections may be accepted. The format
#   is Listen <type> <address> where type currently can only be RDMA.
# - Between 0 and 255 Host directives are allowed. This defines the
#   NQNs of allowed hosts. If no Host directive is specified, all hosts
#   are allowed to connect.
# - Between 0 and 255 Namespace directives are allowed. These define the
#   namespaces accessible from this subsystem.
#   The user must specify MaxNamespaces to allow for adding namespaces
#   during active connection. By default it is 0
#   The user must specify a bdev name for each namespace, and may optionally
#   specify a namespace ID. If nsid is omitted, the namespace will be
#   assigned the next available NSID. The NSID must be unique within the
#   subsystem. An optional namespace UUID may also be specified.
#   Syntax:
#     Namespace <bdev_name> [<nsid> [<uuid>]]

# Namespaces backed by physical NVMe devices
[Subsystem1]
  NQN nqn.2016-06.io.spdk:cnode1
  Listen RDMA 15.15.15.2:4420
  AllowAnyHost No
  Host nqn.2016-06.io.spdk:init
  SN SPDK00000000000001
  MaxNamespaces 20
  Namespace Nvme0n1 1
  Namespace Nvme1n1 2

# Multiple subsystems are allowed.
# Namespaces backed by non-NVMe devices
[Subsystem2]
  NQN nqn.2016-06.io.spdk:cnode2
  Listen RDMA 192.168.2.21:4420
  AllowAnyHost No
  Host nqn.2016-06.io.spdk:init
  SN SPDK00000000000002
  Namespace Malloc0
  Namespace Malloc1
  Namespace AIO0
  Namespace AIO1
