VSISH를 이용해 ESXi에서 PCI-E Link Speed 확인하기

송주환·2024년 2월 15일
0
post-thumbnail

Well-known Methods

ESXi에서 PCI-E 장치 정보를 확인하는 방법은 여러 가지가 있다. Linux 사용자라면 아주 익숙할 lspci 명령어와, esxcli hardware pci list가 대표적이다.

하지만, 두 명령어 모두 Linux의 lspci 명령어가 보여주는 것 만큼 자세한 정보를 보여주지는 않는다.

예를 들어, ESXi에서 lspci 명령어를 치면 다음과 같은 결과가 나온다.

[그림 1. ESXi의 lspci 출력 (non-verbose)]

여기에서 얻을 수 있는 정보는 디바이스명과 PCI-E Bus ID가 전부이다.

좀 더 자세한 정보를 확인하기 위해 lspci -p 명령어를 사용하면 다음과 같은 결과를 얻을 수 있다.

[그림 2. ESXi의 lspci 출력 (pciinfo)]

디바이스명이 사라진 대신, VID/DID/SVID/SDID와 인터럽트 정보 등을 확인할 수 있다. 그리고 해당 장치에 매핑된 vmkmodule 정보도 볼 수 있다.

그렇다면, lspci -v 는 어떨까?

[그림 3. ESXi의 lspci 출력 (verbose)]

Verbose 옵션을 사용하면 PCI Bus ID, 디바이스명, PCI Class ID와 Class Sub ID를 확인할 수 있다.
어느 쪽이든 Linux의 lspci -vvv가 제공하는 만큼 디테일한 정보를 얻을 수는 없다.

esxcli hardware pci list 명령어는 lspci 명령어의 출력을 사람이 읽기 좋은 텍스트 형태로 보여준다.
하지만, 마찬가지로 PCI-E 장치 자체의 자세한 정보를 확인할 수는 없다.

[그림 4. ESXi의 esxcli hardware pci list 출력]

나는 트러블슈팅을 위해 특정 장치의 Actual Link Speed를 확인하고 싶은데, 이럴 때는 어떻게 해야 할까?

VSISH를 이용한 PCI-E 장치 정보 쿼리

VSISH를 이용하면, VMKernel이 가지고 있는 장치 정보를 가져올 수 있다.
PCI-E 장치의 정보는 /hardware/pci 에 있으며, 장치 지정 방식은 다음과 같은 규칙을 따른다.

seg/<segment ID>/bus/<bus ID>/slot/<slot ID>/func/<PF ID>/

Segment ID와 Bus ID, Slot ID, PF (Physical Function) ID는 lspci 또는 esxcli hardware pci list를 통해 얻을 수 있으며, VSISH에서는 다음과 같은 정보를 get/set 할 수 있다.
그리고 각 ID 값이 16진수가 아닌 10진수이기 때문에, HEX to DEC 변환이 필요하다.

[그림 5. VSISH를 이용해 get/set 할 수 있는 PCI-E 장치 정보]

위 항목 중, 나에게 필요한 것은 capList이다. 해당 구조체에는 특정 PCI-E 장치가 가지고 있는 PCI Capability 정보가 담겨 있을 것이기 때문이다.

[그림 6. PCI Capablities 예시 (출처)]

PCI-SIG의 PCI CODE AND ID ASSIGNMENT SPECIFICATION 문서에서 사전 정의된 PCI Capability ID를 확인할 수 있다.
개중에서 나에게 필요한 것은 10h, PCI Express Capability이다. 이 필드에 PCI-E 버전과 링크 속도가 기록되기 때문이다.

[그림 7. VSISH를 이용한 PCI Express Capability 쿼리 예시]

VSISH에서 임의의 PCI-E 장치를 선택한 뒤, Cap ID 16을 쿼리해 보았다.
해당 장치는 PCI-E 4.0 4배속의 최대 대역폭을 가지지만, 실제로는 PCI-E 3.0 4배속의 속도로 동작하고 있음을 확인할 수 있다.

요약

lspci, esxcli로 얻을 수 없는 PCI-E 장치에 대한 자세한 정보를 VSISH를 통해 확인할 수 있다.

필요할 경우 vsish를 직접 사용하여 해당 장치가 지원하는 모든 Capability / Extended Capability 정보를 확인해 볼 수 있을 것이며, 만약 PCI-E 링크 속도 정보가 필요하다면 해당 정보가 담긴 Capability ID가 16 (0x10)임을 기억해 두면 좋을 것이다.

한 가지 팁을 주면, lspci에서 보여지는 PCI Bus ID 값은 Segment_ID:Bus_ID:Slot_ID.PF_ID의 꼴을 가진다.
이 정보와 vsish -e를 조합하면 특정 PCI 장치의 원하는 상태값을 shell에서 바로 가져올 수 있다.

[그림 8. vsish -e 를 이용한 PCI Express Capability의 직접 쿼리 예시]

이 글이 비슷한 이슈를 겪고 있는 다른 사람들에게 도움을 줄 수 있기를 바란다.

profile
Virtualization / Network / Storage / Server Hardware and.. Linux

0개의 댓글