mirror of
https://github.com/AltraMayor/f3.git
synced 2025-08-04 02:55:57 -04:00

One can write more blocks per pass in order to reduce the total number of passes. Trading resets for writes is effective when writing blocks is cheaper than reseting the device being probed. This patch dynamically balances the number of writes and resets while probing. The effectiveness of this balance is shown below: A good 256MB drive produced the following measurements: Probe time: 2.89 seconds Probe read op: count=64, total time=0.13s, avg op time=2.06ms Probe write op: count=48, total time=1.41s, avg op time=29.47ms Probe reset op: count=8, total time=1.35s, avg op time=168.48ms The results from previous commit (see git log): Probe time: 47.57 seconds Probe read op: count=2014, total time=1.72s, avg op time=0.85ms Probe write op: count=2003, total time=45.32s, avg op time=22.62ms Probe reset op: count=3, total time=0.53s, avg op time=175.66ms Moreover, this patch spaces more uniformly the blocks write_test_blocks() writes to improve the effectiveness of each pass.
57 lines
1.5 KiB
C
57 lines
1.5 KiB
C
#ifndef HEADER_LIBPROBE_H
|
|
#define HEADER_LIBPROBE_H
|
|
|
|
#include <stdint.h>
|
|
|
|
enum fake_type {
|
|
/* Device is good. */
|
|
FKTY_GOOD,
|
|
|
|
/* Device is at least partially damaged. */
|
|
FKTY_BAD,
|
|
|
|
/* Device discards data after a given limit. */
|
|
FKTY_LIMBO,
|
|
|
|
/* Device overwrites data after a given limit. */
|
|
FKTY_WRAPAROUND,
|
|
|
|
/* Device is a sequence of wraparound and limbo regions. */
|
|
FKTY_CHAIN,
|
|
|
|
FKTY_MAX,
|
|
};
|
|
|
|
const char *fake_type_to_name(enum fake_type fake_type);
|
|
|
|
int dev_param_valid(uint64_t real_size_byte,
|
|
uint64_t announced_size_byte, int wrap, int block_order);
|
|
|
|
enum fake_type dev_param_to_type(uint64_t real_size_byte,
|
|
uint64_t announced_size_byte, int wrap, int block_order);
|
|
|
|
struct device;
|
|
|
|
struct device *create_file_device(const char *filename,
|
|
uint64_t real_size_byte, uint64_t fake_size_byte, int wrap,
|
|
int block_order, int keep_file);
|
|
|
|
struct device *create_block_device(const char *filename, int manual_reset);
|
|
|
|
struct device *create_perf_device(struct device *dev);
|
|
void perf_device_sample(struct device *dev,
|
|
uint64_t *pread_count, uint64_t *pread_time_us,
|
|
uint64_t *pwrite_count, uint64_t *pwrite_time_us,
|
|
uint64_t *preset_count, uint64_t *preset_time_us);
|
|
|
|
struct device *create_safe_device(struct device *dev, int max_blocks,
|
|
int min_memory);
|
|
|
|
void free_device(struct device *dev);
|
|
|
|
int probe_device_max_blocks(struct device *dev);
|
|
int probe_device(struct device *dev, uint64_t *preal_size_byte,
|
|
uint64_t *pannounced_size_byte, int *pwrap, int *block_order);
|
|
|
|
#endif /* HEADER_LIBPROBE_H */
|