Видеопамять не переполняется в том смысле, в каком переполняется диск. Когда приложение запрашивает больше, чем физически установлено на карте, срабатывает многослойный механизм: сначала менеджер памяти драйвера пытается освободить место, вытесняя наименее нужные ресурсы, затем часть данных переезжает в системную оперативную память, и только если и это не помогает — приложение получает отказ. Разные типы нагрузки доходят до разных стадий этой цепочки, и симптомы у каждой стадии свои.

Резидентность и вытеснение

Любой ресурс — текстура, буфер вершин, цель рендеринга — существует в виде выделения, которое может быть резидентным, то есть физически лежащим в видеопамяти, или вытесненным в системную. Менеджер памяти операционной системы вместе с драйвером ведёт список выделений с приоритетами: цели рендеринга текущего кадра трогать нельзя, а текстура объекта, не появлявшегося в кадре последние секунды, — первый кандидат на выселение.

Пока свободного места хватает, всё лежит на карте, и обращения идут по локальной шине с пропускной способностью в сотни гигабайт в секунду. Как только запрошенный объём превышает доступный, начинается вытеснение: содержимое копируется в системную память, а на его место приходят нужные данные. Каждая такая пересылка идёт через шину PCIe, у которой пропускная способность на порядок ниже локальной, а задержка — заметно выше. Причём копирование не бесплатно и по загрузке: перемещением занимаются отдельные движки копирования, но синхронизация с рендерингом остаётся.

Как это выглядит в игре

Пока вытесняется мало и редко, эффект незаметен. Когда объём превышения растёт, картина меняется: средняя частота кадров может остаться прежней, а минимальные значения проваливаются. Причина в том, что вытеснение и обратная подкачка происходят не равномерно, а всплесками — при повороте камеры, при входе в новую зону, при появлении эффекта, которому нужны новые ресурсы. Игрок видит это как рывок, замирание на доли секунды или подгрузку текстур низкого разрешения, которые через мгновение сменяются нормальными.

В крайней стадии наступает так называемая пробуксовка: данные, вытесненные в системную память, тут же требуются обратно, и шина оказывается занята постоянной перекачкой в обе стороны. Частота кадров падает в разы и становится нестабильной, движение мыши ощущается как вязкое. Характерный признак именно этой стадии — резкое, а не плавное падение при переходе через определённую настройку качества текстур: до неё всё в норме, после неё производительность обваливается ступенькой.

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

Как это выглядит в вычислительных задачах

Профессиональные приложения ведут себя иначе. Многие из них выделяют память заранее, крупными блоками, и при отказе распределителя завершают операцию с ошибкой нехватки памяти вместо того, чтобы продолжать работать медленно. Рендер не запускается, обучение модели прерывается на этапе выделения буферов, видеоредактор отказывается применять эффект. Отказ приходит быстро и однозначно, что в каком-то смысле удобнее: непонятной деградации нет, есть чёткая граница.

Промежуточный вариант — приложения с режимом работы через системную память. Они продолжают считать, но скорость падает настолько, что расчёт из десятков минут превращается в часы. Если время выполнения выросло непропорционально размеру задачи, стоит проверить именно занятость видеопамяти, а не мощность вычислительной части.

Как отличить от других причин

Похожие симптомы дают ещё несколько состояний, и их полезно разделять. Нехватка системной оперативной памяти проявляется обращением к файлу подкачки: тормозит вся система, включая интерфейс, растёт активность накопителя, а видеопамять при этом занята не полностью. Медленный накопитель даёт долгие первичные загрузки уровней и подгрузку при перемещении, но после того как данные попали в память, эффект исчезает; при нехватке видеопамяти рывки повторяются на одном и том же месте раз за разом. Перегрев видеокарты снижает частоты плавно и коррелирует с температурой, а не с содержимым сцены.

Практическая проверка простая: снизить только разрешение текстур, не трогая остальные настройки. Если рывки исчезли, а общая чёткость геометрии и эффектов осталась прежней, упор был именно в объём памяти. Если картина не изменилась, причина в другом узле. Общий порядок такой диагностики по узлам описан в разделе про сборку.

Что реально снижает потребление

Больше всего памяти занимают текстуры высокого разрешения, поэтому их детализация — первая настройка для снижения нагрузки, и она же меньше всего влияет на вычислительную часть. Затем идут буферы, зависящие от разрешения кадра: цели рендеринга, буферы отложенного затенения, кэши сглаживания — их объём растёт пропорционально площади кадра, из-за чего переход на более высокое разрешение увеличивает потребление не только по текстурам. Дальность прорисовки и качество теней добавляют геометрию и карты глубины.

Отдельно стоит помнить, что часть памяти всегда занята не приложением: рабочий стол, аппаратное ускорение в браузере, оверлеи, композитор оконной системы. На карте с небольшим объёмом эта фоновая доля перестаёт быть пренебрежимо малой, и закрытие лишних окон перед тяжёлой задачей даёт вполне измеримый эффект.