# SPDK vhost 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]
  # Instance ID for multi-process support
  # Default: 0
  #InstanceID 0

  # Disable PCI access. PCI is enabled by default. Setting this
  # option will hide any PCI device from all SPDK modules, making
  # SPDK act as if they don't exist.
  #NoPci Yes

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

# 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 not want to use offload even it is available.
# Users can use offload by specifying "Enable Yes" in this section
# if it is available.
# Users may use the whitelist to initialize specified devices, IDS
#  uses BUS:DEVICE.FUNCTION to identify each Ioat channel.
[Ioat]
  Enable No
  #Whitelist 00:04.0
  #Whitelist 00:04.1

# Users must change this section to match the /dev/sdX devices to be
#  exported as vhost scsi drives. The devices are accessed using Linux AIO.
[AIO]
  #AIO /dev/sdb AIO0
  #AIO /dev/sdc AIO1

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

# Users may change this section to create a different number or size of
#  malloc LUNs.
# If the system has hardware DMA engine, it can use an IOAT
# (i.e. Crystal Beach DMA) channel to do the copy instead of memcpy
# by specifying "Enable Yes" in [Ioat] section.
# Offload is disabled by default even it is available.
[Malloc]
  # Number of Malloc targets
  NumberOfLuns 3
  # Malloc targets are 128M
  LunSizeInMB 128
  # Block size. Default is 512 bytes.
  BlockSize 4096

# NVMe configuration options
[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
  # Set how often I/O queues are polled from completions.
  # Units in microseconds.
  IOPollRate 0

# The Split virtual block device slices block devices into multiple smaller bdevs.
[Split]
  # Syntax:
  #   Split <bdev> <count> [<size_in_megabytes>]
  #
  # Split Nvme1n1 into two equally-sized portions, Nvme1n1p0 and Nvme1n1p1
  #Split Nvme1n1 2

  # Split Malloc2 into eight 1-megabyte portions, Malloc2p0 ... Malloc2p7,
  # leaving the rest of the device inaccessible
  #Split Malloc2 8 1

# The RAID virtual block device based on pre-configured block device.
[RAID1]
  # Unique name of this RAID device.
  Name Raid0
  # RAID level, only raid level 0 is supported.
  RaidLevel 0
  # Strip size in KB.
  StripSize 64
  # Number of pre-configured bdevs.
  NumDevices 2
  # Pre-configured bdevs name with Nvme.
  #Devices Nvme0n1 Nvme1n1
  # Pre-configured bdevs name with Malloc.
  Devices Malloc1 Malloc2
  # Pre-configured bdevs name with AIO.
  #Devices AIO0 AIO1

# Vhost scsi controller configuration
# Users should change the VhostScsi section(s) below to match the desired
# vhost configuration.
# Name is minimum required
[VhostScsi0]
  # Define name for controller
  Name vhost.0
  # Assign devices from backend
  # Use the first malloc device
  Target 0 Malloc0
  # Use the first AIO device
  #Target 1 AIO0
  # Use the frist Nvme device
  #Target 2 Nvme0n1
  # Use the third partition from second Nvme device
  #Target 3 Nvme1n1p2

  # Start the poller for this vhost controller on one of the cores in
  #  this cpumask.  By default, it not specified, will use any core in the
  #  SPDK process.
  #Cpumask 0x1

#[VhostScsi1]
#  Name vhost.1
#  Target 0 AIO1
#  Cpumask 0x1

#[VhostBlk0]
  # Define name for controller
  #Name vhost.2
  # Use first partition from the second Malloc device
  #Dev Malloc2p0
  # Put controller in read-only mode
  #ReadOnly no
  # Start the poller for this vhost controller on one of the cores in
  #  this cpumask.  By default, it not specified, will use any core in the
  #  SPDK process.
  #Cpumask 0x1

#[VhostBlk1]
  # Define name for controller
  #Name vhost.2
  # Use device which named Raid0
  #Dev Raid0

#[VhostNvme0]
  # Define name for controller
  #Name vhost.0
  #NumberOfQueues 2
  # Use first partition from the first NVMe device
  #Namespace Nvme0n1p0
  # Use first partition from the first NVMe device
  #Namespace Nvme0n1p1

  # Start the poller for this vhost controller on one of the cores in
  #  this cpumask.  By default, it not specified, will use any core in the
  #  SPDK process.
  #Cpumask 0x1
