執行塊的,我想提一個問題有關使用此功能時間QEMU
qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
其實IM在QEMU
執行轉換塊時獲取時間信息,但我不知道,它返回在客戶處理器中執行轉換塊的時間。
所以能有人給我一些提示?
感謝名單
執行塊的,我想提一個問題有關使用此功能時間QEMU
qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
其實IM在QEMU
執行轉換塊時獲取時間信息,但我不知道,它返回在客戶處理器中執行轉換塊的時間。
所以能有人給我一些提示?
感謝名單
非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)在您來賓模型獲得模擬的納米秒的時間間隔。