2011-10-12 24 views
5

我正在研究RDTSC,並瞭解它是如何虛擬化的,以用於像VirtualBox和VMWare這樣的虛擬機。爲什麼英特爾/ AMD會面臨虛擬化這條指令的麻煩?我覺得它可以很容易地用陷阱模擬,它並不完全是一個超級通用的指令(我測試過,並且在禁用硬件RDTSC虛擬化的虛擬機中沒有通常使用的慢速下載)。但是,我知道Intel/AMD不會將所有這些問題都添加到虛擬化硬件上,除非它能夠非常快地執行。爲什麼RDTSC是現代處理器上的虛擬化指令?

有誰知道爲什麼?

+0

請注意,根據我的測試,在一個標準的EC2實例RDTSC是* not *虛擬化(我在[關於hasged這個問題](http:// security.stackexchange.com/questions/34523/is-it-closed-to-use-haveged-as-a-source-of-entropy-on-virtual-machines) - 這似乎也得到了[這個線程](https://forums.aws.amazon.com/thread.jspa?messageID=221076&tstart=0#jive-message-231568) – Korny

回答

7

它通常使用RDTSC來獲得細粒度的定時信息,其中虛擬化陷阱的開銷非常大。最常見的用途是使用兩條RDTSC指令,它們之間有少量代碼,將時間差作爲代碼序列的經過時間(週期數)。所以即使管道排水/沖水的開銷也相當大。另外,由於所有的指令都是讀取連續運行的計數器,所以虛擬化它非常簡單 - 硬件只需要允許在VM上下文切換時保存/重新加載計數器值,而不是任何特別的RDTSC指令本身。

+0

好吧,我得到你爲什麼需要虛擬化非常細粒度的時間但是,我能想到的唯一原因就是研究目的,或者是旁道攻擊。是否有任何正當的理由?它幾乎感覺rdtsc的虛擬化是邪惡的 –

+0

(並不意味着研究沒有意義)合法:P,我的意思是說,「任何其他的腿除了極其細緻的時序研究的重要但不常見的任務之外,還有其他原因嗎?「) –

+0

好吧,如果您不能正確虛擬化RDTSC,它將成爲程序檢測虛擬化運行的簡單方法,您可能不想 –

2

虛擬機應該能夠擁有不同的TSC,因爲它們在不同的時間啓動。物理CPU只有一個,因此至少需要獲得單個的每個VM TSC偏移量。另外,由於虛擬機並不完全擁有底層物理CPU,也就是說,他們不會一直執行它們,所以它們的TSC也應以某種方式反映「開/關」時間段,它是理想的是他們不會突然改變價值實際的時間,虛擬機仍應該從主機操作系統中獲得正確的時間,因爲有很多虛擬化軟件 - 沒有準備好,並且在數字太不足時可能會中斷。

我認爲這些是RDTSC虛擬化的原因。但無論你做什麼,滿足相互衝突的要求都很困難,而且會使問題複雜化。您無法隱藏虛擬化並讓虛擬機同時以接近本機的速度運行。有一些權衡,有些東西必須放棄。

相關問題