blob: 175df8f592c57053072e3c305029a589ddd04b43 [file] [log] [blame]
/**
* SPDX-License-Identifier: GPL-2.0 only
*
* Copyright (c) 2025 Sandisk Corporation or its affiliates.
*/
#ifndef FIO_SPRANDOM_H
#define FIO_SPRANDOM_H
#include <stdint.h>
#include "lib/rand.h"
#include "pcbuf.h"
/**
* struct sprandom_info - information for sprandom operations.
*
* @over_provisioning: Over-provisioning ratio for the flash device.
* @region_sz: Size of each region in bytes.
* @num_regions: Number of SPRandom regions.
* @validity_dist: validity for each region.
* @invalid_pct: invalidation percentages per region.
* @invalid_buf: invalidation offsets two pahse buffer.
* @invalid_capacity: maximal size of invalidation buffer for a region.
* @invalid_count: number of invalid offsets in each phase.
* @current_region: index of the current region being processed.
* @curr_phase: current phase of the invalidation process (0 or 1).
* @region_write_count: number of writes performed in the current region.
* @writes_remaining: umber of writes left to perform.
* @rand_state: state for the random number generator.
*/
struct sprandom_info {
double over_provisioning;
uint64_t region_sz;
uint32_t num_regions;
uint32_t *invalid_pct;
/* Invalidation list*/
struct pc_buf *invalid_buf;
uint64_t invalid_capacity;
size_t invalid_count[2];
uint32_t current_region;
uint32_t curr_phase;
/* Region and write tracking */
uint64_t region_write_count;
uint64_t writes_remaining;
struct frand_state *rand_state;
};
/**
* sprandom_init - Initialize the sprandom for a given file and thread.
* @td: FIO thread data
* @f: FIO file
*
* Returns 0 on success, or a negative error code on failure.
*/
int sprandom_init(struct thread_data *td, struct fio_file *f);
/**
* sprandom_free - Frees resources associated with a sprandom_info structure.
* @info: sprandom_info structure to be freed.
*/
void sprandom_free(struct sprandom_info *info);
/**
* sprandom_get_next_offset - Get the next random offset for a file.
* @info: sprandom_info structure containing the state
* @f: FIO file
* @b: Output pointer to store the next offset.
*
* Returns 0 on success, or a negative error code on failure.
*/
int sprandom_get_next_offset(struct sprandom_info *info, struct fio_file *f, uint64_t *b);
#endif /* FIO_SPRANDOM_H */