+double get_updated_size(double computed, double dp_rate, double dp_cap)
+{
+ double updated_size = computed * dp_rate;
+ XBT_INFO("updated_size %f dp_rate %f", updated_size, dp_rate);
+ if (updated_size > dp_cap) {
+ // XBT_INFO("mig-stage2.%d: %f bytes updated, but cap it with the working set size %f", stage2_round, updated_size, dp_cap);
+ updated_size = dp_cap;
+ }
+
+ return updated_size;
+}
+
+static double send_stage1(msg_host_t vm, const char *src_pm_name, const char *dst_pm_name,
+ long ramsize, double mig_speed, double xfer_cpu_overhead, double dp_rate, double dp_cap, double dpt_cpu_overhead)
+{
+ const char *vm_name = MSG_host_get_name(vm);
+ char *mbox = get_mig_mbox_src_dst(vm_name, src_pm_name, dst_pm_name);
+
+ const long chunksize = 1024 * 1024 * 100;
+ long remaining = ramsize;
+ double computed_total = 0;
+
+ while (remaining > 0) {
+ long datasize = chunksize;
+ if (remaining < chunksize)
+ datasize = remaining;
+
+ remaining -= datasize;
+
+ send_migration_data(vm_name, src_pm_name, dst_pm_name, datasize, mbox, 1, 0, mig_speed, xfer_cpu_overhead);
+
+ double computed = lookup_computed_flop_counts(vm, 1, 0);
+ computed_total += computed;
+
+ {
+ double updated_size = get_updated_size(computed, dp_rate, dp_cap);
+
+ double overhead = dpt_cpu_overhead * updated_size;
+ launch_deferred_exec_process(vm, overhead, 10000);
+ }
+ }
+
+ return computed_total;
+}
+
+
+