Контроль за видео-памятью в RemoteFX

Недавно, на небольшом вводном докладе о технологии RemoteFX в сценариях VDI, мне задали вполне ожидаемый вопрос: "Что будет, если кончится видео-память, выделяемая под виртуальные машины?".

Реализованный механизм динамического управления оперативной памятью, реализованный в Service Pack 1, к сожалению никоим образом не затрагивает управление видео-памятью. Таким образом, необходимо взвешенно планировать выделение видео-памяти под каждую виртуальную машину, дабы максимально эффективно использовать имеющиеся ресурсы. В TechNet-статье об аппаратных требованиях RemoteFX  представлена таблица, характеризующее модели выделения видео-памяти:

Максимальное разрешение экрана Максимальное количество мониторов на виртуальную машину

1 монитор

2 монитора

3 монитора

4 монитора

1024 x 768

75 MB

105 MB

135 MB

165 MB

1280 x 1024

125 MB

175 MB

225 MB

275 MB

1600 x 1200

184 MB

257 MB

330 MB

N/A

1920 x 1200

220 MB

308 MB

N/A

N/A

 Таким образом, каждой виртуальной машине можно выделить от 75Мб до 330Мб видео-памяти. Сценарии, когда в терминальной сессии используется более чем два монитора достаточно редки, так что выделение памяти "впрок" под 3-4 монитора не всегда является разумным. Единственный сценарий, когда такой подход может принести плоды - использование ресурсоемких графических пакетов.

При выборе типа и количества мониторов в настройках адаптера RemoteFX виртуальной машины, стоит помнить, что система фиксирует эти настройки и не позволяет менять их в терминальной сессии. Таким образом, если в виртуальной машине выбран один монитор 1024х768, то при подключении с клиентского устройства с разрешением 1280х1024 будет использоваться минимальное, фиксированное в системе. Для удобства, можно выставить максимальное для клиентских устройств разрешение и масштабировать размер терминальной сессии на свое усмотрение.

В случае, когда ресурсов видеоадаптера недостаточно для запуска виртуальной машины, вы получите симпатичную ошибку о нехватке ресурсов:

 Данная ошибка будет появляться до тех пор, пока в системе не освободится необходимое количество видео-памяти, или пока не будут изменены в меньшую сторону.

Оперативно получать информацию о доступном на серверах Hyper-V количестве видео-памяти будет можно с помощью SCVMM 2008 R2 с последним пакетом обновления(который выйдет в течение 90 дней после релиза SP1).

  Также, информацию можно будет получить и через скрипт PowerShell:

PS C:\> $hosts = get-vmhost
PS C:\> foreach ($h in $hosts)
>> {$h.GPUs |ft $h.Name,Name,AvailableVideoMemoryMB}

 

В качестве результата выполнения скрипта, получится таблица вида

host2… Name AvailableVideoMemoryMB
------ ---- ----------------------
NVIDIA Quadro FX 580 420
Host7… Name

   AvailableVideoMemoryMB
------ ---- ----------------------

NVIDIA GeForce 8800… 495
Host1… Name

AvailableVideoMemoryMB
------ ---- ----------------------

NVIDIA GeForce GTX 295 877
NVIDIA Quadro FX 580 420

 

В случаях, когда на рабочей станции используется несколько видеокарт, их ресурсы часто объединяют для совместного рендера картинки с помощью технологий SLI или CrossFire, в зависимости от производителя. В случае использования видеоадаптеров исключительно под нужды сценариев VDI с RemoteFX, они работают обособлено друг от друга, отвечая за выделенные им виртуальные машины. На данный момент технология поддерживает до 4 видеоадаптеров на сервер и тестировалась в типовых сценариях с нагрузкой до 12 пользователей на GPU.

Ну а так выглядит диспетчер устройств сервера, на котором установлено сразу несколько видеоадаптеров:

 

Будем надеяться, что в следующих версиях RemoteFX, будет реализован функционал динамического управления видео-памяти и все станет существенно проще. =)