計算圖形內存
在 VidMm 能夠向客戶端報告準確的帳戶之前,它必須首先計算圖形內存的總量。 VidMm 使用以下內存類型和公式來計算圖形內存:
- 系統總內存
此值是操作系統可訪問的系統內存總量。 BIOS 分配的內存不會出現在此數字中。 例如,一臺具有 1 GB DIMM (1,024 MB) 的計算機,其 BIOS 保留了 1 MB 的內存,似乎有 1,023 MB 的系統內存。
- 可用于圖形用途的系統內存總量
此值是專用于或共享到 GPU 的系統內存總量。 此數字的計算方式如下:
TotalSystemMemoryAvailableForGraphics = MAX((TotalSystemMemory / 2), 64MB)
- 對光圈段提交限制
此值是 VidMm 允許內核模式顯示微型端口驅動程序 (KMD) 在任何給定時刻鎖定 GPU 使用的系統內存量。 也就是說,它是 KMD 可以通過光圈段映射的系統內存量。 為 GPU 分配的系統內存總量可能會大大超過提交限制;然而,VidMm 確保在任何時候只有一個提交限制數量實際上駐留在一個光圈段中。
默認情況下,特定光圈段的提交限制是該段的大小。 當驅動程序描述段時,KMD 可以在 DXGK_SEGMENTDESCRIPTOR 結構的 CommitLimit 成員中指定不同的提交限制。 以這種方式指定的提交限制僅適用于驅動程序描述的特定段。
除了每段提交限制外,所有光圈段都有全局提交限制。 此全局提交限制也稱為共享系統內存。 VidMm 計算此值。 KMD 可以在 DXGK_DRIVERCAPS 結構的 ApertureSegmentCommitLimit 成員中將此值減小到較低的值;然而,我們不推薦這種做法。
VidMm 不允許 KMD 違反每段提交限制和全局提交限制。 如果特定段的提交限制為 1 GB,但全局提交限制為 256 MB,則 VidMm 不允許 KMD 將超過 256 MB 的系統內存映射到該段。
- 專用視頻內存
此值是 KMD 在 DXGK_SEGMENTFLAGS 結構中未指定 PopulatedFromSystemMemory 成員的所有內存段的大小之和。
- 專用系統內存
此值是 KMD 在 DXGK_SEGMENTFLAGS 結構中指定 PopulatedFromSystemMemory 成員的所有內存段的大小之和。 此數字不能大于圖形可用的總系統內存 (TotalSystemMemoryAvailableForGraphics)。
- 最大共享系統內存
此值是共享給 GPU 的最大系統內存量。 VidMm 使用以下公式計算它:
MaxSharedSystemMemory = TotalSystemMemoryAvailableForGraphics - DedicatedSystemMemory
- 共享系統內存
此值是共享給 GPU 的系統內存量。?VidMm?使用以下公式計算它:
SharedSystemMemory = MIN(MIN(SumOfCommitLimitOnAllApertureSegment, DXGK_DRIVERCAPS.ApertureSegmentCommitLimit), MaxSharedSystemMemory)
- 總視頻內存
此值是視頻內存總量。?VidMm?使用以下公式計算它:
TotalVideoMemory = DedicatedVideoMemory + DedicatedSystemMemory + SharedSystemMemory