Изучаем BIOS GF5900FX
Эта работа была прислана на наш "бессрочный" конкурс статей.
Введение
Главная цель которая преследовалась в статье – расставить все точки над "i" в редактировании BIOS-ов видеокарт серии GF5900. Многое из описанного относится ко всем видеокартам, построенным на базе чипов nVidia. В качестве подопытного экземпляра выступала Gainward FX Ultra/1100XT TV-DVI.
Статья разбита на несколько частей:
- Редактирование частот
- Таблица напряжений
- Регистр NV_PFB_CFG
- Тайминги памяти
Параллельно со статьей писалась программа MHz5900 (или наоборот), которая и поможет проиллюстрировать все разделы:
реклама

В принципе, все описанные модификации можно проделать любым HEX редактором без помощи MHz5900 (возможна некорректная работа для некоторых BIOS), однако при этом контрольная сумма BIOS будет нарушена и видеокарта, вероятнее всего, не сможет стартовать.
Редактирование частот
Самой распространенной операцией модификации BIOS является редактирование частот. На скриншоте проиллюстрирована таблица производительности из образа BIOS GF5900XT:

Все частоты хранятся в 32-битных полях таблицы. Частота работы памяти во всех режимах равна:
B8 88 00 00-> 000088B8-> 35000-> 350MHz или 700MHz DDR
Единственное, на что нужно обратить внимание, частоты памяти повторяются 8 раз для каждого из режимов, для разных конфигураций памяти.
реклама
Частоты работы GPU по различным режимам:
2D: 30 75 00 00-> 00007530-> 30000-> 300MHz |
LP3D (LowPower3D): 7C 92 00 00-> 0000927C-> 37500-> 375MHz |
3D: 40 9C 00 00-> 00009C40-> 40000-> 400MHz |
Что полностью соответствует штатным частотам.
В случае разгона, например до 450МГц получим следующие цифры:
450MHz-> 45000 -> 0000AFC8 -> C8 AF 00 00
Частой практикой борьбы с так называемым "автотормозом" (АТ) является прошивка одинаковых, максимальных частот работы GPU для всех режимов работы (2D, LP3D, 3D). Тогда также следует обратить внимание на необходимость повышения напряжения питания до режима 3D в младших режимах. С другой стороны, существуют еще как минимум два способа борьбы с АТ через BIOS: обнуляя в размер той самой таблицы производительности, либо удаляя указатель на неё (что и проделала фирма ASUS для своих видеокарт), но трудность состоит в том, что тогда дополнительно придется скорректировать скрипт инициализации BIOS для установки максимального уровня производительности при старте видеокарты. Краткое описание принципов этого есть в FAQ от RT (включен в дистрибутив последней версии).
Необходимо помнить, что в чипах 5900XT и старше существуют два совершенно независимых метода защиты чипа от повреждения.
AutoFreeze (неофициальное, но широко распространенное название) – при достижении критической температуры, нехватке питания, либо не прохождении стресс-теста, например, в результате переразгона, чип зависает и картинка замирает. Драйвер детектит зависание процессора и перезагружает его после определённого таймаута. Чип не перезапускается аппаратно, технология полностью программная. Она практически полностью совпадает с широко разрекламированной ATI-шной VPU Recover. После перезагрузки, видеокарта за несколько секунд выводит все нарисованные кадры. Обычно замирание происходит на 5-10 сек в течение которых система не реагирует ни на какие команды, визуально это напоминает зависание системы. Сброса частот при этом не происходит. Технология была добавлена еще в GF4-4200Ti (Detonator 40.xx), явление имеет ярко выраженную цикличность и может повторяться каждые 10-20 сек.
Причину возникновения autofreeze можно установить, присвоив в реестре параметру RmLogonMC= 1 (проще всего это сделать с помощью RT (RivaTuner): закладка PowerUser, кнопка OpenMatchedDataBase, раздел System, параметр RMLogonRC=1).

После перезагрузки компьютера в системном журнале будет отмечаться каждый сбой в работе GPU:

