News Feed

“30줄 코드로 전력 30% 절감” 리눅스 커널 미세 수정으로 데이터센터 전력 최적화

컨텐츠 정보

  • 조회 729

본문

캐나다 워털루 대학 연구팀이 개발한 리눅스의 네트워크 트래픽 처리 방식 개선은 데이터센터 애플리케이션을 보다 효율적으로 실행하고 동시에 소비 전력도 절감할 수 있다.

워털루 대학 마틴 카스텐 교수와 클라우드 서비스 업체 패스트리(Fastly)의 저명한 엔지니어인 조 다마토가 약 30줄의 코드를 개발했다. 이 코드는 커널과 사용자 수준 네트워킹을 비교 조사한 카스텐과 피터 카이의 2023년 논문을 기반으로 하는데, 해당 논문은 리눅스 커널의 작은 변화만으로도 애플리케이션 효율성을 높일 수 있을 뿐 아니라 데이터센터 전력 사용량을 최대 30%까지 줄일 수 있다는 결론을 내렸다.

새로운 코드는 리눅스 재단의 승인을 받고 리눅스 커널 버전 6.13에 추가됐다. 이 코드는 새로운 NAPI 구성 매개변수인 irq_suspend_timeout을 추가해 IRQ 지연과 napi busy poll을 사용할 때 CPU 사용량과 네트워크 처리 효율의 균형을 유지하는 데 도움이 된다. 이를 통해 네트워크 트래픽에 따라 애플리케이션에 데이터를 전달하는 두 가지 모드를 자동으로 전환해 효율을 극대화할 수 있다.

폴링(Polling) 모드에서는 애플리케이션이 데이터를 요청하고 처리한 다음, 더 많은 데이터를 요청하는 과정을 계속 반복한다. 인터럽트(Interupt-driven) 모드에서는 애플리케이션이 대기 상태에 들어가 전력과 자원을 절약하다가, 네트워크 트래픽이 발생하면 다시 깨어나서 트래픽을 처리한다.

카스텐 교수는 네트워크월드에 보낸 이메일에서 “만약 여러 개의 작은 애플리케이션이 동시에 실행되는 구식 다중 사용자, 다중 프로세스 서버를 가지고 있다면, 새로운 메커니즘은 아무것도 하지 않는다. 그러나, 해가 될 것도 없다”라며, “하지만, 많은 데이터센터 시나리오에서 서버 머신은 소수의 전용 서버 애플리케이션을 실행한다. 이런 애플리케이션은 코어 세트를 ‘지배’하며, 일반적으로 NIC의 전송 대기열 세트에 연결된다. 이런 유형의 애플리케이션이 많은 네트워크 트래픽을 처리하는 경우, 새로운 메커니즘이 도움이 될 것이다. 거의 모든 프런트엔드 서버뿐만 아니라 프런트엔드에 데이터를 전달하는 백엔드 서버에도 해당된다”라고 설명했다.

네트워크 트래픽이 많을 때는 인터럽트를 비활성화하고 폴링 모드로 실행하는 것이 가장 효율적이고 성능이 가장 좋다. 그러나 네트워크 트래픽이 적을 때는 인터럽트 중심의 처리가 가장 효과적이다. 카스텐은 “폴링만 사용하는 구현은 트래픽이 적은 시간대에 많은 자원과 전력을 낭비한다. 인터럽트만 사용하는 구현은 트래픽이 많은 시간대에 비효율적이다. 새로운 메커니즘은 네트워크 트래픽을 자동으로 감지하고 폴링과 인터럽트 모드 사이를 전환해 두 가지 방식의 장점을 모두 취한다”라고 강조했다.

패스틀리의 다마토는 새로운 매개변수의 구현에 대해 “이 전달 모드는 바쁜 시간 동안 애플리케이션 처리를 방해하는 softIRQ 실행을 피할 수 있기 때문에 효율적이다. 유휴 시간 동안 CPU 사이클을 절약하기 위해 epoll_wait를 차단하는 데 사용할 수 있다. 바쁜 시간과 유휴 시간의 전환은 성능(처리량 및 지연 시간)이 완전히 바쁜 폴링에 매우 근접하고, CPU 사용률은 낮고 인터럽트 완화에 매우 근접하게 유지된다는 효과를 가져온다”고 설명했다.

기본적인 수준에서 이 기능을 활성화하려면 애플리케이션을 약간 조정하고 시스템 구성 변수를 설정해야 한다. 카스텐은 이 기술의 전력 절감 효과를 아직 정량화할 수는 없지만(인용된 30%는 최대치임), “트래픽이 적은 시간대에 고성능의 상시 폴링 구현과 비교할 때 가장 큰 전력 절감 효과를 얻을 수 있다”고 덧붙였다.
dl-itworldkorea@foundryco.com

관련자료

댓글 0
등록된 댓글이 없습니다.
Member Rank