Home 기술 문서 대규모 서버 최적화: 패킷 손실 제거 및 용량 향상
Applications

대규모 서버 최적화: 패킷 손실 제거 및 용량 향상

About The Author

Outline

Verizon Media의 현재 Edgio에서는 고객과 고객의 이익을 위해 당사 기술의 성능을 개선하는 작업이 진행 중입니다. 예를 들어, 지난 2년 동안 성능 및 커널 엔지니어들은 거의 모든 패킷 드롭을 제거하고(98% 이상 제거), 에지 서버의 성능 상태 검사를 50% 개선하고 서버 용량을 최대 40% 증가시켰습니다.

또한 사용자 경험을 개선하기 위해 네트워크 자동화 및 유기적 네트워크 확장(현재 250Tbps 이상)과 함께 위의 기능을 결합했습니다. 성능을 신중하게 조정하는 것은 급속히 변화하고 때로는 예측할 수 없는 네트워크 급증을 지원하는 데 중요한 역할을 했습니다. 수백만 개의 게임 콘솔에 대한 소프트웨어 업데이트, 주요 스포츠 이벤트에 대한 라이브 비디오 스트림, 그리고 멀티 CDN 부하 분산 장치가 부하를 네트워크로 이동하는 경우.

규모에 맞게 품질을 유지하려면 하위 계층, CPU 및 NIC, OS 및 애플리케이션에 이르기까지 Edgio Media Platform 기술 스택의 모든 부분에서 성능을 최적화하는 작업이 필요합니다. 궁극적으로, 우리의 목표는 항상 동일합니다 : 뛰어난 성능. 이를 위해 당사는 측정 가능한 성능 변화에 의존하여 의사 결정을 검증하는 데이터 기반 분석을 수행합니다.

CPU 캐시 최적화

우리는 일반적으로 32 ~ 40개의 코어로 구성된 Broadwell 및 Haswell 칩셋을 비롯하여 전 세계적으로 20,000대의 서버를 운영하고 있습니다. 지난 3년 동안에만 12,000대의 서버를 추가했습니다. 그러나 대부분의 서버는 즉시 워크로드에 맞게 확장할 수 있도록 최적화되어 있지 않습니다. 단순히 서버를 더 추가한다고 해서 운영의 효율성이 높아지는 것은 아니며, 추가적인 문제가 발생할 수 있습니다. 효과적인 확장에는 기존 부품을 신중하게 최적화해야 합니다. 기본 구성보다 두 번 또는 세 번(또는 그 이상) 요청을 처리할 수 있도록 한 서버를 최적화할 수 있으면 네트워크의 전체 성능에 큰 차이를 가져올 수 있습니다.

초기 스누프에서 홈 스누프로 전환

최신 CPU는 로컬 CPU 캐시가 메모리와 일관성을 유지하도록 스누프 프로토콜을 사용합니다. 이렇게 하면 캐시가 모든 CPU에서 변수에 대한 수정 사항을 수신하고 그에 따라 이러한 변수의 버전을 업데이트할 수 있습니다. 놀랍지 않게도, 사용되는 특정 기술은 메모리 성능에 큰 영향을 줄 수 있습니다.

기본적으로 하드웨어 공급업체는 Early Snoop이라는 프로토콜을 사용합니다. 모든 코어가 캐시 정합성 요청을 동시에 수행하고 브로드캐스트를 보낼 수 있으므로 캐시 정합성 문제를 해결하기 위한 지연 시간이 짧습니다. 최대 로드 시나리오 동안 시스템에서 많은 양의 디스크와 NIC 작업을 동시에 생성하는 것으로 나타났습니다. 이러한 활동은 높은 스누프 브로드캐스트를 발생시켜 통신 병목 현상을 초래합니다. 이로 인해 입출력 디바이스가 느려지고 결국 처리가 완전히 중지될 수 있습니다.

스누프 요청을 통합하는 접근 방식인 홈 스누프 모드로 전환함으로써 브로드캐스트 트래픽이 크게 감소했습니다. 프로세서의 QPI(Quick Path Interconnect)는 디스크와 네트워크 IO 작업이 동시에 진행되는 동안 더 이상 고갈되지 않습니다. 또한 초기 Snoop에서 보았던 패킷 드롭의 수가 크게 줄어들었습니다.

스누프 프로토콜 변경은 단순히 BIOS 설정 변경에 따라 달라집니다. 그러나 고객을 방해하지 않고 20,000대의 서버를 재부팅하려면 자동화가 필요합니다. StackStorm 기반 IT 자동화 플랫폼인 Crayfish 덕분에 이러한 대규모 배포 변경이 프로덕션 환경에서 부분적으로 작동할 수 있습니다.

예기치 않은 페일오버 이벤트

홈 스누프로의 전환을 테스트하는 동안 장애 조치가 발생했습니다. 멀티 CDN을 배포한 당사의 최대 미디어 고객 중 한 명이 다른 벤더와 문제를 겪고 트래픽의 상당 부분을 CDN으로 이동했습니다. 이것은 매우 영향력있는 대규모 홈 스누프 개선을 테스트 할 수있는 기회를 제공했습니다.

위의 그림은 변경의 효과를 보여줍니다. 초기 Snoop을 사용하는 그룹은 13.75배(서버당 하루 55K 패킷 드롭) 증가한 반면, 홈 Snoop으로 전환한 그룹은 4.23배(컴퓨터당 하루 27K 패킷 드롭) 증가에 그쳤습니다. Home Snoop은 장애 조치 이벤트 중에 즉시 그 가치를 입증했습니다.

네트워크 인터페이스 최적화 및 드라이버 튜닝

