9923986909;rectangle
7994420702;horizontal

Перевод документации драйвера NVIDIA для Linux, часть 7

Глава 19. Настройка видеорежимов  

Драйвер NVIDIA для Linux поддерживает все стандартные видеорежимы VGA и VESA, также как и наиболее популярные пользовательские режимы; режимы с двойным сканированием и чересстрочные режимы поддерживаются для всех графических процессоров, совместимых с данным драйвером.

Для использования одного или нескольких стандартных видеорежимов в Х-интерфейсе, вы можете просто добавить их в опцию "Modes", например:

Modes "1600x1200" "1024x768" "640x480"

в соответствующей секции Display файла конфигурации Х-интерфейса (обратитесь к страницам руководства XF86Config(5x) или xorg.conf(5x) за дополнительной информацией). Или же воспользуйтесь утилитой «nvidia-xconfig» для запроса дополнительного видеорежима, например:

nvidia-xconfig --mode 1600x1200

Обратитесь к странице руководства по nvidia-xconfig за дополнительной информацией.

19А. Глубина цвета, бит на пиксель и шаг  

Хотя и не связанное напрямую с созданием видеорежимов, число бит на пиксель является проблемой при определении максимального доступного разрешения; по этой причине стоит объяснить часто возникающую путаницу между понятиями глубины цвета и числа бит на пиксель. Глубина цвета – это число бит данных, используемых для хранения пикселя. Поддерживаемые глубины — 8, 15, 16, и 24. Большинство видеокарт, однако, хранит информацию пикселей в размерах 8, 16, или 32 бит; это объем памяти, выделяемый пикселю. При заданной глубине цвета Х-интерфейс выбирает число бит на пиксель, используемое для хранения данных. Ниже приведена таблица, показывающая сколько бит для пикселя используется для того или иного значения глубины цвета:

Глубина цвета (DEPTH) Бит на пиксель (BPP)
8 8
15 16
16 16
24 32

Напоследок, понятие шага (pitch) означает, сколько байт линейного буфера кадров разделяет данные одного пикселя и данные расположенного непосредственно под ним. Вы можете посчитать его как горизонтальное разрешение, умноженное на число байт на пиксель (число бит на пиксель, деленное на 8). На практике, шаг может быть больше этой величины из-за необходимости выравнивания.

19В. Максимальные разрешения  

Драйвер NVIDIA для Linux поддерживает разрешения вплоть до 16384x16384 пикселей для GeForce GTX 400 и более новых графических процессоров, до 8192x8192 пикселей для графических процессоров GeForce 8 и более новых, вплоть до 4096x4096 для GeForce 7 и более ранних, хотя максимальное возможное разрешение для вашей системы может быть ограничено объемом видеопамяти (смотрите раздел полезные формулы ниже) и максимальным поддерживаемым разрешением дисплея (монитора/плоской панели/телевизора). Также обратите внимание, что хотя использование видеоналожения не ограничивает максимального разрешения или частоты обновления, но объем полосы пропускания видеопамяти, занятый видеорежимом, оказывает влияние на качество видеоналожения.

19С. Полезные формулы  

Максимальное разрешение – это функция как объема видеопамяти, так и выбранного числа бит на пиксель:

HR * VR * (bpp/8) = объем используемой видеопамяти

Другими словами, объем используемой видеопамяти равен результату умножения горизонтального разрешения (HR) на вертикальное разрешение (VR) и на число байт на пиксель (число бит на пиксель, деленное на 8). С точки зрения техники, объем используемой видеопамяти равен произведению шага на вертикальное разрешение, и размер шага может быть больше величины HR * (bpp/8) для соответствия требованиям оборудования, чтобы шаг был кратен некоторой величине.

Обратите внимание, что речь пока идет об объеме памяти, требующемся для буфера кадров, но память также может использоваться другими задачами, такими как OpenGL и кеш пиксельных карт.

Другая важная зависимость имеется между разрешением, пиксельной частотой и частотой вертикальной синхронизации (частотой обновления изображения):

RR = PCLK / (HFL * VFL)

Другими словами, частота обновления изображения (RR) равна результату деления значения пиксельной частоты (PCLK) на общее число пикселей изображения: горизонтальной длине кадра (HFL), умноженной на вертикальную длину кадра (VFL) (обратите внимание, речь идет о длине кадра, а не только о видимых разрешениях). Как описано в документе «XFree86 Video Timings HOWTO», вышеприведенная формула может быть представлена в виде:

