[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] The details of round robin of multi-vcpu in TCG mode
From: |
li guang |
Subject: |
Re: [Qemu-devel] The details of round robin of multi-vcpu in TCG mode |
Date: |
Tue, 16 Apr 2013 10:53:58 +0800 |
You can find the chance of exit main loop
by every calling of cpu_loop_exit() in cpu_exec().
在 2013-04-16二的 09:51 +0800,puckbee写道:
> Hi there:
>
> Sorry to post this problem a second time, for I thought maybe the
> question is not descripted clearly.
>
> I'm studying the execution details of multi-vcpu in TCG mode.
>
> The vcpus in TCG mode are executed one by one in a sequencial way,
> according to some articles about Qemu.
>
> I read the function [tcg_exec_all] in Qemu 1.3.0 as bellow, but
> the implementation is not as expected.
>
> [tcg_exec_all] will finally call [cpu_exec] to excute a loop to
> excute the TBs in code cache
>
> So,how does these functions control the running time of each VCPU?
>
> That is,when will the execution of one VCPU return, in order to
> execute the next_cpu in the loop of [tcg_exec_all].
>
> Using alarm timer or other methonds?
>
> static void tcg_exec_all(void)
> {
> int r;
>
> /* Account partial waits to the vm_clock. */
> qemu_clock_warp(vm_clock);
>
> if (next_cpu == NULL) {
> next_cpu = first_cpu;
> }
> for (; next_cpu != NULL && !
> exit_request; next_cpu = next_cpu->next_cpu) {
> CPUArchState *env = next_cpu;
> CPUState *cpu = ENV_GET_CPU(env);
>
> qemu_clock_enable(vm_clock,
> (env->singlestep_enabled &
> SSTEP_NOTIMER) == 0);
>
> if (cpu_can_run(cpu)) {
> r = tcg_cpu_exec(env);
> if (r == EXCP_DEBUG) {
> cpu_handle_guest_debug(env);
> break;
> }
> } else if (cpu->stop || cpu->stopped) {
> break;
> }
> }
> exit_request = 0;
> }
>
> Yours
> Puck