GPU 하드웨어 오류를 시뮬레이션하는 방법은 무엇입니까?

GPU 하드웨어 오류를 시뮬레이션하는 방법은 무엇입니까?

저는 NVIDIA 그래픽 카드의 GPGPU 복원력과 관련된 연구를 하고 있으며, 하드웨어 오류를 최대한 정확하게 시뮬레이션할 수 있는 방법을 찾고 있습니다. 나는 의도적으로 실패하는 커널에서 cudaDeviceReset() 및assert()를 사용하는 것을 이해합니다. 내가 틀렸다면 수정해 주세요. 그러나 이것이 현실적인 하드웨어 오류를 정확하게 설명하지는 않습니다.

궁극적으로 내가 달성하고 싶은 것은 실행 중에 장치를 효과적으로 종료하고 호스트가 이를 감지하고 복구를 시도하도록 하는 것입니다.

Linux 커널을 통해 "GPU를 재부팅"하는 방법이 있는지 궁금합니다.

CentOS 7을 사용하고 있으며 내 장치의 컴퓨팅 성능은 2.1입니다. 아래 uname -a 출력을 참조하세요.

Linux heisenbug 3.10.0-327.10.1.el7.x86_64 #1 SMP Tue Feb 16 17:03:50 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

답변1

장치의 PCI 버스 레지스터 중 일부를 상당히 쉽게 조작할 수 있습니다.PCI 설정. 참고: 이는 위험하며 시스템이 중단될 수 있습니다!

예를 들어 그래픽 카드의 PCI 버스와 슬롯을 찾으세요.

$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)

$ lspci -s 00:02.0 -v
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09) (prog-if 00 [VGA controller])
        DeviceName:  Onboard IGD
        Subsystem: Holco Enterprise Co, Ltd/Shuttle Computer Device 4018
        Flags: bus master, fast devsel, latency 0, IRQ 29
        Memory at f7400000 (64-bit, non-prefetchable) [size=4M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        I/O ports at f000 [size=64]
        Expansion ROM at <unassigned> [disabled]
        Capabilities: <access denied>
        Kernel driver in use: i915
        Kernel modules: i915

를 사용하여 레지스터를 읽고 쓸 수 있습니다 setpci. 일부 레지스터를 읽고 그 중 하나에 쓰려면 루트여야 합니다. 레지스터 이름은 로 나열됩니다 setpci --dumpregs. 예를 들어:

$ setpci -s 00:02.0 command   
0407

16비트 PCI 구성 command레지스터는 중요한 레지스터입니다. 이 비트의 의미는 다음에서 결정될 수 있습니다.리눅스 헤더 파일. 하위 3비트는 1이며, 장치가 CPU의 IO 및 메모리 사이클에 응답하고 버스 마스터가 되어 CPU의 메인 메모리로 DMA될 수 있도록 합니다.

이 비트를 비활성화하면 장치가 더 이상 드라이버에 응답하지 않습니다. ~을 경계하다,이로 인해 시스템이 중단될 수 있습니다.. 이것을 가볍게 테스트하지 마십시오.

$ sudo setpci -s 00:02.0 command=0000 # DONT DO THIS!

레지스터를 0으로 설정하고 그래프가 그려지는 동안 몇 초간 기다린 다음 레지스터를 다시 원래 설정(command=0407)으로 설정하는 스크립트를 작성할 수 있습니다. 모든 숫자는 16진수입니다(0x 접두사 없음). 주석에서 언급했듯이 명명된 레지스터 command의 너비 (예 setpci: . 레지스터 이름 접미사 .b(8비트), .w(16) 또는 (32)를 통해 .l명시적인 너비를 제공 할 수 있습니다.

하드웨어 재설정은 일반적으로 재설정하려는 하드웨어나 상위 버스 하드웨어의 특정 레지스터를 알아야 하기 때문에 더 어렵습니다.

관련 정보