중요한 성능 튜닝의 또 다른 세트는 네트워크 인터페이스와 드라이버를 포함했다. 여기서는 일반적으로 버스트 트래픽에서 발생하는 패킷 드롭을 줄이는 데 중점을 두었습니다. 대규모 이벤트 중에는 인바운드 트래픽이 너무 많아 NIC가 따라잡을 수 없었으며 예상보다 빨리 패킷 손실이 발생했습니다. 그 이유를 조사하면서 대기열 수, 대기열 크기, 인터럽트 스케줄링 등 NIC 자체에서 조정이 필요한 몇 가지 매개 변수를 발견했습니다. 특정 워크로드 및 하드웨어 구성에 맞게 이러한 사양을 최적화하기 위해 인바운드 대기열을 더 길게 만들고 전체 수를 줄이며 NUMA 노드 전체에 인터럽트 균형을 조정하여 RSS(Receive Side Scaling)를 조정하는 데 주력했습니다.

위의 그래프는 북미에서 실행한 테스트를 보여 주며, 각 POP는 컨트롤(즉, 튜닝되지 않은) 그룹과 테스트(즉, 튜닝된) 그룹으로 나뉩니다. 여기서 우리는 일주일 동안 매일 합산 된 방울의 수를 제시합니다. 튜닝 후 테스트 그룹은 제어 그룹보다 패킷 드롭이 약 95% 적어 훨씬 많은 요청을 처리할 수 있었습니다. 이는 또한 서지 중에 네트워크 상태를 수동으로 관리하는 데 필요한 작업이 줄어들어 엔지니어가 다른 영역에 집중할 수 있게 됨을 의미합니다.

CPU 스케줄링 튜닝

NIC 및 드라이버 레벨 튜닝은 우리가 제공할 수 있는 총 용량을 향상시키는 데 중점을 두었지만, CPU 스케줄링 튜닝은 콘텐츠를 얼마나 일관되게 제공할 수 있는지를 향상시키는 데 중점을 두었습니다.

이러한 튜닝이 없으면 인바운드 및 아웃바운드 메시지가 리소스를 확보하기 위해 경쟁해야 합니다. 근본 원인을 조사하기 시작했을 때 리소스에 대한 경합은 커널이 이러한 메시지의 처리를 예약하는 방식에서 비롯된 것임을 발견했습니다. 이는 해당 CPU가 포화될 때까지 트래픽이 가장 많은 동안에는 로드가 마이그레이션되지 않았음을 의미합니다. 이 문제를 해결하기 위해 웹 서버 프로세스의 CPU 선호도를 설정하여 들어오는 네트워크 트래픽을 처리하는 전용 CPU를 제외시킵니다.

위의 그래프는 3월 21-22일에 CDN 전역에서 CPU 스케줄링 튜닝을 활성화할 때의 영향을 보여줍니다. 서버의 상대적 응답 시간을 나타내는 복합 지표인 성능 상태 점검 메트릭의 95번째 백분위수 및 중간값을 기준으로 영향을 평가합니다. 예상대로 트래픽이 적은 계곡은 크게 감소하지 않았지만, 피크는 들어오는 트래픽과 나가는 트래픽 간의 경합을 크게 줄였습니다. 이는 특히 피크 부하에서 이상치와 중앙값 모두에 큰 개선을 가져다 줍니다. 이제 비디오 스트림의 리버퍼나 모든 사용자에 대한 서버의 전반적인 응답성과 같은 높은 이상값 동작과 관련된 트래픽 급증을 보다 효과적으로 처리하고 문제를 해결할 수 있습니다.

커널 성능 업데이트

기술 스택의 상위 레이어를 최적화하는 것은 하위 레이어 요소를 조정하는 것만큼 중요합니다. 최근 OS를 업그레이드하는 과정에서 Linux 커널 커뮤니티의 업스트림 엔지니어링 작업을 활용할 수 있도록 Linux 커널도 업그레이드했습니다. 새로운 커널은 이전 버전에 배포된 것보다 약 4년 동안 개발되었는데, 여기에는 메모리 관리 시스템의 개선이 포함되며, epoll API 및 소켓 샤딩을 사용할 때 블로킹 페이지 할당을 줄이고 로드 분산 및 성능을 향상시키는 것이 포함됩니다.

위의 그래프에서 11월 말에서 1월 초까지 업그레이드 프로세스가 99번째 백분위수 성능 상태 점검의 감소로 인한 영향을 확인할 수 있습니다. 기본 커널 개선은 모든 웹 서버 요청 프로세서에 걸쳐 부하 분산을 더욱 고르게 만들었습니다. 이로 인해 이러한 이상치가 크게 감소하여 모든 고객에 대한 요청이 더욱 안정적으로 이루어졌습니다.

성능 튜닝은 상당한 영향을 미칩니다.

지난 2년 동안 성능 및 커널 엔지니어링에서 배포한 광범위한 시스템 튜닝으로 인해 거의 모든 패킷 드롭이 제거되었으며(98% 이상 제거됨) 에지 서버의 성능 상태 검사가 절반으로 줄어들었습니다. 서버 용량이 10–40% 증가하여(정확한 양은 고객 프로필과 이벤트에 따라 다름) 더 많은 트래픽을 더 빠르게 전달할 수 있습니다. 이상치 행동이 현저히 개선되어 보다 일관된 경험을 할 수 있게 되었으며, 특히 피크 부하에서 중앙값이 개선되었습니다. 요약하자면, 전체 기술 스택에 대한 성능 튜닝을 통해 예상치 못한 트래픽 급증(높은 기대를 받고 있는 게임 콘솔 업데이트나 인기 있는 스트리밍 비디오 라이브 이벤트)을 보다 효과적으로 처리하고 모든 사용자에게 보다 일관된 성능을 제공할 수 있게 되었습니다.