핵심 인사이트 (3줄 요약)

  1. 본질: MSI (Message Signaled Interrupts)는 장치가 전용 인터럽트 선을 흔드는 대신, 지정된 메모리 주소로 짧은 쓰기 메시지를 보내 인터럽트를 발생시키는 메시지형 인터럽트 방식이다.
  2. 가치: 공유 Interrupt Request (IRQ) 병목과 핀 수 한계를 줄이고, 같은 장치가 먼저 수행한 Direct Memory Access (DMA) 쓰기와 인터럽트 알림의 순서를 같은 Input/Output (I/O) 패브릭 안에서 맞춰 멀티큐 장치의 확장성과 일관성을 높인다.
  3. 판단 포인트: 고속 장치에서는 MSI-X (Message Signaled Interrupts eXtended), 코어 친화도, Interrupt Remapping을 함께 설계해야 효과가 나며, 단순히 MSI를 켰다는 사실만으로 지연과 처리량이 자동 개선되지는 않는다.

Ⅰ. 개요 및 필요성

MSI는 버스 트랜잭션 자체를 인터럽트 알림으로 사용하는 방식이다. 전통적인 Legacy Interrupt Pins (INTx) 모델에서는 장치마다 전용 선을 두거나, 핀이 부족하면 여러 장치가 하나의 선을 공유해야 했다. 장치 수가 늘수록 보드 배선은 복잡해지고, 공유 IRQ에서는 운영체제가 "누가 인터럽트를 냈는지"를 다시 확인해야 하므로 응답 지연과 지터가 커졌다.

PCI Express (PCIe) 시대에는 이런 핀 기반 방식의 약점이 더 선명해졌다. 네트워크 인터페이스 카드와 NVMe (Non-Volatile Memory Express) 저장장치처럼 여러 큐를 동시에 운용하는 장치는 완료 이벤트도 병렬로 많이 발생한다. 그런데 인터럽트 선이 하나뿐이면 완료 큐를 세밀하게 나눠도 결국 마지막 알림 단계에서 다시 병목이 생긴다.

또한 데이터는 DMA로 메모리에 기록되는데 인터럽트는 별도 선으로 도착하는 구조에서는, 드라이버가 인터럽트를 받았을 때 데이터 가시성을 추가로 점검해야 하는 부담이 생긴다. MSI는 "알림도 메모리 쓰기처럼 보내자"는 발상으로 이 문제를 완화한다. 이미 존재하는 I/O 패브릭을 쓰므로 배선은 줄고, 목적지 주소와 벡터를 소프트웨어가 바꿀 수 있어 라우팅 유연성도 커진다.

  • 📢 섹션 요약 비유: INTx가 방마다 따로 설치한 초인종이라면, MSI는 같은 사내 메신저망으로 "몇 번 방으로 바로 와 주세요"라고 메시지를 보내는 방식이다. 선을 더 깔지 않아도, 누가 어디로 가야 하는지 더 정교하게 지시할 수 있다.

Ⅱ. 아키텍처 및 핵심 원리

MSI의 핵심 동작은 단순하다. 운영체제가 장치의 MSI Capability 또는 MSI-X Table에 메시지 주소메시지 데이터를 써 넣어 두면, 장치는 이벤트 완료 시 그 값을 그대로 버스로 내보낸다. 호스트 쪽에서는 Advanced Programmable Interrupt Controller (APIC) 또는 Generic Interrupt Controller (GIC)가 이 쓰기를 인터럽트 신호로 해석하고, 지정된 벡터를 해당 코어로 전달한다.

구성 요소역할설계 포인트
MSI Capability장치의 MSI 지원 여부와 벡터 개수를 노출한다.드라이버가 enable, mask, vector 수를 설정한다.
Message Address인터럽트 수신 대상의 메모리 매핑 주소다.코어, 클러스터, 가상 머신 대상 재지정과 연결된다.
Message Data벡터 번호나 전달 속성을 담는다.큐 종류별 이벤트를 분리하는 기준이 된다.
MSI-X Table벡터별 주소·데이터·마스크를 독립 관리한다.장치당 많은 큐를 세밀하게 매핑할 수 있다.
Interrupt Remapping메시지 목적지를 안전하게 재해석한다.가상화, 보안 격리, 잘못된 장치 쓰기 방지가 핵심이다.

이 그림은 MSI가 왜 "인터럽트 선 대체품"이 아니라, 데이터 완료와 알림을 한 흐름으로 묶는 구조인지 보여 준다.

┌──────────────────────────────────────────────────────────────────────────────┐
│ MSI 경로: 완료 데이터와 인터럽트 알림이 같은 I/O 패브릭을 따라 흐른다      │
├──────────────────────────────────────────────────────────────────────────────┤
│ Device Queue Complete                                                       │
│      │                                                                      │
│      ├─ ① DMA Write ───────────────▶ Host Memory (descriptor / status)      │
│      │                                                                      │
│      └─ ② MSI Write {addr, data} ──▶ APIC / GIC Doorbell                    │
│                                           │                                  │
│                                           ▼                                  │
│                                Vector Decode / Target Core                   │
│                                           │                                  │
│                                           ▼                                  │
│                                  ISR (Interrupt Service Routine)             │
└──────────────────────────────────────────────────────────────────────────────┘

실무적으로 중요한 점은, 같은 장치가 먼저 발행한 메모리 쓰기보다 MSI 쓰기가 앞질러 관찰되지 않도록 버스 규약과 호스트 브리지가 순서를 관리한다는 점이다. 그래서 드라이버는 "완료 정보를 메모리에 기록한 뒤 인터럽트를 울린다"는 방향성을 더 신뢰할 수 있다. 이 특성이 핀 기반 인터럽트보다 멀티큐 I/O에 유리하다.

MSI는 보통 1, 2, 4, 8, 16, 32개처럼 2의 거듭제곱 벡터 구성을 가지지만, MSI-X는 벡터별로 완전히 독립된 엔트리를 두어 보통 최대 2,048개까지 확장할 수 있다. 그래서 Network Interface Card (NIC) 수신 큐, NVMe completion queue처럼 "큐마다 다른 벡터"가 필요한 장치에서는 MSI-X가 사실상 표준이 되었다.

  • 📢 섹션 요약 비유: MSI는 택배 완료 문자를 보내는 시스템과 같다. 물건을 문 앞에 두고 사진을 찍은 뒤 문자까지 같은 배송망 안에서 이어지니, 받는 사람은 "물건이 왔다는 말만 먼저 들었는데 아직 안 왔다"는 혼란을 덜 겪는다.

Ⅲ. 비교 및 연결

메시지형 인터럽트를 이해하려면 INTx, MSI, MSI-X의 경계를 분명히 봐야 한다. 차이는 단순히 "선이 있냐 없냐"가 아니라, 인터럽트를 얼마나 잘 쪼개고, 어디로 보낼 수 있느냐에 있다. 멀티코어와 멀티큐 시대에는 이 차이가 그대로 처리량 차이로 이어진다.

항목INTxMSIMSI-X
전달 방식전용 또는 공유 물리 핀메모리 쓰기 메시지메모리 쓰기 메시지
벡터 유연성낮음제한적 다중 벡터벡터별 독립 설정
멀티코어 매핑제약 큼가능매우 세밀함
대표 병목공유 IRQ 스캔벡터 수 제한설정 복잡도 증가
적합한 장치구형 저속 장치중간 규모 장치고속 멀티큐 장치

MSI는 앞선 560번 문서의 멀티코어 인터럽트 라우팅과도 직결된다. 인터럽트가 메시지로 바뀌면 Advanced Programmable Interrupt Controller (APIC)나 Generic Interrupt Controller (GIC)는 벡터를 특정 코어에 더 유연하게 나눌 수 있다. 즉 메시지화는 단순 배선 절감이 아니라, 인터럽트 라우팅을 소프트웨어 정책과 결합할 수 있게 만드는 전제 조건이다.

가상화 환경에서는 Input/Output Memory Management Unit (IOMMU) 기반 Interrupt Remapping이 추가로 중요하다. 장치가 임의 주소로 MSI를 날리면 보안 문제가 생길 수 있기 때문이다. 그래서 현대 시스템은 "메시지형 인터럽트"와 "메시지 목적지 검증"을 함께 묶어 설계한다.

  • 📢 섹션 요약 비유: INTx가 한 건물에 공용 벨 하나만 있는 구조라면, MSI-X는 부서별 내선번호가 다 있고 교환원이 사람마다 바로 연결해 주는 구조다. 같은 전화라도 연결 방식이 달라지면 건물 전체의 일 처리 속도가 달라진다.

Ⅳ. 실무 적용 및 기술사 판단

실무에서 MSI의 효과가 가장 크게 드러나는 곳은 멀티큐 네트워크와 스토리지다. 예를 들어 16개 수신 큐를 가진 100GbE 네트워크 인터페이스 카드는 각 큐를 서로 다른 MSI-X 벡터에 연결하고, 그 벡터를 같은 NUMA (Non-Uniform Memory Access) 노드의 코어에 배치할 때 처리량과 캐시 지역성이 함께 좋아진다. NVMe 역시 submission queue와 completion queue를 코어별로 나누면 lock 경합을 줄이고 tail latency를 낮출 수 있다.

하지만 벡터를 많이 주는 것이 항상 정답은 아니다. 큐 수보다 과도한 벡터를 쓰면 인터럽트 분산과 재스케줄 비용이 오히려 늘 수 있고, 모든 벡터를 CPU0에 몰아두면 MSI-X를 써도 본질적인 병목은 남는다. 또한 interrupt coalescing을 너무 공격적으로 걸면 인터럽트 수는 줄지만 지연시간이 커질 수 있으므로, 처리량 중심 장치와 저지연 장치를 구분해 조절해야 한다.

