2018-06-13 10:55:38 +00:00
|
|
|
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
|
|
|
|
"""
|
2017-06-06 21:22:03 +00:00
|
|
|
params = {
|
2018-06-13 10:55:38 +00:00
|
|
|
'ctrlr': ctrlr,
|
|
|
|
'delay_base_us': delay_base_us,
|
|
|
|
'iops_threshold': iops_threshold,
|
2017-06-06 21:22:03 +00:00
|
|
|
}
|
2018-03-27 21:31:52 +00:00
|
|
|
return client.call('set_vhost_controller_coalescing', params)
|
2017-06-06 21:22:03 +00:00
|
|
|
|
2018-02-14 21:34:55 +00:00
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
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}
|
2017-06-06 21:22:03 +00:00
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
if cpumask:
|
|
|
|
params['cpumask'] = cpumask
|
2017-06-06 21:22:03 +00:00
|
|
|
|
2018-03-27 21:31:52 +00:00
|
|
|
return client.call('construct_vhost_scsi_controller', params)
|
2017-06-06 21:22:03 +00:00
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
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
|
|
|
|
"""
|
2017-06-06 21:22:03 +00:00
|
|
|
params = {
|
2018-06-13 10:55:38 +00:00
|
|
|
'ctrlr': ctrlr,
|
|
|
|
'scsi_target_num': scsi_target_num,
|
|
|
|
'bdev_name': bdev_name,
|
2017-06-06 21:22:03 +00:00
|
|
|
}
|
2018-03-27 21:31:52 +00:00
|
|
|
return client.call('add_vhost_scsi_lun', params)
|
2017-06-06 21:22:03 +00:00
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
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
|
|
|
|
"""
|
2017-06-06 21:22:03 +00:00
|
|
|
params = {
|
2018-06-13 10:55:38 +00:00
|
|
|
'ctrlr': ctrlr,
|
|
|
|
'scsi_target_num': scsi_target_num
|
2017-06-06 21:22:03 +00:00
|
|
|
}
|
2018-03-27 21:31:52 +00:00
|
|
|
return client.call('remove_vhost_scsi_target', params)
|
2017-06-06 21:22:03 +00:00
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
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
|
|
|
|
"""
|
2018-01-12 04:06:49 +00:00
|
|
|
params = {
|
2018-06-13 10:55:38 +00:00
|
|
|
'ctrlr': ctrlr,
|
|
|
|
'io_queues': io_queues
|
2018-01-12 04:06:49 +00:00
|
|
|
}
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
if cpumask:
|
|
|
|
params['cpumask'] = cpumask
|
2018-01-12 04:06:49 +00:00
|
|
|
|
|
|
|
return client.call('construct_vhost_nvme_controller', params)
|
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
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
|
|
|
|
"""
|
2018-01-12 04:06:49 +00:00
|
|
|
params = {
|
2018-06-13 10:55:38 +00:00
|
|
|
'ctrlr': ctrlr,
|
|
|
|
'bdev_name': bdev_name,
|
2018-01-12 04:06:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return client.call('add_vhost_nvme_ns', params)
|
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
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
|
|
|
|
"""
|
2017-06-06 21:22:03 +00:00
|
|
|
params = {
|
2018-06-13 10:55:38 +00:00
|
|
|
'ctrlr': ctrlr,
|
|
|
|
'dev_name': dev_name,
|
2017-06-06 21:22:03 +00:00
|
|
|
}
|
2018-06-13 10:55:38 +00:00
|
|
|
if cpumask:
|
|
|
|
params['cpumask'] = cpumask
|
|
|
|
if readonly:
|
|
|
|
params['readonly'] = readonly
|
2018-03-27 21:31:52 +00:00
|
|
|
return client.call('construct_vhost_blk_controller', params)
|
2017-06-06 21:22:03 +00:00
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
def get_vhost_controllers(client):
|
|
|
|
"""Get list of configured vhost controllers.
|
|
|
|
Returns:
|
|
|
|
List of vhost controllers.
|
|
|
|
"""
|
2018-03-27 21:31:52 +00:00
|
|
|
return client.call('get_vhost_controllers')
|
2017-06-06 21:22:03 +00:00
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
def remove_vhost_controller(client, ctrlr):
|
|
|
|
"""Remove vhost controller from configuration.
|
|
|
|
Args:
|
|
|
|
ctrlr: controller name to remove
|
|
|
|
"""
|
|
|
|
params = {'ctrlr': ctrlr}
|
2018-03-27 21:31:52 +00:00
|
|
|
return client.call('remove_vhost_controller', params)
|
2017-06-06 21:22:03 +00:00
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
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
|
|
|
|
"""
|
2018-03-27 13:45:10 +00:00
|
|
|
params = {
|
2018-06-13 10:55:38 +00:00
|
|
|
'name': name,
|
|
|
|
'trtype': trtype,
|
|
|
|
'traddr': traddr,
|
|
|
|
'dev_type': dev_type
|
2018-03-27 13:45:10 +00:00
|
|
|
}
|
2018-06-13 10:55:38 +00:00
|
|
|
if vq_count:
|
|
|
|
params['vq_count'] = vq_count
|
|
|
|
if vq_size:
|
|
|
|
params['vq_size'] = vq_size
|
2018-03-27 13:45:10 +00:00
|
|
|
return client.call('construct_virtio_dev', params)
|
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
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
|
|
|
|
"""
|
2017-06-06 21:22:03 +00:00
|
|
|
params = {
|
2018-06-13 10:55:38 +00:00
|
|
|
'path': path,
|
|
|
|
'name': name,
|
2017-06-06 21:22:03 +00:00
|
|
|
}
|
2018-06-13 10:55:38 +00:00
|
|
|
if vq_count:
|
|
|
|
params['vq_count'] = vq_count
|
|
|
|
if vq_size:
|
|
|
|
params['vq_size'] = vq_size
|
2018-03-27 21:31:52 +00:00
|
|
|
return client.call('construct_virtio_user_scsi_bdev', params)
|
2017-06-06 21:22:03 +00:00
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
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>
|
|
|
|
"""
|
2017-06-06 21:22:03 +00:00
|
|
|
params = {
|
2018-06-13 10:55:38 +00:00
|
|
|
'pci_address': pci_address,
|
|
|
|
'name': name,
|
2017-06-06 21:22:03 +00:00
|
|
|
}
|
2018-03-27 21:31:52 +00:00
|
|
|
return client.call('construct_virtio_pci_scsi_bdev', params)
|
2017-06-06 21:22:03 +00:00
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
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}
|
2018-03-27 21:31:52 +00:00
|
|
|
return client.call('remove_virtio_scsi_bdev', params)
|
2017-12-27 15:22:48 +00:00
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
def get_virtio_scsi_devs(client):
|
|
|
|
"""Get list of virtio scsi devices."""
|
2018-03-27 21:31:52 +00:00
|
|
|
return client.call('get_virtio_scsi_devs')
|
2018-03-25 18:17:11 +00:00
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
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
|
|
|
|
"""
|
2017-12-27 15:22:48 +00:00
|
|
|
params = {
|
2018-06-13 10:55:38 +00:00
|
|
|
'path': path,
|
|
|
|
'name': name,
|
2017-12-27 15:22:48 +00:00
|
|
|
}
|
2018-06-13 10:55:38 +00:00
|
|
|
if vq_count:
|
|
|
|
params['vq_count'] = vq_count
|
|
|
|
if vq_size:
|
|
|
|
params['vq_size'] = vq_size
|
2018-03-27 21:31:52 +00:00
|
|
|
return client.call('construct_virtio_user_blk_bdev', params)
|
2017-12-27 15:22:48 +00:00
|
|
|
|
|
|
|
|
2018-06-13 10:55:38 +00:00
|
|
|
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
|
|
|
|
"""
|
2017-12-27 15:22:48 +00:00
|
|
|
params = {
|
2018-06-13 10:55:38 +00:00
|
|
|
'pci_address': pci_address,
|
|
|
|
'name': name,
|
2017-12-27 15:22:48 +00:00
|
|
|
}
|
2018-03-27 21:31:52 +00:00
|
|
|
return client.call('construct_virtio_pci_blk_bdev', params)
|