從軟件的角度來看,一個污染內存頁的指令和內核實際上在Page Table Entry(PTE)中標記頁面髒的指令之間的延遲是多少?x86在設置頁面髒位時有多提示?
換句話說,如果一個指令弄髒一個頁面,下一條指令是否可以讀取PTE並查看髒位?
只有在軟件可見窗口(其中尚未設置髒位)時,我纔會關心實際已用週期。我似乎無法在參考手冊中找到任何保證。
從軟件的角度來看,一個污染內存頁的指令和內核實際上在Page Table Entry(PTE)中標記頁面髒的指令之間的延遲是多少?x86在設置頁面髒位時有多提示?
換句話說,如果一個指令弄髒一個頁面,下一條指令是否可以讀取PTE並查看髒位?
只有在軟件可見窗口(其中尚未設置髒位)時,我纔會關心實際已用週期。我似乎無法在參考手冊中找到任何保證。
從AMD手冊(大約2005年),第2卷:系統編程:
5.4頁轉換表項字段
...
Dirty (D) Bit. Bit 6.
This bit is only present in the lowest level of the page-translation hierarchy. It indicates whether the pagetranslation table or physical page to which this entry points has been written. The D bit is set to 1 by the processor the first time there is a write to the physical page.
同上英特爾(約公元前2006),卷3-A:系統編程指南,第1部分:
3.7.6頁目錄和頁表條目
...
Dirty (D) flag, bit 6
Indicates whether a page has been written to when set. (This flag is not used in page-directory entries that point to page tables.) Memory management software typically clears this flag when a page is initially loaded into physical memory. The processor then sets this flag the first time a page is accessed for a write operation.
UPDATE:
最新的英特爾手冊(卷3A,系統編程指南):
8.1.2.1 Automatic Locking
The operations on which the processor automatically follows the LOCK semantics are as follows:
...
When updating page-directory and page-table entries —
When updating page-directory and page-table entries, the processor uses locked cycles to set the accessed and dirty flag in the page-directory and page-table entries.
從課文中休息第8.1節和第8.2節說明,一旦CPU使用鎖定操作設置髒位,其他CPU應該開始看到更新的值。
當然,您可能有一個競爭條件,因爲您首先在一個CPU(或其中一個線程)上讀取髒位爲0,然後另一個CPU(或同一CPU上的另一個線程)將此位設爲1,但這並不奇怪。
AMD64 Architecture Programmer’s Manual Volume 2: System Programming (revision 3.22, Sept. 2012)
一般來說,髒位更新排序,對於其他負載 和商店,雖然不一定就訪問WC 內存;尤其是,它們可能不會導致WC緩衝區被刷新。 但是,爲確保與未來處理器的兼容性,應在讀取D位之前插入一個串行化操作 。
(重點煤礦。)
據this document 2033頁,英特爾的x86緩存有關的頁面表信息。該文本指出,如果髒位被軟件清除,則CPU有可能將其視爲等於1.
現在,對於問題:如果CPU緩存髒位,則可能是更新到PTE(page-table-entry)不會立即發生。它可能會被緩存回寫策略所推遲。
同一文檔的頁面1651描述了沖洗內部緩存的WBINVD指令。它並沒有說這包括了CPU緩存的所有數據。
我也閱讀了文檔。這些並不是說如果導致內核設置髒位的指令是序列化或屏蔽它後面的指令。通常情況下,如果沒有數據危險,讀取可以通過寫入,但這是一個非常棘手的情況,危險位於與寫入地址不同的地址(PTE)。我想知道管道是否正在檢查這種情況。 – srking
感謝您挖掘文檔tho :) – srking
@srking:請參閱更新。 –