개요

개발된 네트워크 기능을 실험할 일이 있었는데, Kernel 상단의 User 단에서 실행되어서 그런지 성능 측정 실험마다 RTT(Round Trip Time)의 편차 좀 났었다.

 

CPU Core의 개수(1, 2, 4, 8, ...)에 따라 편차가 존재할 때가 있었고 존재하지 않을 때가 있었는데, Core 수가 적을 때는 편차가 거의 나지 않았으며 반대로 Core 수가 많을 때는 편차가 자주 발생하였다.

 

특정 CPU Core를 끄고 키는 것은 아래 명령어를 따랐다.

# CPU Core On
$ sudo echo 1 > /sys/devices/system/cpu/cpu[core_idx]/online

# CPU Core Off
$ sudo echo 0 > /sys/devices/system/cpu/cpu[core_idx]/online

 

본론으로 돌아와, 네트워크 실험 시 편차가 발생하는 문제는 "Interrupt가 여러 CPU Core 들로 밸런싱돼서 발생하는 문제일 수도 있다"는 조언을 팀장님으로부터 전해들었었다. 그리고 관련된 내용으로 리눅스 irqbalance라는 것을 말씀해주셨다.

 

내가 실험했던 결과를 바탕으로 생각해보면, CPU Core 수가 적을 때는 편차가 거의 나지 않았었고 반대로 Core 수가 많을 때는 편차가 자주 발생했었으니 팀장님의 조언대로 Interrupt가 여러 CPU Core 들로 밸런싱되어 발생하는 문제일 수도 있겠구나 라고 생각할 수 있었다.

 

따라서, 본 페이지에서는 Interrupt를 여러 CPU Core로 분산시켜주는 서비스 데몬인 irqbalance에 대해 간략히 설명하고 이것을 리눅스 시스템에서 어떻게 비활성화 할 수 있는지에 대해 설명한다.

 

추가적인 실험을 통해 irqbalance가 직접적인 문제인지는 다시 확인해보아야 한다.

추후 실험을 통해 편차가 줄었는지 혹은 없어졌는지를 확인 후 본 페이지의 자료를 보충하려 한다.

(나의 블로그는 기록 저장용ㅎㅎ)

 

실험을 진행해보니, 맞았다. irqbalance로 인해 성능 실험 때 마다 편차가 발생했었다.

irqbalance를 끄고 실험을 진행하니 성능 편차가 발생하지 않았다.

 

irqbalance란?

irqbalance 서비스 데몬은 기본적으로 활성화되어 있으며, 주기적으로 Interrupt를 여러 CPU Core들로 정해진 초 간격으로 스케줄링한다.

레퍼런스에는 10초마다 Interrupt를 스케줄링한다고 되어 있긴 하다. (레드햇 리눅스)

 

또한, irqbalance 데몬이 실행되지 않는 리눅스 시스템의 경우에는 일반적으로 0번 CPU Core에서 대부분의 Interrupt가 처리된다. 이로 인해 네트워크 및 스토리지 성능, 패킷 손실 및 기타 문제가 발생할 수 있다.

 

하지만, 특정 기능만을 실험하는 특수한 케이스 같은 경우에는 irqbalance가 여러 Core들로 Interrupt를 밸런싱하는 것이 문제가 될 수 있다.

필자의 경우에는 많은 CPU Core가 활성화된 시스템에서 RTT 편차가 발생하는 문제

 

이러한 irqbalancesystemctl이라는 데몬 서비스를 제어하는 리눅스 명령을 통해 활성화 및 비활성화 시킬 수 있다. 이에 대한 내용은 아래 섹션에서 설명한다.

 

irqbalance 데몬 활성화/비활성화

# irqbalance 데몬 상태 확인
$ sudo systemctl status irqbalance

# irqbalance 데몬 비활성화
$ sudo systemctl disable irqbalance
$ sudo systemctl stop irqbalance

# irqbalance 데몬 활성화
$ sudo systemctl enable --now irqbalance

 

리눅스 시스템의 Interrupt 밸런싱하는 방법에는 여러 가지가 있으니, 아래 레퍼런스를 참고하면 된다.

 

References

https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/8/html/monitoring_and_managing_system_status_and_performance/tuning-irq-balancing_tuning-the-network-performance

https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux_for_real_time/9/html/optimizing_rhel_9_for_real_time_for_low_latency_operation/proc_disabling-the-irqbalance-daemon_assembly_binding-interrupts-and-processes

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기