목차/11. HyperFlow

11HyperFlowHyperFlow

HyperFlow(R81.20 이상)는 대용량 연속 연결(elephant flow)을 여러 CPU 코어로 나눠 병렬로 검사 하는 기술입니다. 한 연결을 코어 하나에만 묶어 처리하던 기존 CoreXL 방식의 병목을 풀어, Threat Prevention 같은 무거운 검사를 켜 둔 상태에서도 대용량 흐름의 처리량과 응답 시간을 끌어올립니다. 이 장은 무엇을 푸는 기술인지, 켜기 전 무엇이 필요한지, 어떤 명령으로 다루는지, CPView로 어떻게 들여다보는지, 어떤 한계와 문제 해결 방법이 있는지 를 빠짐없이 풀어 둡니다. 더 자세한 내용과 지원 모델 목록은 모두 sk178070에 정리되어 있습니다.

개요 — Elephant flow 문제와 HyperFlow의 해법

Elephant flowTCP 또는 UDP가 맺는, 전체 바이트 수가 큰 연속 연결 을 말합니다. 예를 들어 HTTP·HTTPS·FTP·NFS 프로토콜로 리눅스 ISO 같은 큰 파일을 내려받는 연결이 여기에 해당합니다. 이런 큰 연속 연결은 다른 종류의 데이터 세션에 비해 네트워크 용량을 훨씬 많이 잡아먹습니다.

문제는 HyperFlow 가 없을 때 생깁니다. 이 기능이 없으면 Security Gateway는 하나의 elephant 연결을 CPU 코어 하나(= CoreXL Firewall 인스턴스 하나)로만 검사 합니다. 게다가 Security Gateway의 CPU 사용률이 올라갈수록 트래픽 처리량은 점점 떨어 집니다. 한 코어가 큰 연결 하나를 떠맡은 채 한계에 다다르기 때문입니다.

R81.20 이상의 HyperFlow이런 elephant 연결을 한 코어가 아니라 여러 CPU 코어에서 동시에 검사 해 이 문제를 해결합니다. 핵심 아이디어는 하나의 큰 검사 작업을 작은 작업으로 잘게 쪼개, 사용 가능한 여러 CPU 코어로 흩뿌리는 것입니다.

작업이 나뉘는 방식

HyperFlow가 없을 때와 있을 때, 검사 작업이 어떻게 처리되는지를 비교하면 그 차이가 분명해집니다.

HyperFlow가 없을 때 — 아래 작업이 모두 하나의 흐름으로, 한 코어 위에서 차례로 처리됩니다.

  1. Packet retrieval(패킷 수신)
  2. Inbound Streaming(인바운드 스트리밍)
  3. Protocol parsers(프로토콜 파서)
  4. Context Management Interface / Infrastructure(CMI)
  5. Pattern Match(PM)와 Hash(MD5, SHA)
  6. Software Blade logic(소프트웨어 블레이드 로직)
  7. Outbound Streaming(아웃바운드 스트리밍)
  8. Routing(라우팅)
  9. Packet transmission(패킷 송신)

HyperFlow가 있을 때 — 같은 작업을 세 단계로 나누고, 그중 무거운 패턴 매칭 부분을 여러 코어로 분산 합니다.

  1. CoreXL Firewall의 Inbound 처리
    • a. Packet retrieval
    • b. Inbound Streaming
    • c. Protocol parsers
    • d. Context Management Interface / Infrastructure(CMI)
  2. 내부 PPE 처리(여러 CPU 코어에서 병렬로 수행)
    • a. Pattern Match(PM)와 Hash(MD5, SHA)
    • b. Packet transmission
  3. CoreXL Firewall의 Outbound 처리
    • a. Software Blade logic
    • b. Outbound Streaming
    • c. Routing

가장 무거운 패턴 매칭·해시 계산을 여러 코어로 떼어 내 동시에 돌리는 것이 HyperFlow의 성능 비결입니다. 여기서 PPE(Packet Processing Engine, 작업을 분배하는 Job Dispatcher와 실제로 일하는 Working Thread들)가 핵심 역할을 합니다.

그 결과 얻는 것

