NVIDIA CUDA Force P2 State
NVIDIA CUDA - Force P2 State — великая и ужасная настройка в драйверах Nvidia, сокрытая от глаз простого юзера в недрах профилей, кишочках драйвера и прочем содоме. Официально, по заверениям самого дедушки Хуанга и его эффективных менеджеров, эта фича призвана спасать твои вычисления на больших данных от ошибок, когда ты на своей геймерской карточке внезапно решил посчитать геном человека или найти нефть в огороде у бабушки. На деле же — это хитрожопый механизм, созданный, чтобы методично калечить твой FPS в игорях, заставлять видеокарту выть вентиляторами при просмотре котиков на YouTube, превращать твой ноутбук в печку и, конечно же, порождать бесконечные, многолетние срачи на всех профильных и не очень форумах. Это своего рода цифровой аналог кнопки «сделать заебись, но не до конца», которую инженеры Nvidia с ухмылкой встроили в каждый свой драйвер.
Суть[править]
Дабы понять всю глубину Марианской впадины инженерной мысли Nvidia, нужно для начала уяснить, что такое эти ваши P-стейты (Performance States). Если отбросить тонны маркетинговой и технической шелухи, то это просто режимы работы твоей видеокарты, как скорости у автомобиля.
- P0 — это режим «ГАЗ В ПОЛ, ЖРАТЬ БЕНЗИН ВЁДРАМИ». Максимальные частоты ядра и памяти, максимальная производительность, максимальное энергопотребление. Включается, когда ты запускаешь какой-нибудь Cyberpunk 2077 и хочешь увидеть все полигоны на лице Киану Ривса.
- P8, P12 — это режим «СПАТЬ» или «ТОШНИТЬ В ПРОБКЕ». Минимальные частоты, минимальное потребление. GPU лениво перекатывает пиксели на рабочем столе, пока ты читаешь эту статью.
- А между ними, как между раем и адом, затесался чистилищный P2.
По официальной легенде, которую пиарщики Nvidia скармливают хомячкам, мир высоких вычислений на игровых картах GeForce — хрупок и полон опасностей. Когда какой-нибудь студент-энтузиаст или хитрожопый стартапер запускает на своей RTX 5080 нейросетку, которая должна написать диплом или предсказать курс биткоина, на максимальных частотах видеопамяти могут возникать ошибки. Данные портятся, расчёты идут по пизде, нефть не находится, а диплом получается про котиков. Чтобы этого избежать, добрые инженеры Nvidia и придумали P2. Как только запускается приложение, использующее CUDA (а это почти всё, что связано с вычислениями, от рендеринга до майнинга), драйвер принудительно переводит карту в режим P2. В этом режиме ядро карты может продолжать молотить на высоких частотах, а вот память принудительно сбрасывает свои частоты на несколько сотен мегагерц. Эдакий «ECC-память для бедных», как они сами это описывают. Точность вычислений повышается, все счастливы. В теории.
[…] Basically, we added this p-state because running at max memory clocks for some CUDA applications can cause memory errors when running HUGE datasets. Think DL apps, oil exploration use cases, etc where you are crunching large numbers and it would error out with full memory clocks. These are the types of apps you really shouldn’t be running on GeForce anyway but since there are a lot of folks who do and were running into this issue we created this new mode for them.
It’s basically like a poor man’s version of ECC memory. That’s how we described it way back when…
[…] And if you’re gaming w/CUDA (say for instance using PhysX) it will give you full clocks. So gamers shouldn’t be affected by this mode.— Официальный ответ представителя Nvidia, который, как обычно, не имеет ничего общего с реальностью.
На практике же оказалось, что драйверу абсолютно похуй, что именно ты запустил. Будь то гигантский научный проект в CERN или сраный Discord, который решил использовать CUDA для аппаратного ускорения своих эмодзи — результат один. Драйвер видит CUDA-контекст и с криком «ЗА СТАБИЛЬНОСТЬ!» вгоняет твою видеокарту в P2, кастрируя производительность памяти. А заявление «gamers shouldn’t be affected» стало таким же мемом, как «it just works» от Тодда Говарда.
Кому и зачем это мешает[править]
Список пострадавших от этого «гениального» решения растянулся на километры и включает в себя практически всех, кто владеет картой Nvidia.
Игори и Discord[править]
Это, пожалуй, самый массовый случай. Представь себе ситуацию: ты, довольный обладатель новенькой RTX 5090, запускаешь любимый шутан. Фреймрейт улетает за 200, всё плавно, красиво, жизнь удалась. Параллельно у тебя, как у любого нормального человека, запущен Discord, чтобы координироваться с тиммейтами или просто слушать, как они ноют. И вот тут-то и начинается магия Nvidia.
Современный Discord, как и многие другие приложения, построенные на Electron, для рендеринга своего интерфейса и прочих свистоперделок использует аппаратное ускорение GPU. И в какой-то момент его разработчики решили, что использовать CUDA — это модно, стильно и молодёжно. Драйвер Nvidia, заметив эту жалкую попытку активности со стороны чат-программы, тут же бил тревогу. «О БОЖЕ, CUDA-ПРИЛОЖЕНИЕ! СРОЧНО ВКЛЮЧАЕМ P2, ИНАЧЕ ВСЁ СЛОМАЕТСЯ!». И похуй, что это не расчёт траектории полёта к Марсу, а анимированная какашка в чате.
В итоге, пока ты играешь, твоя видеокарта, работающая в фоне с Discord, перманентно сидит в P2-состоянии с урезанными частотами памяти. Пропускная способность памяти падает, и в игре, особенно в требовательных к ней сценах, ты начинаешь ловить необъяснимые статтеры, просадки FPS и прочие радости. Ты грешишь на кривой движок игры, на новые драйвера, на вирусы-майнеры, на ретроградный Меркурий, но никогда бы не подумал, что виноват ёбаный чат. Срач на Reddit по этому поводу в 2023 году был эпических масштабов, пока народные умельцы не ткнули всех носом в эту настройку.
И ладно бы только Discord. Аналогичной болезнью страдали и страдают OBS, RTX Voice/Broadcast и куча другого софта. Захотел постримить? Получи урезанную производительность. Включил шумодав от Nvidia, чтобы мамка на фоне не орала? Готовься к лагам. И каждый раз анонимус на форумах проходит все пять стадий принятия: отрицание, гнев, торг, депрессия и, наконец, гугление с последующим нахождением этой статьи.
Линуксоиды и кинцо[править]
Если для виндузятников P2 — это просто досадная помеха, то для адептов пингвина это сущий, непрекращающийся ад и персональная пытка от Хуанга. Дело в том, что в Linux для аппаратного декодирования видео (чтобы твой проц не потел, когда ты смотришь 4K-видео с торрентов) используется технология NVDEC. А NVDEC, сюрприз-сюрприз, для своей работы создаёт CUDA-контекст. Дальше ты уже знаешь.
Ты просто открываешь YouTube в браузере или запускаешь фильмец в MPV. Твоя RTX 3080, которая в простое должна потреблять ватт 20-30 и быть абсолютно бесшумной, внезапно решает, что настало время поработать. Карта застревает в P2, её ядро молотит на базовой частоте в полтора гигагерца, а потребление подскакивает до 90-100 ватт. Вентиляторы начинают взлетать, температура растёт. И всё это ради того, чтобы показать тебе видосик с котиками. Если у тебя десктоп, это просто раздражает. Но если у тебя ноутбук, это катастрофа: дикий нагрев, шум и батарея, которая тает на глазах.
When I watch youtube/twitch/other videos in "default CPU-decoding" by webbrowser…
From 37w idle, memory 405mhz, pclk 210mhz
To 112w, memory 9251mhz, pclk 1905mhz
That is, at least to my understading, a lot of power for just playing a simple video.— Вопль отчаяния с форума разработчиков Nvidia.
Самое смешное, что эта проблема известна с 2017 года. Пять, ШЕСТЬ, СЕМЬ лет линуксоиды обивают пороги форумов Nvidia, создают баг-репорты, умоляют, угрожают, но получают в ответ либо гробовое молчание, либо вежливое «мы завели внутренний баг для отслеживания, ждите». Ждут до сих пор. Это наглядно демонстрирует отношение Nvidia к сообществу Open Source: «Жрите, что дают, и не выёбывайтесь». В итоге, для многих линуксоидов аппаратное ускорение видео на картах Nvidia стало просто бесполезной фичей, которую проще отключить, чем мириться с последствиями.
Майнеры (уже неактуально, но помним)[править]
Во времена золотой лихорадки, когда каждая вторая видеокарта в мире добывала Эфириум, а не рисовала графоний, P2-стейт был врагом номер один. Алгоритм Ethash был крайне чувствителен к пропускной способности памяти, и каждый мегагерц разгона VRAM напрямую конвертировался в заветные мегахеши и, как следствие, в бабло.
Поэтому первое, что делал любой уважающий себя майнер после установки свежей карты в риг — это лез отключать CUDA - Force P2 State. Без этого ритуала память просто не гналась до нужных высот, упираясь в лимит, зашитый в P2. Отключение этого «предохранителя» переводило карту в режим P0, снимало все ограничения и позволяло выжать из чипов памяти все соки.
Тут, правда, крылся и источник лулзов. Неопытные копатели, начитавшись гайдов, отключали P2, но забывали скорректировать свой разгон в MSI Afterburner. Настройки, которые были стабильны в P2 (+1200 МГц к пониженной базовой частоте), при переходе в P0 внезапно превращались в экстремальный и нестабильный разгон (+1200 МГц к уже высокой базовой частоте). Риги начинали сыпать ошибками, вылетать, а на форумах появлялись панические треды в стиле:
tldr: don't be stupid *like me * and click boxes without knowing what they do. P0 state has 400mhz boost to memory oc
...I ticked it and was immediately blown away by the 64-66MH I was getting on my 3070s. No crashes or errors for 10 mins, but I came back in a hour to find a bloodbath of bad shares. Any gpus still connected were doing 2-20MH. After resetting my settings, I am now getting 0.3-1MH decrease ON ALL CARDS signifying rapid memory degradation.— Анонимус, который чуть не сжёг свои карты в погоне за лёгкими деньгами.
Конечно, память он вряд ли деградировал за час, но лулзов доставил знатно, наглядно продемонстрировав, что бывает, когда тыкаешь в настройки, не понимая их сути.
Мораль[править]
История с CUDA - Force P2 State — это квинтэссенция всей философии Nvidia. Сначала создать проблему на ровном месте под видом «заботы о пользователе», искусственно ограничив возможности своих же продуктов. Затем годами игнорировать мольбы и жалобы сотен тысяч юзеров на всех платформах. И всё это ради чего? Возможно, чтобы тонко намекнуть: «Хочешь стабильности и производительности без костылей — покупай нашу профессиональную серию Quadro с ECC-памятью за овердохуя денег».
Но, как всегда, на каждую хитрую корпоративную жопу найдётся свой народный умелец с винтом. Сообщество само нашло проблему, само нашло решение и само написало гайды. А Force P2 State так и останется в истории вечным памятником корпоративному долбоебизму, заставляя новые поколения геймеров, стримеров и линуксоидов недоумённо чесать репу и спрашивать на форумах: «Какого хуя у меня лагает?».