Доброго времени суток!
Конфигурация
Kubuntu 10.04 с последними обновлениями
GA-MA770T-UD3
Sempron 140
GeForce 9300GS
SBLive Value
Развернуть/свернуть скрытый текст.
cat /proc/interrupts
CPU0
0: 51 IO-APIC-edge timer
1: 4 IO-APIC-edge i8042
7: 1 IO-APIC-edge
8: 0 IO-APIC-edge rtc0
9: 0 IO-APIC-fasteoi acpi
14: 138262 IO-APIC-edge pata_atiixp
15: 0 IO-APIC-edge pata_atiixp
16: 465575 IO-APIC-fasteoi ohci_hcd:usb3, ohci_hcd:usb4, HDA Intel
17: 0 IO-APIC-fasteoi ehci_hcd:usb1
18: 1262475 IO-APIC-fasteoi ohci_hcd:usb5, ohci_hcd:usb6, ohci_hcd:usb7, nvidia
19: 6 IO-APIC-fasteoi ehci_hcd:usb2
20: 0 IO-APIC-fasteoi EMU10K1
22: 74156 IO-APIC-fasteoi ahci, ohci1394
26: 2349408 PCI-MSI-edge eth0
NMI: 0 Non-maskable interrupts
LOC: 3781973 Local timer interrupts
SPU: 0 Spurious interrupts
PMI: 0 Performance monitoring interrupts
PND: 0 Performance pending work
RES: 0 Rescheduling interrupts
CAL: 0 Function call interrupts
TLB: 0 TLB shootdowns
TRM: 0 Thermal event interrupts
THR: 0 Threshold APIC interrupts
MCE: 0 Machine check exceptions
MCP: 47 Machine check polls
ERR: 1
MIS: 0
До установки проприетарного драйвера видеокарты (195.36.24)
в списке прерываний видеокарта не значилась, т.е. получается драйвер выбирает уже занятое прерывание. БИОС назначает ей 10 прерывание(во время загрузки выводится список).
На этом форуме уже обсуждалась проблема низкой скорости копирования на usb флешки (варьируется от 4 до 0,7 МБ/с, но большую часть времени около 1 МБ/с), смена планировщика не помогла.
Вопрос: как развести по разным прерываниям ohci_hcd:usb5, ohci_hcd:usb6, ohci_hcd:usb7, nvidia?
Для полноты картины в виндоусе распределение прерываний было таким же неоптимальным ( старый хард вышел из строя, поэтому не могу точно показать), так там все DirectX игры и MediaPlayerClassic (с клайт кодек паком) вываливались в бсод через разные промежутки времени от начала игры/воспроизведения видео (от нескольких минут до часа):
nv4_disp device driver got stuck in an infinite loop:
0x84B63670, 0x84C85DB8, 0xF7A3FCB4, 0x00000001
А KMPlayer (Kang Multimedia Player) — нет.
Спасибо
Большинству компонентов, непосредственно подключенных к вашей материнской плате, включая слоты PCI, контроллеры IDE, последовательные порты, порт клавиатуры и даже CMOS вашей материнской платы, назначаются индивидуальные запросы прерываний (IRQ).
Строка запроса прерывания, или IRQ, — это пронумерованная аппаратная линия, по которой устройство может прерывать нормальный поток данных в процессор, позволяя устройству функционировать.
Windows Vista и 7 позволяют вам расставить приоритеты для одного или нескольких IRQ (которые переводятся на одно или несколько аппаратных устройств), что потенциально повышает производительность этих устройств. Ниже приведены основные советы по редактированию реестра, которые вы можете использовать для установки приоритетов IRQ.
- Начните с открытия утилиты Информация о системе (msinfo32.exe) и перейдите к Сводка системы Аппаратные ресурсы IRQ, чтобы просмотреть IRQ, используемые в вашей системе, и устройства, использующие их.
Обратите внимание на IRQ13 (процессор цифровых данных), который мы будем использовать в этом примере:
2. Затем откройте редактор реестра и перейдите к следующему ключу. Если PriorityControl не существует, создайте ключ в разделе «Управление».
HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control PriorityControl
3. Создайте новое значение DWORD в этом ключе и назовите его IRQ # Priority, где # — IRQ устройства, которому вы хотите присвоить приоритет (например, IRQ13Priority для IRQ 13, который является вашим числовым процессором).
4. Дважды щелкните новое значение и введите число для его приоритета. Введите 1 для высшего приоритета, 2 для второго и так далее. Не вводите один и тот же номер приоритета для двух записей и сделайте его простым, экспериментируя сначала только с одним или двумя значениями.
5. Закройте редактор реестра и перезагрузите компьютер, когда закончите.
Некоторые пользователи получили хорошие результаты, отдавая приоритет IRQ 8 (для системы CMOS) и IRQ, соответствующему видеокарте, но обратная связь не подтверждена. Как вы думаете, это плацебо? Оставьте свои комментарии!
🚥 Оптимизация задержек
- Отключение таймера HPET
- Включение MSI mode
- Приоритизация прерываний
- Приоритизация драйверов
- Распараллеливание драйверов по ядрам
Отключение таймера HPET
Основная проблема в Windows с которой нам нужно бороться – это использование таймера HPET
[?], что уже создаёт лишнюю абстракцию, т.к. это является заменой стандартного таймера RTC
[?] или того же HPET
(реализаций много, это не так важно), который уже встроен во все современные материнские платы и является аппаратным. В этом и кроется проблема – Windows всё равно тянет одеяло на себя и использует свой программный таймер, так или иначе.
Изначально идея нового таймера здравая и хорошая – добиться более высокой точности для управления прерываниями [?] для мультимедийных программ, хотя у него и намного больше применений, в том числе он отвечает за счёт времени и многое другое. Но мы бы тут не собрались, если бы он работал так как задумывалось. Проблем таймер создаёт достаточно [Проблемы с HPET]. Если вкратце, то значение выдаваемое таймером должно быть строго фиксированным, но в виду своей странной реализации оно имеет плавающее значение и периодические меняется, из-за чего прерывания происходят в разное время, что и вызывает запоздания, а они в свою очередь микрофризы и микролаги, особенно это заметно при использовании игр или высоконагруженных приложений (рендер, обработка фотографий и т.п.).
Некоторые мультимедийные программы, а так же игры могут сами фиксировать данный параметр для увеличения плавности [?], поэтому мы его сами зафиксируем на минимально возможном значении в 0.5ms
, для всей системы в том числе.
‼️ Ни в коем случае не отключайте данный таймер в BIOS – там он должен быть включён для корректной работы системы в целом. В новых версиях BIOS подобная настройка включена по-умолчанию и зачастую её изменение не возможно. Подробную информацию как изменить параметры в BIOS можно найти в руководстве к материнской плате или в интернете.
Для того чтобы отключить HPET
в Windows необходимо использовать встроенную утилиту bcdedit
. Но сперва нам надо убедиться, что таймер в Windows активен:
Если у вас нет значений useplatformtick
и disabledynamictick
или они установлены как No
, то первым шагом для нас будет их отключение:
bcdedit /set disabledynamictick yes bcdedit /set useplatformtick yes
Сброс значений по-умолчанию
bcdedit /set disabledynamictick no > nul bcdedit /set useplatformtick no > nul
Пример правильного отключения таймера HPET в Windows:
Теперь, отключив таймер в Windows, нам надо зафиксировать его в значении 0.5ms
– для этого необходимо использовать утилиту Intelligent Standby List Cleaner
[скачать]. Здесь можно увидеть, что значение нашего таймера Current timer resolution
постоянно изменяется, что не есть хорошо и именно это нам надо исправлять.
Пример не настроенного таймера в Intelligent Standby List Cleaner
:
Для правильной настройки необходимо установить следующие параметры:
Start ISCL minimized and auto-Start monitoring
включеноLaunch ISCL on user logon (TaskSheduler)
включеноEnable custom timer resolution
включеноWanted timer resolution
установлено в0.50
Так же здесь можно настроить очищение системного кэша памяти [?]. Для этого необходимо изменить параметр Free memory is lower than
, который отвечает за минимальное значение свободной памяти – оптимальным значением является размер вашей памяти разделённый на 2, после достижения которого кэш памяти будет очищен. Параметр The list size is at least
отвечает за минимальный размер кэшированный памяти и его рекомендуется оставлять дефолтным — равным 1024 Mb
.
Если лень считать
(4 Gb) 4096 /2 = 2048
(8 Gb) 8192 /2 = 4096
(16 Gb) 16384 /2 = 8192
(24 Gb) 24576 /2 = 12288
(32 Gb) 32768 /2 = 16384
⚠️ Во избежание дополнительных микрофризов при очищении кэша памяти, если у вас её мало или же её очень активно используют программы, данную настройку лучше протестировать с разными параметрами и найти оптимальную для вашего сценария использования.
После настройки надо нажать Start
и проверить зафиксирован ли таймер – значение Current timer resolution
должно быть строго равно 0.5ms
и не изменяться. Значение может обновится с задержкой!
Пример правильной настройки Intelligent Standby List Cleaner
:
Включение MSI mode
💡 Для дальнейшей настройки необходимо ознакомиться c
Определение IRQ,
Определение USB Host Controller.
А зачем нам ещё включать какой-то MSI mode
[?]? Всё очень просто, если раньше на одно устройство выделялось всего 4 прерывания [Страдания по IRQ], то с помощью MSI
стало возможным увеличить их до 32, что значительно ускоряет общение между устройствами.
Почти все последние драйверы, от нормальных производителей, используют изначально режим прерывания MSI
, тем более это обязательное условие для PCI Express
железок. Но для ускорения всей системы так же не лишним будет включение MSI
и для USB Host Controller
.
Для включения MSI mode
мы будем использовать утилиту MSI Util v2
[скачать]. Ищем здесь нашу видеокарту и USB Host Controller
(если по названию не получается найти, то в строке с именем так же указан Device ID
). Ставим галочку в столбце MSI
, так же меняем Interrupt priority
на Hight
, после чего жмём кнопку Apply
.
Пример настройки MSI
с помощью MSI Util v2
:
‼️ Нельзя устанавливать использование
MSI mode
для всех ваших устройств, иначе устройства могут работать не корректно.
⚠️ Данная настройка сбрасывается на дефолтное значение после обновления драйвера nVidia!
Приоритизация прерываний
💡 Для дальнейшей настройки необходимо ознакомиться c
Работа с реестром,
Определение IRQ.
Продолжая тему прерываний, далее нам необходимо настроить приоритет прерываний для конкретно заданных устройств – этим в Windows занимается IRQL
[?]. Проблема приоритизации всегда имеет место быть, т.к. каждое устройство считает себя важней остальных и это порождает некоторые проблемы [Проблемы IRQL].
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPriorityControl] ; видеокарта "IRQ***Priority"=dword:00000001 ; none ; USB Host Controller "IRQ***Priority"=dword:00000002 ; none
Значения по-умолчанию:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPriorityControl] "IRQ***Priority"=- "IRQ***Priority"=-
В качестве имени параметра мы используем IRQ***Priority
, где ***
надо заменить на IRQ (несколько цифр) нашей видеокарты и USB Host Controller
.
✨ Для видеокарты рекомендуется ставить значение равным
1
, дляUSB Host Controller
– значение2
[Приоритеты IRQ].
Приоритизация драйверов
💡 Для дальнейшей настройки необходимо ознакомиться c
Работа с реестром.
Следующим шагом после настройки приоритетов IRQL
[?] необходимо указать приоритет для каких сервисов (в нашем случае драйверов) необходимо выполнять прерывания в первую очередь. Когда происходит прерывание, Windows, используя IRQL
для определения приоритета прерывания, проверяет может ли прерывание обслуживаться в данный момент или нет, если условие выполняется, то приоритет потока начинает его выполнение. Всё что ниже по приоритету – ставиться в очередь. Таким образом мы зафиксируем критически важные сервисы, прерывания от которых необходимо обрабатывать в первую очередь.
Windows Registry Editor Version 5.00 ; DirectX Graphics Kernel [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesDXGKrnlParameters] "ThreadPriority"=dword:0000000f ; драйвер видеокарты nVidia [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesnvlddmkmParameters] "ThreadPriority"=dword:0000001f ; USB3 HUB Driver [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesUSBHUB3Parameters] "ThreadPriority"=dword:0000000f ; USB xHCI Compliant Host Controller [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesUSBXHCIParameters] "ThreadPriority"=dword:0000000f
Значения по-умолчанию:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesDXGKrnlParameters] "ThreadPriority"=- [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesnvlddmkmParameters] "ThreadPriority"=- [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesUSBHUB3Parameters] "ThreadPriority"=- [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesUSBXHCIParameters] "ThreadPriority"=-
✨ В качестве параметра установите значения равным 15 (
f
) (что соответствуетHight
), если система работает стабильно, то можно повысить приоритет установив параметр равным 31 (1f
) (что соответствуетRealtime
) [Процессы и потоки в Windows] дляnvlddmkm
.
Распараллеливание драйверов по ядрам
💡 Для дальнейшей настройки необходимо ознакомиться c
Определение IRQ,
Определение USB Host Controller.
Самое сложное осталось позади и теперь мы будет освобождать первое ядро, куда Windows зачем-то добавляет почти все драйверы. Этим мы с одной стороны разгрузим ядро, а с другой так же уменьшим задержки.
Для этого нам понадобиться утилита Interrupt Affinity Policy Tool
[скачать].
✨ При использовании утилиты будут периодически появляться сообщения об ошибке – их можно спокойно игнорировать, т.к. программа давно не обновлялась и на работу программы они никак не влияют.
Пример списка устройств в утилите Interrupt Affinity Policy Tool
:
В этом списке надо найти свою видеокарту и USB Host Controller
(название может не соответствовать, поэтому искать лучше по полю Location Info
), нажать Set Mask
и выбрать ядро на которое будет назначен драйвер. Выбирать надо на любое ядро отличное от первого.
⚠️ На CPU, где включен
Hyper-Threading
[?] /SMT
[?], ядра и потоки в программе чередуются –CPU 0
— Ядро 1,CPU 1
— Поток 1,CPU 2
— Ядро 2,CPU 3
— Поток 2 и т.д., соответственно, чтобы выбрать третье ядро надо указатьCPU 4
иCPU 5
. На CPU безHyper-Threading
/SMT
ядра, само собой, указаны без потоков.
После выбора ядра появится сообщение о том, что можно перезагрузить драйвер – нажимаем Yes
. В зависимости от устройства может моргнуть экран или произойти переопределение устройств – это нормально, после этого утилита сообщит, что всё прошло успешно.
‼️ Нельзя переносить все драйверы на другие ядра, этим вы лишь можете добиться появления
BSOD
[?]!
⚠️ Данная настройка сбрасывается на дефолтное значение после обновления драйвера nVidia!
Прерывание GPU
Была доступна более новая модель вытеснения GPU, начиная с Windows 8. В этой модели операционная система больше не позволяет отключить вытеснение пакетов прямого доступа к памяти (DMA) GPU и гарантирует, что запросы на вытеснения будут отправляться на графический процессор до начала процесса обнаружения и восстановления времени ожидания (ТДР) .
Требование | Описание |
---|---|
минимальная версия модели видеодрайверов (WDDM) Windows | 1,2 |
минимальная версия Windows | 8 |
Реализация драйвера — полная графика и визуализация | Обязательный |
Требования и тесты вхлк | Device. Graphics. Тестирование вытеснения, Device. Graphics. Флипонвсинкммио |
Если долго выполняющиеся пакеты не могут быть успешно вытеснены, работа с высокоприоритетным графическим процессором, например работа, необходимая для диспетчер окон рабочего стола (DWM), может быть отложена, что приведет к ошибкам во время перехода и анимации окна. Кроме того, долгосрочные пакеты GPU, которые не могут быть вытеснены, могут привести к тому, что процесс ТДР будет многократно сбрасывать GPU, и в конечном итоге может возникать критическая ошибка системы.
Примечание . все драйверы минипорта экрана WDDM 1,2 должны поддерживать модель приоритетного прерывания Windows 8. тем не менее, когда в работе, драйверы WDDM 1,2 могут также отклонять модель приоритетного прерывания Windows 8 и хранить Windows 7 в планировщике подсистемы ядра Microsoft DirectX graphics.
Интерфейсы драйверов устройств с вытеснением GPU (ДДИС)
для драйвера мини-порта дисплея доступны следующие интерфейсы драйверов устройств (ддис) для реализации модели вытеснения Windows 8 GPU.
Реализация драйвера минипорта экрана
выполните следующие общие действия для реализации модели вытеснения Windows 8 GPU в драйвере мини-порта экрана:
- Скомпилируйте драйвер в заголовках, имеющих DXGKDDI_INTERFACE_VERSION> = DXGKDDI_INTERFACE_VERSION_WIN8.
- объявите поддержку для модели вытеснения Windows 8 GPU, задав для членов примптионаваре и мултиенгинеаваре структуры DXGK_VIDSCHCAPS значение 1. чтобы обеспечить поддержку модели вытеснения Windows 7, установите для примптионаваре значение 0.
- Укажите поддерживаемый уровень гранулярности вытесненности в структуре D3DKMDT_PREEMPTION_CAPS , которая принимает постоянные значения из перечислений D3DKMDT_GRAPHICS_PREEMPTION_GRANULARITY и D3DKMDT_COMPUTE_PREEMPTION_GRANULARITY .
- Если оборудование поддерживает отложенное переключение контекста, отправьте буфер нулевой длины в функцию дксгкддисубмиткомманд и установите для элемента псубмиткомманд— >flags— >контекстсвитч значение 1. Обратите внимание на обсуждение в элементе контекстсвитч структуры DXGK_SUBMITCOMMANDFLAGS .
- Установите выделение контекста GPU и выделение контекста устройства, вызвав функцию дксгккбкреатеконтексталлокатион . Обратите внимание на конкретные инструкции и ограничения, указанные в разделе Примечания для функции.
- Вызовите функцию дксгккбдестройконтексталлокатион , чтобы уничтожить выделение контекста GPU и выделение контекста устройства, созданные с помощью дксгккбкреатеконтексталлокатион.
- При подготовке буфера DMA в ответ на вызов функции дксгкддибуилдпагингбуффер инициализируйте ресурс контекста, заполнив внутреннюю структуру инитконтекстресаурце в структуре DXGKARG_BUILDPAGINGBUFFER . Если ресурсы контекста будут исключены или перемещены, диспетчер видеопамяти сохранит содержимое ресурсов контекста.
- Драйвер должен поддерживать перевернутую память ввода-вывода при следующей вертикальной синхронизации. в Windows 8 планировщик GPU пытается отключать оборудование, даже если происходит ожидание перелистывания. Таким образом, чтобы предотвратить уничтожение и визуализацию артефактов, драйвер должен поддерживать модель зеркального отображения ввода-вывода с отображением в памяти, а также должен задать элемент флипонвсинкммио структуры DXGK_FLIPCAPS равным 1 и поддерживать операции, описанные в разделе флипонвсинкммио.
Рекомендации по сопоставлению памяти в реализации
создайте надежный драйвер, который поддерживает модель вытеснения Windows 8 GPU и обеспечивает качество взаимодействия с пользователем, выполнив следующие рекомендации:
- Запрос на прерывание буфера MID-DMA от графического процессора при отправке планировщиком ядра DirectX Graphics (Дксгкрнл) команды на вытеснение. Аппаратные устройства, имеющие более детализированную степень детализации при вытеснении буфера в середине DMA, должны повысить эффективность работы клиентов.
- Разрешить повторное использование идентификаторов ограждения команды подкачки: Если запрос на вытеснение привел к вытеснению команд подкачки в очереди оборудования, то планировщик Дксгкрнл повторно отправит заданные команды разбиения на страницы с теми же идентификаторами ограждения, которые изначально использовались для них, а команды подкачки будут планироваться до любых других команд в этой подсистеме. Команды без подкачки будут повторно отправлены с новыми назначенными идентификаторами ограждений.
- Укажите список расположений исправлений для разделенных буферов DMA — см. раздел разделение буфера DMA.
- Доступен режим проверки, называемый обнаружением утечек привязки, который проходит через список расположений исправлений и отклоняет пакеты, которые не отменяют привязку или не переносят выделения для каждого пакета разбиения. Некоторые виртуальные адреса аппаратной поддержки обеспечивают дополнительный уровень косвенного обращения, который может сделать проверку ненужной. В этом случае, чтобы указать, что драйвер выдается из режима проверки, установите для элемента нодмапатчинг структуры DXGK_VIDSCHCAPS значение 1.
- в Windows 7 планировщик дксгкрнл гарантирует, что все разделенные пакеты DMA, соответствующие одной и той же команде прорисовки, выполняются последовательно без переключения на другой контекст визуализации. в модели Windows 8ного вытеснения планировщик может выполнять рендеринг пакетов из другого контекста между двумя раздельными пакетами, которые соответствуют одной команде рендеринга. Как следствие, драйверы, которые знают о вытеснении, должны выполнять отправку разделенных и частичных пакетов DMA таким же образом, как обычное полное отправление пакетов. В частности, состояние GPU необходимо сохранить или восстановить на границе для таких отправок.
- Драйвер, поддерживающий выгрузку по приоритету, не должен изменять содержимое разделенного буфера DMA при широковещательной рассылке на несколько адаптеров в режиме связанного видеоадаптера (LDA), где несколько физических GPU связаны с одним, более быстрым виртуальным GPU. это обусловлено тем, что в модели Windows 8ного вытеснения планировщик больше не гарантирует синхронное выполнение последовательности пакетов с разделением, не переключаясь на другой контекст. Драйвер, изменяющий содержимое разделенного пакета DMA, нарушит целостность данных пакета, поскольку пакет был выполнен в другом подсистеме, он будет работать с той же копией данных буфера DMA.
- в модели Windows 8ного прерывания GPU планировщик дксгкрнл включает вытеснение для пакетов, имеющих связанные примитивы синхронизации «сигнал при отправке». Если устройство использует примитивы синхронизации «сигнал при отправке» в сочетании с состояниями ожидания на основе оборудования, оно должно поддерживать возможность замещения инструкции ожидания до того, как условие ожидания будет удовлетворено.
Сертификационные требования к оборудованию
Сведения о требованиях, которым должны удовлетворять устройства при реализации этой функции, см. в соответствующей документации вхкк на устройстве. Graphics. Тестирование вытеснений и Device. Graphics. Флипонвсинкммио.
Дополнительные сведения о функциях, добавленных с помощью Windows 8, см. в разделе функции WDDM 1,2 .
Источник
Для чего видео карте прерывание?
Читаю аппаратную организацию ПК — что-то не пойму для чего устройствам вывода нужны прерывания?
Re: Для чего видео карте прерывание?
Ну, прерывания нужны вообще всем устройствам, кроме самого процессора. Когда устройство хочет занять процессорное время (для выполнения какой-нибудь операции, например, перекачки данных с винта в память), это устройство устанавливает сигнал прерывания на процессор. Процессор, когда видит, что его хотят «прервать», в зависимости от приоритета выставленного прерывания, либо моментально прекращает делать то, что делал, либо заканчивает свою задачу. Потом он посылает устройству сигнал подтверждения того, что устройство может пользоваться ресурсамт процессора, и устройство начинает работать. Вообще-то, обработкой аппаратных прерываний занимается не сам процессор, а контроллер прерываний. Так вот, если твоя видеокарта, должна изменить картинку на экране, то она выставляет процессору запрос на прерывание, дожидается подтверждения, а потом и говорит процессору, мол, хочу перегнать столько-то байт из такого-то места в ОЗУ к себе в память, и процессор начинает обслуживать запрос. В памяти видеокарты появляются новые данные, которые и меняют изображение на экране. Вот, собственно, так грубо и очень схематически о том, «зачем нужны устройствам прерывания».
Re: Для чего видео карте прерывание?
Naskolko mne izvestno Nezachem t.e. esli eto videokarta a ne akselerator esli akselerator to nadeyus ponyatno zachem. Dlya obychnoi vidyuhi preryvaniya ne nuzhny .
Re: Для чего видео карте прерывание?
Народ, извиняюсь — но ничего не понял — Если оно не нужно — то для чего винда так настойчиво назначает его видюхе — если его отключаешь в бивесе. А если нужно — то зачем?(как я понял — процессор просто пересылает данные в соответствующие порты — а что в портах — то сразу появляется в регистрах(или памяти?) видеокарты и отображается на экране — все синхронизируется clockами.)
Re: Для чего видео карте прерывание?
2master. Так, ребята, вы чего это. Все устройства, в конечном итоге обмениваются информацией. Руководит этим обменом, практически всегда процессор, за исключением случаев обмена данными между устройствами IDE/SCSI и памятью. В последнем случае, этим обменом занимается Контроллер прямого доступа к памяти (DMA — direct memory access) или Контроллер Скази. В любом случае вся информация передается по шине данных по адресам выставленным на шине адреса, и если шинами не управляют контроллеры DMA или SCSI, то это делает микропроцессор. Например, для того, чтобы нарисовать картинку на экране, программа, которая этим занимается (например, движок игры Quake), высчитывает все необходимые параметры и запрашивает с помощю прерывания на прцессор, пересылку данных по шине данных с адреса, установленного на шине адреса по адресу памяти видеокарты. А картинка, появляющаяся на экране — это и есть отображение содержимого памяти видеокатры. А по поводу акселераторов могу сказать, что все рассчеты и зарисовки ведутся процессором акселератора, без «затрагивания» микропроцессора. В любом случае, прерывание видеокарте нужно хотя бы для того, чтобы сказать процессору, что процесс зарисовки окончен и он может заниматься своими делами. При этом процессор передает управляющей программе (возьмем ту же игру Quake) сигнал о том, что видеокарта нарисовала картинку и готова получать новые данные, на что игра опрашивает нажатые клавиши и мышки, производит расчет данных и, опять же записывает данные в память. И эта же самая управляющая программа дожидается подтверждения успешного окончания зарисовки экрана (которое видеокарта передает с помощью процессора, выставляя на него прерывание), для продолжения опросов и расчетов. Постарался изложить как можно подробнее, но, если кто не понял, Ай’м сорри. :)))
Re: Для чего видео карте прерывание?
nazarov_serg303 Хм. а разьве для зарисовывания картинки на мониторе требуется разное время? Если нет — то почему бы процессору тупо не обновлять содержимое видеопамяти через определенное число тактов?(и совсем не пользоваться прерыванием?)
Re: Для чего видео карте прерывание?
1) Ya govoryu kartochka imayu vvidu kartu video vyvoda bez accel 2) Eti karty imeyut svoyu sobstvennuyu pamyat otobrazhaemuyu na adresnoe prostrastvo processora 3) Karta postoyanno scaniruet svoyu pamyat preobrazuya v analogoviy signal. 4) Dlya izmeneniya parametrov raboty videokarty ispolzueyutsya porty vvoda/vyvoda 5) Eto vse chem zanimaetsya videokarta. 6) Nu i blin zachem ei preryvanie . 7) dlya kartochek s accel sushestvuet massa primeneniy. Delo v tom chto ee mozhno poprosit risovat graficheskie primitivy o zavershenii svoey raboty ona MOZHET soobshat vyzvav preryvanie Vsem PCI slotam sootvestvuet preryvanie nuzhno ono ili net. Eshe voprosy ?
Re: Для чего видео карте прерывание?
2master: убедил, молчу, т.к. не нахожу аргументов за недостатком знаний. 2nazarov_serg303: Это бы занимало очень много процессорного времени. Например, если у тебя на экране висит статическая картинка, то, пока не происходит никаких изменений (не двигаешь мышкой, не клацаешь кныпочками), ее абсолютно не стОит перерисовывать.
Re: Для чего видео карте прерывание?
nazarov_serg303 Akan, почему бы это занимало процессорное время? В случае когда не двигаешь мышкой — Процессор например ничего не посылает в память видеокарты — там находится данные которые не меняются с тактами вывода на экран и на него(экран) просто отображаются
Re: Для чего видео карте прерывание?
Прерывание может использоваться играми для синхры с разверткой: запись в видеопамять выполнять во время обратного хода луча (когда содержимое видеопамяти не посылается на монитор). Если прога постоянно работает с видеопамятью (как FPSы), и при этом не делает синхру, то картинка на экране может иногда получаться искаженной. Почему? Допустим, прога обновила видеопамять, когда луч находится в средней строке экрана. Тогда получится, что верхняя часть экрана содержит старую картинку, нижняя — новую. Если обновление видеопамяти происходит часто, быстро и несинхронно, то на экране будет полный бардак. Поэтому видеокарту можно запрограммировать на выдачу прерывания по началу обратного вертикального хода луча (когда он из правого нижнего угла перемещается в левый верхний). В это время прога должна обновить видеопамять. Например, просто переключением отображаемой страницы (в этой странице картинка должна быть уже создана).
Re: Для чего видео карте прерывание?
Nazarov_serg303 Пасибо, все более менее понятно — карточка обрабатывает данные для картинки разное время — в зависимости от модели самой карты, разрешения и т.п. — откуда процу знать — за какое время карточка выполнит свою работу(а луч экрана возвращается в это время в противоположный угол) — а когда все вывела на экран — посылает сигнал процу — давай след. порцию данных. Так?
Re: Для чего видео карте прерывание?
Nazarov_serg303 Блин, не туда вставил «а луч экрана . «
Re: Для чего видео карте прерывание?
to last anonymous
ne tak.
proc nikogda neznaet narisovalos na ekrane chtoto ili net.
pro obratniy hod lucha kartinka poluchitsya ne iskazhennoi a mozhet migat. nikakih prervaniy ne proishodit a lish mozhno chitat iz Porta.
Chtoby ne migala na sovremennyh kartah ispolzuyut double buffering.
t.e. delayut dva bufera. v odin pishut drugoi risuetsya potom pereklyuchayutsya.Proga dolzhna uspet zapihat v active buffer vse dannye inache opyat migat nachnet. na vse u progi est 1/VertSync sec. chego kak pravilo hvataet za glaza.
i est eshe knizhka takaya iz Biblioteki sistemnogo programmista. Tom 3
avtory Bratya Frolovy. Izdatelstvo Dialog-Mifi pravda etoi knige uzhe let 6-7 nazyvaetsya ona programmirovanie videoadapterov.
Kstati eshe usaetsya int v AGP — kogda kartochke nuzhno vzyat pamyati pod tekstury.
No naskolko ya pomnyu eto delaetsya odin raz pri nepomnyu sovsem kakih obstoyatelstvah.
Re: Для чего видео карте прерывание?
master, почему раскладку не настроишь? Хотя писать любишь :)))
Re: Для чего видео карте прерывание?
Mne ne raskladku nado nastraivat ona u меня как видишь работает toka na translite ya pishu namnogo bystree a esli byt bolee tochnym na russkom nu ochen medlenno
Re: Для чего видео карте прерывание?
nazarov_serg303 Эх. — задействовал кучу народа, а так ничего и не понял — буду читать книжки. — больше не пишите. Всем THANKS!
Re: Для чего видео карте прерывание?
Прерывание видюхе нужно для захвата кадров. Если, конечно, есть TV-тюнер :).
Источник
Guest
Guest
-
#1
Does anyone know how to change the interrupt number on the Geforce 6800 GT
graphics card in Windows XP? I have it installed on an Intel motherboad but
there is no setting in the BIOS for interrupt preference. The main board is
ATPI compliant and Windows XP assigns interrupt 16 to the card which is the
worst interrupt possible. I need to change it to interrupt 11, 10, or 15
but cannot do so in the Device Manager as the area for doing so is greyed
out. Is there a utility program somewhere that will allow me to override
the automatic settings? I’ve already tried reinstalling Windows XP from
scratch and yet the interrupt is still assigned to 16.
Guest
Guest
-
#2
«Stahl» <sstahl1@houston.rr.com> wrote in message
news:Ziemd.24629$pu3.46@fe2.texas.rr.com…
> Does anyone know how to change the interrupt number on the Geforce 6800 GT
> graphics card in Windows XP? I have it installed on an Intel motherboad
but
> there is no setting in the BIOS for interrupt preference. The main board
is
> ATPI compliant and Windows XP assigns interrupt 16 to the card which is
the
> worst interrupt possible. I need to change it to interrupt 11, 10, or 15
> but cannot do so in the Device Manager as the area for doing so is greyed
> out. Is there a utility program somewhere that will allow me to override
> the automatic settings? I’ve already tried reinstalling Windows XP from
> scratch and yet the interrupt is still assigned to 16.
You can’t…
….and what makes IRQ 16 «the worst»?
Guest
Guest
-
#3
Upgrade the BIOS if possible. You can try to remove PCI adapter from Slot1
(next to AGP slot) and or switch the BIOS from APIC to PIC mode and or
disable all the resources you don’t use. If it won’t help, reinstall Windows
with the Standard HAL — hit F7 during initial stage of setup.
- Advertising
- Cookies Policies
- Privacy
- Term & Conditions
- Topics
Guest
Guest
-
#1
Does anyone know how to change the interrupt number on the Geforce 6800 GT
graphics card in Windows XP? I have it installed on an Intel motherboad but
there is no setting in the BIOS for interrupt preference. The main board is
ATPI compliant and Windows XP assigns interrupt 16 to the card which is the
worst interrupt possible. I need to change it to interrupt 11, 10, or 15
but cannot do so in the Device Manager as the area for doing so is greyed
out. Is there a utility program somewhere that will allow me to override
the automatic settings? I’ve already tried reinstalling Windows XP from
scratch and yet the interrupt is still assigned to 16.
Guest
Guest
-
#2
«Stahl» <sstahl1@houston.rr.com> wrote in message
news:Ziemd.24629$pu3.46@fe2.texas.rr.com…
> Does anyone know how to change the interrupt number on the Geforce 6800 GT
> graphics card in Windows XP? I have it installed on an Intel motherboad
but
> there is no setting in the BIOS for interrupt preference. The main board
is
> ATPI compliant and Windows XP assigns interrupt 16 to the card which is
the
> worst interrupt possible. I need to change it to interrupt 11, 10, or 15
> but cannot do so in the Device Manager as the area for doing so is greyed
> out. Is there a utility program somewhere that will allow me to override
> the automatic settings? I’ve already tried reinstalling Windows XP from
> scratch and yet the interrupt is still assigned to 16.
You can’t…
….and what makes IRQ 16 «the worst»?
Guest
Guest
-
#3
Upgrade the BIOS if possible. You can try to remove PCI adapter from Slot1
(next to AGP slot) and or switch the BIOS from APIC to PIC mode and or
disable all the resources you don’t use. If it won’t help, reinstall Windows
with the Standard HAL — hit F7 during initial stage of setup.
- Advertising
- Cookies Policies
- Privacy
- Term & Conditions
- Topics