이렇게 작업을 쪼개 분산하면 HyperFlow는 다음 세 가지를 이룹니다.

  • Threat Prevention 소프트웨어 블레이드가 켜진 상태에서 elephant 연결의 처리량을 높 입니다. Security Gateway가 elephant 연결을 검사하는 데 걸리는 시간이 줄어들기 때문입니다. 단, 네트워크 인프라 자체가 "병목"이 아닐 때만 이 효과가 납니다.
  • Security Gateway의 주요 작업들 사이에서 CPU 코어를 자동으로 감지하고 동적으로 배분 합니다.
  • elephant 연결을 검사하는 동안 CoreXL FWK 프로세스의 응답 시간이 개선 됩니다(해당 CPU 코어들의 idle 시간이 늘어납니다).

꼭 알아 둘 동작 원칙

HyperFlow는 무거운(heavy) 연결이 감지되면 트리거되어 활성(active) 상태 가 되고, 그 무거운 연결이 닫히면 다시 비활성(passive) 상태 로 돌아갑니다.

요구사항 (Requirements)

HyperFlow를 쓰려면 아래 조건을 모두 갖춰야 합니다.

  1. CPU 논리 코어가 최소 8개 이상 인 Check Point 어플라이언스 모델이어야 합니다. 지원 모델 전체 목록은 sk178070을 참고하세요.
  2. 방화벽이 User Mode(USFW) 로 동작해야 합니다(sk167052 참고).
  3. CoreXL Dynamic Balancing 을 켭니다("CoreXL 인스턴스의 동적 균형" 참고).
   dynamic_split –o enable
   
  1. SecureXL을 Kernel Mode(KPPAK) 로 동작하도록 구성합니다("SecureXL 구성" 참고).
  2. 다음 범주 중 하나에 해당하는 소프트웨어 블레이드 를 활성화합니다.
    • NGFW
    • NGTP
    • NGTP with HTTPS Inspection
    • NGTX

구문 (Syntax)

HyperFlow는 connection_pipelining 명령으로 다룹니다. Scalable Platform에서는 접두사 g 가 붙은 g_connection_pipelining 을 씁니다.

명령의 전체 구조는 다음과 같습니다.

{connection_pipelining | g_connection_pipelining}
      advanced
      on
      off
      heaviest_conn
      pipelined
      status
{connection_pipelining | g_connection_pipelining} advanced
      allow_accelerated_pipeline
      async
      default
      prevent_accelerated_pipeline
      sleep
      sync
      wake_up

기본 파라미터

아무 파라미터 없이 명령만 입력하면 내장 도움말이 표시됩니다. 명령 이름 자체는 환경에 따라 갈립니다.

파라미터설명
connection_pipeliningScalable Platform이 아닌 일반 Security Gateway에서만 입력합니다.
g_connection_pipeliningScalable Platform에서만 입력합니다.
on기능을 켭니다. 요구사항을 충족하는 Check Point 어플라이언스에서는 이것이 기본값 입니다. > 중요 — 이 변경은 재부팅이 필요 합니다.
off기능을 끕니다. > 중요 — 이 변경은 재부팅이 필요 합니다.
status기능의 상태와 구성을 보여 줍니다(아래 참조).
heaviest_conn지속 시간이 가장 긴, 가장 무거운 연결 의 통계(패킷 수와 바이트 수)를 보여 줍니다.
pipelined파이프라인에 들어 있는 가속된(accelerated) elephant 연결 들을 보여 줍니다.
advanced고급 옵션을 보여 줍니다(아래 표).

status 의 출력에는 다음 줄들이 해당 값과 함께 표시됩니다.

- Status of connection pipelining: <Status>
- Flow mode: <Mode>
- Status of PPE_MGR and PPE_WT: <Status>
- Status of accelerated pipeline: <Status>

고급(advanced) 파라미터

advanced 뒤에 붙이는 옵션들입니다. 대부분 문제 해결(troubleshooting) 용도이므로 평상시에는 손대지 않습니다.

