我使用Marss週期精確模擬器,它使用QEMU。它是一個完整的系統模擬器,同時提供用戶和內核統計信息。 但是,即使我只採用用戶統計,不同運行之間的統計數據也會有很大差異。我在火星網站上提出這個問題,但無法得到很好的答案。 我想知道它是否與qemu有關。或者任何qemu選項/變體,可以使模擬具有確定性。 我嘗試使用-icount auto,仍然有一些變化。 使用simplescalar eio文件,我從未觀察到任何變化。 我會感謝一些幫助。模擬確定性(基於qemu的模擬器)
回答
我還沒有使用過MARSS/QEMU,但是我對模擬器和SimpleScalar都很熟悉。
這是很難做出全面的系統模擬器一般確定性。例如。如果您的程序打印一天中的時間,並且一天中的時間發生變化,則會遵循不同的代碼路徑。更一般地說,如果你正在做一個完整的系統仿真和時間ls,那麼操作系統和用戶代碼的確切交錯將根據磁頭的位置,磁盤高速緩存中的數據等等而有所不同。更不用說什麼系統上正在運行其他進程。
SimpleScalar eio(和工業中的模擬器)通過記錄一個外部I/O事件的跟蹤來提供確定性,以與之前的運行完全相同的指令計數來應用於模擬。基本上,只有在記錄時才進行完整的系統仿真
您需要尋找類似的MARSS/QEMU選項。不幸的是,我還沒有找到這樣的。
缺乏這些...
但我能聽到你說「我的程序不讀一天的時間。它不應該在每次運行完全相同的方式?」也許是這樣......但(1)許多Linux libraruies在閱讀時間方面做了道德上的等同。 (2)還有其他進程正在運行用戶代碼。
所以你需要控制運行。不要啓動虛擬機(不是硬件虛擬機,我的意思就是您在模擬器上運行的操作系統)。停在單用戶。編輯/ etc/rc以儘可能多的進程停止運行。全系統仿真與真機上的基準測試不同。而在真機上,我們甚至可能會在每次運行基準測試時重新啓動機器。禁用(虛擬)網絡。等等
如果可以的話,不要在真正的操作系統上運行,而要在最小的顯示器上運行。
但是,真的最好找到I/O跟蹤重放設施。有時這些隱藏在調試器選項下。
這裏是一個參考文獻,它在2008年談論了關於qemu中I/O重放的補丁。
http://wiki.qemu.org/Features/FaultTolerance - I/O重放的可靠性/容錯性。
QEMU用戶空間模擬可能更具可重複性。我不知道它是否與MARSS一起工作
順便說一句:再現性問題不僅僅與模擬器相關。這也與可靠性和調試有關。
您可能能夠找到一種通用的Linux重播工具,您可以使用該工具使您的系統在QEMU/MARSS之上更具可重複性。
裏面MARSS,您可以使用ptlcall檢查站設施採取檢查點只在您的基準(假設你正在運行SPEC等)做了很多最初我後點/ O ,並在下一個IO之前許多基準測試都會執行很多初始I/O,然後在用戶代碼中運行一段時間,然後執行一些最終的I/O。通過使用這些檢查點,您可以避免隨時間變化的系統調用。
同樣Simpoints,http://www.marss86.org/~marss86/index.php/Simpoints
順便說一句,我只是想起另一種方案可能是不確定的(除偶然取決於時間,或多處理器的交互):他們可以明確地和本質取決於時間。
E.g.利弗莫爾循環基準的langer98版本計算循環花費了多少時間,如果花費的時間不夠,則會增加循環計數。您可以在這裏記錄外部交互,例如時間和系統調用,並且程序可能會重現 - 但是您不會準確地測量在新的更快的計算機上它會做什麼。
相反的:假設你有以下形式的編譯器優化開關「將此真的很貴優化不超過2個小時,然後停止......」
QEMU內置的確定性錄製和回放
QEMU 2.9.0現在那種具有通過節省外部輸入確定的錄製和回放,但它被暫時打破:How to use QEMU's deterministic record and replay feature for a Linux kernel boot?
主要單證有:
- 1. Qemu模擬器手臂tegra2
- 2. 在Qemu中模擬一個基於NAND的存儲設備?
- 3. libgthread沒有運行QEMU模擬器
- 4. qemu模擬ARM機器無法啓動
- 5. 基於事件的模擬
- 6. 基於PHP模擬器的網站
- 7. QEMU作爲用於固件測試的嵌入式模擬器
- 8. 建立一個基於網絡的iphone/ipad模擬器/模擬器
- 9. Android模擬器 - DDMS「模擬器控制」被禁用,同時運行基於模擬器
- 10. 好的模擬器/模擬器(Android,iOS)
- 11. 使用Qemu進行內核模擬
- 12. 在qemu中模擬cortex-a53(arm64)
- 13. qemu可以模擬多核環境嗎?
- 14. cordova模擬android-qemu:無法加載initrd''
- 15. 使用QEMU模擬Arietta G25板
- 16. 模擬器上模擬GPS位置的時間不正確
- 17. Xcode「模擬器」? Android Studio「模擬器」?
- 18. 磁性模擬
- 19. 模擬屬性設置器
- 20. 如何使用Robot Framework確定iOS模擬器或Android模擬器
- 21. 創建於Android模擬器
- 22. 關於android模擬器diskimage
- 23. 模擬基於Java EE的網站
- 24. 模擬基於Atom的PC環境
- 25. 如何升級的Windows Phone模擬器只模擬器7〜8模擬器
- 26. 在iPad模擬器上模擬擠壓
- 27. 如何模擬在iPhone模擬器
- 28. 在android模擬器上模擬GPS
- 29. 使用iOS模擬器模擬iPad 1
- 30. 模擬捏放8模擬器