從邏輯上講,對任何CPU存儲變量的寫入都應該比各自的內存操作更快,因爲不會有緩存未命中的機會。這些狀態被緩存在CPU中,並且在下一個VMLAUNCH/VMRESUME操作之前它們不會更改任何CPU狀態。因此,它們應該比存儲器地址上的等效操作更快爲什麼VMREADs/VMWRITEs比內存讀/寫操作慢
在查看AMD和Intel提供的不同虛擬化解決方案時,會出現此問題。英特爾規定,對VMCS數據結構的所有更改應始終通過VMREAD/VMWRITE接口,而不是通過常規內存R/W操作。然而,AMD並未提出任何此類限制,其VMCB區域通過正規內存操作進行修改。
英特爾方法的收益應該比AMD更快VMExit/VMResume次。但是,英特爾將放棄增加新指令的靈活性。
但是,實際上,VMREAD/VMWRITE操作比常規內存操作要慢。這對我來說沒有任何意義。
'vmread'和'vmwrite'不僅僅是一個加載和存儲。它們執行額外的檢查(例如,VMCS字段必須存在)和操作(VMCS鏈接用於映射的VMCS)。另外,我不確定Intel是否保證所有的VMCS都必須被緩存,所以仍然會出現正常的負載。 –
你說他們慢點的基礎是什麼?據我瞭解,在目前的處理器中,它們比L1命中速度稍慢,但比實際存儲器要快許多倍。 – prl
@prl:是吞吐量還是延遲?微碼指令的吞吐量可能比L1D的加載或存儲更差,但更好的延遲很容易相信。我根本沒有使用它們,我只是用面值來回答我的答案。但是瑪格麗特指出,他們對寫作做了額外的檢查,這使得片段比我想象的更好。 –