@@ -174,6 +174,8 @@ int main(int argc, char **argv)
#define DEFAULT_RAM_SIZE 128
+#define MAX_SAVE_BLOCK_READ 10 * 1024 * 1024
+
#define MAX_VIRTIO_CONSOLES 1
static const char *data_dir;
@@ -2854,6 +2856,7 @@ static 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;
+ int data_read = 0;
if (stage < 0) {
cpu_physical_memory_set_dirty_tracking(0);
@@ -2883,10 +2886,11 @@ static 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)) {
+ while (!qemu_file_rate_limit(f) && data_read < MAX_SAVE_BLOCK_READ) {
int ret;
ret = ram_save_block(f);
+ data_read += ret * TARGET_PAGE_SIZE;
bytes_transferred += ret * TARGET_PAGE_SIZE;
if (ret == 0) /* no more blocks */
break;