Add a method to read out pages into unevictable mapping by mmap(), mlock2(), and madvise()
Signed-off-by: Jaegeuk Kim <[email protected]> --- tools/f2fs_io/f2fs_io.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c index bc2e014d3911..d5e103f7b833 100644 --- a/tools/f2fs_io/f2fs_io.c +++ b/tools/f2fs_io/f2fs_io.c @@ -938,6 +938,7 @@ static void do_write_advice(int argc, char **argv, const struct cmd_desc *cmd) " dontcache: buffered IO + dontcache\n" \ " dio : direct IO\n" \ " mmap : mmap IO\n" \ +" madvise : mmap + mlock2 + madvise\n" \ " mlock : mmap + mlock\n" \ "advice can be\n" \ " 1 : set sequential|willneed\n" \ @@ -956,6 +957,7 @@ static void do_read(int argc, char **argv, const struct cmd_desc *cmd) int flags = 0; int do_mmap = 0; int do_mlock = 0; + int do_madvise = 0; int do_dontcache = 0; int fd, advice; @@ -979,6 +981,8 @@ static void do_read(int argc, char **argv, const struct cmd_desc *cmd) flags |= O_DIRECT; else if (!strcmp(argv[4], "mmap")) do_mmap = 1; + else if (!strcmp(argv[4], "madvise")) + do_madvise = 1; else if (!strcmp(argv[4], "mlock")) do_mlock = 1; else if (!strcmp(argv[4], "dontcache")) @@ -1021,6 +1025,24 @@ static void do_read(int argc, char **argv, const struct cmd_desc *cmd) if (mlock(data, count * buf_size)) die_errno("mlock failed"); mlock_time_end = get_current_us(); + read_cnt = count * buf_size; + memcpy(print_buf, data, print_bytes); + } else if (do_madvise) { + data = mmap(NULL, count * buf_size, PROT_READ, + MAP_SHARED, fd, offset); + if (data == MAP_FAILED) + die("Mmap failed"); + + mlock_time_start = get_current_us(); + if (mlock2(data, count * buf_size, MLOCK_ONFAULT)) + die_errno("mlock2 failed"); + mlock_time_end = get_current_us(); + + io_time_start = get_current_us(); + if (madvise(data, count * buf_size, MADV_POPULATE_READ) != 0) + die_errno("madvise failed"); + io_time_end = get_current_us(); + read_cnt = count * buf_size; memcpy(print_buf, data, print_bytes); } else if (do_mlock) { @@ -1085,7 +1107,7 @@ static void do_read(int argc, char **argv, const struct cmd_desc *cmd) } if (do_mmap) { munmap(data, count * buf_size); - } else if (do_mlock) { + } else if (do_mlock || do_madvise) { munlock(data, count * buf_size); munmap(data, count * buf_size); } -- 2.52.0.107.ga0afd4fd5b-goog _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