적용 체크리스트

  1. 장치의 큐 구조와 MSI/MSI-X 벡터 수가 실제 워크로드에 맞게 대응되는가?
  2. 벡터를 처리하는 코어가 같은 NUMA 노드의 메모리와 장치 큐를 함께 다루고 있는가?
  3. 가상화 환경이라면 Interrupt Remapping과 posted interrupt 경로를 함께 검토했는가?
  4. interrupt coalescing 설정이 처리량과 지연시간 목표에 맞게 조정되어 있는가?
  5. INTx fallback 상태로 내려간 장치를 방치해 병목을 만들고 있지 않은가?

피해야 할 안티패턴

  • 모든 MSI-X 벡터를 기본값 그대로 코어 0 하나에 몰아두는 설정

  • 큐는 여러 개인데 벡터를 하나만 써서 소프트웨어에서 다시 demultiplex하는 구조

  • MSI만 켜면 ordering과 보안 문제가 자동 해결된다고 오해하는 설계

  • 벡터 수를 무작정 늘려 인터럽트 폭주와 캐시 손실을 키우는 튜닝

  • 📢 섹션 요약 비유: MSI-X 튜닝은 콜센터 상담원을 나누는 일과 같다. 전화선이 디지털로 바뀌었다고 끝이 아니라, 어떤 문의를 어느 상담원에게 연결할지까지 맞춰야 진짜 대기열이 줄어든다.


Ⅴ. 기대효과 및 결론

MSI의 가장 큰 효과는 인터럽트를 "배선 이벤트"에서 "라우팅 가능한 메시지"로 바꿨다는 데 있다. 이 전환 덕분에 시스템은 더 많은 장치를 더 적은 핀으로 연결할 수 있고, 큐별 벡터 분리와 코어별 분산으로 멀티코어 성능을 끌어올릴 수 있다. 특히 고속 I/O에서는 이 차이가 곧 tail latency와 CPU 효율 차이로 나타난다.

물론 한계도 있다. 메시지형 인터럽트는 설정 공간, 벡터 관리, 보안 remapping, 펌웨어 호환성까지 함께 다뤄야 하므로 시스템 통합 난이도가 높다. 또한 인터럽트 메시지는 어디까지나 제어 평면 알림이므로, 실제 데이터 이동과 큐 깊이 설계가 약하면 MSI만으로는 병목을 없앨 수 없다.

앞으로는 Interrupt Message Store (IMS)처럼 장치 내부 저장소에 더 많은 인터럽트 상태를 두는 방향과, CXL (Compute Express Link) 같은 차세대 패브릭에서 메시지형 이벤트를 더 세밀하게 다루는 방향이 중요해질 가능성이 크다. 결국 MSI는 "선이 없어졌다"보다, 인터럽트가 데이터 패브릭의 규칙 안으로 들어왔다는 관점으로 기억하는 것이 핵심이다.

  • 📢 섹션 요약 비유: MSI는 회사 연락 체계를 종이 호출 벨에서 메신저 기반 업무 시스템으로 바꾼 것과 같다. 연락 수단만 세련돼진 것이 아니라, 누가 어떤 일을 얼마나 정교하게 나눠 받을지까지 다시 설계할 수 있게 된다.

📌 관련 개념 맵

개념연결 포인트
INTxMSI가 해결하려 했던 핀 기반 공유 인터럽트 모델이다.
MSI-X큐별 독립 벡터와 코어 매핑을 가능하게 하는 확장형 메시지 인터럽트다.
APIC / GICMSI 메시지를 실제 CPU 예외로 바꾸는 수신 계층이다.
Direct Memory Access (DMA)완료 데이터와 인터럽트 알림의 순서를 함께 봐야 하는 핵심 경로다.
Interrupt Remapping메시지 목적지 검증과 가상화 격리를 담당한다.
NUMA Affinity어떤 코어가 어떤 MSI를 받는지가 실제 처리량과 지연을 좌우한다.

📈 관련 키워드 및 발전 흐름도

Legacy INTx 공유 인터럽트
        │
        ▼
MSI 기반 메시지형 인터럽트
        │
        ▼
MSI-X 기반 멀티큐 · 코어별 벡터 분리
        │
        ▼
Interrupt Remapping · IOMMU 기반 가상화/보안
        │
        ▼
IMS · CXL 패브릭 기반 확장형 메시지 이벤트

이 흐름은 인터럽트가 단순한 물리 신호에서 출발해, 멀티코어·가상화·차세대 패브릭까지 아우르는 메시지 기반 제어 기술로 확장되는 과정을 보여 준다.

👶 어린이를 위한 3줄 비유 설명

  1. 옛날에는 장치마다 "딩동" 하고 울리는 전용 벨이 따로 있었어요.
  2. MSI는 벨 대신 휴대폰 문자처럼 "몇 번 방으로 와 주세요"라고 메시지를 보내는 방식이에요.
  3. 그래서 친구가 많아져도 선을 잔뜩 깔 필요 없이, 필요한 사람에게 더 똑똑하게 알릴 수 있어요.