diff options
author | Jaegeuk Kim <jaegeuk@google.com> | 2020-08-20 15:39:57 -0700 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@google.com> | 2020-08-20 15:43:35 -0700 |
commit | 4cca49b65f272686f88d6325d89c3e358cc225a5 (patch) | |
tree | d09b56e05e7505627579a131ef27772651ebf7f8 /tools | |
parent | 36097e5108d5474e6ad66652554b93696a4293ea (diff) | |
parent | bbfab0dd6b2704305589f500be31c6a10248fb4c (diff) | |
download | f2fs-tools-4cca49b65f272686f88d6325d89c3e358cc225a5.tar.gz |
Merge remote-tracking branch 'aosp/upstream-master' into aosp
* aosp/upstream-master:
mkfs.f2fs: add -r (fake_seed) flag
mkfs.f2fs: add -T flag
sload.f2fs: handle root mount point properly when setting file attribute
f2fs-tools: zns zone-capacity support
f2fs_io: measure performance of write()
f2fs_io: add OSYNC option
fsck.f2fs: correct return value
f2fs_io: open file in read only mode for pinning file
Bug: 158453869
Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
Change-Id: I287e9f68658e3966b25cbf6a7f8ba55f042441f3
Diffstat (limited to 'tools')
-rw-r--r-- | tools/f2fs_io/f2fs_io.c | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c index 6266454..6177d29 100644 --- a/tools/f2fs_io/f2fs_io.c +++ b/tools/f2fs_io/f2fs_io.c @@ -130,6 +130,25 @@ static void full_write(int fd, const void *buf, size_t count) } } +#if defined(__APPLE__) +static u64 get_current_us() +{ +#ifdef HAVE_MACH_TIME_H + return mach_absolute_time() / 1000; +#else + return 0; +#endif +} +#else +static u64 get_current_us() +{ + struct timespec t; + t.tv_sec = t.tv_nsec = 0; + clock_gettime(CLOCK_BOOTTIME, &t); + return (u64)t.tv_sec * 1000000LL + t.tv_nsec / 1000; +} +#endif + #define fsync_desc "fsync" #define fsync_help \ "f2fs_io fsync [file]\n\n" \ @@ -349,7 +368,7 @@ static void do_pinfile(int argc, char **argv, const struct cmd_desc *cmd) exit(1); } - fd = xopen(argv[2], O_RDWR, 0); + fd = xopen(argv[2], O_RDONLY, 0); ret = -1; if (!strcmp(argv[1], "set")) { @@ -424,6 +443,7 @@ static void do_fallocate(int argc, char **argv, const struct cmd_desc *cmd) "IO can be\n" \ " buffered : buffered IO\n" \ " dio : direct IO\n" \ +" osync : O_SYNC\n" \ static void do_write(int argc, char **argv, const struct cmd_desc *cmd) { @@ -433,6 +453,7 @@ static void do_write(int argc, char **argv, const struct cmd_desc *cmd) unsigned bs, count, i; int flags = 0; int fd; + u64 total_time = 0, max_time = 0, max_time_t = 0; srand(time(0)); @@ -460,11 +481,14 @@ static void do_write(int argc, char **argv, const struct cmd_desc *cmd) if (!strcmp(argv[5], "dio")) flags |= O_DIRECT; + else if (!strcmp(argv[5], "osync")) + flags |= O_SYNC; else if (strcmp(argv[5], "buffered")) die("Wrong IO type"); fd = xopen(argv[6], O_CREAT | O_WRONLY | flags, 0755); + total_time = get_current_us(); for (i = 0; i < count; i++) { if (!strcmp(argv[4], "inc_num")) *(int *)buf = inc_num++; @@ -472,13 +496,20 @@ static void do_write(int argc, char **argv, const struct cmd_desc *cmd) *(int *)buf = rand(); /* write data */ + max_time_t = get_current_us(); ret = pwrite(fd, buf, buf_size, offset + buf_size * i); + max_time_t = get_current_us() - max_time_t; + if (max_time < max_time_t) + max_time = max_time_t; if (ret != buf_size) break; written += ret; } - printf("Written %"PRIu64" bytes with pattern=%s\n", written, argv[4]); + printf("Written %"PRIu64" bytes with pattern=%s, total_time=%"PRIu64" us, max_latency=%"PRIu64" us\n", + written, argv[4], + get_current_us() - total_time, + max_time); exit(0); } |