Whamcloud - gitweb
LU-17011 utils: monotonic clock in lfs mirror 52/51852/2
authorAlex Zhuravlev <bzzz@whamcloud.com>
Wed, 2 Aug 2023 10:31:57 +0000 (13:31 +0300)
committerAlex Zhuravlev <bzzz@whamcloud.com>
Thu, 3 Aug 2023 07:25:14 +0000 (07:25 +0000)
use monotonic clocks instead of realtime to avoid affecting
bandwidth or hanging the transfer if the clock is changed.

Test-Parameters: trivial
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I58cf327d235448e93fa2ed63cefdf4dd01306e71

lustre/utils/lfs.c

index 4889fb0..2bb8335 100644 (file)
@@ -860,7 +860,7 @@ static int migrate_copy_data(int fd_src, int fd_dst, int (*check_file)(int),
                }
        }
 
-       clock_gettime(CLOCK_REALTIME, &start_time);
+       clock_gettime(CLOCK_MONOTONIC, &start_time);
        now = last_bw_print = start_time;
 
        while (1) {
@@ -925,7 +925,7 @@ static int migrate_copy_data(int fd_src, int fd_dst, int (*check_file)(int),
                        if (bandwidth_bytes_sec == 0)
                                continue;
 
-                       clock_gettime(CLOCK_REALTIME, &now);
+                       clock_gettime(CLOCK_MONOTONIC, &now);
                        diff = timespec_sub(&start_time, &now);
                        write_target = ((bandwidth_bytes_sec * diff.tv_sec) +
                                ((bandwidth_bytes_sec *
@@ -945,7 +945,7 @@ static int migrate_copy_data(int fd_src, int fd_dst, int (*check_file)(int),
                                        NSEC_PER_SEC / bandwidth_bytes_sec;
 
                                do {
-                                       rc = clock_nanosleep(CLOCK_REALTIME, 0,
+                                       rc = clock_nanosleep(CLOCK_MONOTONIC, 0,
                                                             &delay, &delay);
                                } while (rc < 0 && errno == EINTR);
 
@@ -960,7 +960,7 @@ static int migrate_copy_data(int fd_src, int fd_dst, int (*check_file)(int),
                        }
                }
 
-               clock_gettime(CLOCK_REALTIME, &now);
+               clock_gettime(CLOCK_MONOTONIC, &now);
                if ((write_bytes != file_size_bytes) &&
                        (now.tv_sec >= last_bw_print.tv_sec +
                        stats_interval_sec)) {
@@ -975,7 +975,7 @@ static int migrate_copy_data(int fd_src, int fd_dst, int (*check_file)(int),
        }
 
        /* Output at least one log, regardless of stats_interval */
-       clock_gettime(CLOCK_REALTIME, &now);
+       clock_gettime(CLOCK_MONOTONIC, &now);
        stats_log(&now, &start_time, stats_flag,
                  read_bytes, write_bytes,
                  file_size_bytes);