nftlb 벤치 마크 및 성능 키

게시자 Zevenet | 28 년 2018 월 XNUMX 일

벤치 마크

6 월 2018 일자의 최신 벤치 마크는 iptables 대신 데이터 경로로 nftables를 사용하여 성능이 크게 향상되었음을 보여줍니다.

2 클라이언트가 HTTP로드 스트레스 툴을 실행하는 테스트 베드 환경에서 1로드 밸런서와 3 백엔드가 HTTP 터미네이터로 약 210 바이트의 응답을 제공하면 다음과 같은 벤치 마크를 얻습니다. 초당 HTTP 흐름:

iptables DNAT		256.864,07 RPS / cpu
iptables SNAT		262.088,94 RPS / cpu

nftables DNAT		560.976,44 RPS / cpu
nftables SNAT		608.941,57 RPS / cpu
nftables DSR		7.302.517,31 RPS / cpu

위의 수치는 확장 성 추가 코어가 거의 선형이기 때문에 물리적 CPU 단위로 표시됩니다. 이러한 벤치 마크는 3 백엔드만으로 수행되었지만, 더 많은 백엔드를 추가하는 동안 iptables 성능이 크게 떨어집니다.그들은 더 많은 순차적 인 규칙을 내포하고 있기 때문이다.

이러한 벤치 마크는 리트 폴린이 비활성화 된 상태에서 수행되었지만 (Spectre / Meltdown 완화 없음) 일단 활성화되면 iptables 및 nftables 케이스 모두에 대해 conntrack이 활성화 된 NAT 케이스에서 감지 된 성능 패널티는 첫 번째 케이스의 경우 훨씬 더 나쁩니다.

iptables: 40.77% CPU penalty
nftables: 17.27% CPU penalty

성능 키

retpoline 패널티는 iptables에서 간접 호출보다 훨씬 많은 간접 호출을 사용하기 때문에 설명됩니다. 그러나 아래에 설명 할 성능 키가 더 있습니다.

규칙 최적화

주요 성능 핵심은 규칙 최적화입니다. iptables에서 순차 규칙 처리를 줄이면 ipset을 사용하면 성능이 향상된다는 것이 이미 알려져있었습니다.

nftlb에서 다른 목적으로 사용하기 위해 확장 할 수는 있지만 세트와 맵의 사용을 기본적으로 지원하는 표현 언어를 사용하여 가상 서비스 당 기본 규칙을 설정합니다. 생성 된 규칙을 아래에서 확인하십시오. 01 백엔드가있는 vs2이라는 가상 tcp 서비스:

table ip nftlb {
    map tcp-services {
        type ipv4_addr . inet_service : verdict
        elements = { 192.168.0.100 . http : goto vs01 }
    }

    chain prerouting {
        type nat hook prerouting priority 0; policy accept;
        ip daddr . tcp dport vmap @tcp-services
    }

    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
    }

    chain vs01 {
        dnat to jhash ip saddr mod 2 map { 0 : 192.168.1.10, 1 : 192.168.1.11 }
    }
}

새로운 백엔드를 추가해야한다면, 새로운 규칙을 포함하지 않고 나머지 가상 서비스에 영향을주지 않고 관련 체인을 가상 서비스로 다시 생성하면됩니다.

    chain vs01 {
        dnat to jhash ip saddr mod 3 map { 0 : 192.168.1.10, 1 : 192.168.1.11, 2 : 192.168.1.12 }
    }

그런 다음 새로운 가상 서비스 vs02 새 규칙을 추가하거나 다른 가상 서비스에 영향을주지 않고 규칙 세트가 아래와 같이됩니다.

table ip nftlb {
    map tcp-services {
        type ipv4_addr . inet_service : verdict
        elements = { 192.168.0.100 . http : goto vs01,
                     192.168.0.102 . https : goto vs02 }
    }

    chain prerouting {
        type nat hook prerouting priority 0; policy accept;
        ip daddr . tcp dport vmap @tcp-services
    }

    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
    }

    chain vs01 {
        dnat to jhash ip saddr mod 3 map { 0 : 192.168.1.10, 1 : 192.168.1.11, 2 : 192.168.1.12 }
    }

    chain vs02 {
        dnat to jhash ip saddr mod 2 map { 0 : 192.168.2.10, 1 : 192.168.2.11 }
    }
}

초기 갈고리

nftables는 초기의 사용을 허용합니다. 진입 후크 DSR 시나리오 중에 nftlb에서 사용됩니다.

또한이 초기 훅은 패킷을 삭제하는 경우 성능을 향상시키는 필터링 목적으로 사용될 수 있습니다. 다음은 iptables 및 nftables의 가장 초기 단계 인 초당 패킷 수를 나타낸 것입니다.

iptables prerouting raw drop: 38.949.054,35 PPS
nftables ingress drop: 45.743.628,64 PPS

가속 기법

nftables가 패킷 경로 변경에 사용할 수있는 빠른 경로와 경량 기술을 이미 지원하므로 최적화를위한 여지는 여전히 많습니다. 예를 들면 다음과 같습니다.

유동성. Conntrack의 빠른 경로는 이미 느린 경로를 거치지 않고 진입 단계에 대한 연결을 이미 설정했습니다. 여기에 대한 자세한 정보.

상태 비 저장 NAT. 일부로드 균형 조정의 경우 연결 추적 및 수신 단계에서 스테이트리스 NAT를 수행하여 NAT 시나리오에 적용되는 모든 성능을 얻을 수 있습니다.

공유 :

GNU Free Documentation License의 조건에 따른 문서.

이 글이 도움 되었나요?

관련 기사