물리적 선형 주소 의 VGA 텍스트 (모드 03) 프레임 버퍼에 (0x31) 과 같은 바이트를 저장할 때 16 비트 레거시 BIOS MBR 모드로 부팅 된 최신 PC 하드웨어에서 실제로 어떤 일 이 발생 합니까? 해당 지역 의 MTRR 이있는 상점이 UC로 설정된 상점 은 얼마나 느립 니까? ( 하나의 Kaby Lake iGPU 랩톱에서 실험 한 테스트에 따르면 WC의 clflushopt는 VGA 메모리의 UC와 거의 같은 속도이지만, clflushopt가 없으면 WC 메모리에 저장하면 CPU를 떠나지 않고 화면을 전혀 업데이트하지 않고 초고속으로 실행됩니다 .)'1'
B8000
mov [es:di], eax
mov
모든 매장에서 SMI가 아닌 경우 실제 공간으로 실제로 재부팅하지 않고 성능 실험을 위해 사용자 공간의 WB 메모리 청크에 대해이 비용을 근사 할 수있는 방법이 있습니까? (예 : BSS 페이지를 실제로 어디에도 표시되지 않는 가장 한 프레임 버퍼로 사용)
해당 글꼴 글리프가 다음 새로 고침에서 화면에 나타나지만 실제로 하드웨어 스캔으로 VRAM (또는 iGPU의 경우 DRAM)에서 해당 ASCII 문자를 읽고 즉시 비트 맵 글꼴 글리프에 매핑합니까? 또는 각 저장소에서 또는 vblank 당 한 번 소프트웨어 차단이 발생하여 실제 하드웨어가 비트 맵 프레임 버퍼 만 처리해야합니까?
레거시 BIOS 부팅은 SMM (System Management Mode) 을 사용하여 USB kbd / mouse를 PS / 2 장치로 에뮬레이트하는 것으로 잘 알려져 있습니다. VGA 텍스트 모드 프레임 버퍼에도 사용되는지 궁금합니다. 나는 그것이 가정 되는 VGA I / 모드 설정을위한 O 포트를 사용하지만, 텍스트 프레임 버퍼는 하드웨어에 의해 지원 될 수 있음을 그럴듯합니다. 그러나 대부분의 컴퓨터는 그래픽 모드에서 모든 시간을 보내므로 텍스트 모드에 대한 하드웨어 지원은 공급 업체가 원하는 것처럼 보입니다. (OTOH 이 블로그 는 사제 verilog VGA 컨트롤러가 텍스트 모드를 상당히 간단하게 구현할 수 있다고 제안합니다.)
특히 Intel Skylake에서 iGPU를 사용하는 시스템에 관심이 있지만 Intel 및 AMD의 이전 / 이후 iGPU 및 새롭거나 오래된 개별 GPU에 관심이 있습니다.
(AMD 및 NVidia 이외의 공급 업체를 포함합니다. PCIe가 아닌 PCI 슬롯이있는 일부 Skylake 마더 보드가 있습니다. 최신 GPU 펌웨어 드라이버가 텍스트 모드를 에뮬레이트하는 경우 하드웨어 VGA 텍스트 모드가있는 오래된 PCI 비디오 카드가있을 수 있습니다. 상점을 SMI 대신 PCI 트랜잭션으로 만들 수 있습니다.)
내 자신의 데스크탑은 Asus Z170 Pro Gaming mobo의 i7-6700k이며 DVI-D 출력의 1920x1200 모니터가있는 iGPU 만 추가 카드가 없습니다. @Eldan이 테스트 한 Kaby Lake i5-7300HQ 시스템의 세부 사항은 CPU 모델 만 알 수 없습니다.
내가 발견 피닉스 BIOS의 특허 US20120159520을 2011 년부터 ,
UEFI를 사용하여 기존의 비디오를 에뮬레이션 . 비디오 하드웨어 공급 업체가 UEFI 및 기본 16 비트 리얼 모드 옵션 ROM 드라이버를 모두 공급하도록 요구하는 대신 int 10h
SMM 후크를 통해 공급 업체가 제공 한 UEFI 비디오 드라이버를 호출하는 리얼 모드 VGA 드라이버 ( 기능 등)를 제안합니다 .
개요
[...] 일반 비디오 옵션 ROM은 비디오 서비스 요청의 일반 비디오 SMM 드라이버에 알립니다. 이러한 통지는 소프트웨어 시스템 관리 인터럽트 (SMI)를 사용하여 수행 될 수있다. 통지에 따라, 일반 비디오 SMM 드라이버는 비디오 서비스에 대한 요청을 제 3 자 UEFI 비디오 드라이버에게 통지한다. 타사 비디오 드라이버는 요청 된 비디오 서비스를 운영 체제에 제공합니다. 이러한 방식으로, 제 3 자 UEFI 그래픽 드라이버는 UEFI 디스플레이 프로토콜을 기본적으로 지원하지 않는 운영 체제까지 다양한 운영 체제를 지원할 수 있습니다.
대부분의 설명은 int 10h
이미 IVT를 통해 트래핑하는 호출 및 항목 처리를 다루 므로 SMI를 의도적으로 트리거하는 사용자 지정 코드를 쉽게 실행할 수 있습니다. 관련 부분은 텍스트 모드 프레임 버퍼에 직접 저장하기 위해 설명하는 것으로 소프트웨어 또는 하드웨어 인터럽트를 트리거하지 않는 코드에서도 작동해야합니다. (해당 상점에서 SMI를 트리거하는 HW 이외의 경우 지원되는 경우 사용할 수 있다고 말합니다.)
텍스트 버퍼 지원
특정 실시 예에서, 애플리케이션은 VGA의 텍스트 버퍼를 직접 조작 할 수있다 . 이러한 실시 예에서, 일반 비디오 SMM 드라이버 (130) 는 하드웨어 가 740 KB-768 KB 메모리 영역 (텍스트 버퍼가 위치하는) 에 대한 읽기 / 쓰기 액세스에 대한 SMI 트래핑을 제공하는지에 따라 두 가지 방식 중 하나로이를 지원 한다 .
SMI 트래핑이 이용 가능할 때, 하드웨어는 각각의 읽기 또는 쓰기 액세스마다 SMI를 생성한다. SMI 트랩의 트랩 주소를 사용하여 정확한 텍스트 열과 행을 계산하고 가상 텍스트 화면의 해당 행과 열에 액세스 할 수 있습니다.
대안 적으로, 정규 메모리가이 영역에 대해 활성화되고, 주기적 SMI를 사용하여, 일반 비디오 SMM 드라이버 (130)는 에뮬레이트 된 하드웨어 텍스트 버퍼에서의 변화를 스캔하고 비디오 드라이버에 의해 유지되는 대응하는 가상 텍스트 스크린을 업데이트한다. 두 경우 모두 변경 사항이 감지되면 가상 텍스트 화면에서 문자가 다시 그려집니다.
이것은 BIOS 공급 업체의 특허 중 하나이며 대부분의 하드웨어가 실제로 작동하는 방식이나 다른 공급 업체가 다른 작업을 수행하는지 여부는 알려주지 않습니다. 그래도 해당 범위의 매장을 잡을 수있는 일부 하드웨어가 존재 하는지 확인합니다 . (이것이 특허에서 다루기로 결정한 가상의 가능성이 아니라면)
유스 케이스의 경우 화면 새로 고침에서만 트랩하는 것이 모든 상점에서 트랩하는 것보다 훨씬 빠를 것이므로 어떤 하드웨어 / 펌웨어가 어떤 방식으로 작동하는지 궁금합니다.
이 질문에 대한 동기
7 세대 인텔 코어의 비디오 RAM에서 증가하는 ASCII 10 진수 카운터 최적화 -ASCII 텍스트 카운터의 새 숫자를 동일한 몇 바이트의 비디오 RAM에 반복적으로 저장합니다.
Linux에서 WB 메모리의 32 비트 사용자 공간에서 코드 버전을 테스트하여 movnti
각 상점 후 (또는 때로는 타이머 인터럽트). 그러나 리얼 모드 부트 로더 상황이 DRAM에만 저장되는 것이 아니라 SMI를 트리거하는 경우에는 현실적이지 않습니다.
WB 메모리에서을 movnti
사용한 플러시 는을 사용한 lock xor byte [esp], 0
플러싱보다 약간 빠릅니다 clflushopt
. 그러나 @Eldan은 MTRR을 WC로 프로그래밍 한 후 VGA 메모리에있는 사람들에게는 속도 향상이 없다고보고했다. (그리고 원래의 일반 저장소와 동일한 속도로 기본적으로 VGA 프레임 버퍼는 UC임을 나타냅니다. 일부 구형 BIOS 는 VGA 메모리를 WC로 만들 수있는 옵션이있었습니다 .
실제 문제가 아니므로 실제 해결 방법을 찾지 않습니다 . 수동으로 픽셀 바이트를 VGA 그래픽 모드로 저장하는 것이 훨씬 빠를 지 아는 것은 흥미로울 것입니다.
요약
- 모든 실제 현대 시스템이 모든 매장에서 텍스트 모드 프레임 버퍼로 SMI를 트리거합니까?
- 그렇지 않다면 WB 메모리의 사용자 공간에서 movnti + 무언가를 사용하여 프레임 버퍼에 WC store + clflush를 근사 할 수 있습니까? 따라서
perf
성능 카운터를 쉽게 프로파일 링 할 수 있습니다 . - 다른 BIOS 및 / 또는 하드웨어가 다른 전략을 사용하는 경우 해당 전략은 무엇입니까? ( "VGA 프레임 버퍼를 실제 하드웨어 프레임 버퍼에 동기화하기위한 모든 vblank SMI"와 같은 세부 사항은 원하지 않습니다.)
- 하드웨어 VGA 텍스트 모드가있는 PCIe 또는 PCI 비디오 카드가 통합 GPU가 실제로하는 것보다 더 빠릅니까? 실제 PCIe 쓰기 트랜잭션은 매장이 DRAM에 도달하기를 기다리는 것보다 느릴 것으로 생각하지만 PCIe 쓰기는 모든 상점의 SMI보다 저렴합니다. 야구장 / 크기 순서 비교는 흥미로울 것입니다.
이 질문은 모두 관련이 있지만 예상만큼 겹치지 않으면이 질문을 나눌 수 있습니다.
perf
리눅스가 아직 부팅되지 않았기 때문에 분명히 사용할 수 없습니다 . Linux-CentOS / Intel 시스템에서 SMI (System Management Interrupt) 대기 시간 평가에는 SMI 계산 방법에 대한 세부 정보가 있습니다.
MSR_SMI_COUNT=0x34
카운터를 먼저 프로그래밍하지 않고도 RDMSR 만 있습니다.