Что действительно происходит на современном оборудовании P C, загруженном в 16-битном устаревшем режиме MBR * IOS, когда вы сохраняете байт, такой как '1'
(0x31), в VGA текст (режим 03) кадровый буфер по физическому линейному адресу B8000
? Как медленно работает mov [es:di], eax
магазин с MTRR для этого региона, установленным в U C? ( Экспериментальное тестирование на одном ноутбуке Kaby Lake iGPU показывает, что clflushopt в W C был примерно такой же скорости, как U C для VGA-памяти. Но без clflushopt mov
сохраняет в W C память никогда не покидает ЦП и не обновляет экран вообще, работает супер быстро.)
Если это не SMI для каждого магазина, есть ли способ приблизить эту стоимость куска памяти WB в пространстве пользователя для экспериментов с производительностью без фактической перезагрузки в реальном режиме? (например, использование страницы BSS в качестве притворного кадрового буфера, который фактически нигде не отображается).
Соответствующий глиф шрифта появляется на экране в следующей ссылке sh, но аппаратное сканирование действительно читает этот ASCII char из VRAM (или DRAM для iGPU) и сопоставление с глифами растровых шрифтов на лету? Или существует какой-то программный перехват в каждом магазине или один раз для каждого vblank, поэтому реальное оборудование должно обрабатывать только растровый буфер кадров?
Legacy B IOS загрузка , хорошо известная для использования System Management Режим (SMM) для эмуляции USB kbd / mouse как устройства PS / 2. Мне интересно, если он также используется для кадрового буфера текстового режима VGA. Я предполагаю, что - это , используемый для портов ввода / вывода VGA для установки режима, но вполне вероятно, что аппаратный текстовый фрейм-буфер может поддерживаться. Тем не менее, большинство компьютеров проводят все свое время в графическом режиме, поэтому отказ от поддержки HW в текстовом режиме кажется чем-то, что производители могут захотеть сделать. (OTOH этот блог говорит о том, что VGA-контроллер homebrew verilog может реализовывать текстовый режим довольно просто.)
Мне особенно интересны системы, использующие iGPU в Intel Skylake, но будет заинтересован в более ранних / более поздних версиях iGPU от Intel и AMD, а также новых или старых дискретных графических процессорах.
(включая поставщиков, отличных от AMD и NVidia; есть некоторые материнские платы Skylake с разъемами PCI, а не P * 1129) *Ie. Если современные драйверы микропрограммного обеспечения GPU действительно эмулируют текстовый режим, то, вероятно, есть некоторые старые видеокарты PCI с аппаратным текстовым режимом VGA. И, возможно, такая карта может сделать магазины просто транзакцией PCI вместо SMI.)
Мой собственный рабочий стол - i7-6700k в игровом моторе Asus Z170 Pro Gaming, никаких дополнительных карт - только iGPU с монитором 1920x1200 на выходе DVI-D. Я не знаю деталей системы Kaby Lake i5-7300HQ, на которой тестирует Элдан, только модель процессора.
Я нашел Phoenix B IOS патент US20120159520 от 2011 года , Эмуляция устаревшего видео с использованием uefi . Вместо того, чтобы требовать от поставщиков видеооборудования предоставления драйверов UEFI и для собственных 16-разрядных драйверов реального режима, они предлагают драйвер VGA реального режима (функции int 10h
и т. Д.), Который вызывает поставщика. поставляемый видеодрайвер UEFI через перехватчики SMM.
Аннотация
[...] Опциональный ПЗУ для видеосигнала generi c уведомляет об общем видеодрайвере c для SMM запрос на видеоуслуги. Такое уведомление может быть выполнено с использованием программного прерывания управления системой (SMI). После уведомления драйвер SMM generic c уведомляет сторонний видеодрайвер UEFI о запросе видеоуслуг. Сторонний видеодрайвер предоставляет запрошенные видеоуслуги операционной системе. Таким образом, сторонний графический драйвер UEFI может поддерживать самые разные операционные системы, даже те, которые изначально не поддерживают протоколы отображения UEFI.
Большая часть описания посвящена обработке вызовов int 10h
и тому подобное, которое, очевидно, уже перехватывает IVT, поэтому может легко запускать пользовательский код, который специально запускает SMI. Соответствующая часть - это то, что они описывают для прямых хранилищ в кадровом буфере текстового режима, который должен работать даже для кода, который не вызывает программных или аппаратных прерываний. (Кроме HW, запускающего SMI в таких хранилищах, который, по их словам, они могут использовать, если это поддерживается.)
Поддержка текстового буфера
[0066] В некоторых вариантах осуществления , приложения могут напрямую манипулировать текстовым буфером VGA . В таком варианте осуществления универсальный драйвер 130 c видео SMM поддерживает это одним из двух способов, в зависимости от того, обеспечивает ли аппаратное обеспечение перехват SMI при доступе на чтение / запись в область памяти 740 КБ-768 КБ ( где расположены текстовые буферы).
[0067] Когда доступна перехват SMI, аппаратное обеспечение генерирует SMI при каждом доступе для чтения или записи. Используя адрес прерывания ловушки SMI, можно рассчитать точный текстовый столбец и строку и получить доступ к соответствующей строке и столбцу на виртуальном текстовом экране.
Альтернативно, для этой области включена нормальная память и, используя periodi c SMI, generic c video Драйвер 130 SMM сканирует изменения в эмулированном аппаратном текстовом буфере и обновляет соответствующий виртуальный текстовый экран, поддерживаемый видеодрайвером. В обоих случаях, когда обнаруживается изменение, символ перерисовывается на виртуальном текстовом экране.
Это всего лишь один патент производителя B IOS, и он не говорит нам, каким образом большинство оборудования на самом деле работает, или если другие поставщики делают разные вещи. По сути, это подтверждает, что существует некоторое оборудование, которое может захватывать магазины в этом диапазоне. (Если только это не гипотетическая возможность, которую они решили охватить в своем патенте.)
Для варианта использования, который я имею в виду, захват только с экрана refre sh будет значительно быстрее, чем захват в каждом магазине поэтому мне любопытно, какое аппаратное обеспечение / прошивка работает каким образом.
Мотивация для этого вопроса
Оптимизация возрастающего десятичного счетчика ASCII в видеопамяти RAM на 7-м поколении Intel Core - многократное сохранение новых цифр для счетчика текста ASCII в одних и тех же нескольких байтах видеопамяти.
Я тестировал версию кода в 32-битном пользовательском пространстве под Linux в WB-памяти, надеясь приблизить ситуацию с movnti
и различными способами заставить ЦП синхронизировать c свой буфер W C с видеопамятью после каждого хранилища (или, возможно, иногда с помощью прерывания по таймеру). Но это нереально c, если ситуация с загрузчиком реального режима не просто сохраняет в DRAM, но вместо этого запускает SMI.
В памяти WB очистка movnti
хранилищ с lock xor byte [esp], 0
несколько быстрее, чем промывка с clflushopt
. Но @Eldan не сообщает об улучшении скорости памяти VGA после программирования MTRR, чтобы сделать его W C. (И та же скорость, что и для оригинального хранилища, что означает, что по умолчанию VGA кадровый буфер был U C. Некоторые старые BIOS имели возможность сделать VGA память W C, которую они называли USW C = спекулятивное объединение без кэширования.)
Это не является реальной проблемой, поэтому я не ищу реальные обходные пути ; хотя было бы интересно узнать, может ли ручное сохранение пиксельных байтов в графическом режиме VGA намного быстрее.
Сводка
- Любые / все реальные современные системы вызывают SMI в каждом хранилище для кадрового буфера текстового режима?
- Если нет, можем ли мы приблизить W C store + clflu sh к кадровому буферу, используя movnti + что-то в пользовательском пространстве в памяти WB ? Таким образом, мы можем легко профилировать с помощью
perf
для счетчиков производительности. - Если разные BIOS и / или аппаратные средства используют разные стратегии, каковы эти стратегии? (Я не хочу подробностей, просто высокий уровень, такой как «SMI каждые vblank для синхронизации c кадрового буфера VGA с фактическим аппаратным кадровым буфером»)
- Будет ли видеокарта P CIe или PCI с аппаратным текстовым режимом VGA работать быстрее, чем на самом деле встроенные графические процессоры? Я предполагаю, что фактическая транзакция записи P CIe будет медленнее, чем ожидание, когда магазин нажмет DRAM, но запись P CIe будет дешевле, чем SMI в каждом магазине. Было бы интересно сравнение приблизительного значения / порядка величин.
Все эти вопросы тесно связаны между собой, но я могу разделить их, если совпадений не так много, как я ожидал.