aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@google.com>2020-08-20 15:39:57 -0700
committerJaegeuk Kim <jaegeuk@google.com>2020-08-20 15:43:35 -0700
commit4cca49b65f272686f88d6325d89c3e358cc225a5 (patch)
treed09b56e05e7505627579a131ef27772651ebf7f8 /tools
parent36097e5108d5474e6ad66652554b93696a4293ea (diff)
parentbbfab0dd6b2704305589f500be31c6a10248fb4c (diff)
downloadf2fs-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.c35
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);
}