xref: /spdk/module/bdev/delay/vbdev_delay.h (revision 2f08dc7f7faf73e156f8ae9c9c891e54da865dd0)
1488570ebSJim Harris /*   SPDX-License-Identifier: BSD-3-Clause
2a6dbe372Spaul luse  *   Copyright (C) 2019 Intel Corporation.
307fe6a43SSeth Howell  *   All rights reserved.
407fe6a43SSeth Howell  */
507fe6a43SSeth Howell 
607fe6a43SSeth Howell #ifndef SPDK_VBDEV_DELAY_H
707fe6a43SSeth Howell #define SPDK_VBDEV_DELAY_H
807fe6a43SSeth Howell 
907fe6a43SSeth Howell #include "spdk/stdinc.h"
1007fe6a43SSeth Howell 
1107fe6a43SSeth Howell #include "spdk/bdev.h"
1207fe6a43SSeth Howell #include "spdk/bdev_module.h"
1307fe6a43SSeth Howell 
1407fe6a43SSeth Howell enum delay_io_type {
1507fe6a43SSeth Howell 	DELAY_AVG_READ,
1607fe6a43SSeth Howell 	DELAY_P99_READ,
1707fe6a43SSeth Howell 	DELAY_AVG_WRITE,
1807fe6a43SSeth Howell 	DELAY_P99_WRITE,
1907fe6a43SSeth Howell 	DELAY_NONE
2007fe6a43SSeth Howell };
2107fe6a43SSeth Howell 
2207fe6a43SSeth Howell /**
2307fe6a43SSeth Howell  * Create new delay bdev.
2407fe6a43SSeth Howell  *
2507fe6a43SSeth Howell  * \param bdev_name Bdev on which delay vbdev will be created.
2607fe6a43SSeth Howell  * \param vbdev_name Name of the delay bdev.
27*2f08dc7fSTomasz Zawadzki  * \param uuid UUID of the delay bdev.
2807fe6a43SSeth Howell  * \param avg_read_latency Desired typical read latency.
2907fe6a43SSeth Howell  * \param p99_read_latency Desired p99 read latency
3007fe6a43SSeth Howell  * \param avg_write_latency Desired typical write latency.
3107fe6a43SSeth Howell  * \param p99_write_latency Desired p99 write latency
3207fe6a43SSeth Howell  * \return 0 on success, other on failure.
3307fe6a43SSeth Howell  */
34*2f08dc7fSTomasz Zawadzki int create_delay_disk(const char *bdev_name, const char *vbdev_name, struct spdk_uuid *uuid,
35*2f08dc7fSTomasz Zawadzki 		      uint64_t avg_read_latency,
3607fe6a43SSeth Howell 		      uint64_t p99_read_latency, uint64_t avg_write_latency, uint64_t p99_write_latency);
3707fe6a43SSeth Howell 
3807fe6a43SSeth Howell /**
3907fe6a43SSeth Howell  * Delete delay bdev.
4007fe6a43SSeth Howell  *
414573e4ccSShuhei Matsumoto  * \param vbdev_name Name of the delay bdev.
4207fe6a43SSeth Howell  * \param cb_fn Function to call after deletion.
4307fe6a43SSeth Howell  * \param cb_arg Argument to pass to cb_fn.
4407fe6a43SSeth Howell  */
454573e4ccSShuhei Matsumoto void delete_delay_disk(const char *vbdev_name, spdk_bdev_unregister_cb cb_fn,
4607fe6a43SSeth Howell 		       void *cb_arg);
4707fe6a43SSeth Howell 
4807fe6a43SSeth Howell /**
4907fe6a43SSeth Howell  * Update one of the latency values for a given delay bdev.
5007fe6a43SSeth Howell  *
5107fe6a43SSeth Howell  * \param delay_name The name of the delay bdev
5207fe6a43SSeth Howell  * \param latency_us The new latency value, in microseconds
5307fe6a43SSeth Howell  * \param type a valid value from the delay_io_type enum
5407fe6a43SSeth Howell  * \return 0 on success, -ENODEV if the bdev cannot be found, and -EINVAL if the bdev is not a delay device.
5507fe6a43SSeth Howell  */
5607fe6a43SSeth Howell int vbdev_delay_update_latency_value(char *delay_name, uint64_t latency_us,
5707fe6a43SSeth Howell 				     enum delay_io_type type);
5807fe6a43SSeth Howell 
5907fe6a43SSeth Howell #endif /* SPDK_VBDEV_DELAY_H */
60