파라미터설명
allow_accelerated_pipeline새 연결을 가속 파이프라인 연결로 열도록 허용 합니다. Security Gateway가 연결에 새로운 비동기(asynchronous) 파서를 사용합니다. 이것이 기본값 입니다.
prevent_accelerated_pipeline새 연결이 가속 파이프라인 연결로 열리지 못하게 막 습니다. 이 모드에서는 연결에 기존(legacy) 파서를 사용합니다. elephant 연결 문제를 해결할 때만 사용하세요.
async비동기 흐름(asynchronous flow) 모드 로 구성합니다(기본값). 이 모드에서는 CoreXL Firewall 인스턴스가 PPE로 작업을 보냅니다.
sync동기 흐름(synchronous flow) 모드 로 구성합니다. 이 모드에서는 CoreXL Firewall 인스턴스가 PPE로 작업을 보내지 않습니다. elephant 연결 문제를 해결할 때만 사용하세요.
sleepJob Dispatcher(PPE)와 Working Thread(WT)를 잠들게(sleep) 합니다. 동기 모드로 바꾼 뒤에도 문제가 계속될 때만 문제 해결용으로 사용합니다.
wake_upJob Dispatcher(PPE)와 Working Thread(WT)를 잠에서 깨 웁니다. PPE가 할당받을 수 있는 CPU 코어를 다시 확보합니다.
default기본 설정으로 되돌립니다.

각 고급 옵션에는 적용 범위와 재부팅 여부에 대한 다음 규칙이 따라붙습니다.

CPView 모니터링 (Monitoring in CPView)

HyperFlow가 Security Gateway에서 어떻게 동작하는지는 CPView로 들여다볼 수 있습니다. 목적별로 살펴볼 경로가 정해져 있습니다.

HyperFlow가 켜졌는지 / 꺼졌는지 확인

  1. CPU > Advanced 로 이동합니다.
  2. Hyperflow 탭이 보이면 HyperFlow가 켜져 있다 는 뜻입니다.

HyperFlow가 활성인지 / 잠들었는지 확인

  1. CPU > Advanced > Hyperflow > Overview 로 이동합니다.
  2. PPE_MGR state 필드를 살펴봅니다.

CPU 코어 할당 상태 확인

  1. CPU > Overview > Host 로 이동합니다.
  2. 마지막 CPU 섹션을 보되, 특히 Idle 에 주목합니다.

특정 elephant 연결이 주는 CPU 부하 확인

먼저 Security Gateway에서 지난 24시간 동안의 elephant 연결과, 어느 CoreXL Firewall 인스턴스가 그 연결을 검사하는지 를 확인합니다. 각 줄 앞머리의 [fw_<번호>] 가 인스턴스 번호입니다.

fw ctl multik print_heavy_conn

출력 예시는 다음과 같습니다.

;[fw_5]: Conn: 192.168.10.20:60478 -> 172.30.40.50:80 IPP:
6; Instance load: 63%; Connection instance load: 99%;
...<생략>...

다음으로 CPView에서 CPU > Top-Connections > Instances<X>-<Y>(예: Instances0-5) > Instance<Z>(예: Instance5)로 이동합니다. 마지막 Top Connections 섹션에서 % out of CPU 열과 % out of WT CPU 을 살펴봅니다.

ConnectionProtocol% out of CPU% out of WT CPU
192.168.10.20:60478 -> 172.30.40.50:80TCP:http70.81%48.97%

PPE 상태 확인

  1. Advanced > HyperFlow > Overview > PPE_0 으로 이동합니다.
  2. 해당 탭을 클릭합니다.
  3. 다음 섹션들을 살펴봅니다.
섹션게이지설명
PPE overviewPPE state기능의 상태 — Active(활성) 또는 Asleep(잠듦)을 보여 줍니다.
Pipeline statusFree파이프라인의 빈 슬롯 수(최대 320개).
ActivePPE가 현재 사용 중인 슬롯.
Job pending다른 작업에 실행이 의존하고 있는 슬롯.
Slot pending파이프라인의 빈 슬롯이 나기를 기다리는 작업.
Overload indicatorsNo pipeline entryPPE_MGR가 파이프라인에 빈 슬롯이 없었던 경우.
WT slot unavailableWT에 사용 가능한 슬롯이 없는 경우.

방화벽에서 온 PPE 메시지 확인

  1. Advanced > HyperFlow > Firewall-messages 로 이동합니다.
  2. 다음 섹션들을 살펴봅니다.
섹션게이지설명
Sessions and dataNew session새로 열린 세션 수.
Update session갱신된 세션 수(예: 정책 설치 때문에).
End session종료된 세션 수.
Current session현재 열려 있는 세션 수.
Data수신한 데이터 버퍼 수.
ErrorsPPE 내부의 여러 오류.