PCLK = RR * HFL * VFL

Имея максимальное значение пиксельной частоты, можно изменять значения RR, HFL и VFL как угодно до тех пор, пока результат произведения всех трех остается в заданном пределе. Пиксельная частота записывается в файл журнала Х-интерфейса.

Файл журнала будет иметь строку вида:

(--) NVIDIA(0): ViewSonic VPD150 (DFP-1): 165 MHz maximum pixel clock

показывающую значение максимальной пиксельной частоты для дисплея.

19D. Как проверяется доступность видеорежима  

Традиционно в XFree86/X.Org при проверке доступности видеорежима сервер Х-интерфейса начинает с внутреннего списка стандартных VESA режимов, с добавлением режимов, заданных в строках ModeLines файла конфигурации Х-интерфейса. Эти режимы проверяются по таким критериям как попадание в заданные диапазоны частот HorizSync/VertRefresh для монитора в секции Monitor файла конфигурации Х-интерфейса, максимальной пиксельной частоте графического процессора.

После построения сервером Х-интерфейса списка корректных видеорежимов берется список запрошенных пользователем видеорежимов (перечисленных в строке "Modes" секции Display в секции Screen файла конфигурации X-интерфейса), и определяется наиболее подходящий проверенный режим для запрошенного пользователем.

Драйвер Х-интерфейса NVIDIA использует вариацию вышеизложенной последовательности для проверки доступности видеорежима. В процессе запуска сервера Х-интерфейса драйвер Х-интерфейса NVIDIA строит список доступных видеорежимов для каждого дисплея. Возможные режимы берутся из ряда источников:

  • информация EDID дисплея;
  • встроенный список видеорежимов сервера X-интерфейса;
  • заданные пользователем строки modelines в файле конфигурации Х-интерфейса;
  • стандартные видеорежимы VESA.

Для каждого возможного видеорежима проводится проверка доступности. В основном проверка происходит схоже с традиционной для XFree86/Xorg: параметры временной синхронизации сверяются с допустимыми диапазонами HorizSync и VertRefresh и максимально возможной пиксельной частотой. Каждая стадия проверки может независимо управляться с помощью опции конфигурации Х-интерфейса "ModeValidation".

Обратите внимание, что при проверке временных характеристик режимов с чересстрочной разверткой, в VertRefresh задается частота полей, а не частота кадров. Например, в следующей строке задана вертикальная частота обновления 87 Гц:

# 1024x768i @ 87Hz (industry standard)
ModeLine "1024x768" 44.9 1024 1032 1208 1264 768 768 776 817 +hsync +vsync Interlace

Некорректные режимы отбрасываются, корректные вставляются в список. Обратитесь к секции «Отчет о проверке доступности видеорежима» ниже за информацией о результате проверки для каждого видеорежима..

Доступным видеорежимам присваивается уникальное название, гарантирующее неповторяемость в списке для дисплея. Название составляется по принципу:

<ширина>x<высота>_<частота обновления>, (например, "1600x1200_85")

Название может быть дополнено другой цифрой для гарантии уникальности, например "1600x1200_85_0".

После добавления доступных видеорежимов в список совпадающие видеорежимы отбрасываются и список сортируется так, чтобы наиболее подходящие режимы были наверху списка. Сортировка проводится по:

  • разрешению;
  • источнику (режимы, сообщенные по EDID, имеют преимущество над VESA-режимами, которые в свою очередь имеют приоритет над режимами из встроенного списка сервера Х-интерфейса);
  • частоте обновления.

После проверки доступности всех видеорежимов из всех источников и построения списка, все режимы с одним разрешением сравниваются, наиболее подходящий добавляется в список повторно с наименованием, состоящим только из разрешения (например, "1600x1200"). В этом случае при запросе режима с традиционным названием ("1600x1200") вы получите тот же режим, что и раньше (наиболее подходящий режим с разрешением 1600x1200); дополнительно все режимы из списка могут быть запрошены по уникальному названию.

При повышенном уровне выводимой информации в журнал Х-интерфейса (обратитесь к разделу «Часто задаваемые вопросы» за информацией об увеличении уровня выводимой в журнал информации) список видеорежимов каждого дисплея выводится в журнал.

