[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] When do we need to do TB unchaining?
From: |
Blue Swirl |
Subject: |
Re: [Qemu-devel] When do we need to do TB unchaining? |
Date: |
Thu, 29 Sep 2011 20:02:38 +0000 |
On Thu, Sep 29, 2011 at 7:55 AM, 陳韋任 <address@hidden> wrote:
> Hi, all
>
> I am looking for when TB unchaining is needed. Currently, I
> can only see there are three spots (take i386-softmmu as an
> example):
>
> 1. cpu_interrupt:
>
> When virtual devices raise interrupts, eventually apic_local_deliver
> (apic.c) will call cpu_interrupt. cpu_interrupt will set up
> env->interrupt_request, then call cpu_unlink_tb to unlink env's
> TBs.
>
> Here I have a question. I though cpu_interrupt is only used
> in system mode to deliever virtual devices' interrupt. But it
> seems process mode also has cpu_interrupt.
>
> I have ran some small programs in process mode under GDB, but
> I never see cpu_interrupt is called. Do I have to run something
> bigger to see when cpu_interrupt is called in process mode? Or
> cpu_interrupt in process mode is only used in some rare cases?
I don't think it is possible. The only non-device cases for x86 are
tb_invalidate_phys_page_range(), cpu_x86_set_a20() and
do_inject_x86_mce(), none of which should be reachable from user
emulator.
Maybe these should be #ifdeffed out from user emulator builds.
> 2. cpu_exit:
>
> QEMU will register a host SIGALRM handler, host_alarm_handler
> (qemu-timer.c), when initialize the enviroment in system mode.
> Then when host OS delivers SIGALRM to QEMU, host_alarm_handler
> calls qemu_notify_event -> cpu_exit. cpu_exit raise env->exit_request
> , then call cpu_unlink_tb to unlink env's TBs.
>
> There are other places where cpu_exit is called, like
>
> - cpu_signal: I think this is used when IOTHREAD is enabled.
>
> - DMA_init: I guess cpu_exit is called when DMA is done so
> that control is gave back to QEMU from the code
> cache.
Yes, this is a questionable hack to improve performance. Maybe it's
also not needed anymore since I/O thread was enabled.
> - gdb_do_syscall: Don't know when it get called.
>
> - vm_stop -> cpu_stop_current: Don't know when it get called.
grep -r is your friend.
> 3. tb_phys_invalidate:
>
> QEMU will invalidate TBs related to a guest page which is
> done by tb_invalidate_phys_page_range (exec.c), then
> tb_invalidate_phys_page_range calls tb_phys_invalidate to
> invalidate a TB and unlink links to the TB.
>
>
> Please correct me if I am wrong or something miss. Thanks!
>
>
> Regards,
> chenwj
>
> --
> Wei-Ren Chen (陳韋任)
> Computer Systems Lab, Institute of Information Science,
> Academia Sinica, Taiwan (R.O.C.)
> Tel:886-2-2788-3799 #1667
>
>