This replaces the mmmap read flow to get the maximum performance. Signed-off-by: Jaegeuk Kim <jaeg...@kernel.org> --- tools/f2fs_io/f2fs_io.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c index 73ac700f8209..51baded4cb4b 100644 --- a/tools/f2fs_io/f2fs_io.c +++ b/tools/f2fs_io/f2fs_io.c @@ -684,6 +684,7 @@ static void do_read(int argc, char **argv, const struct cmd_desc *cmd) char *data; char *print_buf = NULL; unsigned bs, count, i, print_bytes; + u64 total_time = 0; int flags = 0; int do_mmap = 0; int fd; @@ -719,28 +720,29 @@ static void do_read(int argc, char **argv, const struct cmd_desc *cmd) fd = xopen(argv[6], O_RDONLY | flags, 0); + total_time = get_current_us(); if (do_mmap) { data = mmap(NULL, count * buf_size, PROT_READ, - MAP_SHARED, fd, offset); + MAP_SHARED | MAP_POPULATE, fd, offset); if (data == MAP_FAILED) die("Mmap failed"); } - - for (i = 0; i < count; i++) { - if (do_mmap) { - memcpy(buf, data + offset + buf_size * i, buf_size); - ret = buf_size; - } else { + if (!do_mmap) { + for (i = 0; i < count; i++) { ret = pread(fd, buf, buf_size, offset + buf_size * i); - } - if (ret != buf_size) - break; + if (ret != buf_size) + break; - read_cnt += ret; - if (i == 0) - memcpy(print_buf, buf, print_bytes); + read_cnt += ret; + if (i == 0) + memcpy(print_buf, buf, print_bytes); + } + } else { + read_cnt = count * buf_size; + memcpy(print_buf, data, print_bytes); } - printf("Read %"PRIu64" bytes and print %u bytes:\n", read_cnt, print_bytes); + printf("Read %"PRIu64" bytes total_time = %"PRIu64" us, print %u bytes:\n", + read_cnt, get_current_us() - total_time, print_bytes); printf("%08"PRIx64" : ", offset); for (i = 1; i <= print_bytes; i++) { printf("%02x", print_buf[i - 1]); -- 2.41.0.694.ge786442a9b-goog _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel