내 두 번째 GPU는 왜 느릴까? PCIe부터 NVLink까지, x86 I/O 병목 현상 파헤치기

들어가며 CPU는 NVMe 드라이브, 네트워크 카드, 혹은 GPU와 어떻게 대화를 나눌까요? 대부분의 소프트웨어 엔지니어는 드라이버나 커널 모듈이 알아서 해주겠거니 믿고, 그 밑바닥 메커니즘까지는 깊게 생각하지 않습니다. 하지만 성능 이슈를 디버깅하거나, 인터럽트 처리를 튜닝하거나, perf가 가리키는 병목 현상의 원인을 파악하려면 하드웨어 레벨에서 무슨 일이 벌어지는지 반드시 알아야 합니다. x86 시스템은 CPU와 주변 장치 간 통신을 위해 크게 세 가지 메커니즘을 사용합니다: Port-mapped I/O (PMIO): CPU가 별도의 I/O 명령어를 사용해 독립된 주소 공간에 접근합니다. Memory-mapped I/O (MMIO): 주변 장치가 자신의 제어 레지스터를 메모리 주소처럼 노출합니다. Direct Memory Access (DMA): 주변 장치가 CPU의 개입 없이 RAM과 데이터를 직접 주고받습니다. NVMe 드라이브, 네트워크 카드, GPU 같은 현대적인 PCIe 장치들은 거의 전적으로 MMIO와 DMA를 사용합니다. PMIO는 구형 ISA 장치나 하위 호환성 모드에서나 볼 수 있는 유물이죠. 이 메커니즘들을 이해하면 시스템의 동작을 해석하는 눈이 생깁니다. 왜 DMA 버퍼 크기가 처리량(Throughput)에 영향을 주는지, 왜 인터럽트 조절(Moderation)이 레이턴시에 중요한지, 그리고 irqaffinity 같은 커널 파라미터가 실제로 무엇을 제어하는지 알게 되니까요. ...

January 2, 2026 · nbdawn