fio:Added fio download link and corresponding fix patch
Source code:https://github.com/ldorau/fio Signed-off-by: chenrun1 <chenrun1@xiaomi.com>
This commit is contained in:
parent
b1e8fc784f
commit
e9172a3195
193
benchmarks/fio/0001-external-fio-fix-compile-warning.patch
Normal file
193
benchmarks/fio/0001-external-fio-fix-compile-warning.patch
Normal file
@ -0,0 +1,193 @@
|
||||
From b51436a258fc010a0ac15b551a9b010e54fccb11 Mon Sep 17 00:00:00 2001
|
||||
From: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
Date: Tue, 30 May 2023 22:01:51 +0800
|
||||
Subject: [PATCH 01/10] external/fio: fix compile warning
|
||||
|
||||
Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
---
|
||||
backend.c | 2 +-
|
||||
init.c | 4 ++--
|
||||
server.c | 2 +-
|
||||
stat.c | 28 +++++++++++++++-------------
|
||||
zbd.c | 2 +-
|
||||
5 files changed, 20 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git fio/backend.c fio/backend.c
|
||||
index fe614f6e..0fa10657 100644
|
||||
--- fio/backend.c
|
||||
+++ fio/backend.c
|
||||
@@ -1950,7 +1950,7 @@ static void *thread_main(void *data)
|
||||
* another thread is checking its io_u's for overlap
|
||||
*/
|
||||
if (td_offload_overlap(td)) {
|
||||
- int res = pthread_mutex_lock(&overlap_check);
|
||||
+ res = pthread_mutex_lock(&overlap_check);
|
||||
assert(res == 0);
|
||||
}
|
||||
td_set_runstate(td, TD_FINISHING);
|
||||
diff --git fio/init.c fio/init.c
|
||||
index f6a8056a..de9d9d27 100644
|
||||
--- fio/init.c
|
||||
+++ fio/init.c
|
||||
@@ -2524,12 +2524,12 @@ static void show_closest_option(const char *name)
|
||||
log_err("Did you mean %s?\n", l_opts[best_option].name);
|
||||
}
|
||||
|
||||
-static int parse_output_format(const char *optarg)
|
||||
+static int parse_output_format(const char *arg)
|
||||
{
|
||||
char *p, *orig, *opt;
|
||||
int ret = 0;
|
||||
|
||||
- p = orig = strdup(optarg);
|
||||
+ p = orig = strdup(arg);
|
||||
|
||||
output_format = 0;
|
||||
|
||||
diff --git fio/server.c fio/server.c
|
||||
index b453be5f..23da2ecf 100644
|
||||
--- fio/server.c
|
||||
+++ fio/server.c
|
||||
@@ -356,7 +356,7 @@ static int verify_convert_cmd(struct fio_net_cmd *cmd)
|
||||
}
|
||||
|
||||
if (cmd->pdu_len > FIO_SERVER_MAX_FRAGMENT_PDU) {
|
||||
- log_err("fio: command payload too large: %u\n", cmd->pdu_len);
|
||||
+ log_err("fio: command payload too large: %"PRIu32"\n", cmd->pdu_len);
|
||||
return 1;
|
||||
}
|
||||
|
||||
diff --git fio/stat.c fio/stat.c
|
||||
index 949af5ed..6a39ae6e 100644
|
||||
--- fio/stat.c
|
||||
+++ fio/stat.c
|
||||
@@ -45,10 +45,12 @@ void update_rusage_stat(struct thread_data *td)
|
||||
&td->ru_end.ru_utime);
|
||||
ts->sys_time += mtime_since_tv(&td->ru_start.ru_stime,
|
||||
&td->ru_end.ru_stime);
|
||||
+#ifndef __NuttX__
|
||||
ts->ctx += td->ru_end.ru_nvcsw + td->ru_end.ru_nivcsw
|
||||
- (td->ru_start.ru_nvcsw + td->ru_start.ru_nivcsw);
|
||||
ts->minf += td->ru_end.ru_minflt - td->ru_start.ru_minflt;
|
||||
ts->majf += td->ru_end.ru_majflt - td->ru_start.ru_majflt;
|
||||
+#endif
|
||||
|
||||
memcpy(&td->ru_start, &td->ru_end, sizeof(td->ru_end));
|
||||
}
|
||||
@@ -346,7 +348,7 @@ void show_group_stats(struct group_run_stats *rs, struct buf_output *out)
|
||||
const char *str[] = { " READ", " WRITE" , " TRIM"};
|
||||
int i;
|
||||
|
||||
- log_buf(out, "\nRun status group %d (all jobs):\n", rs->groupid);
|
||||
+ log_buf(out, "\nRun status group %"PRIu32" (all jobs):\n", rs->groupid);
|
||||
|
||||
for (i = 0; i < DDIR_RWDIR_CNT; i++) {
|
||||
const int i2p = is_power_of_2(rs->kb_base);
|
||||
@@ -595,7 +597,7 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts,
|
||||
char buf[64];
|
||||
|
||||
snprintf(buf, sizeof(buf),
|
||||
- "%s prio %u/%u",
|
||||
+ "%s prio %"PRIu32"/%"PRIu32"",
|
||||
clat_type,
|
||||
ts->clat_prio[ddir][i].ioprio >> 13,
|
||||
ts->clat_prio[ddir][i].ioprio & 7);
|
||||
@@ -636,7 +638,7 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts,
|
||||
|
||||
if (prio_samples > 0) {
|
||||
snprintf(prio_name, sizeof(prio_name),
|
||||
- "%s prio %u/%u (%.2f%% of IOs)",
|
||||
+ "%s prio %"PRIu32"/%"PRIu32" (%.2f%% of IOs)",
|
||||
clat_type,
|
||||
ts->clat_prio[ddir][i].ioprio >> 13,
|
||||
ts->clat_prio[ddir][i].ioprio & 7,
|
||||
@@ -896,7 +898,7 @@ static void show_block_infos(int nr_block_infos, uint32_t *block_infos,
|
||||
uint32_t block_info = percentiles[i];
|
||||
#define LINE_LENGTH 75
|
||||
char str[LINE_LENGTH];
|
||||
- int strln = snprintf(str, LINE_LENGTH, " %3.2fth=%u%c",
|
||||
+ int strln = snprintf(str, LINE_LENGTH, " %3.2fth=%"PRIu32"%c",
|
||||
plist[i].u.f, block_info,
|
||||
i == len - 1 ? '\n' : ',');
|
||||
assert(strln < LINE_LENGTH);
|
||||
@@ -1177,11 +1179,11 @@ static void show_thread_status_normal(struct thread_stat *ts,
|
||||
os_ctime_r((const time_t *) &time_p, time_buf, sizeof(time_buf));
|
||||
|
||||
if (!ts->error) {
|
||||
- log_buf(out, "%s: (groupid=%d, jobs=%d): err=%2d: pid=%d: %s",
|
||||
+ log_buf(out, "%s: (groupid=%"PRIu32", jobs=%"PRIu32"): err=%2"PRIu32": pid=%d: %s",
|
||||
ts->name, ts->groupid, ts->members,
|
||||
ts->error, (int) ts->pid, time_buf);
|
||||
} else {
|
||||
- log_buf(out, "%s: (groupid=%d, jobs=%d): err=%2d (%s): pid=%d: %s",
|
||||
+ log_buf(out, "%s: (groupid=%"PRIu32", jobs=%"PRIu32"): err=%2"PRIu32" (%s): pid=%d: %s",
|
||||
ts->name, ts->groupid, ts->members,
|
||||
ts->error, ts->verror, (int) ts->pid,
|
||||
time_buf);
|
||||
@@ -1253,13 +1255,13 @@ static void show_thread_status_normal(struct thread_stat *ts,
|
||||
(unsigned long long) ts->drop_io_u[1],
|
||||
(unsigned long long) ts->drop_io_u[2]);
|
||||
if (ts->continue_on_error) {
|
||||
- log_buf(out, " errors : total=%llu, first_error=%d/<%s>\n",
|
||||
+ log_buf(out, " errors : total=%llu, first_error=%"PRIu32"/<%s>\n",
|
||||
(unsigned long long)ts->total_err_count,
|
||||
ts->first_error,
|
||||
strerror(ts->first_error));
|
||||
}
|
||||
if (ts->latency_depth) {
|
||||
- log_buf(out, " latency : target=%llu, window=%llu, percentile=%.2f%%, depth=%u\n",
|
||||
+ log_buf(out, " latency : target=%llu, window=%llu, percentile=%.2f%%, depth=%"PRIu32"\n",
|
||||
(unsigned long long)ts->latency_target,
|
||||
(unsigned long long)ts->latency_window,
|
||||
ts->latency_percentile.u.f,
|
||||
@@ -1589,9 +1591,9 @@ static void show_thread_status_terse_all(struct thread_stat *ts,
|
||||
|
||||
/* General Info */
|
||||
if (ver == 2)
|
||||
- log_buf(out, "2;%s;%d;%d", ts->name, ts->groupid, ts->error);
|
||||
+ log_buf(out, "2;%s;%"PRIu32";%"PRIu32"", ts->name, ts->groupid, ts->error);
|
||||
else
|
||||
- log_buf(out, "%d;%s;%s;%d;%d", ver, fio_version_string,
|
||||
+ log_buf(out, "%d;%s;%s;%"PRIu32";%"PRIu32"", ver, fio_version_string,
|
||||
ts->name, ts->groupid, ts->error);
|
||||
|
||||
/* Log Read Status, or mixed if unified_rw_rep = 1 */
|
||||
@@ -1644,7 +1646,7 @@ static void show_thread_status_terse_all(struct thread_stat *ts,
|
||||
|
||||
/* Additional output if continue_on_error set - default off*/
|
||||
if (ts->continue_on_error)
|
||||
- log_buf(out, ";%llu;%d", (unsigned long long) ts->total_err_count, ts->first_error);
|
||||
+ log_buf(out, ";%llu;%"PRIu32"", (unsigned long long) ts->total_err_count, ts->first_error);
|
||||
|
||||
/* Additional output if description is set */
|
||||
if (strlen(ts->description)) {
|
||||
@@ -2519,11 +2521,11 @@ void __show_run_stats(void)
|
||||
ts->unified_rw_rep = td->o.unified_rw_rep;
|
||||
} else if (ts->kb_base != td->o.kb_base && !kb_base_warned) {
|
||||
log_info("fio: kb_base differs for jobs in group, using"
|
||||
- " %u as the base\n", ts->kb_base);
|
||||
+ " %"PRIu32" as the base\n", ts->kb_base);
|
||||
kb_base_warned = true;
|
||||
} else if (ts->unit_base != td->o.unit_base && !unit_base_warned) {
|
||||
log_info("fio: unit_base differs for jobs in group, using"
|
||||
- " %u as the base\n", ts->unit_base);
|
||||
+ " %"PRIu32" as the base\n", ts->unit_base);
|
||||
unit_base_warned = true;
|
||||
}
|
||||
|
||||
diff --git fio/zbd.c fio/zbd.c
|
||||
index 627fb968..114fb665 100644
|
||||
--- fio/zbd.c
|
||||
+++ fio/zbd.c
|
||||
@@ -1491,7 +1491,7 @@ static struct fio_zone_info *zbd_replay_write_order(struct thread_data *td,
|
||||
}
|
||||
|
||||
if (z->verify_block * min_bs >= z->capacity) {
|
||||
- log_err("%s: %d * %"PRIu64" >= %"PRIu64"\n",
|
||||
+ log_err("%s: %"PRIu32" * %"PRIu64" >= %"PRIu64"\n",
|
||||
f->file_name, z->verify_block, min_bs, z->capacity);
|
||||
/*
|
||||
* If the assertion below fails during a test run, adding
|
||||
--
|
||||
2.34.1
|
||||
|
81
benchmarks/fio/0002-external-fio-add-os-nuttx-support.patch
Normal file
81
benchmarks/fio/0002-external-fio-add-os-nuttx-support.patch
Normal file
@ -0,0 +1,81 @@
|
||||
From 8f78b1199f814ad18e1902edf8d9fbf23b05b4d3 Mon Sep 17 00:00:00 2001
|
||||
From: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
Date: Mon, 5 Jun 2023 16:00:49 +0800
|
||||
Subject: [PATCH 02/10] external/fio: add os-nuttx support
|
||||
|
||||
Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
---
|
||||
os/os-nuttx.h | 39 +++++++++++++++++++++++++++++++++++++++
|
||||
os/os.h | 3 +++
|
||||
2 files changed, 42 insertions(+)
|
||||
create mode 100644 os/os-nuttx.h
|
||||
|
||||
diff --git fio/os/os-nuttx.h fio/os/os-nuttx.h
|
||||
new file mode 100644
|
||||
index 00000000..c81ea32c
|
||||
--- /dev/null
|
||||
+++ fio/os/os-nuttx.h
|
||||
@@ -0,0 +1,39 @@
|
||||
+#ifndef FIO_OS_NUTTX_H
|
||||
+#define FIO_OS_NUTTX_H
|
||||
+
|
||||
+#include <errno.h>
|
||||
+#include <malloc.h>
|
||||
+#include <sys/mman.h>
|
||||
+#include <sys/ioctl.h>
|
||||
+
|
||||
+#include <nuttx/fs/ioctl.h>
|
||||
+
|
||||
+#include "../file.h"
|
||||
+
|
||||
+#define FIO_OS os_nuttx
|
||||
+#define OS_MAP_ANON MAP_ANON
|
||||
+
|
||||
+#define fio_swap16(x) bswap16(x)
|
||||
+#define fio_swap32(x) bswap32(x)
|
||||
+#define fio_swap64(x) bswap64(x)
|
||||
+
|
||||
+static inline unsigned long long os_phys_mem(void)
|
||||
+{
|
||||
+ struct mallinfo info;
|
||||
+
|
||||
+ info = mallinfo();
|
||||
+ return (unsigned long long)info.arena;
|
||||
+}
|
||||
+
|
||||
+static inline int blockdev_invalidate_cache(struct fio_file *f)
|
||||
+{
|
||||
+ return ioctl(f->fd, BIOC_FLUSH, 0);
|
||||
+}
|
||||
+
|
||||
+static inline pid_t setsid(void)
|
||||
+{
|
||||
+ errno = ENOSYS;
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
diff --git fio/os/os.h fio/os/os.h
|
||||
index aba6813f..dddff7c1 100644
|
||||
--- fio/os/os.h
|
||||
+++ fio/os/os.h
|
||||
@@ -24,6 +24,7 @@ enum {
|
||||
os_windows,
|
||||
os_android,
|
||||
os_dragonfly,
|
||||
+ os_nuttx,
|
||||
|
||||
os_nr,
|
||||
};
|
||||
@@ -53,6 +54,8 @@ typedef enum {
|
||||
#include "os-windows.h"
|
||||
#elif defined (__DragonFly__)
|
||||
#include "os-dragonfly.h"
|
||||
+#elif defined (__NuttX__)
|
||||
+#include "os-nuttx.h"
|
||||
#else
|
||||
#error "unsupported os"
|
||||
#endif
|
||||
--
|
||||
2.34.1
|
||||
|
@ -0,0 +1,65 @@
|
||||
From c39410be0f4516cd06f6d3597daf025db2efcba1 Mon Sep 17 00:00:00 2001
|
||||
From: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
Date: Mon, 5 Jun 2023 16:02:10 +0800
|
||||
Subject: [PATCH 03/10] external/fio: modify smaller size for nuttx
|
||||
|
||||
Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
---
|
||||
filehash.c | 2 ++
|
||||
lib/memcpy.c | 2 ++
|
||||
smalloc.c | 7 +++++++
|
||||
3 files changed, 11 insertions(+)
|
||||
|
||||
diff --git fio/filehash.c fio/filehash.c
|
||||
index 71ec7b18..f13740d2 100644
|
||||
--- fio/filehash.c
|
||||
+++ fio/filehash.c
|
||||
@@ -11,7 +11,9 @@
|
||||
#define HASH_BUCKETS 512
|
||||
#define HASH_MASK (HASH_BUCKETS - 1)
|
||||
|
||||
+#ifndef BLOOM_SIZE
|
||||
#define BLOOM_SIZE 16*1024*1024
|
||||
+#endif
|
||||
|
||||
static unsigned int file_hash_size = HASH_BUCKETS * sizeof(struct flist_head);
|
||||
|
||||
diff --git fio/lib/memcpy.c fio/lib/memcpy.c
|
||||
index a5521343..1b3466c1 100644
|
||||
--- fio/lib/memcpy.c
|
||||
+++ fio/lib/memcpy.c
|
||||
@@ -9,7 +9,9 @@
|
||||
#include "../gettime.h"
|
||||
#include "../os/os.h"
|
||||
|
||||
+#ifndef BUF_SIZE
|
||||
#define BUF_SIZE 32 * 1024 * 1024ULL
|
||||
+#endif
|
||||
|
||||
#define NR_ITERS 64
|
||||
|
||||
diff --git fio/smalloc.c fio/smalloc.c
|
||||
index 23243054..142e03d2 100644
|
||||
--- fio/smalloc.c
|
||||
+++ fio/smalloc.c
|
||||
@@ -18,10 +18,17 @@
|
||||
#define SMALLOC_BPI (sizeof(unsigned int) * 8)
|
||||
#define SMALLOC_BPL (SMALLOC_BPB * SMALLOC_BPI)
|
||||
|
||||
+#ifndef INITIAL_SIZE
|
||||
#define INITIAL_SIZE 16*1024*1024 /* new pool size */
|
||||
+#endif
|
||||
+
|
||||
+#ifndef INITIAL_POOLS
|
||||
#define INITIAL_POOLS 8 /* maximum number of pools to setup */
|
||||
+#endif
|
||||
|
||||
+#ifndef MAX_POOLS
|
||||
#define MAX_POOLS 16
|
||||
+#endif
|
||||
|
||||
#define SMALLOC_PRE_RED 0xdeadbeefU
|
||||
#define SMALLOC_POST_RED 0x5aa55aa5U
|
||||
--
|
||||
2.34.1
|
||||
|
@ -0,0 +1,32 @@
|
||||
From 02df0c8355b0adf01696e831f319c60f9ae6efb7 Mon Sep 17 00:00:00 2001
|
||||
From: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
Date: Fri, 9 Jun 2023 14:39:49 +0800
|
||||
Subject: [PATCH 04/10] external/fio: fix runtime error by asan
|
||||
|
||||
/home/djz/workspace/test/vela_new/external/fio/fio/arch/arch-x86-common.h:11:7: runtime error: store to
|
||||
misaligned address 0xf41f0d47 for type 'unsigned int', which requires 4 byte alignment
|
||||
0xf41f0d47: note: pointer points here
|
||||
16 00 00 00 00 bc 0d 1f f4 00 d4 bd 1a 00 00 00 00 5c 2e 44 57 98 0d 1f f4 26 ab b8 56 18 0e 1f
|
||||
^
|
||||
|
||||
Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
---
|
||||
arch/arch-x86-common.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git fio/arch/arch-x86-common.h fio/arch/arch-x86-common.h
|
||||
index f32835cc..fe97cf64 100644
|
||||
--- fio/arch/arch-x86-common.h
|
||||
+++ fio/arch/arch-x86-common.h
|
||||
@@ -59,7 +59,7 @@ static inline void arch_init_amd(void)
|
||||
static inline void arch_init(char *envp[])
|
||||
{
|
||||
unsigned int level;
|
||||
- char str[13];
|
||||
+ char str[13] __attribute__((aligned(0x8)));
|
||||
|
||||
arch_random = tsc_reliable = 0;
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
172
benchmarks/fio/0005-external-fio-fix-compile-warning.patch
Normal file
172
benchmarks/fio/0005-external-fio-fix-compile-warning.patch
Normal file
@ -0,0 +1,172 @@
|
||||
From a69a23fb0cf6f9e0ad0cb857dda74e6e9b4bc6da Mon Sep 17 00:00:00 2001
|
||||
From: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
Date: Sat, 10 Jun 2023 18:34:17 +0800
|
||||
Subject: [PATCH 05/10] external/fio: fix compile warning
|
||||
|
||||
io/compiler/compiler.h:25:25: warning: comparison of distinct pointer types lacks a cast
|
||||
25 | (void)(&__dummy == &__dummy2); \
|
||||
| ^~
|
||||
fio/os/os.h:291:9: note: in expansion of macro 'typecheck'
|
||||
291 | typecheck(uint32_t, val); \
|
||||
| ^~~~~~~~~
|
||||
fio/verify.c:1628:48: note: in expansion of macro 'cpu_to_le32'
|
||||
1628 | s->rand.state32.s[0] = cpu_to_le32(td->random_state.state32.s1);
|
||||
| ^~~~~~~~~~~
|
||||
|
||||
Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
---
|
||||
client.c | 2 +-
|
||||
engines/fileoperations.c | 4 ++--
|
||||
eta.c | 6 +++---
|
||||
iolog.c | 2 +-
|
||||
os/os.h | 2 --
|
||||
verify.c | 6 +++---
|
||||
zbd.c | 2 +-
|
||||
7 files changed, 11 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git fio/client.c fio/client.c
|
||||
index 37da74bc..f9a3247e 100644
|
||||
--- fio/client.c
|
||||
+++ fio/client.c
|
||||
@@ -1406,7 +1406,7 @@ static void client_flush_hist_samples(FILE *f, int hist_coarseness, void *sample
|
||||
entry = s->data.plat_entry;
|
||||
io_u_plat = entry->io_u_plat;
|
||||
|
||||
- fprintf(f, "%lu, %u, %llu, ", (unsigned long) s->time,
|
||||
+ fprintf(f, "%lu, %"PRIu32", %llu, ", (unsigned long) s->time,
|
||||
io_sample_ddir(s), (unsigned long long) s->bs);
|
||||
for (j = 0; j < FIO_IO_U_PLAT_NR - stride; j += stride) {
|
||||
fprintf(f, "%llu, ", (unsigned long long)hist_sum(j, stride, io_u_plat, NULL));
|
||||
diff --git fio/engines/fileoperations.c fio/engines/fileoperations.c
|
||||
index 1db60da1..ed0456c0 100644
|
||||
--- fio/engines/fileoperations.c
|
||||
+++ fio/engines/fileoperations.c
|
||||
@@ -109,7 +109,7 @@ static int stat_file(struct thread_data *td, struct fio_file *f)
|
||||
struct timespec start;
|
||||
int do_lat = !td->o.disable_lat;
|
||||
struct stat statbuf;
|
||||
-#ifndef WIN32
|
||||
+#if !defined(WIN32) && !defined(__NuttX__)
|
||||
struct statx statxbuf;
|
||||
char *abspath;
|
||||
#endif
|
||||
@@ -137,7 +137,7 @@ static int stat_file(struct thread_data *td, struct fio_file *f)
|
||||
ret = lstat(f->file_name, &statbuf);
|
||||
break;
|
||||
case FIO_FILESTAT_STATX:
|
||||
-#ifndef WIN32
|
||||
+#if !defined(WIN32) && !defined(__NuttX__)
|
||||
abspath = realpath(f->file_name, NULL);
|
||||
if (abspath) {
|
||||
ret = statx(-1, abspath, 0, STATX_ALL, &statxbuf);
|
||||
diff --git fio/eta.c fio/eta.c
|
||||
index 6017ca31..2df3bd5d 100644
|
||||
--- fio/eta.c
|
||||
+++ fio/eta.c
|
||||
@@ -344,7 +344,7 @@ static void calc_rate(int unified_rw_rep, unsigned long mtime,
|
||||
|
||||
static void calc_iops(int unified_rw_rep, unsigned long mtime,
|
||||
unsigned long long *io_iops,
|
||||
- unsigned long long *prev_io_iops, unsigned int *iops)
|
||||
+ unsigned long long *prev_io_iops, uint32_t *iops)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -594,7 +594,7 @@ void display_thread_status(struct jobs_eta *je)
|
||||
p += sprintf(p, "\n");
|
||||
}
|
||||
|
||||
- p += sprintf(p, "Jobs: %d (f=%d)", je->nr_running, je->files_open);
|
||||
+ p += sprintf(p, "Jobs: %"PRIi32" (f=%"PRIi32")", je->nr_running, je->files_open);
|
||||
|
||||
/* rate limits, if any */
|
||||
if (je->m_rate[0] || je->m_rate[1] || je->m_rate[2] ||
|
||||
@@ -611,7 +611,7 @@ void display_thread_status(struct jobs_eta *je)
|
||||
free(mr);
|
||||
} else if (je->m_iops[0] || je->m_iops[1] || je->m_iops[2] ||
|
||||
je->t_iops[0] || je->t_iops[1] || je->t_iops[2]) {
|
||||
- p += sprintf(p, ", %d-%d IOPS",
|
||||
+ p += sprintf(p, ", %"PRIi32"-%"PRIi32" IOPS",
|
||||
je->m_iops[0] + je->m_iops[1] + je->m_iops[2],
|
||||
je->t_iops[0] + je->t_iops[1] + je->t_iops[2]);
|
||||
}
|
||||
diff --git fio/iolog.c fio/iolog.c
|
||||
index aa9c3bb1..cdb24a2b 100644
|
||||
--- fio/iolog.c
|
||||
+++ fio/iolog.c
|
||||
@@ -952,7 +952,7 @@ static void flush_hist_samples(FILE *f, int hist_coarseness, void *samples,
|
||||
entry_before = flist_first_entry(&entry->list, struct io_u_plat_entry, list);
|
||||
io_u_plat_before = entry_before->io_u_plat;
|
||||
|
||||
- fprintf(f, "%lu, %u, %llu, ", (unsigned long) s->time,
|
||||
+ fprintf(f, "%lu, %"PRIu32", %llu, ", (unsigned long) s->time,
|
||||
io_sample_ddir(s), (unsigned long long) s->bs);
|
||||
for (j = 0; j < FIO_IO_U_PLAT_NR - stride; j += stride) {
|
||||
fprintf(f, "%llu, ", (unsigned long long)
|
||||
diff --git fio/os/os.h fio/os/os.h
|
||||
index dddff7c1..4d8c7537 100644
|
||||
--- fio/os/os.h
|
||||
+++ fio/os/os.h
|
||||
@@ -262,7 +262,6 @@ static inline uint64_t fio_swap64(uint64_t val)
|
||||
__le16_to_cpu(val); \
|
||||
})
|
||||
#define le32_to_cpu(val) ({ \
|
||||
- typecheck(uint32_t, val); \
|
||||
__le32_to_cpu(val); \
|
||||
})
|
||||
#define le64_to_cpu(val) ({ \
|
||||
@@ -288,7 +287,6 @@ static inline uint64_t fio_swap64(uint64_t val)
|
||||
__cpu_to_le16(val); \
|
||||
})
|
||||
#define cpu_to_le32(val) ({ \
|
||||
- typecheck(uint32_t, val); \
|
||||
__cpu_to_le32(val); \
|
||||
})
|
||||
#define cpu_to_le64(val) ({ \
|
||||
diff --git fio/verify.c fio/verify.c
|
||||
index 0e1e4639..ea414749 100644
|
||||
--- fio/verify.c
|
||||
+++ fio/verify.c
|
||||
@@ -341,7 +341,7 @@ static void log_verify_failure(struct verify_header *hdr, struct vcont *vc)
|
||||
|
||||
offset = vc->io_u->verify_offset;
|
||||
offset += vc->hdr_num * hdr->len;
|
||||
- log_err("%.8s: verify failed at file %s offset %llu, length %u"
|
||||
+ log_err("%.8s: verify failed at file %s offset %llu, length %"PRIu32""
|
||||
" (requested block: offset=%llu, length=%llu, flags=%x)\n",
|
||||
vc->name, vc->io_u->file->file_name, offset, hdr->len,
|
||||
vc->io_u->verify_offset, vc->io_u->buflen, vc->io_u->flags);
|
||||
@@ -819,7 +819,7 @@ static int verify_header(struct io_u *io_u, struct thread_data *td,
|
||||
goto err;
|
||||
}
|
||||
if (hdr->len != hdr_len) {
|
||||
- log_err("verify: bad header length %u, wanted %u",
|
||||
+ log_err("verify: bad header length %"PRIu32", wanted %u",
|
||||
hdr->len, hdr_len);
|
||||
goto err;
|
||||
}
|
||||
@@ -854,7 +854,7 @@ static int verify_header(struct io_u *io_u, struct thread_data *td,
|
||||
|
||||
crc = fio_crc32c(p, offsetof(struct verify_header, crc32));
|
||||
if (crc != hdr->crc32) {
|
||||
- log_err("verify: bad header crc %x, calculated %x",
|
||||
+ log_err("verify: bad header crc %"PRIx32", calculated %"PRIx32"",
|
||||
hdr->crc32, crc);
|
||||
goto err;
|
||||
}
|
||||
diff --git fio/zbd.c fio/zbd.c
|
||||
index 114fb665..3933ab2d 100644
|
||||
--- fio/zbd.c
|
||||
+++ fio/zbd.c
|
||||
@@ -814,7 +814,7 @@ static int parse_zone_info(struct thread_data *td, struct fio_file *f)
|
||||
break;
|
||||
|
||||
nrz = zbd_report_zones(td, f, offset, zones,
|
||||
- min((uint32_t)(nr_zones - j),
|
||||
+ min((unsigned)(nr_zones - j),
|
||||
ZBD_REPORT_MAX_ZONES));
|
||||
if (nrz < 0) {
|
||||
ret = nrz;
|
||||
--
|
||||
2.34.1
|
||||
|
@ -0,0 +1,438 @@
|
||||
From 6afb9af3dd7734d0f6bd090fba947ffaec43482b Mon Sep 17 00:00:00 2001
|
||||
From: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
Date: Mon, 5 Jun 2023 14:44:53 +0800
|
||||
Subject: [PATCH 06/10] external/fio: reinit global var issue when run multiple
|
||||
times
|
||||
|
||||
Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
---
|
||||
init.c | 386 +++++++++++++++++++++++++-----------------------------
|
||||
smalloc.c | 4 +
|
||||
2 files changed, 186 insertions(+), 204 deletions(-)
|
||||
|
||||
diff --git fio/init.c fio/init.c
|
||||
index de9d9d27..9dcad491 100644
|
||||
--- fio/init.c
|
||||
+++ fio/init.c
|
||||
@@ -96,214 +96,191 @@ static bool did_arg;
|
||||
* Command line options. These will contain the above, plus a few
|
||||
* extra that only pertain to fio itself and not jobs.
|
||||
*/
|
||||
-static struct option l_opts[FIO_NR_OPTIONS] = {
|
||||
- {
|
||||
- .name = (char *) "output",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'o' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "latency-log",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'l' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "bandwidth-log",
|
||||
- .has_arg = no_argument,
|
||||
- .val = 'b' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "minimal",
|
||||
- .has_arg = no_argument,
|
||||
- .val = 'm' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "output-format",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'F' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "append-terse",
|
||||
- .has_arg = optional_argument,
|
||||
- .val = 'f',
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "version",
|
||||
- .has_arg = no_argument,
|
||||
- .val = 'v' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "help",
|
||||
- .has_arg = no_argument,
|
||||
- .val = 'h' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "cmdhelp",
|
||||
- .has_arg = optional_argument,
|
||||
- .val = 'c' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "enghelp",
|
||||
- .has_arg = optional_argument,
|
||||
- .val = 'i' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "showcmd",
|
||||
- .has_arg = no_argument,
|
||||
- .val = 's' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "readonly",
|
||||
- .has_arg = no_argument,
|
||||
- .val = 'r' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "eta",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'e' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "eta-interval",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'O' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "eta-newline",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'E' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "debug",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'd' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "parse-only",
|
||||
- .has_arg = no_argument,
|
||||
- .val = 'P' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "section",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'x' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
+static struct option l_opts[FIO_NR_OPTIONS];
|
||||
+static void fio_init_global(void)
|
||||
+{
|
||||
+ int i = 0;
|
||||
+
|
||||
+ l_opts[i].name = (char *) "output",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'o' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "latency-log",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'l' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "bandwidth-log",
|
||||
+ l_opts[i].has_arg = no_argument,
|
||||
+ l_opts[i++].val = 'b' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "minimal",
|
||||
+ l_opts[i].has_arg = no_argument,
|
||||
+ l_opts[i++].val = 'm' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "output-format",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'F' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "append-terse",
|
||||
+ l_opts[i].has_arg = optional_argument,
|
||||
+ l_opts[i++].val = 'f',
|
||||
+
|
||||
+ l_opts[i].name = (char *) "version",
|
||||
+ l_opts[i].has_arg = no_argument,
|
||||
+ l_opts[i++].val = 'v' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "help",
|
||||
+ l_opts[i].has_arg = no_argument,
|
||||
+ l_opts[i++].val = 'h' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "cmdhelp",
|
||||
+ l_opts[i].has_arg = optional_argument,
|
||||
+ l_opts[i++].val = 'c' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "enghelp",
|
||||
+ l_opts[i].has_arg = optional_argument,
|
||||
+ l_opts[i++].val = 'i' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "showcmd",
|
||||
+ l_opts[i].has_arg = no_argument,
|
||||
+ l_opts[i++].val = 's' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "readonly",
|
||||
+ l_opts[i].has_arg = no_argument,
|
||||
+ l_opts[i++].val = 'r' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "eta",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'e' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "eta-interval",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'O' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "eta-newline",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'E' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "debug",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'd' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "parse-only",
|
||||
+ l_opts[i].has_arg = no_argument,
|
||||
+ l_opts[i++].val = 'P' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "section",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'x' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
#ifdef CONFIG_ZLIB
|
||||
- {
|
||||
- .name = (char *) "inflate-log",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'X' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
+ l_opts[i].name = (char *) "inflate-log",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'X' | FIO_CLIENT_FLAG,
|
||||
#endif
|
||||
- {
|
||||
- .name = (char *) "alloc-size",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'a' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "profile",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'p' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "warnings-fatal",
|
||||
- .has_arg = no_argument,
|
||||
- .val = 'w' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "max-jobs",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'j' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "terse-version",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'V' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "server",
|
||||
- .has_arg = optional_argument,
|
||||
- .val = 'S',
|
||||
- },
|
||||
+
|
||||
+ l_opts[i].name = (char *) "alloc-size",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'a' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "profile",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'p' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "warnings-fatal",
|
||||
+ l_opts[i].has_arg = no_argument,
|
||||
+ l_opts[i++].val = 'w' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "max-jobs",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'j' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "terse-version",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'V' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "server",
|
||||
+ l_opts[i].has_arg = optional_argument,
|
||||
+ l_opts[i++].val = 'S',
|
||||
+
|
||||
#ifdef WIN32
|
||||
- {
|
||||
- .name = (char *) "server-internal",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'N',
|
||||
- },
|
||||
+ l_opts[i].name = (char *) "server-internal",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'N',
|
||||
#endif
|
||||
- { .name = (char *) "daemonize",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'D',
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "client",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'C',
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "remote-config",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'R',
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "cpuclock-test",
|
||||
- .has_arg = no_argument,
|
||||
- .val = 'T',
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "crctest",
|
||||
- .has_arg = optional_argument,
|
||||
- .val = 'G',
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "memcpytest",
|
||||
- .has_arg = optional_argument,
|
||||
- .val = 'M',
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "idle-prof",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'I',
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "status-interval",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'L' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "trigger-file",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'W',
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "trigger-timeout",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'B',
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "trigger",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'H',
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "trigger-remote",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'J',
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "aux-path",
|
||||
- .has_arg = required_argument,
|
||||
- .val = 'K',
|
||||
- },
|
||||
- {
|
||||
- .name = (char *) "merge-blktrace-only",
|
||||
- .has_arg = no_argument,
|
||||
- .val = 'A' | FIO_CLIENT_FLAG,
|
||||
- },
|
||||
- {
|
||||
- .name = NULL,
|
||||
- },
|
||||
-};
|
||||
+
|
||||
+ l_opts[i].name = (char *) "daemonize",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'D',
|
||||
+
|
||||
+ l_opts[i].name = (char *) "client",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'C',
|
||||
+
|
||||
+ l_opts[i].name = (char *) "remote-config",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'R',
|
||||
+
|
||||
+ l_opts[i].name = (char *) "cpuclock-test",
|
||||
+ l_opts[i].has_arg = no_argument,
|
||||
+ l_opts[i++].val = 'T',
|
||||
+
|
||||
+ l_opts[i].name = (char *) "crctest",
|
||||
+ l_opts[i].has_arg = optional_argument,
|
||||
+ l_opts[i++].val = 'G',
|
||||
+
|
||||
+ l_opts[i].name = (char *) "memcpytest",
|
||||
+ l_opts[i].has_arg = optional_argument,
|
||||
+ l_opts[i++].val = 'M',
|
||||
+
|
||||
+ l_opts[i].name = (char *) "idle-prof",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'I',
|
||||
+
|
||||
+ l_opts[i].name = (char *) "status-interval",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'L' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = (char *) "trigger-file",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'W',
|
||||
+
|
||||
+ l_opts[i].name = (char *) "trigger-timeout",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'B',
|
||||
+
|
||||
+ l_opts[i].name = (char *) "trigger",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'H',
|
||||
+
|
||||
+ l_opts[i].name = (char *) "trigger-remote",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'J',
|
||||
+
|
||||
+ l_opts[i].name = (char *) "aux-path",
|
||||
+ l_opts[i].has_arg = required_argument,
|
||||
+ l_opts[i++].val = 'K',
|
||||
+
|
||||
+ l_opts[i].name = (char *) "merge-blktrace-only",
|
||||
+ l_opts[i].has_arg = no_argument,
|
||||
+ l_opts[i++].val = 'A' | FIO_CLIENT_FLAG,
|
||||
+
|
||||
+ l_opts[i].name = NULL,
|
||||
+
|
||||
+ thread_number = 0;
|
||||
+ nr_segments = 0;
|
||||
+ cur_segment = 0;
|
||||
+ stat_number = 0;
|
||||
+
|
||||
+ did_arg = false;
|
||||
+ ini_file = NULL;
|
||||
+ nr_clients = 0;
|
||||
+ thread_number = 0;
|
||||
+ prev_group_jobs = 0;
|
||||
+ memset(&def_thread, 0, sizeof(def_thread));
|
||||
+ memset(segments, 0, sizeof(segments));
|
||||
+ memset(cmd_optstr, 0, sizeof(cmd_optstr));
|
||||
+}
|
||||
|
||||
void free_threads_shm(void)
|
||||
{
|
||||
@@ -3044,6 +3021,7 @@ int fio_init_options(void)
|
||||
f_out = stdout;
|
||||
f_err = stderr;
|
||||
|
||||
+ fio_init_global();
|
||||
fio_options_fill_optstring();
|
||||
fio_options_dup_and_init(l_opts);
|
||||
|
||||
diff --git fio/smalloc.c fio/smalloc.c
|
||||
index 142e03d2..a93290eb 100644
|
||||
--- fio/smalloc.c
|
||||
+++ fio/smalloc.c
|
||||
@@ -215,6 +215,10 @@ void sinit(void)
|
||||
bool ret;
|
||||
int i;
|
||||
|
||||
+ mp = NULL;
|
||||
+ nr_pools = 0;
|
||||
+ smalloc_pool_size = INITIAL_SIZE;
|
||||
+
|
||||
/*
|
||||
* sinit() can be called more than once if alloc-size is
|
||||
* set. But we want to allocate space for the struct pool
|
||||
--
|
||||
2.34.1
|
||||
|
181
benchmarks/fio/0007-external-fio-add-engine-init.patch
Normal file
181
benchmarks/fio/0007-external-fio-add-engine-init.patch
Normal file
@ -0,0 +1,181 @@
|
||||
From b167af3a9446506c6b3f48c0b03ae58bb3f1e9d4 Mon Sep 17 00:00:00 2001
|
||||
From: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
Date: Sat, 10 Jun 2023 15:01:29 +0800
|
||||
Subject: [PATCH 07/10] external/fio: add engine init
|
||||
|
||||
Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
|
||||
---
|
||||
engines/cpu.c | 2 +-
|
||||
engines/exec.c | 2 +-
|
||||
engines/falloc.c | 2 +-
|
||||
engines/fileoperations.c | 2 +-
|
||||
engines/ftruncate.c | 2 +-
|
||||
engines/mmap.c | 2 +-
|
||||
engines/net.c | 2 +-
|
||||
engines/null.c | 2 +-
|
||||
engines/sync.c | 2 +-
|
||||
libfio.c | 24 ++++++++++++++++++++++++
|
||||
10 files changed, 33 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git fio/engines/cpu.c fio/engines/cpu.c
|
||||
index ce74dbce..564a3d7a 100644
|
||||
--- fio/engines/cpu.c
|
||||
+++ fio/engines/cpu.c
|
||||
@@ -326,7 +326,7 @@ static struct ioengine_ops ioengine = {
|
||||
.option_struct_size = sizeof(struct cpu_options),
|
||||
};
|
||||
|
||||
-static void fio_init fio_cpuio_register(void)
|
||||
+void fio_cpuio_register(void)
|
||||
{
|
||||
register_ioengine(&ioengine);
|
||||
}
|
||||
diff --git fio/engines/exec.c fio/engines/exec.c
|
||||
index 20e50e00..a9025264 100644
|
||||
--- fio/engines/exec.c
|
||||
+++ fio/engines/exec.c
|
||||
@@ -383,7 +383,7 @@ static struct ioengine_ops ioengine = {
|
||||
.option_struct_size = sizeof(struct exec_options),
|
||||
};
|
||||
|
||||
-static void fio_init fio_exec_register(void)
|
||||
+void fio_exec_register(void)
|
||||
{
|
||||
register_ioengine(&ioengine);
|
||||
}
|
||||
diff --git fio/engines/falloc.c fio/engines/falloc.c
|
||||
index 4b05ed68..9fc3bd5b 100644
|
||||
--- fio/engines/falloc.c
|
||||
+++ fio/engines/falloc.c
|
||||
@@ -101,7 +101,7 @@ static struct ioengine_ops ioengine = {
|
||||
.flags = FIO_SYNCIO
|
||||
};
|
||||
|
||||
-static void fio_init fio_syncio_register(void)
|
||||
+void fio_syncio_falloc_register(void)
|
||||
{
|
||||
register_ioengine(&ioengine);
|
||||
}
|
||||
diff --git fio/engines/fileoperations.c fio/engines/fileoperations.c
|
||||
index ed0456c0..b302cda5 100644
|
||||
--- fio/engines/fileoperations.c
|
||||
+++ fio/engines/fileoperations.c
|
||||
@@ -303,7 +303,7 @@ static struct ioengine_ops ioengine_filedelete = {
|
||||
};
|
||||
|
||||
|
||||
-static void fio_init fio_fileoperations_register(void)
|
||||
+void fio_fileoperations_register(void)
|
||||
{
|
||||
register_ioengine(&ioengine_filecreate);
|
||||
register_ioengine(&ioengine_filestat);
|
||||
diff --git fio/engines/ftruncate.c fio/engines/ftruncate.c
|
||||
index c7ad038c..7ed859a4 100644
|
||||
--- fio/engines/ftruncate.c
|
||||
+++ fio/engines/ftruncate.c
|
||||
@@ -41,7 +41,7 @@ static struct ioengine_ops ioengine = {
|
||||
.flags = FIO_SYNCIO | FIO_FAKEIO
|
||||
};
|
||||
|
||||
-static void fio_init fio_syncio_register(void)
|
||||
+void fio_syncio_ftruncate_register(void)
|
||||
{
|
||||
register_ioengine(&ioengine);
|
||||
}
|
||||
diff --git fio/engines/mmap.c fio/engines/mmap.c
|
||||
index 55ba1ab3..a47b9686 100644
|
||||
--- fio/engines/mmap.c
|
||||
+++ fio/engines/mmap.c
|
||||
@@ -327,7 +327,7 @@ static struct ioengine_ops ioengine = {
|
||||
#endif
|
||||
};
|
||||
|
||||
-static void fio_init fio_mmapio_register(void)
|
||||
+void fio_mmapio_register(void)
|
||||
{
|
||||
register_ioengine(&ioengine);
|
||||
}
|
||||
diff --git fio/engines/net.c fio/engines/net.c
|
||||
index c6cec584..0f9fd6be 100644
|
||||
--- fio/engines/net.c
|
||||
+++ fio/engines/net.c
|
||||
@@ -1450,7 +1450,7 @@ static int str_hostname_cb(void *data, const char *input)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void fio_init fio_netio_register(void)
|
||||
+void fio_netio_register(void)
|
||||
{
|
||||
register_ioengine(&ioengine_rw);
|
||||
#ifdef CONFIG_LINUX_SPLICE
|
||||
diff --git fio/engines/null.c fio/engines/null.c
|
||||
index 68759c26..2b4695c4 100644
|
||||
--- fio/engines/null.c
|
||||
+++ fio/engines/null.c
|
||||
@@ -176,7 +176,7 @@ static struct ioengine_ops ioengine = {
|
||||
.flags = FIO_DISKLESSIO | FIO_FAKEIO,
|
||||
};
|
||||
|
||||
-static void fio_init fio_null_register(void)
|
||||
+void fio_null_register(void)
|
||||
{
|
||||
register_ioengine(&ioengine);
|
||||
}
|
||||
diff --git fio/engines/sync.c fio/engines/sync.c
|
||||
index 339ba999..f1047114 100644
|
||||
--- fio/engines/sync.c
|
||||
+++ fio/engines/sync.c
|
||||
@@ -490,7 +490,7 @@ static struct ioengine_ops ioengine_pvrw2 = {
|
||||
};
|
||||
#endif
|
||||
|
||||
-static void fio_init fio_syncio_register(void)
|
||||
+void fio_syncio_register(void)
|
||||
{
|
||||
register_ioengine(&ioengine_rw);
|
||||
register_ioengine(&ioengine_prw);
|
||||
diff --git fio/libfio.c fio/libfio.c
|
||||
index 1a891776..b634fbc7 100644
|
||||
--- fio/libfio.c
|
||||
+++ fio/libfio.c
|
||||
@@ -350,6 +350,28 @@ static int endian_check(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+extern void fio_cpuio_register(void);
|
||||
+extern void fio_exec_register(void);
|
||||
+extern void fio_syncio_register(void);
|
||||
+extern void fio_syncio_ftruncate_register(void);
|
||||
+extern void fio_syncio_falloc_register(void);
|
||||
+extern void fio_fileoperations_register(void);
|
||||
+extern void fio_mmapio_register(void);
|
||||
+extern void fio_netio_register(void);
|
||||
+extern void fio_null_register(void);
|
||||
+void fio_engine_init(void)
|
||||
+{
|
||||
+ fio_cpuio_register();
|
||||
+ fio_exec_register();
|
||||
+ fio_syncio_register();
|
||||
+ fio_syncio_ftruncate_register();
|
||||
+ fio_syncio_falloc_register();
|
||||
+ fio_fileoperations_register();
|
||||
+ fio_mmapio_register();
|
||||
+ fio_netio_register();
|
||||
+ fio_null_register();
|
||||
+}
|
||||
+
|
||||
int initialize_fio(char *envp[])
|
||||
{
|
||||
long ps;
|
||||
@@ -431,6 +453,8 @@ int initialize_fio(char *envp[])
|
||||
page_mask = ps - 1;
|
||||
|
||||
fio_keywords_init();
|
||||
+
|
||||
+ fio_engine_init();
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
30
benchmarks/fio/0008-fio-fix-memory-leak-run-cpuio.fio.patch
Normal file
30
benchmarks/fio/0008-fio-fix-memory-leak-run-cpuio.fio.patch
Normal file
@ -0,0 +1,30 @@
|
||||
From 4104f7946da6a608f40dc6028d2f6570daad8ef0 Mon Sep 17 00:00:00 2001
|
||||
From: guohao15 <guohao15@xiaomi.com>
|
||||
Date: Wed, 18 Oct 2023 11:09:12 +0800
|
||||
Subject: [PATCH 08/10] fio:fix memory leak run cpuio.fio
|
||||
|
||||
Signed-off-by: guohao15 <guohao15@xiaomi.com>
|
||||
---
|
||||
init.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git fio/init.c fio/init.c
|
||||
index 9dcad491..57d8ae18 100644
|
||||
--- fio/init.c
|
||||
+++ fio/init.c
|
||||
@@ -493,8 +493,11 @@ static struct thread_data *get_new_job(bool global, struct thread_data *parent,
|
||||
td->thread_number = thread_number;
|
||||
td->subjob_number = 0;
|
||||
|
||||
- if (jobname)
|
||||
+ if (jobname) {
|
||||
+ if (td->o.name)
|
||||
+ free(td->o.name);
|
||||
td->o.name = strdup(jobname);
|
||||
+ }
|
||||
|
||||
if (!parent->o.group_reporting || parent == &def_thread)
|
||||
stat_number++;
|
||||
--
|
||||
2.34.1
|
||||
|
@ -0,0 +1,62 @@
|
||||
From a7b806befaf11eccf7f769187717dda1ec352fdc Mon Sep 17 00:00:00 2001
|
||||
From: guohao15 <guohao15@xiaomi.com>
|
||||
Date: Wed, 18 Oct 2023 21:14:05 +0800
|
||||
Subject: [PATCH 09/10] fio:fix memory leak ioengine=filecreate
|
||||
|
||||
Signed-off-by: guohao15 <guohao15@xiaomi.com>
|
||||
---
|
||||
gettime.c | 2 +-
|
||||
init.c | 10 ++++++++++
|
||||
2 files changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git fio/gettime.c fio/gettime.c
|
||||
index 14462420..2f0207d5 100644
|
||||
--- fio/gettime.c
|
||||
+++ fio/gettime.c
|
||||
@@ -37,7 +37,7 @@ static pthread_key_t tv_tls_key;
|
||||
|
||||
enum fio_cs fio_clock_source = FIO_PREFERRED_CLOCK_SOURCE;
|
||||
int fio_clock_source_set = 0;
|
||||
-static enum fio_cs fio_clock_source_inited = CS_INVAL;
|
||||
+enum fio_cs fio_clock_source_inited = CS_INVAL;
|
||||
|
||||
#ifdef FIO_DEBUG_TIME
|
||||
|
||||
diff --git fio/init.c fio/init.c
|
||||
index 57d8ae18..c8f53e62 100644
|
||||
--- fio/init.c
|
||||
+++ fio/init.c
|
||||
@@ -90,6 +90,10 @@ unsigned int *fio_warned = NULL;
|
||||
static char cmd_optstr[256];
|
||||
static bool did_arg;
|
||||
|
||||
+extern enum fio_cs fio_clock_source;
|
||||
+extern int fio_clock_source_set;
|
||||
+extern enum fio_cs fio_clock_source_inited;
|
||||
+
|
||||
#define FIO_CLIENT_FLAG (1 << 16)
|
||||
|
||||
/*
|
||||
@@ -277,6 +281,11 @@ static void fio_init_global(void)
|
||||
nr_clients = 0;
|
||||
thread_number = 0;
|
||||
prev_group_jobs = 0;
|
||||
+
|
||||
+ fio_clock_source = FIO_PREFERRED_CLOCK_SOURCE;
|
||||
+ fio_clock_source_set = 0;
|
||||
+ fio_clock_source_inited = CS_INVAL;
|
||||
+
|
||||
memset(&def_thread, 0, sizeof(def_thread));
|
||||
memset(segments, 0, sizeof(segments));
|
||||
memset(cmd_optstr, 0, sizeof(cmd_optstr));
|
||||
@@ -3073,6 +3082,7 @@ int parse_options(int argc, char *argv[])
|
||||
|
||||
free(ini_file);
|
||||
fio_options_free(&def_thread);
|
||||
+ fio_dump_options_free(&def_thread);
|
||||
filesetup_mem_free();
|
||||
|
||||
if (!thread_number) {
|
||||
--
|
||||
2.34.1
|
||||
|
31
benchmarks/fio/0010-fio-fix-memory-leak-ioengine-exec.patch
Normal file
31
benchmarks/fio/0010-fio-fix-memory-leak-ioengine-exec.patch
Normal file
@ -0,0 +1,31 @@
|
||||
From 6b211dc0191f0ebef454fdc8f5602474bed65471 Mon Sep 17 00:00:00 2001
|
||||
From: guohao15 <guohao15@xiaomi.com>
|
||||
Date: Wed, 18 Oct 2023 17:42:33 +0800
|
||||
Subject: [PATCH 10/10] fio:fix memory leak ioengine=exec
|
||||
|
||||
Signed-off-by: guohao15 <guohao15@xiaomi.com>
|
||||
---
|
||||
engines/exec.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git fio/engines/exec.c fio/engines/exec.c
|
||||
index a9025264..fbefb99e 100644
|
||||
--- fio/engines/exec.c
|
||||
+++ fio/engines/exec.c
|
||||
@@ -188,7 +188,13 @@ static int exec_background(struct thread_options *o, struct exec_options *eo)
|
||||
free(outfilename);
|
||||
free(errfilename);
|
||||
}
|
||||
+ for (int i = 0; i < arguments_nb_items; i++)
|
||||
+ free(arguments_array[i]);
|
||||
+ free(arguments_array);
|
||||
free(expanded_arguments);
|
||||
+ free(exec_cmd);
|
||||
+ free(outfilename);
|
||||
+ free(errfilename);
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
@ -59,4 +59,29 @@ CSRCS += fio/engines/exec.c fio/engines/cpu.c fio/engines/sync.c fio/engines/ftr
|
||||
fio/engines/falloc.c fio/engines/fileoperations.c fio/engines/mmap.c \
|
||||
fio/engines/null.c fio/engines/net.c
|
||||
|
||||
ifeq ($(wildcard fio/.git),)
|
||||
VERSION ?= master
|
||||
fio.zip:
|
||||
$(Q) curl -L https://github.com/ldorau/fio/archive/refs/heads/master.zip -o fio.zip
|
||||
$(Q) unzip -o fio.zip
|
||||
$(Q) mv fio-$(VERSION) fio
|
||||
$(Q) patch -p0 < 0001-external-fio-fix-compile-warning.patch
|
||||
$(Q) patch -p0 < 0002-external-fio-add-os-nuttx-support.patch
|
||||
$(Q) patch -p0 < 0003-external-fio-modify-smaller-size-for-nuttx.patch
|
||||
$(Q) patch -p0 < 0004-external-fio-fix-runtime-error-by-asan.patch
|
||||
$(Q) patch -p0 < 0005-external-fio-fix-compile-warning.patch
|
||||
$(Q) patch -p0 < 0006-external-fio-reinit-global-var-issue-when-run-multip.patch
|
||||
$(Q) patch -p0 < 0007-external-fio-add-engine-init.patch
|
||||
$(Q) patch -p0 < 0008-fio-fix-memory-leak-run-cpuio.fio.patch
|
||||
$(Q) patch -p0 < 0009-fio-fix-memory-leak-ioengine-filecreate.patch
|
||||
$(Q) patch -p0 < 0010-fio-fix-memory-leak-ioengine-exec.patch
|
||||
|
||||
context:: fio.zip
|
||||
|
||||
distclean::
|
||||
$(call DELDIR, fio)
|
||||
$(call DELFILE, fio.zip)
|
||||
|
||||
endif
|
||||
|
||||
include $(APPDIR)/Application.mk
|
||||
|
Loading…
x
Reference in New Issue
Block a user