[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] migration: Improve bandwidth estimation
From: |
Pierre Riteau |
Subject: |
Re: [Qemu-devel] [PATCH] migration: Improve bandwidth estimation |
Date: |
Mon, 2 May 2011 14:19:20 +0200 |
Any comment on this patch?
On 31 mars 2011, at 22:30, Pierre Riteau wrote:
> In the current migration code, bandwidth is estimated by measuring the
> time spent in the ram_save_block loop and dividing by the number of sent
> bytes. However, because of buffering, the time spent in this loop is
> usually much less than the actual time required to send data on the
> wire. Try to improve this by measuring the time spent between two calls
> to ram_save_live instead.
>
> Signed-off-by: Pierre Riteau <address@hidden>
> ---
> arch_init.c | 9 +++++++--
> 1 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/arch_init.c b/arch_init.c
> index 0c09f91..7b822fe 100644
> --- a/arch_init.c
> +++ b/arch_init.c
> @@ -175,6 +175,7 @@ static int ram_save_block(QEMUFile *f)
> }
>
> static uint64_t bytes_transferred;
> +static int64_t prev_time;
>
> static ram_addr_t ram_save_remaining(void)
> {
> @@ -254,6 +255,7 @@ int ram_save_live(Monitor *mon, QEMUFile *f, int stage,
> void *opaque)
> uint64_t bytes_transferred_last;
> double bwidth = 0;
> uint64_t expected_time = 0;
> + int64_t current_time;
>
> if (stage < 0) {
> cpu_physical_memory_set_dirty_tracking(0);
> @@ -286,6 +288,8 @@ int ram_save_live(Monitor *mon, QEMUFile *f, int stage,
> void *opaque)
> /* Enable dirty memory tracking */
> cpu_physical_memory_set_dirty_tracking(1);
>
> + prev_time = qemu_get_clock_ns(rt_clock);
> +
> qemu_put_be64(f, ram_bytes_total() | RAM_SAVE_FLAG_MEM_SIZE);
>
> QLIST_FOREACH(block, &ram_list.blocks, next) {
> @@ -296,7 +300,6 @@ int ram_save_live(Monitor *mon, QEMUFile *f, int stage,
> void *opaque)
> }
>
> bytes_transferred_last = bytes_transferred;
> - bwidth = qemu_get_clock_ns(rt_clock);
>
> while (!qemu_file_rate_limit(f)) {
> int bytes_sent;
> @@ -308,8 +311,10 @@ int ram_save_live(Monitor *mon, QEMUFile *f, int stage,
> void *opaque)
> }
> }
>
> - bwidth = qemu_get_clock_ns(rt_clock) - bwidth;
> + current_time = qemu_get_clock_ns(rt_clock);
> + bwidth = current_time - prev_time;
> bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
> + prev_time = current_time;
>
> /* if we haven't transferred anything this round, force expected_time to a
> * a very high value, but without crashing */
> --
> 1.7.4.2
>
--
Pierre Riteau -- PhD student, Myriads team, IRISA, Rennes, France
http://perso.univ-rennes1.fr/pierre.riteau/
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH] migration: Improve bandwidth estimation,
Pierre Riteau <=