Calculating Graphics Memory

VMM需要在上报精确的显存信息之前计算显存的总量。下列描述了VMM如何计算显存数量:

Total system memory

系统内存总大小
系统内存总量是系统OS可以访问的内存部分。BIOS分配使用的内存不会计算在系统内存总大小中。例如,系统中由1G(1024MB)内存条,BIOS分配使用了1MB,则OS能访问的内存只有1023MB。

可以给图形使用的系统内存总量
给GPU共享或专用的系统内存大小使用下列公式得到

TotalSystemMemoryAvailableForGraphics = MAX((TotalSystemMemory / 2), 64MB)

Commit limit on aperture segment

aperture 段的Commit上限

aperture段的上限是VMM允许显卡驱动为GPU pin down并任意使用的系统内存数量(显卡驱动能够通过aperture段映射的系统内存数量)。能够提供给GPU的系统内存总大小可以远远大于aperture段的commit上限;但是VMM能够保证aperture段中实际resident的数量在任意时刻不会大于commit上限。

默认情况下,一个典型的aperture段的Commit上限为这个段的大小。显卡驱动能够通过指定DXGK_SEGMENTDESCRIPTOR结构中CommitLimit成员来设置一个不同的Commit上限。这种指定的Commit上限只在显卡驱动所指定的段中才会生效。

另外对于段的commit上限存在一个对于所有段都有效的全局commit上限。这个全局上限也被称为共享系统内存。VMM会计算这个值。尽管显卡驱动能够通过指定DXGK_DRIVERCAPS中ApertureSegmentCommitLimit来指定一个较低的值,但是我们并不建议这样做。

VMM不允许显卡驱动超过段的commit上限或者全局上限。如果一个段的commit上限为1GB,但是全局commit上限是256MB,VMM将不会允许显卡驱动映射超过256MB的系统内存到这个段中。

Dedicated video memory

专用显存
该数量为所有报给系统段中未被设置DXGK_SEGMENTFLAGS成员PopulatedFromSystemMemory的段大小的总和。

Dedicated system memory

图形专用系统内存

该数量为显卡驱动报给系统段中被设置DXGK_SEGMENTFLAGS成员PopulatedFromSystemMemory的段大小的总和。该数值不能大于能被图形使用的系统内存总量。

Shared system memory

图形共享系统内存

最大可以共享给GPU的系统内存数量如下

MaxSharedSystemMemory = TotalSystemMemoryAvailableForGraphics - DedicatedSystemMemory

可以共享给GPU的系统内存的数量如下

SharedSystemMemory = MIN(MIN(SumOfCommitLimitOnAllApertureSegment, DXGK_DRIVERCAPS.ApertureSegmentCommitLimit), MaxSharedSystemMemory)

Total video memory

显存总大小

显存总大小的计算方式如下:

TotalVideoMemory = DedicatedVideoMemory + DedicatedSystemMemory + SharedSystemMemory