2017-04-06 66 views
1

執行塊的,我想提一個問題有關使用此功能時間QEMU

qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); 

其實IM在QEMU

執行轉換塊時獲取時間信息,但我不知道,它返回在客戶處理器中執行轉換塊的時間。

所以能有人給我一些提示?

感謝名單

回答

1

非KVM,軟MMU QEMU !!!:

qemu_clock_get_ns(QEMUClockType型)表示經過毫微秒指定QEMU參考時鐘。有幾種參考時鐘: 實時,虛擬主機等QEMU_CLOCK_VIRTUAL是計數器,其明確QEMU主迴路驅動:該時鐘的一個刻度是時間(毫微秒)的仿真的量子。

詳情: QEMU假設:

1 guest instruction counter tick = 1 emulated nano second << icount_time_shift 

icount_time_shift由 「-icount」 COMAND行選項specfied,它默認爲3。

爲最後期限來實現所有QEMU定時器(在QEMU_CLOCK_VIRTUAL單位)和QEMU從一個最終期限執行轉換塊到另一個。從納秒直談話ICOUNT提供deteremenistic TB代:QEMU主循環事先說時鐘根據到在翻譯塊/鏈執行的指令NUM(見cpu_exec.c,這裏抽象僞代碼):

cpu_exec(CPUState env): 

    # jump here if any synchronous exception occurs: page fault, protection and etc 
    if(setjmp(env) == exeption) 
     ;#fall through 

    for(;;): 
    # if exception/interrupt is pending then handle it here 
    take_exception_or_interrupt(); 

    while(no_interrupts()) { 
     # get num instructions that left till next deadline 
     icount_extra = get_icount_limit(); 

     # find/generate tb accordnace to icount_extra 
     # Also every instruction that access to IO is the last instruction at block. 
     # if access to IO cause interrupt we handle it on next iteration 
     tb = find_tb(env, icount_extra); 

     # execute tb or tb chain 
     execute(env, tb); 

     # increment QEMU_CLOCK_VIRTUAL accordance to guest instructions was executed 
     # (syncronise with iothread) 
     update_clock(tb.executed_instr); 
     # we will take all interrupts at next iteration 

間隔通過QEMU_CLOCK_VIRTUAL提供在客定時器/計數器的所有模型用於:例如如果設置你板系統計數器頻率至62兆赫,則QEMU做每QEMU_CLOCK_VIRTUAL 16個遞增該計數器的單增量。

然後你可以使用qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL)在您來賓模型獲得模擬的納米秒的時間間隔。