qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] The details of round robin of multi-vcpu in TCG mode


From: puckbee
Subject: [Qemu-devel] The details of round robin of multi-vcpu in TCG mode
Date: Tue, 16 Apr 2013 09:51:11 +0800
User-agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20130328 Thunderbird/17.0.5

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

reply via email to

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