From 6f921167e854a829c94ad9c36feeec7c742b6322 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Fri, 17 Feb 2006 02:27:57 +0000 Subject: [PATCH] A simple --slow-down=USECs option that is somewhat useful. --- slow-down.diff | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 slow-down.diff diff --git a/slow-down.diff b/slow-down.diff new file mode 100644 index 0000000..87f8f5e --- /dev/null +++ b/slow-down.diff @@ -0,0 +1,56 @@ +This patch adds a --slow-down=USECs option that causes the sender to scan +the filelist more slowly, and the generator to scan for deletions more +slowly. It doesn't do anything to make anyone slow down during the normal +transfer processing, though. + +The idea is to lessen rsync's impact on disk I/O. Unfortunately, there +should really be a way to affect more of rsync's processing, perhaps by +specifying a maximum disk I/O rate (and have that affect a maximum stat() +rate or something like that). + +--- old/flist.c ++++ new/flist.c +@@ -58,6 +58,7 @@ extern int copy_links; + extern int copy_unsafe_links; + extern int protocol_version; + extern int sanitize_paths; ++extern unsigned long sleep_asec; + extern const char *io_write_phase; + extern struct stats stats; + extern struct file_list *the_file_list; +@@ -1049,6 +1050,9 @@ static void send_directory(int f, struct + } + + send_file_name(f, flist, fbuf, NULL, 0); ++ /* Sleep for a bit, to avoid hammering the disk. */ ++ if (sleep_asec) ++ usleep(sleep_asec); + } + + fbuf[len] = '\0'; +--- old/options.c ++++ new/options.c +@@ -102,6 +102,7 @@ int size_only = 0; + int daemon_bwlimit = 0; + int bwlimit = 0; + int fuzzy_basis = 0; ++unsigned long sleep_asec = 0; + size_t bwlimit_writemax = 0; + int ignore_existing = 0; + int ignore_non_existing = 0; +@@ -364,6 +365,7 @@ void usage(enum logcode F) + rprintf(F," --password-file=FILE read password from FILE\n"); + rprintf(F," --list-only list the files instead of copying them\n"); + rprintf(F," --bwlimit=KBPS limit I/O bandwidth; KBytes per second\n"); ++ rprintf(F," --slow-down=USECs sleep N usec while creating the filelist\n"); + rprintf(F," --write-batch=FILE write a batched update to FILE\n"); + rprintf(F," --only-write-batch=FILE like --write-batch but w/o updating destination\n"); + rprintf(F," --read-batch=FILE read a batched update from FILE\n"); +@@ -492,6 +494,7 @@ static struct poptOption long_options[] + {"log-format", 0, POPT_ARG_STRING, &log_format, 0, 0, 0 }, + {"itemize-changes", 'i', POPT_ARG_NONE, 0, 'i', 0, 0 }, + {"bwlimit", 0, POPT_ARG_INT, &bwlimit, 0, 0, 0 }, ++ {"slow-down", 0, POPT_ARG_LONG, &sleep_asec, 0, 0, 0 }, + {"backup", 'b', POPT_ARG_NONE, &make_backups, 0, 0, 0 }, + {"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 }, + {"suffix", 0, POPT_ARG_STRING, &backup_suffix, 0, 0, 0 }, -- 2.34.1