АutoClockDown – более интеллектуальная технология, призванная вообще не останавливать работу GPU. При достижении критических температур (возможно также ошибок) в режиме 3D, частота и напряжение чипа сбрасывается до безопасных LP3D, пользователь обычно даже не замечает перехода. Единственный негативный факт – после охлаждения GPU, назад частоты и питание не возвращаются до полной перезагрузки системы.
Если АutoClockDown можно отключить прошивкой нестандартных частот для LP3D, то смысла отключать AutoFreeze нет – в этом случае из состояния зависания GPU можно будет вывести только перезагрузкой всего компьютера. Таким образом не стоит "загонять в угол" видеокарту, делать невозможным охлаждение автоматическим снижением частоты и питания, это может привести к фатальным последствиям для нее. Гораздо более правильный метод борьбы с "автотормозом" – доработка системы охлаждения и разумный разгон.
По уточненной информации от Unwinder-a: Throttling – это переход на более низкий уровень производительности (performance level) 3D (L2) -> LP3D (L1), 3DLP (L1) -> 2D(L0). RobustChannels – просто перезагрузка GPU после аппаратных ошибок, либо после таймаута, когда драйвер не получил никаких ответов от графического процессора (т.е. когда он банально завис).
реклама
Throttling могут вызывать разные причины. И ошибки RobustChannels, и переход температуры за критический предел, и нехватка питания, и провал стресс-теста. В некоторых случаях уровень производительности восстанавливается через некоторое время, в некоторых нет, вероятнее всего, в зависимости от того, исчезло ли породившее его включение состояние или нет.
Таким образом, как Throttling, так и RobustChannels (являющийся подмножеством Throttling) часто влекут собой остановку в работе видеокарты, которую обычно называют autoFreeze. В свою очередь, autoClockDown – это всего-навсего Throttling, который не закончился возвращением исходного уровня производительности.
Throttling характерен для всех видеокарт, имеющих более одного уровня производительности (т.е. раздельные 2D/3D частоты). Т.е. он присущ и семейству NV3x и NV4x. RobustChannels не имеет привязки к видеокарте и должен работать даже на более старых чипах.
Таблица напряжений.
В первую очередь следует четко понимать, как это работает. Рассмотрим одну из двух таблиц управлением питания GPU, находящихся в BIOS – таблица соответствий "напряжение -> VID".

Каждая ячейка таблицы содержит значение напряжения в вольтах*100 и VID, соответствующий ему. Performance table BIOS это вторая, связанная с ней таблица – "режим производительности -> напряжение". Система не знает, на какие пины стабилизатора питания нужно подать логическую единицу, чтобы получить конкретное напряжение. Для этого он и обращается в табличку, которую мы рассматриваем. Многое зависит от конкретного производителя видеокарты. Обычно для 5900XT стандартными являются напряжения: 1.2В-> 2D, 1.3В-> LP3D, 1.4В-> 3D, что в свою очередь соответствует значениям VID в BIOS 1.2В-> 1 (01 в двоичной системе), 1.3В-> 2 (10 в двоичной системе), 1.4В-> 3 (11 в двоичной системе), где "1" соответствует включенной цепи питания. "Классическая" работа стабилизатора питания 5900ХТ проиллюстрирована ниже:

Понятно, что RivaTuner не может показать реальное напряжение питания, а только соответствующий ему VID, так как программа не знает, какой стабилизатор питания установлен на вашей видеокарте (хотя в стандартной поставке RT есть пример соответствий для ISL6569). При аппаратном вольтмоде значения VID в мониторе RT не изменятся, хотя на чип будет поступать напряжение отличное от стандартного. Однако не все так просто в регулировке напряжений, как может показаться на первый взгляд. Видя только таблицу напряжений и не видя таблицы производительности ответить на вопрос, какое питание будет подано на GPU, невозможно.
Яркий пример – видеокарты ASUS, в которых отсутствует разделение режимов и редактируя значения 2D и LP3D мы не получим никакого эффекта. Как вы наверное уже поняли, простое изменение 1.4В (третий элемент таблицы напряжений) на 1.6В также не приведет к увеличению напряжения питания. В данном случае драйвер обратится в BIOS для нахождения значения VID, соответствующего этому питанию и не найдя его, возьмет ближайший по напряжению сверху, а именно, все те же VID=3. Попробую проиллюстрировать все описанное выше. Установим VID=2 для напряжения 1.4В, заодно понизим частоту работы чипа с разогнанных 500МГц, до безопасных 400МГц, во избежание нестабильной работы в случае пониженного питания:

Запускаем RivaTuner, мониторим VID:

Параллельно вольтметром изменялось напряжение – разницы между LP3D и 3D нет, хотя изменение режимов налицо! Таким образом, мы получили софтовый вольтмод, правда наоборот – напряжение уменьшилось. Этим способом можно временно уменьшить напряжение питания (и разгонный потенциал естественно) на жаркий летний период.
Также одной из причин установки VID=3 для всех режимов является борьба с autoClockDown с одновременной прошивкой одинаковых частот для всех режимов. Однако повторю, что этот способ может привести к фатальным последствиям для видеокарты из-за большой нагрузки на нее и невозможности аварийного сброса частот. Также не стоит забывать об autoFreeze, который в любом случае продолжит функционировать.
Можно ли повысить напряжение питания 5900XT в режиме 3D? Нет! Его можно повысить для режима 2D, можно уменьшить для 3D, но программного способа его увеличения нет и не может быть, так как по умолчанию мы уже имеем максимальное значение VID=3 для двухбитного управления стабилизатором питания. Значение VID=7 будет просто замаскировано драйвером до 3. Однако для видеокарт на дизайне 5900 программное увеличение питания в некоторых случаях возможно – при применении трехбитного управления и установленным производителем для режима 3D VID=6 (110 в двоичной системе) вместо максимального значения 7.
NV_PFB_CFG
Самым малоизученным остается регистр NV_PFB_CFG, который часто называют "таймингом памяти", хотя это, скорее всего, неверно. Есть много подтверждений, что при установке в регистре значения 40 вместо 3 или 43 по умолчанию, производительность памяти резко возрастает. Предполагаю, что меняется алгоритм работы с памятью, возможно, адресация блоков.

