diff options
Diffstat (limited to 'src/spdk/scripts/rpc/vhost.py')
-rw-r--r-- | src/spdk/scripts/rpc/vhost.py | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/src/spdk/scripts/rpc/vhost.py b/src/spdk/scripts/rpc/vhost.py new file mode 100644 index 00000000..bc97455a --- /dev/null +++ b/src/spdk/scripts/rpc/vhost.py @@ -0,0 +1,248 @@ +def set_vhost_controller_coalescing(client, ctrlr, delay_base_us, iops_threshold): + """Set coalescing for vhost controller. + Args: + ctrlr: controller name + delay_base_us: base delay time + iops_threshold: IOPS threshold when coalescing is enabled + """ + params = { + 'ctrlr': ctrlr, + 'delay_base_us': delay_base_us, + 'iops_threshold': iops_threshold, + } + return client.call('set_vhost_controller_coalescing', params) + + +def construct_vhost_scsi_controller(client, ctrlr, cpumask=None): + """Construct a vhost scsi controller. + Args: + ctrlr: controller name + cpumask: cpu mask for this controller + """ + params = {'ctrlr': ctrlr} + + if cpumask: + params['cpumask'] = cpumask + + return client.call('construct_vhost_scsi_controller', params) + + +def add_vhost_scsi_lun(client, ctrlr, scsi_target_num, bdev_name): + """Add LUN to vhost scsi controller target. + Args: + ctrlr: controller name + scsi_target_num: target number to use + bdev_name: name of bdev to add to target + """ + params = { + 'ctrlr': ctrlr, + 'scsi_target_num': scsi_target_num, + 'bdev_name': bdev_name, + } + return client.call('add_vhost_scsi_lun', params) + + +def remove_vhost_scsi_target(client, ctrlr, scsi_target_num): + """Remove target from vhost scsi controller. + Args: + ctrlr: controller name to remove target from + scsi_target_num: number of target to remove from controller + """ + params = { + 'ctrlr': ctrlr, + 'scsi_target_num': scsi_target_num + } + return client.call('remove_vhost_scsi_target', params) + + +def construct_vhost_nvme_controller(client, ctrlr, io_queues, cpumask=None): + """Construct vhost NVMe controller. + Args: + ctrlr: controller name + io_queues: number of IO queues for the controller + cpumask: cpu mask for this controller + """ + params = { + 'ctrlr': ctrlr, + 'io_queues': io_queues + } + + if cpumask: + params['cpumask'] = cpumask + + return client.call('construct_vhost_nvme_controller', params) + + +def add_vhost_nvme_ns(client, ctrlr, bdev_name): + """Add namespace to vhost nvme controller. + Args: + ctrlr: controller name where to add a namespace + bdev_name: block device name for a new namespace + """ + params = { + 'ctrlr': ctrlr, + 'bdev_name': bdev_name, + } + + return client.call('add_vhost_nvme_ns', params) + + +def construct_vhost_blk_controller(client, ctrlr, dev_name, cpumask=None, readonly=None): + """Construct vhost BLK controller. + Args: + ctrlr: controller name + dev_name: device name to add to controller + cpumask: cpu mask for this controller + readonly: set controller as read-only + """ + params = { + 'ctrlr': ctrlr, + 'dev_name': dev_name, + } + if cpumask: + params['cpumask'] = cpumask + if readonly: + params['readonly'] = readonly + return client.call('construct_vhost_blk_controller', params) + + +def get_vhost_controllers(client, name=None): + """Get information about configured vhost controllers. + + Args: + name: controller name to query (optional; if omitted, query all controllers) + + Returns: + List of vhost controllers. + """ + params = {} + if name: + params['name'] = name + return client.call('get_vhost_controllers', params) + + +def remove_vhost_controller(client, ctrlr): + """Remove vhost controller from configuration. + Args: + ctrlr: controller name to remove + """ + params = {'ctrlr': ctrlr} + return client.call('remove_vhost_controller', params) + + +def construct_virtio_dev(client, name, trtype, traddr, dev_type, vq_count=None, vq_size=None): + """Construct new virtio device using provided + transport type and device type. + Args: + name: name base for new created bdevs + trtype: virtio target transport type: pci or user + traddr: transport type specific target address: e.g. UNIX + domain socket path or BDF + dev_type: device type: blk or scsi + vq_count: number of virtual queues to be used + vq_size: size of each queue + """ + params = { + 'name': name, + 'trtype': trtype, + 'traddr': traddr, + 'dev_type': dev_type + } + if vq_count: + params['vq_count'] = vq_count + if vq_size: + params['vq_size'] = vq_size + return client.call('construct_virtio_dev', params) + + +def construct_virtio_user_scsi_bdev(client, path, name, vq_count=None, vq_size=None): + """Connect to virtio user scsi device. + Args: + path: path to Virtio SCSI socket + name: use this name as base instead of 'VirtioScsiN' + vq_count: number of virtual queues to be used + vq_size: size of each queue + """ + params = { + 'path': path, + 'name': name, + } + if vq_count: + params['vq_count'] = vq_count + if vq_size: + params['vq_size'] = vq_size + return client.call('construct_virtio_user_scsi_bdev', params) + + +def construct_virtio_pci_scsi_bdev(client, pci_address, name): + """Create a Virtio SCSI device from a virtio-pci device. + Args: + pci_address: PCI address in domain:bus:device.function format or + domain.bus.device.function format + name: Name for the virtio device. It will be inhereted by all created + bdevs, which are named n the following format: + <name>t<target_id> + """ + params = { + 'pci_address': pci_address, + 'name': name, + } + return client.call('construct_virtio_pci_scsi_bdev', params) + + +def remove_virtio_scsi_bdev(client, name): + """Remove a Virtio-SCSI device + This will delete all bdevs exposed by this device. + Args: + name: virtio device name + """ + params = {'name': name} + return client.call('remove_virtio_scsi_bdev', params) + + +def remove_virtio_bdev(client, name): + """Remove a Virtio device + This will delete all bdevs exposed by this device. + Args: + name: virtio device name + """ + params = {'name': name} + return client.call('remove_virtio_bdev', params) + + +def get_virtio_scsi_devs(client): + """Get list of virtio scsi devices.""" + return client.call('get_virtio_scsi_devs') + + +def construct_virtio_user_blk_bdev(client, path, name, vq_count=None, vq_size=None): + """Connect to virtio user BLK device. + Args: + path: path to Virtio BLK socket + name: use this name as base instead of 'VirtioScsiN' + vq_count: number of virtual queues to be used + vq_size: size of each queue + """ + params = { + 'path': path, + 'name': name, + } + if vq_count: + params['vq_count'] = vq_count + if vq_size: + params['vq_size'] = vq_size + return client.call('construct_virtio_user_blk_bdev', params) + + +def construct_virtio_pci_blk_bdev(client, pci_address, name): + """Create a Virtio Blk device from a virtio-pci device. + Args: + pci_address: PCI address in domain:bus:device.function format or + domain.bus.device.function format + name: name for the blk device + """ + params = { + 'pci_address': pci_address, + 'name': name, + } + return client.call('construct_virtio_pci_blk_bdev', params) |