From: Jens Axboe Date: Thu, 6 Feb 2020 19:17:25 +0000 (-0700) Subject: Merge branch 'master' of https://github.com/vincentkfu/fio X-Git-Tag: fio-3.19~10 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=1b5e13beb3acc2a08321ce687727e2cbbb3b954f;hp=704cc4df15eaba7ae28773d2fd1740dbc5d3298e Merge branch 'master' of https://github.com/vincentkfu/fio * 'master' of https://github.com/vincentkfu/fio: t/run-fio-tests: fix style issues gfio: add high/low priority latency results .gitignore: add some test programs stat: summary statistics for both high/low priority latencies --- diff --git a/arch/arch-aarch64.h b/arch/arch-aarch64.h index de9b349b..2a86cc5a 100644 --- a/arch/arch-aarch64.h +++ b/arch/arch-aarch64.h @@ -8,18 +8,6 @@ #define FIO_ARCH (arch_aarch64) -#define ARCH_HAVE_IOURING - -#ifndef __NR_sys_io_uring_setup -#define __NR_sys_io_uring_setup 425 -#endif -#ifndef __NR_sys_io_uring_enter -#define __NR_sys_io_uring_enter 426 -#endif -#ifndef __NR_sys_io_uring_register -#define __NR_sys_io_uring_register 427 -#endif - #define nop do { __asm__ __volatile__ ("yield"); } while (0) #define read_barrier() do { __sync_synchronize(); } while (0) #define write_barrier() do { __sync_synchronize(); } while (0) diff --git a/arch/arch-ppc.h b/arch/arch-ppc.h index 46246bae..804d596a 100644 --- a/arch/arch-ppc.h +++ b/arch/arch-ppc.h @@ -24,18 +24,6 @@ #define PPC_CNTLZL "cntlzw" #endif -#define ARCH_HAVE_IOURING - -#ifndef __NR_sys_io_uring_setup -#define __NR_sys_io_uring_setup 425 -#endif -#ifndef __NR_sys_io_uring_enter -#define __NR_sys_io_uring_enter 426 -#endif -#ifndef __NR_sys_io_uring_register -#define __NR_sys_io_uring_register 427 -#endif - static inline int __ilog2(unsigned long bitmask) { int lz; diff --git a/arch/arch-x86-common.h b/arch/arch-x86-common.h index 87925bdc..f32835cc 100644 --- a/arch/arch-x86-common.h +++ b/arch/arch-x86-common.h @@ -3,16 +3,6 @@ #include -#ifndef __NR_sys_io_uring_setup -#define __NR_sys_io_uring_setup 425 -#endif -#ifndef __NR_sys_io_uring_enter -#define __NR_sys_io_uring_enter 426 -#endif -#ifndef __NR_sys_io_uring_register -#define __NR_sys_io_uring_register 427 -#endif - static inline void cpuid(unsigned int op, unsigned int *eax, unsigned int *ebx, unsigned int *ecx, unsigned int *edx) @@ -23,7 +13,6 @@ static inline void cpuid(unsigned int op, } #define ARCH_HAVE_INIT -#define ARCH_HAVE_IOURING extern bool tsc_reliable; extern int arch_random; diff --git a/arch/arch.h b/arch/arch.h index 0ec3f10f..30c0d205 100644 --- a/arch/arch.h +++ b/arch/arch.h @@ -76,4 +76,32 @@ static inline int arch_init(char *envp[]) } #endif +#ifdef __alpha__ +/* + * alpha is the only exception, all other architectures + * have common numbers for new system calls. + */ +# ifndef __NR_io_uring_setup +# define __NR_io_uring_setup 535 +# endif +# ifndef __NR_io_uring_enter +# define __NR_io_uring_enter 536 +# endif +# ifndef __NR_io_uring_register +# define __NR_io_uring_register 537 +# endif +#else /* !__alpha__ */ +# ifndef __NR_io_uring_setup +# define __NR_io_uring_setup 425 +# endif +# ifndef __NR_io_uring_enter +# define __NR_io_uring_enter 426 +# endif +# ifndef __NR_io_uring_register +# define __NR_io_uring_register 427 +# endif +#endif + +#define ARCH_HAVE_IOURING + #endif diff --git a/engines/io_uring.c b/engines/io_uring.c index f1ffc712..5e59f975 100644 --- a/engines/io_uring.c +++ b/engines/io_uring.c @@ -191,7 +191,7 @@ static struct fio_option options[] = { static int io_uring_enter(struct ioring_data *ld, unsigned int to_submit, unsigned int min_complete, unsigned int flags) { - return syscall(__NR_sys_io_uring_enter, ld->ring_fd, to_submit, + return syscall(__NR_io_uring_enter, ld->ring_fd, to_submit, min_complete, flags, NULL, 0); } @@ -548,7 +548,7 @@ static int fio_ioring_queue_init(struct thread_data *td) } } - ret = syscall(__NR_sys_io_uring_setup, depth, &p); + ret = syscall(__NR_io_uring_setup, depth, &p); if (ret < 0) return ret; @@ -563,7 +563,7 @@ static int fio_ioring_queue_init(struct thread_data *td) if (setrlimit(RLIMIT_MEMLOCK, &rlim) < 0) return -1; - ret = syscall(__NR_sys_io_uring_register, ld->ring_fd, + ret = syscall(__NR_io_uring_register, ld->ring_fd, IORING_REGISTER_BUFFERS, ld->iovecs, depth); if (ret < 0) return ret; @@ -589,7 +589,7 @@ static int fio_ioring_register_files(struct thread_data *td) f->engine_pos = i; } - ret = syscall(__NR_sys_io_uring_register, ld->ring_fd, + ret = syscall(__NR_io_uring_register, ld->ring_fd, IORING_REGISTER_FILES, ld->fds, td->o.nr_files); if (ret) { err: diff --git a/json.c b/json.c index e2819a65..cd3d5d74 100644 --- a/json.c +++ b/json.c @@ -194,25 +194,31 @@ static int json_object_add_pair(struct json_object *obj, struct json_pair *pair) return 0; } -int json_object_add_value_type(struct json_object *obj, const char *name, int type, ...) +int json_object_add_value_type(struct json_object *obj, const char *name, + const struct json_value *arg) { struct json_value *value; struct json_pair *pair; - va_list args; int ret; - va_start(args, type); - if (type == JSON_TYPE_STRING) - value = json_create_value_string(va_arg(args, char *)); - else if (type == JSON_TYPE_INTEGER) - value = json_create_value_int(va_arg(args, long long)); - else if (type == JSON_TYPE_FLOAT) - value = json_create_value_float(va_arg(args, double)); - else if (type == JSON_TYPE_OBJECT) - value = json_create_value_object(va_arg(args, struct json_object *)); - else - value = json_create_value_array(va_arg(args, struct json_array *)); - va_end(args); + switch (arg->type) { + case JSON_TYPE_STRING: + value = json_create_value_string(arg->string); + break; + case JSON_TYPE_INTEGER: + value = json_create_value_int(arg->integer_number); + break; + case JSON_TYPE_FLOAT: + value = json_create_value_float(arg->float_number); + break; + case JSON_TYPE_OBJECT: + value = json_create_value_object(arg->object); + break; + default: + case JSON_TYPE_ARRAY: + value = json_create_value_array(arg->array); + break; + } if (!value) return ENOMEM; @@ -230,24 +236,30 @@ int json_object_add_value_type(struct json_object *obj, const char *name, int ty return 0; } -int json_array_add_value_type(struct json_array *array, int type, ...) +int json_array_add_value_type(struct json_array *array, + const struct json_value *arg) { struct json_value *value; - va_list args; int ret; - va_start(args, type); - if (type == JSON_TYPE_STRING) - value = json_create_value_string(va_arg(args, char *)); - else if (type == JSON_TYPE_INTEGER) - value = json_create_value_int(va_arg(args, long long)); - else if (type == JSON_TYPE_FLOAT) - value = json_create_value_float(va_arg(args, double)); - else if (type == JSON_TYPE_OBJECT) - value = json_create_value_object(va_arg(args, struct json_object *)); - else - value = json_create_value_array(va_arg(args, struct json_array *)); - va_end(args); + switch (arg->type) { + case JSON_TYPE_STRING: + value = json_create_value_string(arg->string); + break; + case JSON_TYPE_INTEGER: + value = json_create_value_int(arg->integer_number); + break; + case JSON_TYPE_FLOAT: + value = json_create_value_float(arg->float_number); + break; + case JSON_TYPE_OBJECT: + value = json_create_value_object(arg->object); + break; + default: + case JSON_TYPE_ARRAY: + value = json_create_value_array(arg->array); + break; + } if (!value) return ENOMEM; diff --git a/json.h b/json.h index bcc712cd..09c2f187 100644 --- a/json.h +++ b/json.h @@ -49,28 +49,124 @@ struct json_array *json_create_array(void); void json_free_object(struct json_object *obj); -int json_object_add_value_type(struct json_object *obj, const char *name, int type, ...); -#define json_object_add_value_int(obj, name, val) \ - json_object_add_value_type((obj), name, JSON_TYPE_INTEGER, (long long) (val)) -#define json_object_add_value_float(obj, name, val) \ - json_object_add_value_type((obj), name, JSON_TYPE_FLOAT, (val)) -#define json_object_add_value_string(obj, name, val) \ - json_object_add_value_type((obj), name, JSON_TYPE_STRING, (val)) -#define json_object_add_value_object(obj, name, val) \ - json_object_add_value_type((obj), name, JSON_TYPE_OBJECT, (val)) -#define json_object_add_value_array(obj, name, val) \ - json_object_add_value_type((obj), name, JSON_TYPE_ARRAY, (val)) -int json_array_add_value_type(struct json_array *array, int type, ...); -#define json_array_add_value_int(obj, val) \ - json_array_add_value_type((obj), JSON_TYPE_INTEGER, (val)) -#define json_array_add_value_float(obj, val) \ - json_array_add_value_type((obj), JSON_TYPE_FLOAT, (val)) -#define json_array_add_value_string(obj, val) \ - json_array_add_value_type((obj), JSON_TYPE_STRING, (val)) -#define json_array_add_value_object(obj, val) \ - json_array_add_value_type((obj), JSON_TYPE_OBJECT, (val)) -#define json_array_add_value_array(obj, val) \ - json_array_add_value_type((obj), JSON_TYPE_ARRAY, (val)) +int json_object_add_value_type(struct json_object *obj, const char *name, + const struct json_value *val); + +static inline int json_object_add_value_int(struct json_object *obj, + const char *name, long long val) +{ + struct json_value arg = { + .type = JSON_TYPE_INTEGER, + .integer_number = val, + }; + + return json_object_add_value_type(obj, name, &arg); +} + +static inline int json_object_add_value_float(struct json_object *obj, + const char *name, double val) +{ + struct json_value arg = { + .type = JSON_TYPE_FLOAT, + .float_number = val, + }; + + return json_object_add_value_type(obj, name, &arg); +} + +static inline int json_object_add_value_string(struct json_object *obj, + const char *name, + const char *val) +{ + struct json_value arg = { + .type = JSON_TYPE_STRING, + .string = (char *)val, + }; + + return json_object_add_value_type(obj, name, &arg); +} + +static inline int json_object_add_value_object(struct json_object *obj, + const char *name, + struct json_object *val) +{ + struct json_value arg = { + .type = JSON_TYPE_OBJECT, + .object = val, + }; + + return json_object_add_value_type(obj, name, &arg); +} + +static inline int json_object_add_value_array(struct json_object *obj, + const char *name, + struct json_array *val) +{ + struct json_value arg = { + .type = JSON_TYPE_ARRAY, + .array = val, + }; + + return json_object_add_value_type(obj, name, &arg); +} + +int json_array_add_value_type(struct json_array *array, + const struct json_value *val); + +static inline int json_array_add_value_int(struct json_array *obj, + long long val) +{ + struct json_value arg = { + .type = JSON_TYPE_INTEGER, + .integer_number = val, + }; + + return json_array_add_value_type(obj, &arg); +} + +static inline int json_array_add_value_float(struct json_array *obj, + double val) +{ + struct json_value arg = { + .type = JSON_TYPE_FLOAT, + .float_number = val, + }; + + return json_array_add_value_type(obj, &arg); +} + +static inline int json_array_add_value_string(struct json_array *obj, + const char *val) +{ + struct json_value arg = { + .type = JSON_TYPE_STRING, + .string = (char *)val, + }; + + return json_array_add_value_type(obj, &arg); +} + +static inline int json_array_add_value_object(struct json_array *obj, + struct json_object *val) +{ + struct json_value arg = { + .type = JSON_TYPE_OBJECT, + .object = val, + }; + + return json_array_add_value_type(obj, &arg); +} + +static inline int json_array_add_value_array(struct json_array *obj, + struct json_array *val) +{ + struct json_value arg = { + .type = JSON_TYPE_ARRAY, + .array = val, + }; + + return json_array_add_value_type(obj, &arg); +} #define json_array_last_value_object(obj) \ (obj->values[obj->value_cnt - 1]->object) diff --git a/stat.c b/stat.c index 74580f74..d8c01d14 100644 --- a/stat.c +++ b/stat.c @@ -954,7 +954,7 @@ void json_array_add_disk_util(struct disk_util_stat *dus, obj = json_create_object(); json_array_add_value_object(array, obj); - json_object_add_value_string(obj, "name", dus->name); + json_object_add_value_string(obj, "name", (const char *)dus->name); json_object_add_value_int(obj, "read_ios", dus->s.ios[0]); json_object_add_value_int(obj, "write_ios", dus->s.ios[1]); json_object_add_value_int(obj, "read_merges", dus->s.merges[0]); diff --git a/t/io_uring.c b/t/io_uring.c index c2e5e098..55b75f6e 100644 --- a/t/io_uring.c +++ b/t/io_uring.c @@ -100,7 +100,7 @@ static int io_uring_register_buffers(struct submitter *s) if (do_nop) return 0; - return syscall(__NR_sys_io_uring_register, s->ring_fd, + return syscall(__NR_io_uring_register, s->ring_fd, IORING_REGISTER_BUFFERS, s->iovecs, depth); } @@ -117,20 +117,20 @@ static int io_uring_register_files(struct submitter *s) s->files[i].fixed_fd = i; } - return syscall(__NR_sys_io_uring_register, s->ring_fd, + return syscall(__NR_io_uring_register, s->ring_fd, IORING_REGISTER_FILES, s->fds, s->nr_files); } static int io_uring_setup(unsigned entries, struct io_uring_params *p) { - return syscall(__NR_sys_io_uring_setup, entries, p); + return syscall(__NR_io_uring_setup, entries, p); } static int io_uring_enter(struct submitter *s, unsigned int to_submit, unsigned int min_complete, unsigned int flags) { - return syscall(__NR_sys_io_uring_enter, s->ring_fd, to_submit, - min_complete, flags, NULL, 0); + return syscall(__NR_io_uring_enter, s->ring_fd, to_submit, min_complete, + flags, NULL, 0); } #ifndef CONFIG_HAVE_GETTID