Возрастает также разгонный потенциал памяти, особенно если это память Samsung. Хорошо заметно это по тесту FillRate 3DMark2003, скорость увеличивается до 10%. Однако рекомендую воздержаться от редактирования этого значения, так как причина роста производительности не ясна. Если желание поэкспериментировать все таки взяло верх – тщательно проверьте работу видеокарты во всех режимах даже 2D (например просмотр видео).
Тайминги памяти (NV_PFB_TIMING)
Найти сами регистры таймингов в памяти GPU не составляет особого труда благодаря утилите RivaTuner:

Приведу цитату Unvinder-a, автора RT, относительно управления регистрами: "Если считаете, что получится работать c GPU напрямую - без проблем. Ловите и пользуйтесь на свой страх и риск. Предупрежу ещё раз, что проблемы можно получить даже _чтением_ некоторых регистров. Не говоря уже о записи в них".
Более подробную информацию по управлению регистрами GPU с помощью RT можно прочесть на форуме Overclockers.ru в разделе, посвященном RT.
Однако расшифровать их гораздо труднее. Мне оказались доступны только исходники драйвера NV15 (при желании можно найти в Интернете, файл nv15_bios_sources.zip). На базе этого и была написана тестовая программка nTiming (229КБ), которая пытается декодировать регистры таймингов. Тайминги можно прошить в GPU через RT, для этого нужно указать путь к нему в файле nTiming.ini:

