같은 프로세서 수를 가진 두 서버라도 처리량은 크게 다를 수 있는데, 중요한 숫자는 활성 데이터 경로가 실제로 몇 개의 코어를 쓸 수 있는지이기 때문이다. 한 클라이언트의 패킷을 처리하는 단일 사용자 공간 데몬은 코어 하나로 제한되지만, 커널로 오프로드된 경로는 그 작업을 분산할 수 있다. 어느 설명도 특정 머신이 당신의 트래픽에 무엇을 할지는 말해 주지 않으므로 측정이 코어 수 세기보다 앞선다.

아래 비교는 패킷이 어디서 처리되는지에 관한 것이지, 어떤 제품이 추상적으로 더 빠른지에 관한 것이 아니다. 서로 다른 질문이고 답도 다르다.

사용자 공간 경로에서는 흐름마다 코어 하나

전통적인 Community OpenVPN 인스턴스에서 데이터 채널은 사용자 공간에서 처리되며, 바쁜 연결이 프로세서 하나를 붙잡아도 머신 전체 사용률은 눈에 띄지 않는다. 그래서 이미 하나의 흐름으로 포화된 호스트에 코어를 더해도 아무것도 바뀌지 않는다. 스케줄러가 그 작업을 나눌 방법이 없기 때문이다. 클라이언트마다 프로세스 하나라는 구조는 전체 코어 수와 무관하게 한 클라이언트의 전송을 코어 하나의 용량으로 묶으므로, 시험 중에는 총계가 아니라 코어별 사용률을 읽어야 한다.

한 호스트에서 여러 서버 인스턴스를 실행하면 별개의 클라이언트가 프로세스들 사이로 분산된다. 기존 연결이 병렬화되는 것은 아니며, 별도의 풀과 리스너, 라우팅 결정이 필요하다.

다른 경로: 커널 안의 패킷

데이터 채널 오프로드 는 지원되는 패킷 처리와 암호화를 커널로 옮기며, 그곳에서 작업은 여러 코어를 쓸 수 있다. 이는 용량에 대한 질문을 코어 하나에서 머신 전체로 바꾸지만, 호환되는 커널 모듈과 적격한 데이터 암호, 오프로드가 제외하는 기능이 없는 구성 등 구현이 지원하는 구성에만 해당한다. 모듈을 설치한 것과 사용하는 것은 다르므로 연결 자체의 로그나 상태 출력에서 활성 모드를 확인해야 한다. 버전 배너는 무엇이 가능한지를 보여 줄 뿐, 무엇이 실행 중인지는 보여 주지 않는다.

오프로드는 인증이나 제어 채널을 없애지 않으며, 모든 배포를 다중 코어로 만들지도 않는다. 호환되는 데이터 경로의 국소 가속이며, 요구 사항은 플랫폼과 버전에 따라 다르다.

비교가 실제로 결정하는 것

실제 선택은 흐름당 상한을 받아들이거나, 클라이언트를 인스턴스들로 분산하거나, 지원되는 오프로드 구성으로 옮기는 것 사이에 있다. 각각 다른 문제를 다루며, 잘못 고르면 숫자를 움직이지 못한 채 비용만 든다. 중요한 시험은 서비스가 쓰이는 방식의 형태를 한 시험이다.

클라이언트 하나에 전송 하나, 클라이언트 하나에 여러 흐름, 여러 클라이언트를 동시에 두는 세 형태를 측정하라. 세 번째의 높은 합계가 단일 다운로드가 그 수치에 도달함을 증명하지는 않으며, 느린 단일 전송이 서버의 총 용량이 바닥났음을 증명하지도 않는다. 결과는 서로 다른 질문에 답하며 둘 다 남겨 둘 가치가 있다.

한 클라이언트 내부의 동시성이 도움이 되는지는 가운데 형태만 알려 주며, 그것은 보통 서버가 아니라 전송과 경로의 성질이다. 단일 애플리케이션이 보게 될 상한은 첫 번째 형태만 알려 준다. 비교가 의미를 가지려면 실행 사이에 작업 부하를 동일하게 유지하라.

숫자가 의미를 갖도록 측정하기

서버와 클라이언트 버전, 활성 데이터 경로, 협상된 데이터 암호, 전송 방향, 패킷 크기, 흐름 수와 시간을 기록하라. 코어별 활동과 양 끝의 패킷 및 큐 드롭을 살펴야 하는데, 클라이언트 자체의 인터페이스나 공급자 네트워크, 목적지 서비스가 먼저 한계가 될 수 있기 때문이다. 암호, 압축, MTU, 오프로드를 한꺼번에 바꾼 실행은 어느 것이 중요했는지 알려 줄 수 없으므로 한 번에 하나의 변수만 바꿔라. 아무도 돌리지 않을 실험실 설정은 거의 아무것도 증명하지 못하므로, 시험 중에는 실제로 배포하려는 접근 정책을 유지하라.

그다음 제어 채널과 재협상, 그리고 호스트에서 도는 나머지 모든 것을 위한 여유를 남겨라.

다른 사람의 하드웨어에서 외삽한 속도가 아니라, 의도한 동시성 아래에서 그 구성이 실제로 유지한 수치를 보고하라. 시험 조건이 붙은 숫자는 쓸모가 있지만, 조건 없는 약속은 나중에 인용되어 되돌아오는 추측일 뿐이다.

관련 글