Intel(Skylake) 언코어

Intel(Skylake) 언코어

Skylake 하드웨어의 언코어 성능 카운터와 관련된 Linux 커널 코드를 이해하려고 합니다. 코드는https://elixir.bootlin.com/linux/v4.15/source/arch/x86/events/intel/uncore_snbep.c#L3565마술처럼 상수 0x208d를 사용합니다.

이 상수의 의미는 어디에서 찾을 수 있으며 그것이 나타내는가?

감사해요,

답변1

상수는 pci_get_device()함수 호출에 사용됩니다. 함수 이름을 클릭하면 해당 함수로 즉시 이동할 수 있습니다.정의drivers/pci/search.c에 있습니다. 코드는 다음과 같습니다.

/**
 * pci_get_device - PCI 장치 검색을 시작하거나 계속합니다.공급업체/장치 ID
 * @vendor: 일치하는 PCI 공급업체 ID 또는 모든 공급업체 ID와 일치하는 %PCI_ANY_ID
 *@device: PCI 장치 ID일치시키려면 %PCI_ANY_ID를 사용하고 모든 장치 ID와 일치시키려면
 * ...
 */
struct pci_dev *pci_get_device(unsigned int Vendor,서명되지 않은 정수 장치,
                   구조체 pci_dev *에서)
{
    ...
}

따라서 매개변수의 의미는 PCI "장치 ID"라는 것이 분명합니다.

그렇다면 장치 ID는 무엇입니까?

모든 PCI 장치에는 16비트 "공급업체 ID"와 16비트 "장치 ID" 또는 "모델 ID"가 있으며 이는 PCI 스캔 중에 보고됩니다( 참조 lspci -tvnn). (공급업체, 장치) 쌍은 장치에 대한 올바른 드라이버를 결정하는 데 사용됩니다.

따라서 PCI_VENDOR_ID_INTEL은 Intel의 공급업체 ID(물론 PCI-SIG에서 할당한 0x8086)에 대한 매크로이고 다음 매개변수 0x208d는 특정 장치 유형(Intel에서 직접 할당한 대로)을 나타냅니다.

그만큼PCI ID 저장소8086:208d 장치를 "Sky Lake-E CHA Registers"(lspci에서도 비슷한 이름을 볼 수 있음)로 설명하므로 이는 아마도 Skylake uncore의 일부인 가상 장치일 것입니다.

관련 정보