내 서버가 새로운 들어오는 TCP 연결을 수락 할 수있는 속도는 Xen에서 실제로 나쁩니다. 베어 메탈 하드웨어에 대한 동일한 테스트는 3-5 배의 속도 향상을 보여줍니다.
- Xen에서 어떻게 그렇게 나쁘게됩니까?
- 새로운 TCP 연결 성능을 향상시키기 위해 Xen을 조정할 수 있습니까?
- 이런 종류의 사용 사례에 더 적합한 다른 가상화 플랫폼이 있습니까?
배경
최근에 Xen에서 실행되는 사내 개발 Java 서버의 성능 병목 현상을 연구하고 있습니다. 서버는 HTTP를 말하고 간단한 TCP 연결 / 요청 / 응답 / 연결 끊기 호출에 응답합니다.
그러나 서버에 트래픽로드를 전송하는 동안에도 초당 최대 7,000 개 이상의 TCP 연결 (8 코어 EC2 인스턴스, Xen을 실행하는 c1.xlarge)을 수락 할 수 없습니다. 테스트 중에 서버는 하나의 코어 (필수 CPU 0은 아님)가 80 %를 초과하여로드되는 반면 다른 코어는 거의 유휴 상태로 유지되는 이상한 동작을 나타냅니다. 이것은 문제가 커널 / 기본 가상화와 관련이 있다고 생각하게합니다.
베어 메탈 비 가상화 플랫폼에서 동일한 시나리오를 테스트 할 때 35,000 / 초를 초과하는 TCP accept () 속도를 보여주는 테스트 결과를 얻습니다. 이것은 모든 코어가 거의 포화 상태 인 Ubuntu를 실행하는 Core i5 4 코어 시스템에서 발생합니다. 나에게 그런 종류의 그림은 옳은 것 같습니다.
Xen 인스턴스에서 다시 sysctl.conf에있는 거의 모든 설정을 활성화 / 조정하려고했습니다. 수신 패킷 조정 활성화 및 수신 흐름 조정 및 스레드 / 프로세스를 CPU에 고정하지만 명백한 이득은 없습니다.
가상화를 실행할 때 성능 저하가 예상된다는 것을 알고 있습니다. 그러나이 정도로? 속도가 느리고 베어 메탈 서버보다 성능이 우수합니다. 5 배 8 코어?
- 이것이 Xen의 예상되는 동작입니까?
- 새로운 TCP 연결 성능을 향상시키기 위해 Xen을 조정할 수 있습니까?
- 이런 종류의 사용 사례에 더 적합한 다른 가상화 플랫폼이 있습니까?
이 동작을 재현
이것을 더 조사하고 문제를 지적했을 때 netperf 성능 테스트 도구가 내가 겪고있는 유사한 시나리오를 시뮬레이션 할 수 있음을 알았습니다. netperf의 TCP_CRR 테스트를 사용하여 다른 서버 (가상 및 비가 상 서버)에서 다양한 보고서를 수집했습니다. 일부 조사 결과에 기여하거나 현재 보고서를 찾으려면 https://gist.github.com/985475 를 참조 하십시오.
이 문제가 잘못 작성된 소프트웨어로 인한 것이 아니라는 것을 어떻게 알 수 있습니까?
- 이 서버는 베어 메탈 하드웨어에서 테스트되었으며 사용 가능한 모든 코어를 거의 포화시킵니다.
- 연결 유지 TCP 연결을 사용하면 문제가 해결됩니다.
이것이 왜 중요한가?
에서 ESN (고용주) 난의 프로젝트 리더입니다 Beaconpush , 자바로 작성된 혜성 / 웹 소켓 서버입니다. 성능이 뛰어나고 최적의 조건에서 대역폭을 거의 포화시킬 수는 있지만 여전히 새로운 TCP 연결 속도에 제한이 있습니다. 즉, 사용자가 매우 자주 출입하는 큰 사용자 이탈이 발생하면 많은 TCP 연결을 설정 / 해제해야합니다. 우리는 가능한 한 오랫동안 연결을 유지하기 위해 노력합니다. 그러나 결국 accept () 성능은 코어가 회전하는 것을 막아 주므로 우리는 그것을 좋아하지 않습니다.
업데이트 1
누군가이 질문을 Hacker News에 게시했지만 거기에 몇 가지 질문 / 답변도 있습니다. 그러나 나는 내가 따라갈 때 찾은 정보 로이 질문을 최신 상태로 유지하려고 노력할 것입니다.
내가 테스트 한 하드웨어 / 플랫폼 :
- 인스턴스 유형이 c1.xlarge (8 코어, 7GB RAM) 및 cc1.4xlarge (2x Intel Xeon X5570, 23GB RAM)가있는 EC2. 사용 된 AMI는 각각 ami-08f40561 및 ami-1cad5275입니다. 누군가는 "보안 그룹"(즉, EC2 방화벽)도 영향을 미칠 수 있다고 지적했습니다. 그러나이 테스트 시나리오에서는 이와 같은 외부 요인을 제거하기 위해 localhost에서만 시도했습니다. 내가 들었던 또 다른 소문은 EC2 인스턴스가 100k PPS 이상을 푸시 할 수 없다는 것입니다.
- Xen을 실행하는 두 개의 개인 가상화 서버. 하나는 테스트 전에 무부하 였지만 차이는 없었습니다.
- Rackspace의 전용 Xen 서버. 같은 결과에 대해.
이 테스트를 다시 실행하고 https://gist.github.com/985475 에서 보고서를 작성하는 과정에 있습니다. 도움을 받으려면 숫자를 기부하십시오. 그것은 간단합니다!
(행동 계획은 별도의 통합 된 답변으로 이동되었습니다)