Linux Interrupt란? 하드웨어 인터럽트와 소프트웨어 인터럽트의 동작 원리

Linux 시스템에서는 CPU가 단순히 프로그램만 실행하는 것이 아닙니다. 키보드를 누르거나, 네트워크 패킷이 도착하거나, 디스크 읽기가 완료되는 등 수많은 이벤트가 실시간으로 발생합니다.

만약 CPU가 이러한 이벤트를 계속 확인(Polling)해야 한다면 대부분의 시간을 확인 작업에만 소비하게 되어 성능이 크게 떨어집니다. 이를 해결하기 위해 사용하는 기술이 바로 Interrupt(인터럽트) 입니다.

인터럽트는 하드웨어나 소프트웨어가 CPU에게 “지금 처리해야 할 일이 발생했습니다.”라고 알려주는 신호입니다. Linux Kernel은 인터럽트를 이용하여 빠르고 효율적으로 시스템 자원을 관리합니다.

이번 글에서는 Interrupt의 개념과 동작 원리, 종류, 그리고 실무에서 확인하는 방법까지 자세히 알아보겠습니다.

Interrupt란?

Interrupt는 CPU가 현재 수행 중인 작업을 잠시 멈추고 우선 처리해야 하는 작업을 수행하도록 알리는 신호입니다.

간단한 흐름은 다음과 같습니다.

프로세스 실행

↓

인터럽트 발생

↓

현재 작업 저장

↓

Interrupt Handler 실행

↓

원래 작업 복귀

CPU는 인터럽트 처리가 끝나면 이전 작업을 이어서 계속 수행합니다.

Interrupt가 필요한 이유

예를 들어 사용자가 키보드를 눌렀다고 가정해 보겠습니다.

인터럽트가 없다면 CPU는 다음과 같이 계속 확인해야 합니다.

키보드 확인

↓

아무 입력 없음

↓

다시 확인

↓

아무 입력 없음

↓

계속 반복

이 방식은 CPU 자원을 매우 비효율적으로 사용합니다.

인터럽트를 사용하면 키보드 입력이 발생했을 때만 CPU가 처리하므로 훨씬 효율적입니다.

Interrupt 동작 과정

전체 과정은 다음과 같습니다.

프로그램 실행

↓

하드웨어 이벤트 발생

↓

Interrupt Controller

↓

CPU

↓

Kernel Interrupt Handler

↓

처리 완료

↓

원래 프로그램 실행

CPU는 인터럽트를 처리한 후 다시 원래 작업으로 돌아갑니다.

Hardware Interrupt

Hardware Interrupt는 실제 하드웨어 장치가 발생시키는 인터럽트입니다.

대표적인 예는 다음과 같습니다.

  • 키보드 입력
  • 마우스 이동
  • 디스크 읽기 완료
  • SSD 완료 알림
  • 네트워크 패킷 수신
  • USB 연결
  • 타이머

이러한 이벤트가 발생하면 장치가 CPU에게 즉시 신호를 보냅니다.

Software Interrupt

Software Interrupt는 소프트웨어가 의도적으로 발생시키는 인터럽트입니다.

대표적인 사례는 다음과 같습니다.

  • System Call
  • Exception
  • Trap
  • Breakpoint
  • Debug

예를 들어 read() System Call을 실행하면 Kernel로 진입하기 위해 소프트웨어 인터럽트 또는 이에 해당하는 CPU 메커니즘을 사용합니다.

Interrupt Handler

Interrupt가 발생하면 Kernel은 Interrupt Handler(인터럽트 핸들러) 를 실행합니다.

Interrupt Handler는 다음과 같은 작업을 수행합니다.

  • 이벤트 확인
  • 장치 상태 확인
  • 데이터 복사
  • 필요한 후속 작업 예약
  • 인터럽트 종료

가능한 한 짧은 시간 안에 실행되도록 설계되어 있습니다.

Interrupt와 Polling의 차이

항목InterruptPolling
CPU 사용필요 시만계속 확인
응답 속도빠름확인 주기에 따라 달라짐
CPU 효율높음낮음
사용 환경대부분의 장치일부 특수 환경

현대 Linux 시스템에서는 대부분 Interrupt 방식을 사용합니다.

현재 Interrupt 확인하기

Linux에서는 /proc/interrupts 파일을 통해 확인할 수 있습니다.

cat /proc/interrupts

예시

CPU0       CPU1

0:      1234      1250   timer

24:      4567      7890   eth0

32:      8912      7645   nvme0

각 CPU가 처리한 Interrupt 횟수를 확인할 수 있습니다.

특정 장치 확인

네트워크 Interrupt 확인

grep eth /proc/interrupts

NVMe SSD 확인

grep nvme /proc/interrupts

USB 확인

grep usb /proc/interrupts

특정 장치의 인터럽트 처리 현황을 쉽게 분석할 수 있습니다.

Interrupt가 많으면 생기는 문제

다음과 같은 문제가 발생할 수 있습니다.

  • CPU 사용률 증가
  • 네트워크 지연
  • 디스크 응답 속도 저하
  • Context Switch 증가
  • Throughput 감소

특히 초당 수백만 개의 네트워크 패킷이 발생하는 서버에서는 Interrupt 튜닝이 매우 중요합니다.

인터럽트 분산(IRQ Balance)

멀티코어 서버에서는 특정 CPU에 인터럽트가 집중되지 않도록 분산합니다.

확인

systemctl status irqbalance

실행

sudo systemctl start irqbalance

자동 실행

sudo systemctl enable irqbalance

irqbalance는 인터럽트를 여러 CPU 코어에 균등하게 분배하여 성능을 향상시키는 서비스입니다.

실무에서 자주 사용하는 명령어

Interrupt 확인

cat /proc/interrupts

IRQ Balance 확인

systemctl status irqbalance

CPU 정보

lscpu

Kernel 로그

dmesg

실시간 CPU 상태

mpstat -P ALL 1

네트워크 인터럽트

grep eth /proc/interrupts

자주 묻는 질문

Interrupt와 Exception은 같은 것인가요?

아닙니다. Interrupt는 주로 하드웨어나 외부 이벤트에 의해 발생하며, Exception은 프로그램 실행 중 발생하는 오류나 특수 상황(예: 0으로 나누기, 페이지 폴트)으로 인해 CPU가 처리하는 이벤트입니다.

/proc/interrupts의 숫자는 무엇을 의미하나요?

각 CPU 코어가 해당 인터럽트를 몇 번 처리했는지를 나타냅니다. 특정 CPU에 값이 지나치게 집중되어 있다면 인터럽트 부하가 한 코어에 몰렸을 가능성이 있습니다.

irqbalance는 모든 서버에서 필요한가요?

대부분의 멀티코어 서버에서는 성능 향상에 도움이 됩니다. 다만 실시간 시스템이나 특정 CPU에 인터럽트를 고정해야 하는 환경에서는 비활성화하거나 수동으로 IRQ를 설정하는 경우도 있습니다.

마무리

Interrupt는 Linux Kernel이 하드웨어와 효율적으로 통신하기 위한 핵심 메커니즘입니다. 키보드 입력부터 네트워크 패킷 처리, 디스크 I/O 완료까지 대부분의 이벤트는 인터럽트를 통해 CPU에 전달됩니다. /proc/interruptsirqbalance를 이해하면 시스템 부하 분석과 성능 최적화, 네트워크 및 저장장치 장애 진단에 큰 도움이 됩니다.

댓글 남기기