마지막으로 Messages received in a single read loop (Histogram) 섹션이 있습니다. 매 루프마다 PPE_MGR수신 큐에서 최대 32개 항목 을 읽을 수 있는데, 이 섹션은 PPE_MGR가 큐에서 항목을 읽은 횟수와, 큐에서 "대기 중"이던 항목 수(최대 32) 를 히스토그램으로 보여 줍니다.

작업(Job) 수와 실행 시간 확인

  1. Advanced > HyperFlow > Jobs > PPE 로 이동합니다.
  2. 다음 섹션들을 살펴봅니다.
    • Sent to firewall(count) — 방화벽으로 보낸 작업 수
    • Average execution time(Cycles) — 평균 실행 시간(사이클)

큐 사용률 확인

  1. Advanced > HyperFlow > Comm > PPE 로 이동합니다.
  2. 다음 섹션들을 살펴봅니다.
    • Enqueue(큐에 넣기)
    • Dequeue(큐에서 빼기)

Worker Thread 수와 상태 확인

  1. Advanced > HyperFlow > WT 로 이동합니다.
  2. 다음 행들을 살펴봅니다.
    • Number of WTs(WT 개수)
    • Worker ID State(워커 ID별 상태)

제한 (Limitations)

HyperFlow에는 다음과 같은 제약이 있습니다.

  • Kernel Mode 방화벽(KFW)은 지원되지 않 습니다.
  • Open Server와 가상 머신(Virtual Machine)은 지원되지 않 습니다.
  • 클라우드 플랫폼은 지원되지 않 습니다.
  • Security Gateway / 클러스터가 HTTP/HTTPS 프록시로 동작하도록 구성된 경우 HyperFlow는 지원되지 않습니다.
  • elephant 연결이 HyperFlow를 트리거하면, topps 명령의 출력에서 HyperFlow 유저 스페이스 프로세스가 일부 CPU 코어를 99~100%까지 사용하는 것처럼 보일 수 있습니다. 이는 HyperFlow가 들어오는 작업을 처리하려고 끊임없이 자신의 큐를 폴링(polling) 하기 때문입니다. elephant 연결이 닫히면 HyperFlow가 작업 처리를 멈추므로, 이 명령들의 출력에서 유저 스페이스(us) 사용률이 다시 평소 수준으로 돌아갑니다. 실제 CPU 부하를 보려면 CPView(CPU > Overview > Host), SNMP, 또는 SmartConsole을 사용 하세요. 이 현상은 높은 CPU 부하로 인한 검사 우회(inspection bypass)를 일으키지 않 습니다.

HyperFlow를 켜도 다음 경우에는 elephant flow의 속도가 빨라지지 않을 수 있습니다.

  • 특별한 파서가 필요한 복잡한 연결 — FTP, SCP, VoIP
  • Content Awareness 또는 Data Loss Prevention 정책 의 적용을 받는 연결
  • 동적 콘텐츠를 담아 Pattern Matcher 1차(1st tier) 를 거치는 연결
  • Strict Hold 가 켜진 경우(Security Gateway의 $FWDIR/conf/malware_config 파일에 strict_hold_enable=1 이 들어 있는 경우)
  • HTTPS 연결인데 HTTPS Inspection이 꺼져 있는 경우

또한 Security Gateway 객체에서 Firewall 소프트웨어 블레이드만 켠 경우 HyperFlow는 성능을 개선하지 못 합니다. 이는 SecureXL이 검사를 거치지 않는 연결을 가속 하는 반면, HyperFlow는 여러 소프트웨어 블레이드의 검사를 거치는 연결을 가속 하기 때문입니다.

문제 해결 (Troubleshooting)

문제를 분석할 때 살펴볼 로그 파일 은 다음과 같습니다(메인 파일은 10MB마다 순환(rotate) 됩니다).

  • $FWDIR/log/connection_pipelining.elg
  • $FWDIR/log/dmd.elg
  • $FWDIR/log/dmd_controller.elg
  • $FWDIR/log/dsd.elg

다음은 HyperFlow의 내부 구성 파일 입니다.

명령줄 레퍼런스는 R82 CLI Reference Guide 를 참고하고, 그 밖의 추가 정보는 sk178070을 참고하세요.