1from .helpers import deprecated_alias 2 3 4def bdev_set_options(client, bdev_io_pool_size=None, bdev_io_cache_size=None, bdev_auto_examine=None, 5 small_buf_pool_size=None, large_buf_pool_size=None): 6 """Set parameters for the bdev subsystem. 7 8 Args: 9 bdev_io_pool_size: number of bdev_io structures in shared buffer pool (optional) 10 bdev_io_cache_size: maximum number of bdev_io structures cached per thread (optional) 11 bdev_auto_examine: if set to false, the bdev layer will not examine every disks automatically (optional) 12 small_buf_pool_size: maximum number of small buffer (8KB buffer) pool size (optional) 13 large_buf_pool_size: maximum number of large buffer (64KB buffer) pool size (optional) 14 """ 15 params = {} 16 17 if bdev_io_pool_size: 18 params['bdev_io_pool_size'] = bdev_io_pool_size 19 if bdev_io_cache_size: 20 params['bdev_io_cache_size'] = bdev_io_cache_size 21 if bdev_auto_examine is not None: 22 params["bdev_auto_examine"] = bdev_auto_examine 23 if small_buf_pool_size: 24 params['small_buf_pool_size'] = small_buf_pool_size 25 if large_buf_pool_size: 26 params['large_buf_pool_size'] = large_buf_pool_size 27 return client.call('bdev_set_options', params) 28 29 30def bdev_examine(client, name): 31 """Examine a bdev manually. If the bdev does not exist yet when this RPC is called, 32 it will be examined when it is created 33 34 Args: 35 name: name of the bdev 36 """ 37 params = { 38 'name': name 39 } 40 return client.call('bdev_examine', params) 41 42 43def bdev_wait_for_examine(client): 44 """Report when all bdevs have been examined 45 """ 46 return client.call('bdev_wait_for_examine') 47 48 49@deprecated_alias('construct_compress_bdev') 50def bdev_compress_create(client, base_bdev_name, pm_path, lb_size): 51 """Construct a compress virtual block device. 52 53 Args: 54 base_bdev_name: name of the underlying base bdev 55 pm_path: path to persistent memory 56 lb_size: logical block size for the compressed vol in bytes. Must be 4K or 512. 57 58 Returns: 59 Name of created virtual block device. 60 """ 61 params = {'base_bdev_name': base_bdev_name, 'pm_path': pm_path, 'lb_size': lb_size} 62 63 return client.call('bdev_compress_create', params) 64 65 66@deprecated_alias('delete_compress_bdev') 67def bdev_compress_delete(client, name): 68 """Delete compress virtual block device. 69 70 Args: 71 name: name of compress vbdev to delete 72 """ 73 params = {'name': name} 74 return client.call('bdev_compress_delete', params) 75 76 77@deprecated_alias('set_compress_pmd') 78@deprecated_alias('compress_set_pmd') 79def bdev_compress_set_pmd(client, pmd): 80 """Set pmd options for the bdev compress. 81 82 Args: 83 pmd: 0 = auto-select, 1 = QAT, 2 = ISAL, 3 = mlx5_pci 84 """ 85 params = {'pmd': pmd} 86 87 return client.call('bdev_compress_set_pmd', params) 88 89 90def bdev_compress_get_orphans(client, name=None): 91 """Get a list of comp bdevs that do not have a pmem file (aka orphaned). 92 93 Args: 94 name: comp bdev name to query (optional; if omitted, query all comp bdevs) 95 96 Returns: 97 List of comp bdev names. 98 """ 99 params = {} 100 if name: 101 params['name'] = name 102 return client.call('bdev_compress_get_orphans', params) 103 104 105@deprecated_alias('construct_crypto_bdev') 106def bdev_crypto_create(client, base_bdev_name, name, crypto_pmd, key, cipher=None, key2=None): 107 """Construct a crypto virtual block device. 108 109 Args: 110 base_bdev_name: name of the underlying base bdev 111 name: name for the crypto vbdev 112 crypto_pmd: name of of the DPDK crypto driver to use 113 key: key 114 115 Returns: 116 Name of created virtual block device. 117 """ 118 params = {'base_bdev_name': base_bdev_name, 'name': name, 'crypto_pmd': crypto_pmd, 'key': key} 119 if cipher: 120 params['cipher'] = cipher 121 if key2: 122 params['key2'] = key2 123 return client.call('bdev_crypto_create', params) 124 125 126@deprecated_alias('delete_crypto_bdev') 127def bdev_crypto_delete(client, name): 128 """Delete crypto virtual block device. 129 130 Args: 131 name: name of crypto vbdev to delete 132 """ 133 params = {'name': name} 134 return client.call('bdev_crypto_delete', params) 135 136 137@deprecated_alias('construct_ocf_bdev') 138def bdev_ocf_create(client, name, mode, cache_line_size, cache_bdev_name, core_bdev_name): 139 """Add an OCF block device 140 141 Args: 142 name: name of constructed OCF bdev 143 mode: OCF cache mode: {'wb', 'wt', 'pt', 'wa', 'wi', 'wo'} 144 cache_line_size: OCF cache line size. The unit is KiB: {4, 8, 16, 32, 64} 145 cache_bdev_name: name of underlying cache bdev 146 core_bdev_name: name of underlying core bdev 147 148 Returns: 149 Name of created block device 150 """ 151 params = { 152 'name': name, 153 'mode': mode, 154 'cache_line_size': cache_line_size, 155 'cache_bdev_name': cache_bdev_name, 156 'core_bdev_name': core_bdev_name, 157 } 158 159 return client.call('bdev_ocf_create', params) 160 161 162@deprecated_alias('delete_ocf_bdev') 163def bdev_ocf_delete(client, name): 164 """Delete an OCF device 165 166 Args: 167 name: name of OCF bdev 168 169 """ 170 params = {'name': name} 171 172 return client.call('bdev_ocf_delete', params) 173 174 175@deprecated_alias('get_ocf_stats') 176def bdev_ocf_get_stats(client, name): 177 """Get statistics of chosen OCF block device 178 179 Args: 180 name: name of OCF bdev 181 182 Returns: 183 Statistics as json object 184 """ 185 params = {'name': name} 186 187 return client.call('bdev_ocf_get_stats', params) 188 189 190@deprecated_alias('get_ocf_stats') 191def bdev_ocf_get_bdevs(client, name=None): 192 """Get list of OCF devices including unregistered ones 193 194 Args: 195 name: name of OCF vbdev or name of cache device or name of core device (optional) 196 197 Returns: 198 Array of OCF devices with their current status 199 """ 200 params = None 201 if name: 202 params = {'name': name} 203 return client.call('bdev_ocf_get_bdevs', params) 204 205 206def bdev_ocf_set_cache_mode(client, name, mode): 207 """Set cache mode of OCF block device 208 209 Args: 210 name: name of OCF bdev 211 mode: OCF cache mode: {'wb', 'wt', 'pt', 'wa', 'wi', 'wo'} 212 213 Returns: 214 New cache mode name 215 """ 216 params = { 217 'name': name, 218 'mode': mode, 219 } 220 221 return client.call('bdev_ocf_set_cache_mode', params) 222 223 224def bdev_ocf_set_seqcutoff(client, name, policy, threshold, promotion_count): 225 """Set sequential cutoff parameters on all cores for the given OCF cache device 226 227 Args: 228 name: Name of OCF cache bdev 229 policy: Sequential cutoff policy 230 threshold: Activation threshold [KiB] (optional) 231 promotion_count: Promotion request count (optional) 232 """ 233 params = { 234 'name': name, 235 'policy': policy, 236 } 237 if threshold: 238 params['threshold'] = threshold 239 if promotion_count: 240 params['promotion_count'] = promotion_count 241 242 return client.call('bdev_ocf_set_seqcutoff', params) 243 244 245@deprecated_alias('construct_malloc_bdev') 246def bdev_malloc_create(client, num_blocks, block_size, name=None, uuid=None, optimal_io_boundary=None): 247 """Construct a malloc block device. 248 249 Args: 250 num_blocks: size of block device in blocks 251 block_size: block size of device; must be a power of 2 and at least 512 252 name: name of block device (optional) 253 uuid: UUID of block device (optional) 254 optimal_io_boundary: Split on optimal IO boundary, in number of blocks, default 0 (disabled, optional) 255 256 Returns: 257 Name of created block device. 258 """ 259 params = {'num_blocks': num_blocks, 'block_size': block_size} 260 if name: 261 params['name'] = name 262 if uuid: 263 params['uuid'] = uuid 264 if optimal_io_boundary: 265 params['optimal_io_boundary'] = optimal_io_boundary 266 return client.call('bdev_malloc_create', params) 267 268 269@deprecated_alias('delete_malloc_bdev') 270def bdev_malloc_delete(client, name): 271 """Delete malloc block device. 272 273 Args: 274 bdev_name: name of malloc bdev to delete 275 """ 276 params = {'name': name} 277 return client.call('bdev_malloc_delete', params) 278 279 280@deprecated_alias('construct_null_bdev') 281def bdev_null_create(client, num_blocks, block_size, name, uuid=None, md_size=None, 282 dif_type=None, dif_is_head_of_md=None): 283 """Construct a null block device. 284 285 Args: 286 num_blocks: size of block device in blocks 287 block_size: block size of device; data part size must be a power of 2 and at least 512 288 name: name of block device 289 uuid: UUID of block device (optional) 290 md_size: metadata size of device (optional) 291 dif_type: protection information type (optional) 292 dif_is_head_of_md: protection information is in the first 8 bytes of metadata (optional) 293 294 Returns: 295 Name of created block device. 296 """ 297 params = {'name': name, 'num_blocks': num_blocks, 298 'block_size': block_size} 299 if uuid: 300 params['uuid'] = uuid 301 if md_size: 302 params['md_size'] = md_size 303 if dif_type: 304 params['dif_type'] = dif_type 305 if dif_is_head_of_md: 306 params['dif_is_head_of_md'] = dif_is_head_of_md 307 return client.call('bdev_null_create', params) 308 309 310@deprecated_alias('delete_null_bdev') 311def bdev_null_delete(client, name): 312 """Remove null bdev from the system. 313 314 Args: 315 name: name of null bdev to delete 316 """ 317 params = {'name': name} 318 return client.call('bdev_null_delete', params) 319 320 321def bdev_null_resize(client, name, new_size): 322 """Resize null bdev in the system. 323 324 Args: 325 name: name of null bdev to resize 326 new_size: new bdev size of resize operation. The unit is MiB 327 """ 328 params = { 329 'name': name, 330 'new_size': new_size, 331 } 332 return client.call('bdev_null_resize', params) 333 334 335@deprecated_alias('get_raid_bdevs') 336def bdev_raid_get_bdevs(client, category): 337 """Get list of raid bdevs based on category 338 339 Args: 340 category: any one of all or online or configuring or offline 341 342 Returns: 343 List of raid bdev names 344 """ 345 params = {'category': category} 346 return client.call('bdev_raid_get_bdevs', params) 347 348 349@deprecated_alias('construct_raid_bdev') 350def bdev_raid_create(client, name, raid_level, base_bdevs, strip_size=None, strip_size_kb=None): 351 """Create raid bdev. Either strip size arg will work but one is required. 352 353 Args: 354 name: user defined raid bdev name 355 strip_size (deprecated): strip size of raid bdev in KB, supported values like 8, 16, 32, 64, 128, 256, etc 356 strip_size_kb: strip size of raid bdev in KB, supported values like 8, 16, 32, 64, 128, 256, etc 357 raid_level: raid level of raid bdev, supported values 0 358 base_bdevs: Space separated names of Nvme bdevs in double quotes, like "Nvme0n1 Nvme1n1 Nvme2n1" 359 360 Returns: 361 None 362 """ 363 params = {'name': name, 'raid_level': raid_level, 'base_bdevs': base_bdevs} 364 365 if strip_size: 366 params['strip_size'] = strip_size 367 368 if strip_size_kb: 369 params['strip_size_kb'] = strip_size_kb 370 371 return client.call('bdev_raid_create', params) 372 373 374@deprecated_alias('destroy_raid_bdev') 375def bdev_raid_delete(client, name): 376 """Delete raid bdev 377 378 Args: 379 name: raid bdev name 380 381 Returns: 382 None 383 """ 384 params = {'name': name} 385 return client.call('bdev_raid_delete', params) 386 387 388@deprecated_alias('construct_aio_bdev') 389def bdev_aio_create(client, filename, name, block_size=None): 390 """Construct a Linux AIO block device. 391 392 Args: 393 filename: path to device or file (ex: /dev/sda) 394 name: name of block device 395 block_size: block size of device (optional; autodetected if omitted) 396 397 Returns: 398 Name of created block device. 399 """ 400 params = {'name': name, 401 'filename': filename} 402 403 if block_size: 404 params['block_size'] = block_size 405 406 return client.call('bdev_aio_create', params) 407 408 409def bdev_aio_rescan(client, name): 410 """Rescan a Linux AIO block device. 411 412 Args: 413 bdev_name: name of aio bdev to delete 414 """ 415 params = {'name': name} 416 return client.call('bdev_aio_rescan', params) 417 418 419@deprecated_alias('delete_aio_bdev') 420def bdev_aio_delete(client, name): 421 """Remove aio bdev from the system. 422 423 Args: 424 bdev_name: name of aio bdev to delete 425 """ 426 params = {'name': name} 427 return client.call('bdev_aio_delete', params) 428 429 430def bdev_uring_create(client, filename, name, block_size=None): 431 """Create a bdev with Linux io_uring backend. 432 433 Args: 434 filename: path to device or file (ex: /dev/nvme0n1) 435 name: name of bdev 436 block_size: block size of device (optional; autodetected if omitted) 437 438 Returns: 439 Name of created bdev. 440 """ 441 params = {'name': name, 442 'filename': filename} 443 444 if block_size: 445 params['block_size'] = block_size 446 447 return client.call('bdev_uring_create', params) 448 449 450def bdev_uring_delete(client, name): 451 """Delete a uring bdev. 452 453 Args: 454 name: name of uring bdev to delete 455 """ 456 params = {'name': name} 457 return client.call('bdev_uring_delete', params) 458 459 460@deprecated_alias('set_bdev_nvme_options') 461def bdev_nvme_set_options(client, action_on_timeout=None, timeout_us=None, timeout_admin_us=None, 462 keep_alive_timeout_ms=None, retry_count=None, arbitration_burst=None, 463 low_priority_weight=None, medium_priority_weight=None, high_priority_weight=None, 464 nvme_adminq_poll_period_us=None, nvme_ioq_poll_period_us=None, io_queue_requests=None, 465 delay_cmd_submit=None, transport_retry_count=None, bdev_retry_count=None, 466 transport_ack_timeout=None, ctrlr_loss_timeout_sec=None, reconnect_delay_sec=None, 467 fast_io_fail_timeout_sec=None, disable_auto_failback=None): 468 """Set options for the bdev nvme. This is startup command. 469 470 Args: 471 action_on_timeout: action to take on command time out. Valid values are: none, reset, abort (optional) 472 timeout_us: Timeout for each command, in microseconds. If 0, don't track timeouts (optional) 473 timeout_admin_us: Timeout for each admin command, in microseconds. If 0, treat same as io timeouts (optional) 474 keep_alive_timeout_ms: Keep alive timeout period in millisecond, default is 10s (optional) 475 retry_count: The number of attempts per I/O when an I/O fails (deprecated) (optional) 476 arbitration_burst: The value is expressed as a power of two (optional) 477 low_priority_weight: The number of commands that may be executed from the low priority queue at one time (optional) 478 medium_priority_weight: The number of commands that may be executed from the medium priority queue at one time (optional) 479 high_priority_weight: The number of commands that may be executed from the high priority queue at one time (optional) 480 nvme_adminq_poll_period_us: How often the admin queue is polled for asynchronous events in microseconds (optional) 481 nvme_ioq_poll_period_us: How often to poll I/O queues for completions in microseconds (optional) 482 io_queue_requests: The number of requests allocated for each NVMe I/O queue. Default: 512 (optional) 483 delay_cmd_submit: Enable delayed NVMe command submission to allow batching of multiple commands (optional) 484 transport_retry_count: The number of attempts per I/O in the transport layer when an I/O fails (optional) 485 bdev_retry_count: The number of attempts per I/O in the bdev layer when an I/O fails. -1 means infinite retries. (optional) 486 transport_ack_timeout: Time to wait ack until packet retransmission for RDMA or until closes connection for TCP. 487 Range 0-31 where 0 is driver-specific default value (optional) 488 ctrlr_loss_timeout_sec: Time to wait until ctrlr is reconnected before deleting ctrlr. 489 -1 means infinite reconnect retries. 0 means no reconnect retry. 490 If reconnect_delay_sec is zero, ctrlr_loss_timeout_sec has to be zero. 491 If reconnect_delay_sec is non-zero, ctrlr_loss_timeout_sec has to be -1 or not less than reconnect_delay_sec. 492 This can be overridden by bdev_nvme_attach_controller. (optional) 493 reconnect_delay_sec: Time to delay a reconnect retry. 494 If ctrlr_loss_timeout_sec is zero, reconnect_delay_sec has to be zero. 495 If ctrlr_loss_timeout_sec is -1, reconnect_delay_sec has to be non-zero. 496 If ctrlr_loss_timeout_sec is not -1 or zero, reconnect_sec has to be non-zero and less than ctrlr_loss_timeout_sec. 497 This can be overridden by bdev_nvme_attach_controller. (optional) 498 fail_io_fast_timeout_sec: Time to wait until ctrlr is reconnected before failing I/O to ctrlr. 499 0 means no such timeout. 500 If fast_io_fail_timeout_sec is not zero, it has to be not less than reconnect_delay_sec and less than 501 ctrlr_loss_timeout_sec if ctrlr_loss_timeout_sec is not -1. 502 This can be overridden by bdev_nvme_attach_controller. (optional) 503 disable_auto_failback: Disable automatic failback. bdev_nvme_set_preferred_path can be used to do manual failback. 504 By default, immediately failback to the preferred I/O path if it is restored. (optional) 505 506 """ 507 params = {} 508 509 if action_on_timeout: 510 params['action_on_timeout'] = action_on_timeout 511 512 if timeout_us is not None: 513 params['timeout_us'] = timeout_us 514 515 if timeout_admin_us is not None: 516 params['timeout_admin_us'] = timeout_admin_us 517 518 if keep_alive_timeout_ms is not None: 519 params['keep_alive_timeout_ms'] = keep_alive_timeout_ms 520 521 if retry_count is not None: 522 print("WARNING: retry_count is deprecated, please use transport_retry_count.") 523 params['retry_count'] = retry_count 524 525 if arbitration_burst is not None: 526 params['arbitration_burst'] = arbitration_burst 527 528 if low_priority_weight is not None: 529 params['low_priority_weight'] = low_priority_weight 530 531 if medium_priority_weight is not None: 532 params['medium_priority_weight'] = medium_priority_weight 533 534 if high_priority_weight is not None: 535 params['high_priority_weight'] = high_priority_weight 536 537 if nvme_adminq_poll_period_us: 538 params['nvme_adminq_poll_period_us'] = nvme_adminq_poll_period_us 539 540 if nvme_ioq_poll_period_us is not None: 541 params['nvme_ioq_poll_period_us'] = nvme_ioq_poll_period_us 542 543 if io_queue_requests is not None: 544 params['io_queue_requests'] = io_queue_requests 545 546 if delay_cmd_submit is not None: 547 params['delay_cmd_submit'] = delay_cmd_submit 548 549 if transport_retry_count is not None: 550 params['transport_retry_count'] = transport_retry_count 551 552 if bdev_retry_count is not None: 553 params['bdev_retry_count'] = bdev_retry_count 554 555 if transport_ack_timeout is not None: 556 params['transport_ack_timeout'] = transport_ack_timeout 557 558 if ctrlr_loss_timeout_sec is not None: 559 params['ctrlr_loss_timeout_sec'] = ctrlr_loss_timeout_sec 560 561 if reconnect_delay_sec is not None: 562 params['reconnect_delay_sec'] = reconnect_delay_sec 563 564 if fast_io_fail_timeout_sec is not None: 565 params['fast_io_fail_timeout_sec'] = fast_io_fail_timeout_sec 566 567 if disable_auto_failback is not None: 568 params['disable_auto_failback'] = disable_auto_failback 569 570 return client.call('bdev_nvme_set_options', params) 571 572 573@deprecated_alias('set_bdev_nvme_hotplug') 574def bdev_nvme_set_hotplug(client, enable, period_us=None): 575 """Set options for the bdev nvme. This is startup command. 576 577 Args: 578 enable: True to enable hotplug, False to disable. 579 period_us: how often the hotplug is processed for insert and remove events. Set 0 to reset to default. (optional) 580 """ 581 params = {'enable': enable} 582 583 if period_us: 584 params['period_us'] = period_us 585 586 return client.call('bdev_nvme_set_hotplug', params) 587 588 589@deprecated_alias('construct_nvme_bdev') 590def bdev_nvme_attach_controller(client, name, trtype, traddr, adrfam=None, trsvcid=None, 591 priority=None, subnqn=None, hostnqn=None, hostaddr=None, 592 hostsvcid=None, prchk_reftag=None, prchk_guard=None, 593 hdgst=None, ddgst=None, fabrics_timeout=None, multipath=None, num_io_queues=None, 594 ctrlr_loss_timeout_sec=None, reconnect_delay_sec=None, 595 fast_io_fail_timeout_sec=None): 596 """Construct block device for each NVMe namespace in the attached controller. 597 598 Args: 599 name: bdev name prefix; "n" + namespace ID will be appended to create unique names 600 trtype: transport type ("PCIe", "RDMA", "FC", "TCP") 601 traddr: transport address (PCI BDF or IP address) 602 adrfam: address family ("IPv4", "IPv6", "IB", or "FC") 603 trsvcid: transport service ID (port number for IP-based addresses) 604 priority: transport connection priority (Sock priority for TCP-based transports; optional) 605 subnqn: subsystem NQN to connect to (optional) 606 hostnqn: NQN to connect from (optional) 607 hostaddr: host transport address (IP address for IP-based transports, NULL for PCIe or FC; optional) 608 hostsvcid: host transport service ID (port number for IP-based transports, NULL for PCIe or FC; optional) 609 prchk_reftag: Enable checking of PI reference tag for I/O processing (optional) 610 prchk_guard: Enable checking of PI guard for I/O processing (optional) 611 hdgst: Enable TCP header digest (optional) 612 ddgst: Enable TCP data digest (optional) 613 fabrics_timeout: Fabrics connect timeout in us (optional) 614 multipath: The behavior when multiple paths are created ("disable", "failover", or "multipath"; failover if not specified) 615 num_io_queues: The number of IO queues to request during initialization. (optional) 616 ctrlr_loss_timeout_sec: Time to wait until ctrlr is reconnected before deleting ctrlr. 617 -1 means infinite reconnect retries. 0 means no reconnect retry. 618 If reconnect_delay_sec is zero, ctrlr_loss_timeout_sec has to be zero. 619 If reconnect_delay_sec is non-zero, ctrlr_loss_timeout_sec has to be -1 or not less than reconnect_delay_sec. 620 (optional) 621 reconnect_delay_sec: Time to delay a reconnect retry. 622 If ctrlr_loss_timeout_sec is zero, reconnect_delay_sec has to be zero. 623 If ctrlr_loss_timeout_sec is -1, reconnect_delay_sec has to be non-zero. 624 If ctrlr_loss_timeout_sec is not -1 or zero, reconnect_sec has to be non-zero and less than ctrlr_loss_timeout_sec. 625 (optional) 626 fail_io_fast_timeout_sec: Time to wait until ctrlr is reconnected before failing I/O to ctrlr. 627 0 means no such timeout. 628 If fast_io_fail_timeout_sec is not zero, it has to be not less than reconnect_delay_sec and less than 629 ctrlr_loss_timeout_sec if ctrlr_loss_timeout_sec is not -1. (optional) 630 631 Returns: 632 Names of created block devices. 633 """ 634 params = {'name': name, 635 'trtype': trtype, 636 'traddr': traddr} 637 638 if hostnqn: 639 params['hostnqn'] = hostnqn 640 641 if hostaddr: 642 params['hostaddr'] = hostaddr 643 644 if hostsvcid: 645 params['hostsvcid'] = hostsvcid 646 647 if adrfam: 648 params['adrfam'] = adrfam 649 650 if trsvcid: 651 params['trsvcid'] = trsvcid 652 653 if priority: 654 params['priority'] = priority 655 656 if subnqn: 657 params['subnqn'] = subnqn 658 659 if prchk_reftag: 660 params['prchk_reftag'] = prchk_reftag 661 662 if prchk_guard: 663 params['prchk_guard'] = prchk_guard 664 665 if hdgst: 666 params['hdgst'] = hdgst 667 668 if ddgst: 669 params['ddgst'] = ddgst 670 671 if fabrics_timeout: 672 params['fabrics_connect_timeout_us'] = fabrics_timeout 673 674 if multipath: 675 params['multipath'] = multipath 676 677 if num_io_queues: 678 params['num_io_queues'] = num_io_queues 679 680 if ctrlr_loss_timeout_sec is not None: 681 params['ctrlr_loss_timeout_sec'] = ctrlr_loss_timeout_sec 682 683 if reconnect_delay_sec is not None: 684 params['reconnect_delay_sec'] = reconnect_delay_sec 685 686 if fast_io_fail_timeout_sec is not None: 687 params['fast_io_fail_timeout_sec'] = fast_io_fail_timeout_sec 688 689 return client.call('bdev_nvme_attach_controller', params) 690 691 692@deprecated_alias('delete_nvme_controller') 693def bdev_nvme_detach_controller(client, name, trtype=None, traddr=None, 694 adrfam=None, trsvcid=None, subnqn=None, 695 hostaddr=None, hostsvcid=None): 696 """Detach NVMe controller and delete any associated bdevs. Optionally, 697 If all of the transport ID options are specified, only remove that 698 transport path from the specified controller. If that is the only 699 available path for the controller, this will also result in the 700 controller being detached and the associated bdevs being deleted. 701 702 Args: 703 name: controller name 704 trtype: transport type ("PCIe", "RDMA") 705 traddr: transport address (PCI BDF or IP address) 706 adrfam: address family ("IPv4", "IPv6", "IB", or "FC") 707 trsvcid: transport service ID (port number for IP-based addresses) 708 subnqn: subsystem NQN to connect to (optional) 709 hostaddr: Host address (IP address) 710 hostsvcid: transport service ID on host side (port number) 711 """ 712 713 params = {'name': name} 714 715 if trtype: 716 params['trtype'] = trtype 717 718 if traddr: 719 params['traddr'] = traddr 720 721 if adrfam: 722 params['adrfam'] = adrfam 723 724 if trsvcid: 725 params['trsvcid'] = trsvcid 726 727 if subnqn: 728 params['subnqn'] = subnqn 729 730 if hostaddr: 731 params['hostaddr'] = hostaddr 732 733 if hostsvcid: 734 params['hostsvcid'] = hostsvcid 735 736 return client.call('bdev_nvme_detach_controller', params) 737 738 739def bdev_nvme_reset_controller(client, name): 740 """Reset NVMe controller. 741 742 Args: 743 name: controller name 744 """ 745 746 params = {'name': name} 747 748 return client.call('bdev_nvme_reset_controller', params) 749 750 751def bdev_nvme_start_discovery(client, name, trtype, traddr, adrfam=None, trsvcid=None, 752 hostnqn=None, wait_for_attach=None, ctrlr_loss_timeout_sec=None, 753 reconnect_delay_sec=None, fast_io_fail_timeout_sec=None): 754 """Start discovery with the specified discovery subsystem 755 756 Args: 757 name: bdev name prefix; "n" + namespace ID will be appended to create unique names 758 trtype: transport type ("PCIe", "RDMA", "FC", "TCP") 759 traddr: transport address (PCI BDF or IP address) 760 adrfam: address family ("IPv4", "IPv6", "IB", or "FC") 761 trsvcid: transport service ID (port number for IP-based addresses) 762 hostnqn: NQN to connect from (optional) 763 wait_for_attach: Wait to complete RPC until all discovered NVM subsystems have attached (optional) 764 ctrlr_loss_timeout_sec: Time to wait until ctrlr is reconnected before deleting ctrlr. 765 -1 means infinite reconnect retries. 0 means no reconnect retry. 766 If reconnect_delay_sec is zero, ctrlr_loss_timeout_sec has to be zero. 767 If reconnect_delay_sec is non-zero, ctrlr_loss_timeout_sec has to be -1 or not less than reconnect_delay_sec. 768 (optional) 769 reconnect_delay_sec: Time to delay a reconnect retry. 770 If ctrlr_loss_timeout_sec is zero, reconnect_delay_sec has to be zero. 771 If ctrlr_loss_timeout_sec is -1, reconnect_delay_sec has to be non-zero. 772 If ctrlr_loss_timeout_sec is not -1 or zero, reconnect_sec has to be non-zero and less than ctrlr_loss_timeout_sec. 773 (optional) 774 fail_io_fast_timeout_sec: Time to wait until ctrlr is reconnected before failing I/O to ctrlr. 775 0 means no such timeout. 776 If fast_io_fail_timeout_sec is not zero, it has to be not less than reconnect_delay_sec and less than 777 ctrlr_loss_timeout_sec if ctrlr_loss_timeout_sec is not -1. (optional) 778 """ 779 params = {'name': name, 780 'trtype': trtype, 781 'traddr': traddr} 782 783 if hostnqn: 784 params['hostnqn'] = hostnqn 785 786 if adrfam: 787 params['adrfam'] = adrfam 788 789 if trsvcid: 790 params['trsvcid'] = trsvcid 791 792 if wait_for_attach: 793 params['wait_for_attach'] = True 794 795 if ctrlr_loss_timeout_sec is not None: 796 params['ctrlr_loss_timeout_sec'] = ctrlr_loss_timeout_sec 797 798 if reconnect_delay_sec is not None: 799 params['reconnect_delay_sec'] = reconnect_delay_sec 800 801 if fast_io_fail_timeout_sec is not None: 802 params['fast_io_fail_timeout_sec'] = fast_io_fail_timeout_sec 803 804 return client.call('bdev_nvme_start_discovery', params) 805 806 807def bdev_nvme_stop_discovery(client, name): 808 """Stop a previously started discovery service 809 810 Args: 811 name: name of discovery service to start 812 """ 813 params = {'name': name} 814 815 return client.call('bdev_nvme_stop_discovery', params) 816 817 818def bdev_nvme_get_discovery_info(client): 819 """Get information about the automatic discovery 820 """ 821 return client.call('bdev_nvme_get_discovery_info') 822 823 824def bdev_nvme_get_io_paths(client, name): 825 """Display all or the specified NVMe bdev's active I/O paths 826 827 Args: 828 name: Name of the NVMe bdev (optional) 829 830 Returns: 831 List of active I/O paths 832 """ 833 params = {} 834 if name: 835 params['name'] = name 836 return client.call('bdev_nvme_get_io_paths', params) 837 838 839def bdev_nvme_set_preferred_path(client, name, cntlid): 840 """Set the preferred I/O path for an NVMe bdev when in multipath mode 841 842 Args: 843 name: NVMe bdev name 844 cntlid: NVMe-oF controller ID 845 """ 846 847 params = {'name': name, 848 'cntlid': cntlid} 849 850 return client.call('bdev_nvme_set_preferred_path', params) 851 852 853def bdev_nvme_set_multipath_policy(client, name, policy): 854 """Set multipath policy of the NVMe bdev 855 856 Args: 857 name: NVMe bdev name 858 policy: Multipath policy (active_passive or active_active) 859 """ 860 861 params = {'name': name, 862 'policy': policy} 863 864 return client.call('bdev_nvme_set_multipath_policy', params) 865 866 867def bdev_nvme_cuse_register(client, name): 868 """Register CUSE devices on NVMe controller. 869 870 Args: 871 name: Name of the operating NVMe controller 872 """ 873 params = {'name': name} 874 875 return client.call('bdev_nvme_cuse_register', params) 876 877 878def bdev_nvme_cuse_unregister(client, name): 879 """Unregister CUSE devices on NVMe controller. 880 881 Args: 882 name: Name of the operating NVMe controller 883 """ 884 params = {'name': name} 885 886 return client.call('bdev_nvme_cuse_unregister', params) 887 888 889def bdev_zone_block_create(client, name, base_bdev, zone_capacity, optimal_open_zones): 890 """Creates a virtual zone device on top of existing non-zoned bdev. 891 892 Args: 893 name: Zone device name 894 base_bdev: Base Nvme bdev name 895 zone_capacity: Surfaced zone capacity in blocks 896 optimal_open_zones: Number of zones required to reach optimal write speed (optional, default: 1) 897 898 Returns: 899 Name of created block device. 900 """ 901 params = {'name': name, 902 'base_bdev': base_bdev, 903 'zone_capacity': zone_capacity, 904 'optimal_open_zones': optimal_open_zones} 905 906 return client.call('bdev_zone_block_create', params) 907 908 909def bdev_zone_block_delete(client, name): 910 """Remove block zone bdev from the system. 911 912 Args: 913 name: name of block zone bdev to delete 914 """ 915 params = {'name': name} 916 return client.call('bdev_zone_block_delete', params) 917 918 919def bdev_rbd_register_cluster(client, name, user=None, config_param=None, config_file=None, key_file=None): 920 """Create a Rados Cluster object of the Ceph RBD backend. 921 922 Args: 923 name: name of Rados Cluster 924 user: Ceph user name (optional) 925 config_param: map of config keys to values (optional) 926 config_file: file path of Ceph configuration file (optional) 927 key_file: file path of Ceph key file (optional) 928 929 Returns: 930 Name of registered Rados Cluster object. 931 """ 932 params = {'name': name} 933 934 if user is not None: 935 params['user_id'] = user 936 if config_param is not None: 937 params['config_param'] = config_param 938 if config_file is not None: 939 params['config_file'] = config_file 940 if key_file is not None: 941 params['key_file'] = key_file 942 943 return client.call('bdev_rbd_register_cluster', params) 944 945 946def bdev_rbd_unregister_cluster(client, name): 947 """Remove Rados cluster object from the system. 948 949 Args: 950 name: name of Rados cluster object to unregister 951 """ 952 params = {'name': name} 953 return client.call('bdev_rbd_unregister_cluster', params) 954 955 956def bdev_rbd_get_clusters_info(client, name): 957 """Get the cluster(s) info 958 959 Args: 960 name: name of Rados cluster object to query (optional; if omitted, query all clusters) 961 962 Returns: 963 List of registered Rados cluster information objects. 964 """ 965 params = {} 966 if name: 967 params['name'] = name 968 return client.call('bdev_rbd_get_clusters_info', params) 969 970 971@deprecated_alias('construct_rbd_bdev') 972def bdev_rbd_create(client, pool_name, rbd_name, block_size, name=None, user=None, config=None, cluster_name=None, uuid=None): 973 """Create a Ceph RBD block device. 974 975 Args: 976 pool_name: Ceph RBD pool name 977 rbd_name: Ceph RBD image name 978 block_size: block size of RBD volume 979 name: name of block device (optional) 980 user: Ceph user name (optional) 981 config: map of config keys to values (optional) 982 cluster_name: Name to identify Rados cluster (optional) 983 uuid: UUID of block device (optional) 984 985 Returns: 986 Name of created block device. 987 """ 988 params = { 989 'pool_name': pool_name, 990 'rbd_name': rbd_name, 991 'block_size': block_size, 992 } 993 994 if name: 995 params['name'] = name 996 if user is not None: 997 params['user_id'] = user 998 if config is not None: 999 params['config'] = config 1000 if cluster_name is not None: 1001 params['cluster_name'] = cluster_name 1002 if uuid is not None: 1003 params['uuid'] = uuid 1004 1005 return client.call('bdev_rbd_create', params) 1006 1007 1008@deprecated_alias('delete_rbd_bdev') 1009def bdev_rbd_delete(client, name): 1010 """Remove rbd bdev from the system. 1011 1012 Args: 1013 name: name of rbd bdev to delete 1014 """ 1015 params = {'name': name} 1016 return client.call('bdev_rbd_delete', params) 1017 1018 1019def bdev_rbd_resize(client, name, new_size): 1020 """Resize rbd bdev in the system. 1021 1022 Args: 1023 name: name of rbd bdev to resize 1024 new_size: new bdev size of resize operation. The unit is MiB 1025 """ 1026 params = { 1027 'name': name, 1028 'new_size': new_size, 1029 } 1030 return client.call('bdev_rbd_resize', params) 1031 1032 1033@deprecated_alias('construct_error_bdev') 1034def bdev_error_create(client, base_name): 1035 """Construct an error injection block device. 1036 1037 Args: 1038 base_name: base bdev name 1039 """ 1040 params = {'base_name': base_name} 1041 return client.call('bdev_error_create', params) 1042 1043 1044def bdev_delay_create(client, base_bdev_name, name, avg_read_latency, p99_read_latency, avg_write_latency, p99_write_latency): 1045 """Construct a delay block device. 1046 1047 Args: 1048 base_bdev_name: name of the existing bdev 1049 name: name of block device 1050 avg_read_latency: complete 99% of read ops with this delay 1051 p99_read_latency: complete 1% of read ops with this delay 1052 avg_write_latency: complete 99% of write ops with this delay 1053 p99_write_latency: complete 1% of write ops with this delay 1054 1055 Returns: 1056 Name of created block device. 1057 """ 1058 params = { 1059 'base_bdev_name': base_bdev_name, 1060 'name': name, 1061 'avg_read_latency': avg_read_latency, 1062 'p99_read_latency': p99_read_latency, 1063 'avg_write_latency': avg_write_latency, 1064 'p99_write_latency': p99_write_latency, 1065 } 1066 return client.call('bdev_delay_create', params) 1067 1068 1069def bdev_delay_delete(client, name): 1070 """Remove delay bdev from the system. 1071 1072 Args: 1073 name: name of delay bdev to delete 1074 """ 1075 params = {'name': name} 1076 return client.call('bdev_delay_delete', params) 1077 1078 1079def bdev_delay_update_latency(client, delay_bdev_name, latency_type, latency_us): 1080 """Update the latency value for a delay block device 1081 1082 Args: 1083 delay_bdev_name: name of the delay bdev 1084 latency_type: 'one of: avg_read, avg_write, p99_read, p99_write. No other values accepted.' 1085 latency_us: 'new latency value.' 1086 1087 Returns: 1088 True if successful, or a specific error otherwise. 1089 """ 1090 params = { 1091 'delay_bdev_name': delay_bdev_name, 1092 'latency_type': latency_type, 1093 'latency_us': latency_us, 1094 } 1095 return client.call('bdev_delay_update_latency', params) 1096 1097 1098@deprecated_alias('delete_error_bdev') 1099def bdev_error_delete(client, name): 1100 """Remove error bdev from the system. 1101 1102 Args: 1103 bdev_name: name of error bdev to delete 1104 """ 1105 params = {'name': name} 1106 return client.call('bdev_error_delete', params) 1107 1108 1109@deprecated_alias('construct_iscsi_bdev') 1110def bdev_iscsi_create(client, name, url, initiator_iqn): 1111 """Construct an iSCSI block device. 1112 1113 Args: 1114 name: name of block device 1115 url: iSCSI URL 1116 initiator_iqn: IQN name to be used by initiator 1117 1118 Returns: 1119 Name of created block device. 1120 """ 1121 params = { 1122 'name': name, 1123 'url': url, 1124 'initiator_iqn': initiator_iqn, 1125 } 1126 return client.call('bdev_iscsi_create', params) 1127 1128 1129@deprecated_alias('delete_iscsi_bdev') 1130def bdev_iscsi_delete(client, name): 1131 """Remove iSCSI bdev from the system. 1132 1133 Args: 1134 bdev_name: name of iSCSI bdev to delete 1135 """ 1136 params = {'name': name} 1137 return client.call('bdev_iscsi_delete', params) 1138 1139 1140@deprecated_alias('construct_pmem_bdev') 1141def bdev_pmem_create(client, pmem_file, name): 1142 """Construct a libpmemblk block device. 1143 1144 Args: 1145 pmem_file: path to pmemblk pool file 1146 name: name of block device 1147 1148 Returns: 1149 Name of created block device. 1150 """ 1151 params = { 1152 'pmem_file': pmem_file, 1153 'name': name 1154 } 1155 return client.call('bdev_pmem_create', params) 1156 1157 1158@deprecated_alias('delete_pmem_bdev') 1159def bdev_pmem_delete(client, name): 1160 """Remove pmem bdev from the system. 1161 1162 Args: 1163 name: name of pmem bdev to delete 1164 """ 1165 params = {'name': name} 1166 return client.call('bdev_pmem_delete', params) 1167 1168 1169@deprecated_alias('construct_passthru_bdev') 1170def bdev_passthru_create(client, base_bdev_name, name): 1171 """Construct a pass-through block device. 1172 1173 Args: 1174 base_bdev_name: name of the existing bdev 1175 name: name of block device 1176 1177 Returns: 1178 Name of created block device. 1179 """ 1180 params = { 1181 'base_bdev_name': base_bdev_name, 1182 'name': name, 1183 } 1184 return client.call('bdev_passthru_create', params) 1185 1186 1187@deprecated_alias('delete_passthru_bdev') 1188def bdev_passthru_delete(client, name): 1189 """Remove pass through bdev from the system. 1190 1191 Args: 1192 name: name of pass through bdev to delete 1193 """ 1194 params = {'name': name} 1195 return client.call('bdev_passthru_delete', params) 1196 1197 1198def bdev_opal_create(client, nvme_ctrlr_name, nsid, locking_range_id, range_start, range_length, password): 1199 """Create opal virtual block devices from a base nvme bdev. 1200 1201 Args: 1202 nvme_ctrlr_name: name of the nvme ctrlr 1203 nsid: namespace ID of nvme ctrlr 1204 locking_range_id: locking range ID corresponding to this virtual bdev 1205 range_start: start address of this locking range 1206 range_length: length of this locking range 1207 password: admin password of base nvme bdev 1208 1209 Returns: 1210 Name of the new created block devices. 1211 """ 1212 params = { 1213 'nvme_ctrlr_name': nvme_ctrlr_name, 1214 'nsid': nsid, 1215 'locking_range_id': locking_range_id, 1216 'range_start': range_start, 1217 'range_length': range_length, 1218 'password': password, 1219 } 1220 1221 return client.call('bdev_opal_create', params) 1222 1223 1224def bdev_opal_get_info(client, bdev_name, password): 1225 """Get opal locking range info. 1226 1227 Args: 1228 bdev_name: name of opal vbdev to get info 1229 password: admin password 1230 1231 Returns: 1232 Locking range info. 1233 """ 1234 params = { 1235 'bdev_name': bdev_name, 1236 'password': password, 1237 } 1238 1239 return client.call('bdev_opal_get_info', params) 1240 1241 1242def bdev_opal_delete(client, bdev_name, password): 1243 """Delete opal virtual bdev from the system. 1244 1245 Args: 1246 bdev_name: name of opal vbdev to delete 1247 password: admin password of base nvme bdev 1248 """ 1249 params = { 1250 'bdev_name': bdev_name, 1251 'password': password, 1252 } 1253 1254 return client.call('bdev_opal_delete', params) 1255 1256 1257def bdev_opal_new_user(client, bdev_name, admin_password, user_id, user_password): 1258 """Add a user to opal bdev who can set lock state for this bdev. 1259 1260 Args: 1261 bdev_name: name of opal vbdev 1262 admin_password: admin password 1263 user_id: ID of the user who will be added to this opal bdev 1264 user_password: password set for this user 1265 """ 1266 params = { 1267 'bdev_name': bdev_name, 1268 'admin_password': admin_password, 1269 'user_id': user_id, 1270 'user_password': user_password, 1271 } 1272 1273 return client.call('bdev_opal_new_user', params) 1274 1275 1276def bdev_opal_set_lock_state(client, bdev_name, user_id, password, lock_state): 1277 """set lock state for an opal bdev. 1278 1279 Args: 1280 bdev_name: name of opal vbdev 1281 user_id: ID of the user who will set lock state 1282 password: password of the user 1283 lock_state: lock state to set 1284 """ 1285 params = { 1286 'bdev_name': bdev_name, 1287 'user_id': user_id, 1288 'password': password, 1289 'lock_state': lock_state, 1290 } 1291 1292 return client.call('bdev_opal_set_lock_state', params) 1293 1294 1295@deprecated_alias('construct_split_vbdev') 1296def bdev_split_create(client, base_bdev, split_count, split_size_mb=None): 1297 """Create split block devices from a base bdev. 1298 1299 Args: 1300 base_bdev: name of bdev to split 1301 split_count: number of split bdevs to create 1302 split_size_mb: size of each split volume in MiB (optional) 1303 1304 Returns: 1305 List of created block devices. 1306 """ 1307 params = { 1308 'base_bdev': base_bdev, 1309 'split_count': split_count, 1310 } 1311 if split_size_mb: 1312 params['split_size_mb'] = split_size_mb 1313 1314 return client.call('bdev_split_create', params) 1315 1316 1317@deprecated_alias('destruct_split_vbdev') 1318def bdev_split_delete(client, base_bdev): 1319 """Delete split block devices. 1320 1321 Args: 1322 base_bdev: name of previously split bdev 1323 """ 1324 params = { 1325 'base_bdev': base_bdev, 1326 } 1327 1328 return client.call('bdev_split_delete', params) 1329 1330 1331@deprecated_alias('construct_ftl_bdev') 1332def bdev_ftl_create(client, name, base_bdev, **kwargs): 1333 """Construct FTL bdev 1334 1335 Args: 1336 name: name of the bdev 1337 base_bdev: name of the base bdev 1338 kwargs: optional parameters 1339 """ 1340 params = {'name': name, 1341 'base_bdev': base_bdev} 1342 for key, value in kwargs.items(): 1343 if value is not None: 1344 params[key] = value 1345 1346 return client.call('bdev_ftl_create', params) 1347 1348 1349@deprecated_alias('delete_ftl_bdev') 1350def bdev_ftl_delete(client, name): 1351 """Delete FTL bdev 1352 1353 Args: 1354 name: name of the bdev 1355 """ 1356 params = {'name': name} 1357 1358 return client.call('bdev_ftl_delete', params) 1359 1360 1361def bdev_get_bdevs(client, name=None, timeout=None): 1362 """Get information about block devices. 1363 1364 Args: 1365 name: bdev name to query (optional; if omitted, query all bdevs) 1366 timeout: time in ms to wait for the bdev with specified name to appear 1367 1368 Returns: 1369 List of bdev information objects. 1370 """ 1371 params = {} 1372 if name: 1373 params['name'] = name 1374 if timeout: 1375 params['timeout'] = timeout 1376 return client.call('bdev_get_bdevs', params) 1377 1378 1379def bdev_get_iostat(client, name=None): 1380 """Get I/O statistics for block devices. 1381 1382 Args: 1383 name: bdev name to query (optional; if omitted, query all bdevs) 1384 1385 Returns: 1386 I/O statistics for the requested block devices. 1387 """ 1388 params = {} 1389 if name: 1390 params['name'] = name 1391 return client.call('bdev_get_iostat', params) 1392 1393 1394def bdev_enable_histogram(client, name, enable): 1395 """Control whether histogram is enabled for specified bdev. 1396 1397 Args: 1398 bdev_name: name of bdev 1399 """ 1400 params = {'name': name, "enable": enable} 1401 return client.call('bdev_enable_histogram', params) 1402 1403 1404def bdev_get_histogram(client, name): 1405 """Get histogram for specified bdev. 1406 1407 Args: 1408 bdev_name: name of bdev 1409 """ 1410 params = {'name': name} 1411 return client.call('bdev_get_histogram', params) 1412 1413 1414@deprecated_alias('bdev_inject_error') 1415def bdev_error_inject_error(client, name, io_type, error_type, num=1): 1416 """Inject an error via an error bdev. 1417 1418 Args: 1419 name: name of error bdev 1420 io_type: one of "clear", "read", "write", "unmap", "flush", or "all" 1421 error_type: one of "failure" or "pending" 1422 num: number of commands to fail 1423 """ 1424 params = { 1425 'name': name, 1426 'io_type': io_type, 1427 'error_type': error_type, 1428 'num': num, 1429 } 1430 1431 return client.call('bdev_error_inject_error', params) 1432 1433 1434def bdev_set_qd_sampling_period(client, name, period): 1435 """Enable queue depth tracking on a specified bdev. 1436 1437 Args: 1438 name: name of a bdev on which to track queue depth. 1439 period: period (in microseconds) at which to update the queue depth reading. If set to 0, polling will be disabled. 1440 """ 1441 1442 params = {} 1443 params['name'] = name 1444 params['period'] = period 1445 return client.call('bdev_set_qd_sampling_period', params) 1446 1447 1448def bdev_set_qos_limit( 1449 client, 1450 name, 1451 rw_ios_per_sec=None, 1452 rw_mbytes_per_sec=None, 1453 r_mbytes_per_sec=None, 1454 w_mbytes_per_sec=None): 1455 """Set QoS rate limit on a block device. 1456 1457 Args: 1458 name: name of block device 1459 rw_ios_per_sec: R/W IOs per second limit (>=1000, example: 20000). 0 means unlimited. 1460 rw_mbytes_per_sec: R/W megabytes per second limit (>=10, example: 100). 0 means unlimited. 1461 r_mbytes_per_sec: Read megabytes per second limit (>=10, example: 100). 0 means unlimited. 1462 w_mbytes_per_sec: Write megabytes per second limit (>=10, example: 100). 0 means unlimited. 1463 """ 1464 params = {} 1465 params['name'] = name 1466 if rw_ios_per_sec is not None: 1467 params['rw_ios_per_sec'] = rw_ios_per_sec 1468 if rw_mbytes_per_sec is not None: 1469 params['rw_mbytes_per_sec'] = rw_mbytes_per_sec 1470 if r_mbytes_per_sec is not None: 1471 params['r_mbytes_per_sec'] = r_mbytes_per_sec 1472 if w_mbytes_per_sec is not None: 1473 params['w_mbytes_per_sec'] = w_mbytes_per_sec 1474 return client.call('bdev_set_qos_limit', params) 1475 1476 1477@deprecated_alias('apply_firmware') 1478def bdev_nvme_apply_firmware(client, bdev_name, filename): 1479 """Download and commit firmware to NVMe device. 1480 1481 Args: 1482 bdev_name: name of NVMe block device 1483 filename: filename of the firmware to download 1484 """ 1485 params = { 1486 'filename': filename, 1487 'bdev_name': bdev_name, 1488 } 1489 return client.call('bdev_nvme_apply_firmware', params) 1490 1491 1492def bdev_nvme_get_transport_statistics(client): 1493 """Get bdev_nvme poll group transport statistics""" 1494 return client.call('bdev_nvme_get_transport_statistics') 1495 1496 1497def bdev_nvme_get_controller_health_info(client, name): 1498 """Display health log of the required NVMe bdev controller. 1499 1500 Args: 1501 name: name of the required NVMe bdev controller 1502 1503 Returns: 1504 Health log for the requested NVMe bdev controller. 1505 """ 1506 params = {} 1507 params['name'] = name 1508 return client.call('bdev_nvme_get_controller_health_info', params) 1509