qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Chunqiang (CQ) Tang" <tangchq@gmail.com>
To: Stefan Hajnoczi <stefanha@gmail.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] thread synchronization in qcow2.c and qcow2-cluster.c
Date: Tue, 27 Apr 2010 16:39:33 -0400	[thread overview]
Message-ID: <k2v50c1b8771004271339zf55a7abej8251f18169e5d3a2@mail.gmail.com> (raw)
In-Reply-To: <w2rfbd9d3991004271249sd088419diba35b1a5c0a20458@mail.gmail.com>

> kvm-all.c:kvm_cpu_exec:
>        qemu_mutex_unlock_iothread();
>        ret = kvm_vcpu_ioctl(env, KVM_RUN, 0);
>        qemu_mutex_lock_iothread();

Thank you for the information. I also suspected that
qemu_mutex_lock_iothread() does the synchronization. However, my
profiling showed that qemu-kvm.c:kvm_cpu_exec() in is actually
executed, instead of kvm-all.c:kvm_cpu_exec(). Also I previously
profiled all executions of qemu_mutex_lock_iothread(), and found that
it only protects the vl.c:main_loop_wai() thread but does NOT protect
the qemu-kvm.c:kvm_cpu_exec() thread. Did I miss something or is this
a defect? I did extensive profiling but still don't know the source
code well enough to confidently draw a conclusion.

For example, see the profiled execution sequence below. The
kvm_cpu_exec() thread did not perform qemu_mutex_lock_iothread(). The
locking was only performed by the vl.c:main_loop_wai() thread.

home/ctang/kvm/qemu-kvm-0.12.3/qemu-kvm.c : 2530    thread: b7e056d0
        /home/ctang/kvm/bin/qemu-system-x86_64(qemu_mutex_unlock_iothread+0x1a)
[0x8092242]
        /home/ctang/kvm/bin/qemu-system-x86_64(main_loop_wait+0x221) [0x806edef]
        /home/ctang/kvm/bin/qemu-system-x86_64(kvm_main_loop+0x1ff) [0x80916a1]
        /home/ctang/kvm/bin/qemu-system-x86_64 [0x806f5c2]
        /home/ctang/kvm/bin/qemu-system-x86_64(main+0x2e2c) [0x80736d1]
        /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5) [0xb7e33775]
        /home/ctang/kvm/bin/qemu-system-x86_64 [0x8068bb1]

block/qcow2-cluster.c : 721    thread: b7dc2b90
        /home/ctang/kvm/bin/qemu-system-x86_64(qcow2_alloc_cluster_offset+0x3c)
[0x81175fa]
        /home/ctang/kvm/bin/qemu-system-x86_64(qcow_aio_write_cb+0x158)
[0x8111d73]
        /home/ctang/kvm/bin/qemu-system-x86_64(qcow_aio_writev+0x94) [0x8112054]
        /home/ctang/kvm/bin/qemu-system-x86_64(bdrv_aio_writev+0xe1) [0x80fa8e9]
        /home/ctang/kvm/bin/qemu-system-x86_64 [0x81f4a96]
        /home/ctang/kvm/bin/qemu-system-x86_64 [0x81f4c04]
        /home/ctang/kvm/bin/qemu-system-x86_64(dma_bdrv_write+0x48) [0x81f4cbf]
        /home/ctang/kvm/bin/qemu-system-x86_64 [0x80a437c]
        /home/ctang/kvm/bin/qemu-system-x86_64(bmdma_cmd_writeb+0x73)
[0x80a9503]
        /home/ctang/kvm/bin/qemu-system-x86_64 [0x812b1eb]
        /home/ctang/kvm/bin/qemu-system-x86_64(cpu_outb+0x27) [0x812b4e6]
        /home/ctang/kvm/bin/qemu-system-x86_64 [0x808d267]
        /home/ctang/kvm/bin/qemu-system-x86_64(kvm_run+0x2f4) [0x808f4b8]
        /home/ctang/kvm/bin/qemu-system-x86_64(kvm_cpu_exec+0x56) [0x80907b2]
        /home/ctang/kvm/bin/qemu-system-x86_64 [0x8090f4d]
        /home/ctang/kvm/bin/qemu-system-x86_64 [0x8091098]
        /lib/tls/i686/cmov/libpthread.so.0 [0xb7fd24ff]
        /lib/tls/i686/cmov/libc.so.6(clone+0x5e) [0xb7f0149e]

/home/ctang/kvm/qemu-kvm-0.12.3/qemu-kvm.c : 2537    thread: b7e056d0
        /home/ctang/kvm/bin/qemu-system-x86_64(qemu_mutex_lock_iothread+0x1a)
[0x809229d]
        /home/ctang/kvm/bin/qemu-system-x86_64(main_loop_wait+0x25c) [0x806ee2a]
        /home/ctang/kvm/bin/qemu-system-x86_64(kvm_main_loop+0x1ff) [0x80916a1]
        /home/ctang/kvm/bin/qemu-system-x86_64 [0x806f5c2]
        /home/ctang/kvm/bin/qemu-system-x86_64(main+0x2e2c) [0x80736d1]
        /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5) [0xb7e33775]
        /home/ctang/kvm/bin/qemu-system-x86_64 [0x8068bb1]

  reply	other threads:[~2010-04-27 20:39 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-27 16:06 [Qemu-devel] thread synchronization in qcow2.c and qcow2-cluster.c Chunqiang (CQ) Tang
2010-04-27 19:49 ` Stefan Hajnoczi
2010-04-27 20:39   ` Chunqiang (CQ) Tang [this message]
2010-04-27 21:26     ` Stefan Hajnoczi
2010-04-28  8:13       ` Stefan Hajnoczi
2010-04-28 14:59         ` Chunqiang (CQ) Tang
2010-04-28  9:08     ` Kevin Wolf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=k2v50c1b8771004271339zf55a7abej8251f18169e5d3a2@mail.gmail.com \
    --to=tangchq@gmail.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).