All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] migration: isolate return path on src
@ 2017-05-31 10:35 Peter Xu
  2017-05-31 11:57 ` Juan Quintela
  2017-05-31 17:05 ` Dr. David Alan Gilbert
  0 siblings, 2 replies; 5+ messages in thread
From: Peter Xu @ 2017-05-31 10:35 UTC (permalink / raw)
  To: qemu-devel; +Cc: Laurent Vivier, Juan Quintela, Dr . David Alan Gilbert, peterx

There are some places that binded "return path" with postcopy. Let's be
prepared for its usage even without postcopy. This patch mainly did this
on source side.

Signed-off-by: Peter Xu <peterx@redhat.com>
---
standalone patch isolated from the return path series. ok to be picked
up in case one day we'll re-face the return path enablement.
With it, we are ready on source side. The dst side change has been queued.
---
 migration/migration.c  | 11 ++++++-----
 migration/trace-events |  4 ++--
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index ad29e53..96e549e 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1850,13 +1850,12 @@ static void migration_completion(MigrationState *s, int current_active_state,
      * cleaning everything else up (since if there are no failures
      * it will wait for the destination to send it's status in
      * a SHUT command).
-     * Postcopy opens rp if enabled (even if it's not avtivated)
      */
-    if (migrate_postcopy_ram()) {
+    if (s->rp_state.from_dst_file) {
         int rp_error;
-        trace_migration_completion_postcopy_end_before_rp();
+        trace_migration_return_path_end_before();
         rp_error = await_return_path_close_on_source(s);
-        trace_migration_completion_postcopy_end_after_rp(rp_error);
+        trace_migration_return_path_end_after(rp_error);
         if (rp_error) {
             goto fail_invalidate;
         }
@@ -1931,13 +1930,15 @@ static void *migration_thread(void *opaque)
 
     qemu_savevm_state_header(s->to_dst_file);
 
-    if (migrate_postcopy_ram()) {
+    if (s->to_dst_file) {
         /* Now tell the dest that it should open its end so it can reply */
         qemu_savevm_send_open_return_path(s->to_dst_file);
 
         /* And do a ping that will make stuff easier to debug */
         qemu_savevm_send_ping(s->to_dst_file, 1);
+    }
 
+    if (migrate_postcopy_ram()) {
         /*
          * Tell the destination that we *might* want to do postcopy later;
          * if the other end can't do postcopy it should fail now, nice and
diff --git a/migration/trace-events b/migration/trace-events
index 5b8ccf3..38345be 100644
--- a/migration/trace-events
+++ b/migration/trace-events
@@ -88,8 +88,8 @@ migrate_send_rp_message(int msg_type, uint16_t len) "%d: len %d"
 migration_completion_file_err(void) ""
 migration_completion_postcopy_end(void) ""
 migration_completion_postcopy_end_after_complete(void) ""
-migration_completion_postcopy_end_before_rp(void) ""
-migration_completion_postcopy_end_after_rp(int rp_error) "%d"
+migration_return_path_end_before(void) ""
+migration_return_path_end_after(int rp_error) "%d"
 migration_thread_after_loop(void) ""
 migration_thread_file_err(void) ""
 migration_thread_setup_complete(void) ""
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH] migration: isolate return path on src
  2017-05-31 10:35 [Qemu-devel] [PATCH] migration: isolate return path on src Peter Xu
@ 2017-05-31 11:57 ` Juan Quintela
  2017-05-31 17:05 ` Dr. David Alan Gilbert
  1 sibling, 0 replies; 5+ messages in thread
From: Juan Quintela @ 2017-05-31 11:57 UTC (permalink / raw)
  To: Peter Xu; +Cc: qemu-devel, Laurent Vivier, Dr . David Alan Gilbert

Peter Xu <peterx@redhat.com> wrote:
> There are some places that binded "return path" with postcopy. Let's be
> prepared for its usage even without postcopy. This patch mainly did this
> on source side.
>
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
> standalone patch isolated from the return path series. ok to be picked
> up in case one day we'll re-face the return path enablement.
> With it, we are ready on source side. The dst side change has been queued.


Reviewed-by: Juan Quintela <quintela@redhat.com>

queued

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH] migration: isolate return path on src
  2017-05-31 10:35 [Qemu-devel] [PATCH] migration: isolate return path on src Peter Xu
  2017-05-31 11:57 ` Juan Quintela
@ 2017-05-31 17:05 ` Dr. David Alan Gilbert
  2017-05-31 18:33   ` Juan Quintela
  1 sibling, 1 reply; 5+ messages in thread
From: Dr. David Alan Gilbert @ 2017-05-31 17:05 UTC (permalink / raw)
  To: Peter Xu; +Cc: qemu-devel, Laurent Vivier, Juan Quintela

* Peter Xu (peterx@redhat.com) wrote:
> There are some places that binded "return path" with postcopy. Let's be
> prepared for its usage even without postcopy. This patch mainly did this
> on source side.
> 
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
> standalone patch isolated from the return path series. ok to be picked
> up in case one day we'll re-face the return path enablement.
> With it, we are ready on source side. The dst side change has been queued.
> ---
>  migration/migration.c  | 11 ++++++-----
>  migration/trace-events |  4 ++--
>  2 files changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/migration/migration.c b/migration/migration.c
> index ad29e53..96e549e 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -1850,13 +1850,12 @@ static void migration_completion(MigrationState *s, int current_active_state,
>       * cleaning everything else up (since if there are no failures
>       * it will wait for the destination to send it's status in
>       * a SHUT command).
> -     * Postcopy opens rp if enabled (even if it's not avtivated)
>       */
> -    if (migrate_postcopy_ram()) {
> +    if (s->rp_state.from_dst_file) {
>          int rp_error;
> -        trace_migration_completion_postcopy_end_before_rp();
> +        trace_migration_return_path_end_before();
>          rp_error = await_return_path_close_on_source(s);
> -        trace_migration_completion_postcopy_end_after_rp(rp_error);
> +        trace_migration_return_path_end_after(rp_error);
>          if (rp_error) {
>              goto fail_invalidate;
>          }
> @@ -1931,13 +1930,15 @@ static void *migration_thread(void *opaque)
>  
>      qemu_savevm_state_header(s->to_dst_file);
>  
> -    if (migrate_postcopy_ram()) {
> +    if (s->to_dst_file) {
>          /* Now tell the dest that it should open its end so it can reply */
>          qemu_savevm_send_open_return_path(s->to_dst_file);
>  
>          /* And do a ping that will make stuff easier to debug */
>          qemu_savevm_send_ping(s->to_dst_file, 1);

I'm confused.
The migration_thread on the source will always have a s->to_dst_file
there so why test?

But also, we can't send the 'open return path' and 'send ping' messages
without a guard; sending them to old QEMUs will cause them to fail when
they don't know what the message is.   I suspect sending them to
slightly-old QEMUs will cause them to fail when they try and send a 
return message if the destination can't send it.

I can see a  if (s->rp_state.from_dst_file) making some sense if it's
done at the right point.

Dave

> +    }
>  
> +    if (migrate_postcopy_ram()) {
>          /*
>           * Tell the destination that we *might* want to do postcopy later;
>           * if the other end can't do postcopy it should fail now, nice and
> diff --git a/migration/trace-events b/migration/trace-events
> index 5b8ccf3..38345be 100644
> --- a/migration/trace-events
> +++ b/migration/trace-events
> @@ -88,8 +88,8 @@ migrate_send_rp_message(int msg_type, uint16_t len) "%d: len %d"
>  migration_completion_file_err(void) ""
>  migration_completion_postcopy_end(void) ""
>  migration_completion_postcopy_end_after_complete(void) ""
> -migration_completion_postcopy_end_before_rp(void) ""
> -migration_completion_postcopy_end_after_rp(int rp_error) "%d"
> +migration_return_path_end_before(void) ""
> +migration_return_path_end_after(int rp_error) "%d"
>  migration_thread_after_loop(void) ""
>  migration_thread_file_err(void) ""
>  migration_thread_setup_complete(void) ""
> -- 
> 2.7.4
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH] migration: isolate return path on src
  2017-05-31 17:05 ` Dr. David Alan Gilbert
@ 2017-05-31 18:33   ` Juan Quintela
  2017-06-01  2:51     ` Peter Xu
  0 siblings, 1 reply; 5+ messages in thread
From: Juan Quintela @ 2017-05-31 18:33 UTC (permalink / raw)
  To: Dr. David Alan Gilbert; +Cc: Peter Xu, qemu-devel, Laurent Vivier

"Dr. David Alan Gilbert" <dgilbert@redhat.com> wrote:
> * Peter Xu (peterx@redhat.com) wrote:
>> There are some places that binded "return path" with postcopy. Let's be
>> prepared for its usage even without postcopy. This patch mainly did this
>> on source side.
>> 
>> Signed-off-by: Peter Xu <peterx@redhat.com>
>> ---
>> standalone patch isolated from the return path series. ok to be picked
>> up in case one day we'll re-face the return path enablement.
>> With it, we are ready on source side. The dst side change has been queued.
>> ---
>>  migration/migration.c  | 11 ++++++-----
>>  migration/trace-events |  4 ++--
>>  2 files changed, 8 insertions(+), 7 deletions(-)
>> 
>> diff --git a/migration/migration.c b/migration/migration.c
>> index ad29e53..96e549e 100644
>> --- a/migration/migration.c
>> +++ b/migration/migration.c
>> @@ -1850,13 +1850,12 @@ static void migration_completion(MigrationState *s, int current_active_state,
>>       * cleaning everything else up (since if there are no failures
>>       * it will wait for the destination to send it's status in
>>       * a SHUT command).
>> -     * Postcopy opens rp if enabled (even if it's not avtivated)
>>       */
>> -    if (migrate_postcopy_ram()) {
>> +    if (s->rp_state.from_dst_file) {
>>          int rp_error;
>> -        trace_migration_completion_postcopy_end_before_rp();
>> +        trace_migration_return_path_end_before();
>>          rp_error = await_return_path_close_on_source(s);
>> -        trace_migration_completion_postcopy_end_after_rp(rp_error);
>> +        trace_migration_return_path_end_after(rp_error);
>>          if (rp_error) {
>>              goto fail_invalidate;
>>          }
>> @@ -1931,13 +1930,15 @@ static void *migration_thread(void *opaque)
>>  
>>      qemu_savevm_state_header(s->to_dst_file);
>>  
>> -    if (migrate_postcopy_ram()) {
>> +    if (s->to_dst_file) {
>>          /* Now tell the dest that it should open its end so it can reply */
>>          qemu_savevm_send_open_return_path(s->to_dst_file);
>>  
>>          /* And do a ping that will make stuff easier to debug */
>>          qemu_savevm_send_ping(s->to_dst_file, 1);
>
> I'm confused.
> The migration_thread on the source will always have a s->to_dst_file
> there so why test?
>
> But also, we can't send the 'open return path' and 'send ping' messages
> without a guard; sending them to old QEMUs will cause them to fail when
> they don't know what the message is.   I suspect sending them to
> slightly-old QEMUs will cause them to fail when they try and send a 
> return message if the destination can't send it.
>
> I can see a  if (s->rp_state.from_dst_file) making some sense if it's
> done at the right point.

You are right.

Second chunk makes no sense.  I told Peter to split the
"objectification" of migration state and this patch.  This made more
sense when the user *had* required a return path.

Good catch.

Thanks, Juan.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH] migration: isolate return path on src
  2017-05-31 18:33   ` Juan Quintela
@ 2017-06-01  2:51     ` Peter Xu
  0 siblings, 0 replies; 5+ messages in thread
From: Peter Xu @ 2017-06-01  2:51 UTC (permalink / raw)
  To: Juan Quintela; +Cc: Dr. David Alan Gilbert, qemu-devel, Laurent Vivier

On Wed, May 31, 2017 at 08:33:01PM +0200, Juan Quintela wrote:
> "Dr. David Alan Gilbert" <dgilbert@redhat.com> wrote:
> > * Peter Xu (peterx@redhat.com) wrote:
> >> There are some places that binded "return path" with postcopy. Let's be
> >> prepared for its usage even without postcopy. This patch mainly did this
> >> on source side.
> >> 
> >> Signed-off-by: Peter Xu <peterx@redhat.com>
> >> ---
> >> standalone patch isolated from the return path series. ok to be picked
> >> up in case one day we'll re-face the return path enablement.
> >> With it, we are ready on source side. The dst side change has been queued.
> >> ---
> >>  migration/migration.c  | 11 ++++++-----
> >>  migration/trace-events |  4 ++--
> >>  2 files changed, 8 insertions(+), 7 deletions(-)
> >> 
> >> diff --git a/migration/migration.c b/migration/migration.c
> >> index ad29e53..96e549e 100644
> >> --- a/migration/migration.c
> >> +++ b/migration/migration.c
> >> @@ -1850,13 +1850,12 @@ static void migration_completion(MigrationState *s, int current_active_state,
> >>       * cleaning everything else up (since if there are no failures
> >>       * it will wait for the destination to send it's status in
> >>       * a SHUT command).
> >> -     * Postcopy opens rp if enabled (even if it's not avtivated)
> >>       */
> >> -    if (migrate_postcopy_ram()) {
> >> +    if (s->rp_state.from_dst_file) {
> >>          int rp_error;
> >> -        trace_migration_completion_postcopy_end_before_rp();
> >> +        trace_migration_return_path_end_before();
> >>          rp_error = await_return_path_close_on_source(s);
> >> -        trace_migration_completion_postcopy_end_after_rp(rp_error);
> >> +        trace_migration_return_path_end_after(rp_error);
> >>          if (rp_error) {
> >>              goto fail_invalidate;
> >>          }
> >> @@ -1931,13 +1930,15 @@ static void *migration_thread(void *opaque)
> >>  
> >>      qemu_savevm_state_header(s->to_dst_file);
> >>  
> >> -    if (migrate_postcopy_ram()) {
> >> +    if (s->to_dst_file) {
> >>          /* Now tell the dest that it should open its end so it can reply */
> >>          qemu_savevm_send_open_return_path(s->to_dst_file);
> >>  
> >>          /* And do a ping that will make stuff easier to debug */
> >>          qemu_savevm_send_ping(s->to_dst_file, 1);
> >
> > I'm confused.
> > The migration_thread on the source will always have a s->to_dst_file
> > there so why test?
> >
> > But also, we can't send the 'open return path' and 'send ping' messages
> > without a guard; sending them to old QEMUs will cause them to fail when
> > they don't know what the message is.   I suspect sending them to
> > slightly-old QEMUs will cause them to fail when they try and send a 
> > return message if the destination can't send it.
> >
> > I can see a  if (s->rp_state.from_dst_file) making some sense if it's
> > done at the right point.
> 
> You are right.
> 
> Second chunk makes no sense.  I told Peter to split the
> "objectification" of migration state and this patch.  This made more
> sense when the user *had* required a return path.

Oops! I believe it should be what Dave mentioned
(s->rp_state.from_dst_file rather than s->to_dst_file). Sorry!

I'll repost to see whether we'd like the new one. Thanks,

-- 
Peter Xu

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-06-01  2:51 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-31 10:35 [Qemu-devel] [PATCH] migration: isolate return path on src Peter Xu
2017-05-31 11:57 ` Juan Quintela
2017-05-31 17:05 ` Dr. David Alan Gilbert
2017-05-31 18:33   ` Juan Quintela
2017-06-01  2:51     ` Peter Xu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.