遷移層

XE 遷移層用於生成可以複製記憶體(驅逐)、清除記憶體或程式設計表(繫結)的作業。該層存在於每個 GT 中,具有一個遷移引擎,併為所有生成的作業使用一個特殊的 VM。

特殊 VM 詳細資訊

特殊的 VM 配置有一個頁面結構,我們可以在其中動態對映需要複製和清除的 BO,動態對映其他 VM 的頁表 BO 以進行更新,並使用 1 GB 頁面來標識對映整個裝置的 VRAM。

當前頁面結構由 32 個物理頁面組成,其中 16 個頁面被保留用於複製和清除期間的 BO 對映,1 個頁面被保留用於核心繫結,幾個頁面需要設定身份對映(確切數量取決於裝置有多少位地址空間),其餘頁面被保留用於使用者繫結操作。

待辦事項:佈局圖

繫結作業

一個繫結作業由兩個批處理組成,並在遷移引擎(核心繫結)或傳入的繫結引擎(使用者繫結)上執行。 在這兩種情況下,引擎的 VM 都是遷移 VM。

第一個批處理用於更新遷移 VM 頁面結構,以指向需要更新的繫結 VM 頁表 BO。 此操作需要一個物理頁面。 如果是使用者繫結,則從保留使用者繫結操作的頁面池中分配該頁面,並由 drm_suballoc 管理該池。 如果是核心繫結,則使用為核心繫結保留的頁面。

僅當裝置沒有 VRAM 時才需要第一個批處理,因為當裝置具有 VRAM 時,繫結 VM 頁表 BO 位於 VRAM 中,並且可以使用身份對映。

第二個批處理用於在繫結 VM 中程式設計頁面表更新。 為什麼不只用一個批處理? 這是因為需要在這兩個批處理之間使 TLB 失效,而這隻能從環中完成。

繫結作業完成後,如果為使用者繫結,則將分配的頁面返回給為使用者繫結操作保留的頁面池。 對於核心繫結,無需這樣做,因為保留的核心頁面由每個作業依次使用。

複製/清除作業

複製或清除作業由兩個批處理組成,並在遷移引擎上執行。

與繫結類似,第一個批處理用於更新遷移 VM 頁面結構。 在複製作業中,我們需要將 BO 的源和目標對映到頁面結構中。 在清除作業中,我們只需要將 BO 的 1 個對映新增到頁面結構中。 我們使用遷移 VM 中 16 個保留頁面進行對映,這使我們的最大複製大小為 16 MB,最大清除大小為 32 MB。

第二個批處理用於執行復制或清除。 同樣類似於繫結,由於需要從環中使 TLB 在批處理之間失效,因此需要兩個批處理。

如果 BO 大於最大複製/清除大小,則將生成多個作業。

未來的工作

更新複製和清除程式碼以使用身份對映的 VRAM。

我們可以重新設計頁面非同步繫結的使用方式,以使用每個頁面中的所有條目嗎?

使用大頁面進行 sysmem 對映。

是否可以身份對映 sysmem? 我們應該探索這一點。