После построения списка видеорежимов для всех дисплеев, запрошенные видеорежимы (заданные в файле конфигурации Х-интерфейса) ищутся в списке видеорежимов. Каждый запрошенный видеорежим, для которого есть совпадающий видеорежим из списка, сообщается серверу Х-интерфейса и становится доступным к выбору пользователем через «горячие» клавиши сервера Х-интерфейса (ctrl-alt-плюс/минус) и расширения Х-интерфейса XRandR и XF86VidMode. Если только один дисплей используется экраном Х-интерфейса, тогда при запуске сервера Х-интерфейса все видеорежимы из списка дисплея становятся доступными серверу. Обратитесь к описанию опции "IncludeImplicitMetaModes" конфигурации X-интерфейса в приложении B за дополнительной информацией.

19E. Режим NVIDIA-AUTO-SELECT  

Вы можете запросить специальный видеорежим через файл конфигурации Х-интерфейса, с названием "nvidia-auto-select". Когда драйвер Х-интерфейса строит список видеорежимов, один из режимов выбирается как "nvidia-auto-select", новая запись заносится в список, и "nvidia-auto-select" используется как уникальное название для видеорежима.

Режим "nvidia-auto-select" введен в качестве подходящего режима для дисплея, характеристики которого неизвестны. Например, "nvidia-auto-select" обычно имеет физическое разрешение для плоских панелей, сообщенное дисплеем по EDID, или параметры временной синхронизации из числа детально описанных в EDID. Режим "nvidia-auto-select" гарантированно присутствует и всегда проверен на доступность драйвером Х-интерфейса для дисплея. Если все способы сбора информации о дисплее окончились неудачей, драйвер Х-интерфейса назначает встроенный видеорежим 800 x 600, 60 Гц режимом "nvidia-auto-select".

Обратите внимание, что режим "nvidia-auto-select" вовсе не обязательно будет режимом с наибольшим из возможных разрешением или частотой обновления. Скорее, режим "nvidia-auto-select" выбирается как приемлемое умолчание. Процесс выбора примерно следующий:

  • Если информация EDID, сообщенная дисплеем, содержит сведения о предпочитаемых параметрах временной синхронизации видеорежима, и эти параметры определены как доступные, то этот видеорежим будет использован как "nvidia-auto-select". Вы можете проверить, сообщает ли дисплей информацию EDID о предпочитаемых параметрах временной синхронизации видеорежима, запустив сервер Х-интерфейса с параметром logverbosity больше или равно 5 (обратитесь к разделу «Часто задаваемые вопросы» за информацией об увеличении уровня выводимой в журнал информации), и обратившись к выводу информации EDID в журнале; если присутствует строка:

    Prefer first detailed timing : Yes

    то будет использован первый видеорежим, перечисленный в секции "Detailed Timings".
  • Если информация EDID не содержит сведений о предпочитаемых параметрах временной синхронизации, будет выбран максимальный видеорежим из перечисленных в EDID в качестве "nvidia-auto-select".
  • Если информация EDID не содержит сведений о параметрах временной синхронизации, или вообще недоступна, то будет использован максимальный доступный видеорежим с разрешением не выше 1024x768 в качестве "nvidia-auto-select". Ограничение в 1024x768 введено для предотвращения выбора слишком больших видеорежимов из числа доступных, например 2048x1536.
  • Если все остальные способы определения кончились неудачей, то в качестве "nvidia-auto-select" драйвер Х-интерфейса выберет встроенный видеорежим 800 x 600, 60 Гц.

Если не было запрошено видеорежимов через файл конфигурации Х-интерфейса, или все запрошенные режимы не были найдены в списке, то драйвер Х-интерфейса устанавливает режим "nvidia-auto-select", так что сервер Х-интерфейса всегда запустится. Соответствующее предупреждение будет записано в файл журнала Х-интерфейса в этом случае.

Вы можете добавить режим "nvidia-auto-select" в файл конфигурации Х-интерфейса командой :

nvidia-xconfig --mode nvidia-auto-select

и перезапуском сервера Х-интерфейса.

Драйвер X-интерфейса в целом гораздо лучше справляется с выбором видеорежима "nvidia-auto-select" если доступна информация о дисплее по протоколу EDID. По этой причине и рекомендуется пользоваться опцией конфигурации Х-интерфейса "UseEDID" только в крайнем случае. Обратите внимание, что вместо полного отключения любого использования информации EDID через опцию "UseEDID", вы можете индивидуально отключать отдельные использования EDID с помощью переменных "UseEDIDFreqs", "UseEDIDDpi" и/или "NoEDIDModes" опции конфигурации Х-интерфейса "ModeValidation".

19F. Отчет о проверки доступности видеорежима  

При уровне детализации журналирования 6 или выше (например, startx -- -logverbose 6), в файл журнала Х-интерфейса записывается каждый видеорежим, определенный для построения списка каждого дисплея, с результатом проверки доступности. Для режимов, признанных некорректными, в журнал записывается информация о причинах такого заключения.

19G. Приведение параметров временной синхронизации видеорежимов к идентичным значениям  

Некоторые функции, такие как «активное» стерео с использованием TwinView, требуют контроля за используемыми в видеорежимах параметрами временной синхронизации. Для точного управления устанавливаемыми параметрами временной синхронизации для каждого дисплея вы можете задать видеорежим, которые вы желаете использовать, строкой modeline (воспользовавшись одним из генераторов modeline), используя уникальное название. Например, если нужно использовать видеорежим 1024x768, 120 Гц на каждом мониторе в режиме «активного» стерео TwinView, вы можете задать в секции Monitor файла конфигурации Х-интерфейса строку вида:

# 1024x768 @ 120.00 Hz (GTF) hsync: 98.76 kHz; pclk: 139.05 MHz
Modeline "1024x768_120" 139.05 1024 1104 1216 1408 768 769 772 823 -HSync +Vsync

Затем, в секции Screen создать метарежим вида:

Option "MetaModes" "1024x768_120, 1024x768_120"

19H. Дополнительная информация  

Генератор строк modeline для XFree86, соответствующий стандарту GTF, доступен на сайте gtf.sourceforge.net. Другие генераторы можно найти поиском по слову «modeline» на freshmeat.net.

Глава 20. Настройка Flipping и UBB  

Драйвер NVIDIA для Linux поддерживает общий буфер заднего плана (UBB) и OpenGL переключение. Эти функции обеспечивают улучшение производительности в некоторых случаях.

  • Общий буфер заднего плана (UBB): доступен только для графических процессоров семейства Quadro (за исключением Quadro4 NVS) и включен по-умолчанию, если имеется достаточный объем видеопамяти. Он может быть отключен с помощью опции UBB файла конфигурации Х-интерфейса, описанной в приложении B. Когда UBB включен, все окна используют совместно один и тот же буфер заднего плана, шаблонов и глубины. При наличии нескольких окон, использование этих буферов никогда не превышает размера, используемого текущим окном, развернутым на полный экран. Однако, даже в случае одного небольшого окна, использование этими буферами видеопамяти такое же, как для случая окна, развернутого на весь экран. В этом случае видеопамять может использоваться менее оптимально, чем при отключенном UBB.
  • Переключение (Flipping): Когда включено OpenGL переключение, замена изображения из буфера OpenGL может осуществляться путем смены буфера, с которым работает DAC (цифро-аналоговый преобразователь), вместо копирования изображения из заднего буфера в передний; это обычно дает гораздо большую производительность и позволяет осуществлять безразрывную замену изображения во время вертикальной прорисовки (когда установлена переменная среды _GL_SYNC_TO_VBLANK). Имеются некоторые условия, при соблюдении которых OpenGL может осуществлять переключение, но в целом на графических процессорах GeForce или более новых OpenGL может осуществлять переключение когда выполняется одно полноэкранное приложение OpenGL, не перекрытое другими окнами, и задана переменная __GL_SYNC_TO_VBLANK. Дополнительно, на процессорах семейства Quadro переключение может осуществляться даже если окно OpenGL приложения частично перекрыто другими окнами или не развернуто на полный экран, или же не включена переменная __GL_SYNC_TO_VBLANK.

Глава 21. Интерфейс файловой системы Proc  

Вы можете использовать интерфейс /proc для получения текущих сведений о драйвере, установленной видеокарте на базе NVIDIA, и состоянии AGP.

Информация содержится в нескольких файлах в /proc/driver/nvidia.

/proc/driver/nvidia/version — сообщает версию установленного драйвера и версию компилятора GNU C, использовавшегося для сборки модуля уровня ядра Linux.

/proc/driver/nvidia/warnings — драйвер NVIDIA пытается обнаруживать потенциальные проблемы с ядром системы и предупреждает о них, используя механизм ядра printk(), обычно записываемый системой в /var/log/messages. Важные предупреждения драйвера NVIDIA также сохраняются в выделенные текстовые файлы в этом каталоге /proc.

/proc/driver/nvidia/cards/0...3 — сообщает информацию о каждой установленной видеокарте NVIDIA (модель, название, прерывание, версия BIOS, тип шины). Обратите внимание, что версия BIOS сообщается только если запущен Х-интерфейс.

/proc/driver/nvidia/agp/card — информация о возможностях AGP установленной видеокарты с интерфейсом AGP.

/proc/driver/nvidia/agp/host-bridge — информация о чипсете (модель и возможности AGP).

/proc/driver/nvidia/agp/status — текущее состояние AGP. Если поддержка AGP включена в системе, используется драйвер AGP, то выдается информация о скорости работы AGP порта, статусе использования возможностей Fast Writes (быстрая запись) и Side Band Addressing (передача адреса по боковой шине).

Драйвером AGP может быть или NvAGP (встроенный драйвер AGP NVIDIA), или AGPGART (драйвер agpgart.o ядра Linux). Если вы видите "inactive" сразу за AGPGART, то это означает, что контроллер AGP запрограммирован драйвером, но в настоящей момент не используется.

Строки SBA и Fast Writes показывают, используется ли одна из этих функция в данный момент. Учтите, что возможность задействования зависит от нескольких факторов. Даже если и видеокарта, и чипсет поддерживают эти функции, драйвер может не использовать их в целях повышения стабильности работы системы. Это особенно относится к AGP Fast Writes.

Глава 22. Управление энергопотреблением  

Эта версия драйвера поддерживает управление энергопотреблением, основанное на стандартах APM и ACPI. Это означает, что драйвер поддерживает режимы APM приостановки (suspend) и выход из него, и режимы ACPI ожидания (standby, S3) и приостановки (S4).

BIOS вашего ноутбука должен поддерживать управление энергопотреблением на основе APM, а не на основе ACPI. Многие, но не все, ноутбуки с графическими чипами GeForce 2 и GeForce 4 поддерживают APM. Вы можете проверить наличие поддержки APM через интерфейс «procfs» (проверьте наличие /proc/apm) или через информацию, выдаваемую при загрузке ядра с опциями:

% dmesg | grep -i apm

сообщение, указывающее на наличие поддержки APM:

apm: BIOS version 1.2 Flags 0x03 (Driver version 1.16)

или сообщение об отсутствии поддержки APM:

No APM support in Kernel

Обратите внимание, что если вы используете ядро операционной системы версии 2.6, и ядро настроено на поддержку и ACPI, и APM, модуль уровня ядра NVIDIA будет собран с поддержкой управления энергопотреблением на основе ACPI. Если вы желаете использовать APM, необходимо пересобрать ядро операционной системы без поддержки ACPI и переустановить драйвер NVIDIA для Linux.

Иногда чипсет теряет свои настройки AGP в режиме приостановки, и может вызвать неработоспособность шины после выхода из него. Драйвер AGP в таких системах должен сохранять и восстанавливать состояние регистров системы; драйвер NVIDIA NvAGP уведомляется о событиях управления энергопотреблением и сохраняет конфигурацию на время остановки/возобновления работы.

Драйвер AGPGART ядра Linux версии 2.4 не поддерживает управление энергопотреблением, драйвер AGPGART ядра Linux версии 2.6 поддерживает, но лишь для нескольких чипсетов. Если вы используете один из этих драйверов, и замечаете, что система не выходит из режима приостановки, вы можете попробовать драйвер NVIDIA NvAGP. Отключение поддержки AGP (обратитесь к Главе 12 за дополнительной информацией об отключении AGP) также позволяет решить эту проблему.

Большинство новых компьютеров поддерживают ACPI. ACPI поддерживается драйвером

NVIDIA для Linux при использовании ядра операционной системы версии 2.6 и более новой. Драйвер поддерживает режим ожидания (S3) и включает пробную поддержку режима приостановки ACPI (S4).

Если вы задействовали поддержку режима ACPI S4 посредством патчей «suspend2», вам необходимо настроить ядро Linux на динамическое определение числа страниц памяти для драйверов, чья работа приостанавливается в системе. Это выполняется командой от имени root:

% echo 0 > /sys/power/suspend2/extra_pages_allowance

Старые версии утилиты «suspend2» могут иметь другой интерфейс, в этом случае следующая команда должна быть выполнена от имени root:

% echo 0 > /proc/suspend2/extra_pages_allowance

Система не нуждается в перезапуске и данная настройка, как установлено, сохраняется между перезагрузками. Может понадобиться включить эту настройку в состав сценария загрузки. Однако, неудачное применение данной настройки приводит к зависанию и «засыпанию» системы. За дополнительной информацией о патчах suspend2 обратитесь к сайту проекта.