Программа писалась на основе регистров NV15 (GeForce2) поэтому гарантированно должна работать на всех видеокартах между GeForce2-GeForce FX 5900. В datasheet DDR памяти Hynix и Samsung указаны следующие значения для таймингов:
Frequency | CL | tRC | tRFC | tRAS | tRCDRD | tRCDWR | tRP | tRRD | tDAL | Unit |
500MHz (2.0ns) | 5 | 23 | 26 | 16 | 7 | 4 | 7 | - | 11 | tCK |
450MHz (2.2ns) | 5 | 21 | 24 | 14 | 7 | 3 | 7 | - | 11 | tCK |
400MHz (2.5ns) | 5 | 18 | 21 | 12 | 6 | 3 | 6 | - | 9 | tCK |
350MHz (2.8ns) | 4 | 16 | 17 | 10 | 5 | 2 | 5 | - | 8 | tCK |
300MHz (3.3ns) | 4 | 14 | 17 | 9 | 5 | 2 | 5 | - | 8 | tCK |
275MHz (3.6ns) | 4 | 14 | 16 | 9 | 5 | 2 | 5 | - | 8 | tCK |
Frequency | CL | tRC | tRFC | tRAS | tRCDRD | tRCDWR | tRP | tRRD | tDAL | Unit |
350MHz (2.86ns) | 5 | 15 | 17 | 10 | 5 | 3 | 5 | 4 | 10 | tCK |
300MHz (3.3ns) | 5 | 13 | 15 | 9 | 5 | 2 | 4 | 3 | 9 | tCK |
275MHz (3.6ns) | 5 | 13 | 15 | 9 | 5 | 2 | 4 | 3 | 9 | tCK |
Кстати, глядя на таблицы, становится ясно, почему обычно память Hynix разгоняется лучше Samsung на видеокартах 5900ХТ (350МГц) – вершина техпроцесса для данного типа памяти у первой фирмы 500МГц, у второй – 350МГц. То есть, если память Hynix 2.8нс может оказаться отбраковкой или даже перемаркировкой памяти с частотами выше 350МГц, то для памяти Samsung, в данном случае, это исключено.
Временные параметры имеют следующий смысл:
- CL – CAS (Column Address Strobe) Latency- минимальное время строба адреса столбца или колонки
- tRC – время цикла строки (Row Cycle): минимальный временной интервал (в тактах синхроимпульсов) между двумя последовательными командами активации одного и того же банка (tRC = tRAS+ tRP);
- tRAS – минимальное время (в тактах синхроимпульсов) активизации банка (Row Active State): минимально допустимое время удержания строки открытой;
- tRCD – задержка между сигналами RAS# и CAS# (RAS to CAS Delay): минимально допустимое время (в тактах синхроимпульсов) между подачей сигналов RAS# и CAS#;
- tRP – время подзаряда строки (Row Precharge): минимальное время (в тактах синхроимпульсов), необходимое для подзаряда строки после обращения к ней перед тем, как можно будет обратиться к другой строке того же банка;
- tRRD – задержка между двумя последовательными сигналами RAS# (RAS to RAS Delay): минимально допустимое время (в тактах синхроимпульсов) между командами активации различных банков;
- tDAL – время задержки активации/регенерации (Data in to Activate/Refresh Latency): минимальный временной интервал (в тактах синхроимпульсов) от подачи последней порции данных пакета записи до команды активации/регенерации того же банка;
От теории пора переходить к практике, попробуем подбирать тайминги для фиксированной частоты памяти 850МГц, по два теста для одного значения:
RC | RFC | RAS | RCD | RP | Fillrate (single tex) test №1 | Fillrate (single tex) test №2 | Fillrate (multi tex) test №1 | Fillrate (multi tex) test №2 | 3DMark score test №1 | 3DMark score test №1 |
17 | 19 | 11 | 6 | 0 | 1531.9 | 1534.2 | 3427.6 | 3422.8 | 6142 | 6139 |
14 | 19 | 11 | 6 | 0 | 1531.4 | 1532.5 | 1532.5 | 3427.6 | - | - |
2 | 19 | 11 | 6 | 0 | 1532.8 | 1533.7 | 3428.2 | 3426.9 | - | - |
2 | 14 | 11 | 6 | 0 | 1534.5 | 1535.0 | 3424.2 | 3428.2 | - | - |
2 | 14 | 9 | 6 | 0 | 1541.2 | 1541.0 | 3434.9 | 3434.9 | - | - |
2 | 14 | 1 | 6 | 0 | 1540.7 | 1541.6 | 3430.9 | 3436.3 | - | - |
2 | 14 | 1 | 5 | 0 | 1579.6 | 1579.5 | 3463.9 | 3466.5 | - | - |
1 | 14 | 1 | 5 | 0 | 1580.9 | 1579.3 | 3463.0 | 3465.1 | 6257 | 6262 |
1 | 13 | 1 | 5 | 0 | * | * | * | * | * | * |
1 | 14 | 1 | 4 | 0 | * | * | * | * | * | * |
Итого, мы видим прирост более 100 попугаев 3DMark2003, в основном за счет RCD (RAS to CAS Delay). Вроде бы на первый взгляд все достаточно неплохо, однако в данном случае память работала не на предельной для этого экземпляра видеокарты частоте 900МГц, а всего 850МГц. При поднятии частоты до предела, польза практически исчезает из-за того, что тайминги придется повысить:
17-19-11-6-0 520/900 3DMark score= 6414 |
1-14-1-5-0 520/900 3DMark не пройден! Многочисленные артефакты, катастрофическое падение производительности |
При увеличении таймингов выше 1-14-1-5-0, но меньше 17-19-11-6-0, можно подобрать частоту между 850МГц и 900МГц, при которой количество очков равно 6400, однако смысла в таких экспериментах нет.
Затем была произведена попытка идти в обратную сторону – увеличить тайминги до номинальных для памяти 2.5нс: 18-21-12-6(7)-0. Однако, не смотря на то, что производительность при этом слегка уменьшилась, разгоняться память свыше 900МГц не смогла. Возможно в этом случае вина лежит не на памяти, а на упрощенном (относительно 5900/5950U) дизайне платы, и еще возможно на том, что менялись не все значения таймингов памяти, а только найденные в BIOS. Однако результат неутешительный.
Заключение
Думаю, что редактирование BIOS можно отнести к экстремальным методам управления параметрами видеокарты. Несмотря на то, что существует множество утилит, позволяющих это сделать практически без риска, всегда нужно иметь либо загрузочный диск, автоматически восстанавливающий оригинальный BIOS, либо PCI видеокарту. Следует также помнить, что в подавляющем большинстве случаев вы не получите прироста в производительности более чем на 5-10%, а вот сделать работу карты нестабильной, наоборот, очень велика. Поэтому это стоит делать, если именно эти 5-10% очень важны.
В статье использованы следующие сокращения:
RT – RivaTuner |
LP3D – LowPower 3D |
VID – Volt ID |
Хочу выразить благодарность Алексею aka Unwinder Николайчуку и Павлу aka Paw Чубареву за помощь в написании статьи и Алексею aka Hruks Малышко за помощь в ее подготовке.
Ждём Ваших комментариев в специально созданной ветке конференции.
Лента материалов раздела
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Сейчас обсуждают