11HyperFlowHyperFlow
HyperFlow(R81.20 이상)는 대용량 연속 연결(elephant flow)을 여러 CPU 코어로 나눠 병렬로 검사 하는 기술입니다. 한 연결을 코어 하나에만 묶어 처리하던 기존 CoreXL 방식의 병목을 풀어, Threat Prevention 같은 무거운 검사를 켜 둔 상태에서도 대용량 흐름의 처리량과 응답 시간을 끌어올립니다. 이 장은 무엇을 푸는 기술인지, 켜기 전 무엇이 필요한지, 어떤 명령으로 다루는지, CPView로 어떻게 들여다보는지, 어떤 한계와 문제 해결 방법이 있는지 를 빠짐없이 풀어 둡니다. 더 자세한 내용과 지원 모델 목록은 모두 sk178070에 정리되어 있습니다.
개요 — Elephant flow 문제와 HyperFlow의 해법
Elephant flow 는 TCP 또는 UDP가 맺는, 전체 바이트 수가 큰 연속 연결 을 말합니다. 예를 들어 HTTP·HTTPS·FTP·NFS 프로토콜로 리눅스 ISO 같은 큰 파일을 내려받는 연결이 여기에 해당합니다. 이런 큰 연속 연결은 다른 종류의 데이터 세션에 비해 네트워크 용량을 훨씬 많이 잡아먹습니다.
문제는 HyperFlow 가 없을 때 생깁니다. 이 기능이 없으면 Security Gateway는 하나의 elephant 연결을 CPU 코어 하나(= CoreXL Firewall 인스턴스 하나)로만 검사 합니다. 게다가 Security Gateway의 CPU 사용률이 올라갈수록 트래픽 처리량은 점점 떨어 집니다. 한 코어가 큰 연결 하나를 떠맡은 채 한계에 다다르기 때문입니다.
R81.20 이상의 HyperFlow 는 이런 elephant 연결을 한 코어가 아니라 여러 CPU 코어에서 동시에 검사 해 이 문제를 해결합니다. 핵심 아이디어는 하나의 큰 검사 작업을 작은 작업으로 잘게 쪼개, 사용 가능한 여러 CPU 코어로 흩뿌리는 것입니다.
작업이 나뉘는 방식
HyperFlow가 없을 때와 있을 때, 검사 작업이 어떻게 처리되는지를 비교하면 그 차이가 분명해집니다.
HyperFlow가 없을 때 — 아래 작업이 모두 하나의 흐름으로, 한 코어 위에서 차례로 처리됩니다.
- Packet retrieval(패킷 수신)
- Inbound Streaming(인바운드 스트리밍)
- Protocol parsers(프로토콜 파서)
- Context Management Interface / Infrastructure(CMI)
- Pattern Match(PM)와 Hash(MD5, SHA)
- Software Blade logic(소프트웨어 블레이드 로직)
- Outbound Streaming(아웃바운드 스트리밍)
- Routing(라우팅)
- Packet transmission(패킷 송신)
HyperFlow가 있을 때 — 같은 작업을 세 단계로 나누고, 그중 무거운 패턴 매칭 부분을 여러 코어로 분산 합니다.
- CoreXL Firewall의 Inbound 처리
- a. Packet retrieval
- b. Inbound Streaming
- c. Protocol parsers
- d. Context Management Interface / Infrastructure(CMI)
- 내부 PPE 처리(여러 CPU 코어에서 병렬로 수행)
- a. Pattern Match(PM)와 Hash(MD5, SHA)
- b. Packet transmission
- 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를 쓰려면 아래 조건을 모두 갖춰야 합니다.
- CPU 논리 코어가 최소 8개 이상 인 Check Point 어플라이언스 모델이어야 합니다. 지원 모델 전체 목록은 sk178070을 참고하세요.
- 방화벽이 User Mode(USFW) 로 동작해야 합니다(sk167052 참고).
- CoreXL Dynamic Balancing 을 켭니다("CoreXL 인스턴스의 동적 균형" 참고).
dynamic_split –o enable
- SecureXL을 Kernel Mode(KPPAK) 로 동작하도록 구성합니다("SecureXL 구성" 참고).
- 다음 범주 중 하나에 해당하는 소프트웨어 블레이드 를 활성화합니다.
- 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_pipelining | Scalable Platform이 아닌 일반 Security Gateway에서만 입력합니다. |
| g_connection_pipelining | Scalable 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 연결 문제를 해결할 때만 사용하세요. |
| sleep | Job Dispatcher(PPE)와 Working Thread(WT)를 잠들게(sleep) 합니다. 동기 모드로 바꾼 뒤에도 문제가 계속될 때만 문제 해결용으로 사용합니다. |
| wake_up | Job Dispatcher(PPE)와 Working Thread(WT)를 잠에서 깨 웁니다. PPE가 할당받을 수 있는 CPU 코어를 다시 확보합니다. |
| default | 기본 설정으로 되돌립니다. |
각 고급 옵션에는 적용 범위와 재부팅 여부에 대한 다음 규칙이 따라붙습니다.
CPView 모니터링 (Monitoring in CPView)
HyperFlow가 Security Gateway에서 어떻게 동작하는지는 CPView로 들여다볼 수 있습니다. 목적별로 살펴볼 경로가 정해져 있습니다.
HyperFlow가 켜졌는지 / 꺼졌는지 확인
- CPU > Advanced 로 이동합니다.
- Hyperflow 탭이 보이면 HyperFlow가 켜져 있다 는 뜻입니다.
HyperFlow가 활성인지 / 잠들었는지 확인
- CPU > Advanced > Hyperflow > Overview 로 이동합니다.
- PPE_MGR state 필드를 살펴봅니다.
CPU 코어 할당 상태 확인
- CPU > Overview > Host 로 이동합니다.
- 마지막 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 열 을 살펴봅니다.
| Connection | Protocol | % out of CPU | % out of WT CPU |
|---|---|---|---|
| 192.168.10.20:60478 -> 172.30.40.50:80 | TCP:http | 70.81% | 48.97% |
PPE 상태 확인
- Advanced > HyperFlow > Overview > PPE_0 으로 이동합니다.
- 해당 탭을 클릭합니다.
- 다음 섹션들을 살펴봅니다.
| 섹션 | 게이지 | 설명 |
|---|---|---|
| PPE overview | PPE state | 기능의 상태 — Active(활성) 또는 Asleep(잠듦)을 보여 줍니다. |
| Pipeline status | Free | 파이프라인의 빈 슬롯 수(최대 320개). |
| Active | PPE가 현재 사용 중인 슬롯. | |
| Job pending | 다른 작업에 실행이 의존하고 있는 슬롯. | |
| Slot pending | 파이프라인의 빈 슬롯이 나기를 기다리는 작업. | |
| Overload indicators | No pipeline entry | PPE_MGR가 파이프라인에 빈 슬롯이 없었던 경우. |
| WT slot unavailable | WT에 사용 가능한 슬롯이 없는 경우. |
방화벽에서 온 PPE 메시지 확인
- Advanced > HyperFlow > Firewall-messages 로 이동합니다.
- 다음 섹션들을 살펴봅니다.
| 섹션 | 게이지 | 설명 |
|---|---|---|
| Sessions and data | New session | 새로 열린 세션 수. |
| Update session | 갱신된 세션 수(예: 정책 설치 때문에). | |
| End session | 종료된 세션 수. | |
| Current session | 현재 열려 있는 세션 수. | |
| Data | 수신한 데이터 버퍼 수. | |
| Errors | — | PPE 내부의 여러 오류. |
마지막으로 Messages received in a single read loop (Histogram) 섹션이 있습니다. 매 루프마다 PPE_MGR 는 수신 큐에서 최대 32개 항목 을 읽을 수 있는데, 이 섹션은 PPE_MGR가 큐에서 항목을 읽은 횟수와, 큐에서 "대기 중"이던 항목 수(최대 32) 를 히스토그램으로 보여 줍니다.
작업(Job) 수와 실행 시간 확인
- Advanced > HyperFlow > Jobs > PPE 로 이동합니다.
- 다음 섹션들을 살펴봅니다.
- Sent to firewall(count) — 방화벽으로 보낸 작업 수
- Average execution time(Cycles) — 평균 실행 시간(사이클)
큐 사용률 확인
- Advanced > HyperFlow > Comm > PPE 로 이동합니다.
- 다음 섹션들을 살펴봅니다.
- Enqueue(큐에 넣기)
- Dequeue(큐에서 빼기)
Worker Thread 수와 상태 확인
- Advanced > HyperFlow > WT 로 이동합니다.
- 다음 행들을 살펴봅니다.
- Number of WTs(WT 개수)
- Worker ID State(워커 ID별 상태)
제한 (Limitations)
HyperFlow에는 다음과 같은 제약이 있습니다.
- Kernel Mode 방화벽(KFW)은 지원되지 않 습니다.
- Open Server와 가상 머신(Virtual Machine)은 지원되지 않 습니다.
- 클라우드 플랫폼은 지원되지 않 습니다.
- Security Gateway / 클러스터가 HTTP/HTTPS 프록시로 동작하도록 구성된 경우 HyperFlow는 지원되지 않습니다.
- elephant 연결이 HyperFlow를 트리거하면, top 과 ps 명령의 출력에서 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을 참고하세요.