qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [Question] unexpected block during RDMA migration


From: Wangyufei (James)
Subject: [Qemu-devel] [Question] unexpected block during RDMA migration
Date: Thu, 13 Mar 2014 03:08:28 +0000

Hello,
    Recently I did a test like this:
    1. I have host A and host B. I set ib0 on host A 192.168.0.1, I set ib0 on 
host B 192.168.0.2.
    2. I start a guestOS C on host A, and I do a RDMA migration from host A to 
host B.
    3. During the RDMA migration, I make host B power off(It simulates bad net 
connection or bad power supply).
    
    Then I found that:
    1. The libvirt migration api will block there forever.
    2. I debug the qemu process, and it blocks in RDMA api like forever. The 
stack is like this:

#0  0x00007fe987f2061c in pthread_cond_wait@@GLIBC_2.3.2 ()
   from /lib64/libpthread.so.0
#1  0x00007fe9887bf1d3 in rdma_destroy_id ()
   from /usr/lib64/librdmacm.so.1
#2  0x00007fe98a484eb3 in qemu_rdma_resolve_host (rdma=0x7fe98b585670,
    errp=0x7fffdc452bb8) at migration-rdma.c:981
#3  0x00007fe98a487d05 in qemu_rdma_source_init (rdma=0x7fe98b585670,
    errp=0x7fffdc452c10, pin_all=true) at migration-rdma.c:2298
#4  0x00007fe98a48a762 in rdma_start_outgoing_migration (opaque=
    0x7fe98ab67240 <current_migration.25929>, host_port=
    0x7fe98b4a5a97 "192.168.0.1:49152", errp=0x7fffdc452c88)
    at migration-rdma.c:3426
#5  0x00007fe98a48bd28 in qmp_migrate (uri=
0x7fe98b4a5a90 "x-rdma:192.168.0.1:49152", has_blk=true, blk=false,
has_inc=true, inc=false, has_detach=true, detach=true, errp=0x7fffaf760008)
    at migration.c:459
#6  0x00007fd00969f3b4 in qmp_marshal_input_migrate (mon=0x7fd00a61adc0, qdict=
    0x7fd00a7585f0, ret=0x7fffaf760058) at qmp-marshal.c:2793
#7  0x00007fd00978033f in qmp_call_cmd (mon=0x7fd00a61adc0, cmd=
    0x7fd009ced100 <qmp_cmds+1344>, params=0x7fd00a7585f0)
    at /home/sdb/qemu-kvm-1.5.1/monitor.c:4520
#8  0x00007fd009780606 in handle_qmp_command (parser=0x7fd00a619738, tokens=
    0x7fd00a618cd0) at /home/sdb/qemu-kvm-1.5.1/monitor.c:4598
#9  0x00007fd009813036 in json_message_process_token (lexer=0x7fd00a619740,
    token=0x7fd00a67c690, type=JSON_OPERATOR, x=124, y=10)
    at qobject/json-streamer.c:87
#10 0x00007fd00982d0ef in json_lexer_feed_char (lexer=0x7fd00a619740, ch=
    125 '}', flush=false) at qobject/json-lexer.c:303
#11 0x00007fd00982d3a0 in json_lexer_feed (lexer=0x7fd00a619740, buffer=
    0x7fffaf760330 "}\005v\257\377\177", size=1) at qobject/json-lexer.c:356
#12 0x00007fd009813270 in json_message_parser_feed (parser=0x7fd00a619738,
    buffer=0x7fffaf760330 "}\005v\257\377\177", size=1)
    at qobject/json-streamer.c:110
#13 0x00007fd00978070d in monitor_control_read (opaque=0x7fd00a61adc0, buf=
    0x7fffaf760330 "}\005v\257\377\177", size=1)
at /home/sdb/qemu-kvm-1.5.1/monitor.c:4619
#14 0x00007fd00968d9b2 in qemu_chr_be_write (s=0x7fd00a61a990, buf=
    0x7fffaf760330 "}\005v\257\377\177", len=1) at qemu-char.c:254
#15 0x00007fd009691de8 in tcp_chr_read (chan=0x7fd00a67ee40, cond=G_IO_IN,
    opaque=0x7fd00a61a990) at qemu-char.c:2607
#16 0x00007fd008b8569a in g_main_context_dispatch ()
   from /usr/lib64/libglib-2.0.so.0
#17 0x00007fd009659e59 in glib_pollfds_poll () at main-loop.c:188
#18 0x00007fd009659f4a in os_host_main_loop_wait (timeout=5643498)
    at main-loop.c:233
#19 0x00007fd00965a004 in main_loop_wait (nonblocking=0) at main-loop.c:478
#20 0x00007fd0096e8b27 in main_loop () at vl.c:2186
#21 0x00007fd0096efe33 in main (argc=49, argv=0x7fffaf761968, envp=
    0x7fffaf761af8) at vl.c:4639

    3. Just as the stack above, the main_loop of qemu will be blocked until I 
destroy the qemu process.

    It's unreasonable. I expect it returns error.
    What do you think about this? It confused me.

Best Regards,
-WangYufei




reply via email to

[Prev in Thread] Current Thread [Next in Thread]