KR20150091209A - 유한 오토마톤 프로세싱을 최적화시키기 위한 방법 및 장치 - Google Patents

유한 오토마톤 프로세싱을 최적화시키기 위한 방법 및 장치 Download PDF

Info

Publication number
KR20150091209A
KR20150091209A KR1020140113845A KR20140113845A KR20150091209A KR 20150091209 A KR20150091209 A KR 20150091209A KR 1020140113845 A KR1020140113845 A KR 1020140113845A KR 20140113845 A KR20140113845 A KR 20140113845A KR 20150091209 A KR20150091209 A KR 20150091209A
Authority
KR
South Korea
Prior art keywords
node
segment
payload
offset
matching
Prior art date
Application number
KR1020140113845A
Other languages
English (en)
Other versions
KR101633649B1 (ko
Inventor
라잔 고얄
사티야나라야나 락슈미파티 빌라
Original Assignee
캐비엄, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 캐비엄, 인코포레이티드 filed Critical 캐비엄, 인코포레이티드
Publication of KR20150091209A publication Critical patent/KR20150091209A/ko
Application granted granted Critical
Publication of KR101633649B1 publication Critical patent/KR101633649B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1441Countermeasures against malicious traffic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • Mathematical Physics (AREA)

Abstract

추정적 방식으로 적어도 하나의 유한 오토마톤을 워킹함으로써 입력 스트림 내의 적어도 하나의 정규 표현식 패턴을 매칭시키는 것을 최적화시키기 위한 방법, 대응하는 장치 및 시스템이 제공된다. 추정적 방식은 입력 스트림 내의 패킷의 페이로드 내의 현 오프셋에서의 세그먼트를 사용하여서, 적어도 하나의 유한 오토마톤의 소정의 유한 오토마톤의 적어도 2 개의 노드들을 병행하여 (in parallel) 반복적으로 워킹하는 것을 포함하며, 반복적으로 워킹하는 것은 병행하여 워킹된 적어도 2 개의 노드들 중 소정의 노드에서 세그먼트와 긍정적으로 매칭한 것에 기초하며, 현 오프셋은 반복마다 후속 오프셋 (next offset) 으로 업데이트될 수도 있다.

Description

유한 오토마톤 프로세싱을 최적화시키기 위한 방법 및 장치{METHOD AND APPARATUS FOR OPTIMIZING FINITE AUTOMATA PROCESSING}
OSI (Open Systems Interconnection) 레퍼런스 모델은 전송 매체를 통해서 통신하는데 사용되는 7 개의 네트워크 프로토콜 층들 (L1-L7) 을 규정한다. 상부 층들 (L4-L7) 은 엔드-투-엔드 통신 (end-to-end communications) 을 나타내며, 하부 층들 (L1-L3) 은 로컬 통신 (local communications) 을 나타낸다.
네트워킹 애플리케이션 인식 시스템 (networking application aware systems) 은 L3 내지 L7 네트워크 프로토콜 층들의 범위, 예를 들어서 HTTP (HyperText Transfer Protocol) 및 SMTP (Simple Mail Transfer Protocol) 과 같은 L7 네트워크 프로토콜 층들 및 TCP (Transmission Control Protocol) 와 같은 L4 네트워크 프로토콜 층들을 프로세싱, 필터링 및 스위칭하는데 필요하다. 네트워크 프로토콜 층들을 프로세싱하는 것에 추가하여서, "와이어-스피드로 (at wire-speed)" (즉, 데이터가 전송 및 수신되는 네트워크의 물리적 매체를 통한 데이터 전달 레이트로) 방화벽 (Firewall), VPN (Virtual Private Network), SSL (Secure Sockets Layer), IDS (Intrusion Detection System), IPSec (Internet Protocol Security), AV (Anti-Virus) 및 스팸-방지 (Anti-Spam) 기능을 포함하는 L4 내지 L7 네트워크 프로토콜 층들을 통한 액세스 및 컨텐츠 기반 보안을 사용하여서 이러한 프로토콜들을 동시에 보호하는데 필요하다.
네트워크 프로세서들은 높은-처리량의 L2 및 L3 네트워크 프로토콜 프로세싱을 위해서, 즉 와이어-스피드로 패킷들을 포워딩 (foward) 하기 위한 패킷 프로세싱을 위해서 가용된다. 통상적으로, 범용 프로세서는 보다 지능적인 프로세싱을 요구하는 L4 내지 L7 네트워크 프로토콜들을 프로세싱하는데 사용된다. 범용 프로세서는 이러한 컴퓨팅 집약적 태스크들을 수행할 수도 있지만, 데이터가 와이어-스피드로 포워딩될 수 있도록 데이터를 프로세싱하는데 충분한 성능을 제공하지 않을 수 있다.
IDS (Intrusion Detection System) 애플리케이션은 네트워크를 통해서 유동하는 개별 패킷들의 컨텐츠를 검사하고 시스템 내로 침투하거나 시스템을 약하게 하는 시도를 표시할 수 있는 의심이 가는 패턴들을 식별할 수도 있다. 의심이 가는 패턴의 일 실례는 패킷 내에 특정 텍스트 문자열, 이후의 100 개의 문자 및 이후의 임의의 특정 텍스트 문자열일 수 있다. 이러한 컨텐츠 인식 네트워킹은 와이어 스피드에서 패킷들의 컨텐츠들을 검사하는 것을 요구할 수도 있다. 보안 위반 또는 침투가 있었는지의 여부를 결정하기 위해서 컨텐츠가 분석될 수도 있다.
모든 보안 위반 또는 침투가 검출되는 것을 보장하기 위해서 정규 표현식 (regular expression) 형태의 많은 수의 패턴들 및 규칙들 (본 명세서에서 또한 정규 표현식 패턴으로 지칭됨) 이 적용될 수도 있다. 정규 표현식은 패턴을 문자열로 기술하는 컴팩트한 방법이다. 정규 표현식에 의해서 매칭되는 가장 간단한 패턴은 예를 들어서 /c/ 또는 /cat/와 같은, 단일 문자 또는 문자열이다. 정규 표현식은 또한 특정 의미를 갖는 메타-문자들 및 연산자들 (operators) 을 포함할 수도 있다. 메타-문자들을 사용함으로써, 정규 표현식은 "abc.*xyz."와 같이 보다 복잡한 탐색을 위해서 사용될 수도 있다. 즉, "abc"와 "xyz" 간에 있는 한정되지 않은 개수의 문자들을 갖는, 문자열 "abc" 및 후속하는 문자열 "xyz" 를 찾는 것이다. 다른 실례는 정규 표현식 "abc..abc.*xyz"이며, 즉, 문자열 "abc", 이어서 2 개의 문자, 그리고 이어서 문자열 "abc", 이어서 한정되지 않은 개수의 문자들 및 이어서 문자열 "xyz" 를 찾는 것이다.
컨텐츠 탐색은 통상적으로 정규 표현식을 프로세싱하기 위해 DFA (Deterministic Finite Automata) 또는 NFA (Non-Deterministic Finite Automata) 와 같은 탐색 방법을 사용하여서 수행된다.
본 발명의 실시예들은 적어도 하나의 유한 오토마톤 (finite automaton) 을 사용하여서 적어도 하나의 정규 표현식 패턴을 위해서 입력 스트림을 탐색할 수 있는 방법, 장치, 컴퓨터 프로그램 제품, 및 대응하는 시스템을 제공한다.
일 실시예에 따라서, 방법은 보안 어플라이언스 (appliance) 를 네트워크로 동작하게 커플링시킬 수도 있다. 보안 어플라이언스 (appliance) 는 적어도 하나의 메모리 및 적어도 하나의 프로세서를 포함할 수도 있다. 방법은 적어도 하나의 정규 표현식 패턴으로부터 생성된 복수의 노드들을 포함하는 적어도 하나의 유한 오토마톤 (finite automaton) 을 저장하도록 적어도 하나의 메모리를 구성하는 단계를 포함할 수도 있다. 방법은 적어도 하나의 메모리에 적어도 하나의 프로세서를 동작하게 커플링시키는 단계 및 네트워크를 통해서 수신된 입력 스트림 내의 적어도 하나의 정규 표현식 패턴을 매칭시키도록, 입력 스트림의 세그먼트들을 사용하여서, 적어도 하나의 유한 오토마톤을 워킹 (walk) 하도록 적어도 하나의 프로세서를 구성하는 단계를 포함할 수도 있다. 워킹은 입력 스트림 내의 패킷의 페이로드 내의 현 오프셋에서의 세그먼트를 사용하여서, 적어도 하나의 유한 오토마톤의 소정의 유한 오토마톤의 적어도 2 개의 노드들을 병행하여 (in parallel) 반복적으로 워킹하는 것을 포함하며, 반복적으로 워킹하는 것은 병행하여 워킹된 적어도 2 개의 노드들 중 소정의 노드에서 세그먼트와 긍정적으로 매칭한 것에 기초할 수도 있다. 현 오프셋은 반복마다 후속 오프셋 (next offset) 으로 업데이트될 수도 있다.
세그먼트는 또한 본 명세서에서 페이로드 세그먼트 또는 페이로드의 세그먼트로 지칭될 수도 있다. 세그먼트는 이 세그먼트를 사용하여서 트라버싱되고 있는 (즉, 워킹되는) 적어도 하나의 유한 오토마톤의 노드에 의해서 표시된 요소에 대한 이 세그먼트의 매칭을 결정하는데 검사되는 페이로드의 부분일 수도 있다. 세그먼트는 값, 문자, 글자, 바이트 또는 데이터의 다른 적합한 타입일 수도 있다. 세그먼트는 임의의 적합한 단위크기 (granularity) (즉, 길이 또는 크기) 를 가질 수도 있다. 예를 들어서, 세그먼트의 단위크기는 바이트, 다수의 바이트, 바이트보다 작은 크기, 임의의 개수의 바이트 또는 임의의 다른 적합한 단위크기일 수도 있다. 세그먼트의 타입은 문자, 문자열, 문자 클래스, 또는 임의의 다른 적합한 타입의 요소일수도 있다.
반복적으로 워킹하는 것은 반복마다, 적어도 하나의 프로세서의 동일한 프로세싱 사이클 내에서, 페이로드 내의 현 오프셋에서의 세그먼트를 사용하여서 적어도 2 개의 노드들을 병행하여 워킹하는 것을 더 포함할 수도 있다.
적어도 2 개의 노드는 페이로드 내의 요소의 단일 인스턴스 (instance) 와 매칭하도록 구성된 요소 노드 (element node) 를 포함할 수도 있다. 반복적으로 워킹하는 것은 반복마다, 소정의 노드 및 요소 노드에서 페이로드 내의 현 오프셋에서의 세그먼트와 긍정적으로 매칭하는 것에 기초하여서, 후속 오프셋 및 소정의 유한 오토마톤의 후속 노드를 식별하는 컨텍스트를 저장하는 것을 더 포함할 수도 있다. 요소 노드는 요소와 후속 노드를 식별하는 메타데이터와 연관될 수도 있다.
보안 어플라이언스는 적어도 하나의 스택을 더 포함하며, 방법은 적어도 하나의 프로세서를 적어도 하나의 스택에 동작하게 커플링하는 것을 포함할 수도 있다. 컨텍스트를 저장하는 것은 컨텍스트를 스택 엔트리에 저장하고 스택 엔트리를 적어도 하나의 스택 상으로 푸싱하는 (pushing) 것을 포함할 수도 있다.
소정의 노드는 페이로드 내의 요소의 임계 회수의 연속하는 인스턴스들을 매칭시키도록 구성된 가변 카운트 그리디 (variable count greedy) (VCG) 노드이며, VCG 노드에서 세그먼트와 긍정적으로 매칭하는 것은 세그먼트를 요소와 긍정적으로 매칭시킨 것에 기초할 수도 있다.
VCG 노드에서 세그먼트와 긍정적으로 매칭하는 것은, VCG 노드와 연관된 카운트 값을 증분시키는 것을 포함하며, 증분된 카운트 값이 임계 회수 이하인 것에 더 기초할 수도 있다. 방법은 세그먼트를 요소와 부정적으로 매칭시킨 것 또는 임계 회수가 초과되었다고 결정한 것에 기초하여서, VCG 노드에서 세그먼트와 부정적으로 매칭하는 것을 더 포함할 수도 있다.
적어도 2 개의 노드들 중 소정의 노드는 메타데이터와 연관되며, 상기 적어도 2 개의 노드들을 병행하여 반복적으로 워킹하는 것은 소정의 노드의 메타데이터가 추정적 프로세싱 표시자 (speculative processing indicator) 를 포함하는 것에 더 기초할 수도 있다.
병행하여 워킹된 적어도 2 개의 노드들은 요소 노드 및 VCG 노드를 포함할 수도 있다. 소정의 노드는 VCG 노드일 수도 있다. VCG 노드는 페이로드 내의 제 1 요소의 가변 회수의 연속하는 인스턴스들을 매칭시키도록 구성되며, 요소 노드는 페이로드 내의 제 2 요소의 단일 인스턴스를 매칭시키도록 구성될 수도 있다.
VCG 노드는 요소 노드, 연속하는 인스턴스들의 가변 회수, 제 1 요소를 직접적으로 또는 간접적으로 식별하는 메타데이터와 연관될 수도 있다.
VCG 노드와 연관된 메타데이터는 가변 회수에 대한 총 회수의 비교를 실현하기 위해서 페이로드 내에서 매칭하는 제 1 요소의 연속하는 인스턴스들의 총 회수를 추적하기 위한 카운트 값을 더 포함할 수 있다.
제 1 요소는 제 1 문자 또는 제 1 문자 클래스 (class) 중 하나이며, 제 2 요소는 제 2 문자 또는 제 2 문자 클래스 (class) 중 하나일 수도 있다.
소정의 유한 오토마톤은 비-결정성 유한 오토마톤 (non-deterministic finite automaton) (NFA) 그래프이며, NFA 그래프는 VCG 노드로부터 요소 노드로의 천이를 포함하며, VCG 노드는 NFA 그래프에서 요소 노드를 선행할 수 있다.
워킹은, VCG 노드에서 페이로드 내의 현 오프셋에서의 세그먼트와 부정적으로 매칭하는 것에 기초하여서, 그리고 요소 노드에서 페이로드 내의 현 오프셋에서의 세그먼트와 긍정적으로 매칭하는 것에 기초하여서, 반복적으로 워킹하는 것을 중단하는 것; 현 오프셋을 후속 오프셋으로 업데이트하는 것; 및 페이로드 내의 후속 오프셋에서의 후속 세그먼트를 사용하여 후속 노드를 워킹하는 것을 더 포함할 수도 있다.
현 오프셋을 업데이트하는 것은 각기 워킹의 순방향 또는 역방향에 기초하여서 현 오프셋을 증분 또는 감분시키는 것을 포함할 수도 있다.
워킹은, VCG 노드 및 요소 노드에서 세그먼트와 부정적으로 매칭하는 것에 기초하여서, 반복적인 워킹을 중단하는 것을 더 포함할 수도 있다. 방법은 적어도 하나의 스택이 비어 있지 않은 상태에 기초하여서 적어도 하나의 스택으로부터 스택 엔트리를 팝핑하는 것을 포함할 수도 있다. 스택 엔트리는 스택 상에 가장 최근에 푸싱된 엔트리이며, 방법은 팝핑된 스택 엔트리에 기초하여서 후속 세그먼트를 사용하여서 후속 노드로의 워킹을 가속시키는 것을 포함할 수도 있다. 적어도 하나의 스택이 비어 있는 상태에 기초하여서 방법은 워킹을 종료하는 것을 포함할 수도 있다.
현 오프셋을 증분 또는 감분시킴으로써 현 오프셋이 후속 오프셋으로 업데이트될 수도 있다.
현 오프셋은 워킹의 순방향에 기초하여서 증분되고 워킹의 역방향에 기초하여서 감분될 수도 있다.
적어도 하나의 유한 오토마톤은 결정성 유한 오토마톤 (deterministic finite automaton) (DFA) 및 적어도 하나의 비-결정성 유한 오토마톤 (non-deterministic finite automaton) (NFA) 을 포함할 수도 있다. 소정의 유한 오토마톤은 적어도 하나의 NFA 중 소정의 NFA일 수도 있다.
본 명세서에 개시된 다른 예시적인 실시예는 본 명세서에서 개시된 장치 실시예들과 일관된 동작들에 대응하는 장치를 포함한다.
또한, 또 다른 예시적인 실시예는 프로세서에 의해서 로딩 및 실행될 때에, 프로세서로 하여금 본 명세서에서 개시된 방법들을 수행하게 하는, 인스트럭션들의 시퀀스를 그 상에 저장한 비일시적 컴퓨터 판독가능한 매체를 포함할 수도 있다.
전술한 내용은 유사한 참조 부호들이 상이한 뷰들에 걸쳐서 동일한 부분들을 지칭하는, 첨부 도면들에서 예시된 바와 같이, 본 발명의 예시적인 실시예들의 다음의 보다 특정한 설명으로부터 명백해질 것이다. 도면은 반드시 치수대로 도시된 것은 아니며 대신에 본 발명의 실시예를 예시할 시에 강조가 되기도 한다.
도 1은 본 명세서에서 개시된 실시예들이 구현될 수도 있는 보안 어플라이언스의 실시예의 블록도이다.
도 2a 내지 도 2g는 그래프 폭증 개념을 예시하는 예시적인 NFA 그래프 및 DFA 그래프 및 표이다.
도 3은 본 명세서에서 개시된 실시예들이 구현될 수도 있는 보안 어플라이언스의 실시예의 다른 블록도이다.
도 4는 HNA (hyper non-deterministic automata) 코-프로세서의 환경의 예시적인 실시예의 블록도이다.
도 5a는 입력 스트림 내의 정규 표현식 패턴을 매칭시키기 위해서 워커에 의해서 사용될 수도 있는 NFA (non-deterministic finite automata) 그래프의 예시적인 실시예의 블록도이다.
도 5b는 레이지 비-추정적 방식 (lazy non-speculative manner) 으로 페이로드를 사용하여서 도 5a의 NFA 그래프를 워킹하기 위한 프로세싱 사이클들의 예시적인 실시예의 표이다.
도 5c는 레이지 추정적 프로세싱 규칙들의 표의 예시적인 실시예의 블록도이다.
도 5d는 레이지 추정적 방식 (lazy speculative manner) 으로 페이로드를 사용하여서 도 5a의 NFA 그래프를 트라버싱하기 (traversing) 위한 프로세싱 사이클들의 예시적인 실시예의 표이다.
도 6a는 입력 스트림 내의 정규 표현식 패턴을 매칭시키기 위해서 워커에 의해서 사용될 수도 있는 NFA (non-deterministic finite automata) 그래프의 다른 예시적인 실시예의 블록도이다.
도 6b는 레이지 비-추정적 방식 (lazy non-speculative manner) 으로 페이로드를 사용하여서 도 6a의 NFA 그래프를 트라버싱하기 위한 프로세싱 사이클들의 예시적인 실시예의 표이다.
도 6c는 페이로드를 사용하여서 도 6a의 NFA 그래프를 트라버싱하기 (traversing) 위한 프로세싱 사이클들의 다른 예시적인 실시예의 표이다.
도 6d는 도 6a의 NFA 그래프에서 트라버싱될 수도 있는 다른 페이로드의 블록도이다.
도 6e는 비-추정적 방식 (non-speculative manner) 으로 도 6d의 페이로드를 사용하여서 도 6a의 NFA 그래프를 트라버싱하기 위한 프로세싱 사이클들의 예시적인 실시예의 표이다.
도 6f는 추정적 방식 (speculative manner) 으로 도 6d의 페이로드를 사용하여서 도 6a의 NFA 그래프를 트라버싱하기 위한 프로세싱 사이클들의 다른 예시적인 실시예의 표이다.
도 7은 입력 스트림 내의 정규 표현식 패턴을 매칭시키기 위해서 워커에 의해서 사용될 수도 있는 다른 NFA 그래프의 예시적인 실시예의 블록도이다.
도 8은 페이로드의 블록도이며, 그리디 비-추정적 방식 (greedy non-speculative manner) 으로 이 페이로드를 사용하여서 도 7의 NFA 그래프를 트라버싱하기 위한 프로세싱 사이클들의 예시적인 실시예의 표이다.
도 9a는 네트워크에 동작하게 커플링된 보안 어플라이언스 내의 적어도 하나의 메모리에 동작하게 커플링된 적어도 하나의 프로세서에서 구현될 수도 있는 방법의 예시적인 실시예의 흐름도이다.
도 9b는 그리디 추정적 프로세싱 규칙들의 표의 예시적인 실시예의 블록도이다.
도 10은 추정적 방식으로 NFA 그래프를 프로세싱하기 위한 방법의 다른 예시적인 실시예의 흐름도이다.
도 11은 그리디 추정적 방식 (greedy speculative manner) 으로 도 7의 NFA 그래프를 트라버싱하기 위한 프로세싱 사이클들의 예시적인 실시예의 표이다.
도 12는 본 명세서에서 개시된 실시예 내에서 선택적으로 컴퓨터의 예시적인 내부 구조의 블록도이다.
본 발명의 예시적인 실시예들을 기술하기 이전에, 실시예들이 구현될 수도 있는 예시적인 보안 애플리케이션, 및 결정성 유한 오토마톤 (DFA) 및 비결정성 유한 오토마톤 (NFA) 을 사용하는 통상적인 프로세싱이 본 명세서에서 기술되는 창의적인 특징들을 독자들이 이해하는 것을 돕기 위해서 바로 아래에서 기술된다.
도 1은 본 명세서에서 기술된 실시예들이 구현될 수도 있는 보안 어플라이언스 (security appliance) (102) 의 실시예의 블록도이다. 보안 어플라이언스 (102) 는 네트워크 서비스 프로세서 (100) 를 포함할 수도 있다. 보안 어플라이언스 (102) 는 하나의 네트워크 인터페이스 (103a) 에서 수신된 패킷들을 다른 네트워크 인터페이스 (103b) 로 스위칭하고 패킷들을 포워딩하기 이전에 수신된 패킷들에 대해서 복수의 보안 기능들을 수행할 수도 있는 독립형 시스템일 수도 있다. 예를 들어서, 보안 어플라이언스 (102) 는 WAN (wide area network) (105a), 또는 임의의 다른 적합한 네트워크 상에서 수신될 수도 있는 패킷들 (101a) 에 대한 보안 프로세싱을, 프로세싱된 패킷들 (101b) 을 LAN (local area network) (105b), 또는 임의의 다른 적합한 네트워크로 포워딩하기 이전에, 수행하는데 사용될 수도 있다.
네크워크 서비스 프로세서 (100) 는 수신된 패킷 내에 캡슐화된 OSI (open system interconnection) 네트워크 L2-L7 층 프로토콜들을 프로세싱하도록 구성될 수도 있다. 본 기술 분야의 당업자에게 잘 알려진 바와 같이, OSI 레퍼런스 모델은 7 개의 네트워크 프로토콜 층들 (L1-7) 을 규정한다. 물리적 층 (L1) 은 디바이스를 전송 매체에 접속시키는 물리적이면서 전기적인 실제 인터페이스를 나타낸다. 데이터 링크 층 (L2) 은 데이터 프레이밍을 수행한다. 네트워크 층 (L3) 은 데이터를 패킷으로 포맷한다. 전송 층 (L4) 은 엔드 투 엔드 전송을 다룬다. 세션 층 (L5) 은 예를 들어서, 통신이 반이중 (half-duplex) 또는 전이중 (full-duplex) 인지와 같이, 디바이스들 간의 통신을 관리한다. 프리젠테이션 층 (presentation layer) (L6) 은 예를 들어서 신택스, 제어 코드, 특정 그래픽 및 문자 세트들와 같은 데이터 포맷팅 및 프리젠테이션을 관리한다. 애플리케이션 층 (L7) 은 예를 들어서 파일 전달 및 전자 메일와 같은, 사용자들 간의 통신을 허용한다.
네트워크 서비스 프로세서 (100) 는 예를 들어서 L4 내지 L7와 같은 상위 레벨 네트워크 프로토콜들에 대한 작업 (예를 들어서, 패킷 프로세싱 동작들) 을 스케줄링 및 큐잉하고 와이어-스피드로 패킷들을 포워딩하기 위해서 수신된 패킷들 내의 상위 레벨 네트워크 프로토콜들의 프로세싱이 수행되게 할 수도 있다. 와이어-스피드로 패킷들을 포워딩하기 위해서 프로토콜들을 프로세싱함으로써, 네트워크 서비스 프로세서 (100) 는 네트워크 데이터 전달 레이트를 저하시키지 않는다. 네트워크 서비스 프로세서 (100) 는 물리적 하드웨어 인터페이스일 수도 있는 네트워크 인터페이스들 (103a 또는 103b) 로부터 패킷들을 수신하고 수신된 패킷들에 대해서 L2-L7 네트워크 프로토콜 프로세싱을 수행할 수도 있다. 이어서, 네트워크 서비스 프로세서 (100) 는 프로세싱된 패킷들 (101b) 을 네트워크 인터페이스들 (103a 또는 103b) 를 통해서 그 네트워크 내의 다른 홉 (hop), 최종 목적지로 포워딩하거나 호스트 프로세서 (미도시) 에 의한 후속 프로세싱을 위해서 다른 버스 (미도시) 를 통해서 포워딩할 수도 있다. 네트워크 프로토콜 프로세싱은 방화벽, 애플리케이션 방화벽, IPSec (IP security) 및/또는 SSL (secure sockets layer) 를 포함하는 VPN (virtual private network), 침입 검출 시스템 (IDS), 및 AV (anti-virus) 와 같은 네트워크 보안 프로토콜들의 프로세싱을 포함할 수도 있다.
네트워크 서비스 프로세서 (100) 는 복수의 프로세서들 (즉, 코어들) 을 사용하여서 고 애플리케이션 성능 (high application performance) 을 전달할 수도 있다. 각 코어 (미도시) 는 데이터 플레인 (plane) 동작 또는 제어 플레인 동작을 수행하는데 전용될 수도 있다. 데이터 플레인 동작은 패킷들을 포워딩하기 위한 패킷 동작들을 포함할 수도 있다. 제어 플레인 동작은 IPSec (IP security), TCP (transmission control protocol) 및 SSL (secure sockets layer) 와 같은 복잡한 보다 상위 레벨의 프로토콜들의 부분들의 프로세싱을 포함할 수도 있다. 데이터 플레인 동작은 이러한 복잡한 보다 상위 레벨의 프로토콜들의 다른 부분들의 프로세싱을 포함할 수도 있다.
네트워크 서비스 프로세서 (100) 가 높은 처리량을 달성하도록, 네트워크 서비스 프로세서 (100) 는 코어들을 오프로딩시킬 수 있는 애플리케이션 특정 코-프로세서들을 또한 포함할 수도 있다. 예를 들어서, 네트워크 서비스 프로세서 (100) 는 NFA 프로세싱의 하드웨어 가속화를 위한 HNA (hyper non-deterministic automata) 코-프로세서 (108) 및 DFA 프로세싱의 하드웨어 가속화를 위한 HFA (hyper finite automata) 코-프로세서 (110) 를 포함할 수도 있는 가속화 유닛 (106) 을 포함할 수도 있다. HNA (hyper non-deterministic automata) 코-프로세서 (108) 및 HFA (hyper finite automata) 코-프로세서 (110) 는 네트워크 서비스 프로세서 (100) 범용 코어들 (미도시) 을 컴퓨팅 및 메모리 집약적 패턴 매칭 방법들을 수행하는 중한 부담으로부터 오프로딩시키도록 구성될 수도 있다.
네트워크 서비스 프로세서 (100) 는 패턴 탐색, 정규 표현식 프로세싱, 컨텐츠 타당성 검증, 변환, 보안 가속화 패킷 프로세싱을 수행할 수도 있다. 정규 표현식 프로세싱 및 패턴 탐색은 문자열 (string) 매칭을 요구할 수도 있는 AV 애플리케이션 및 IDS 애프리케이션 및 다른 애플리케이션을 위해서 문자열 매칭을 수행하는데 사용될 수도 있다. 네트워크 서비스 프로세서 (100) 내의 메모리 제어기 (미도시) 는 네트워크 서비스 프로세서 (100) 에 동작하게 커플링된 메모리 (104) 로의 액세스를 제어할 수도 있다. 메모리는 내부형 (즉, 온-칩) 또는 외부형 (즉, 오프 칩) 또는 이들의 조합일 수도 있으며 네트워크 서비스 프로세서 (100) 에 의한 프로세싱을 위해서 패킷들 (101a) 과 같은, 수신된 데이터 패킷들을 저장하도록 구성될 수도 있다. 메모리는 DFA 그래프 표현 탐색 및 NFA 그래프 표현 탐색에서 룩업 (lookup) 및 패턴 매칭을 위해서 사용되는 컴파일링된 규칙 데이터를 저장하도록 구성될 수도 있다. 컴파일링된 규칙 데이터는 DFA 및 NFA 모두에 대한 컴파일링된 규칙 데이터를 포함할 수도 있는 이진 (binary) 이미지 (112) 및 NFA 컴파일링된 규칙 데이터로부터 DFA 컴파일링된 규칙 데이터를 분리하는 다수의 이진 이미지들로서 저장될 수도 있다.
통상적인 컨텐츠 인식 애플리케이션 프로세싱은 수신된 패킷들의 컨텐츠에서의 패턴들을 인지하기 위해서 DFA 또는 NFA 중 어느 하나를 사용할 수도 있다. DFA 및 NFA는 모두 유한 상태 머신들이며, 컴퓨테이션 모델들이며, 각각은 상태들의 세트, 시작-상태, 입력 알파벳 (모든 가능한 심볼들의 세트) 및 천이 (transition) 함수를 포함한다. 컴퓨테이션은 시작-상태에서 시작하고 천이 함수에 따라서 새로운 상태들로 변화된다.
패턴은 통상적으로 예를 들어서 A-Z 및 0-9와 같은 정상적인 텍스트 문자들 및 *, ^ 및 |와 같은 메타-문자들과 같은 원자적 요소 (atmoic element) 를 포함하는 정규 표현식을 사용하여서 표현된다. 정규 표현식의 원자적 요소들은 매칭될 심볼들 (단일 문자들) 이다. 원자적 요소들은 연결 (concatenation) (+), 선택 (alternation) (|), 및 클레이니 스타 (Kleene-star) (*) 를 가능하게 하는 메타-문자들과 결합될 수 있다. 연결 (concatenation) (+) 을 위한 메타-문자는 단일 문자 (또는 하위-문자열들) 로부터 다수의 문자 매칭 패턴들을 생성하는데 사용되며, 선택 (alternation) (|) 을 위한 메타-문자는 2 개 이상의 하위-문자열들 중 임의의 것과 매칭할 수 있는 정규 표현식을 생성하는데 사용될 수도 있다. 메타-문자 클레이니 스타 (Kleene-star) (*) 는 패턴을, 선행하는 문자 또는 문자열의 발생하지 않음을 포함하는, 임의의 회수와 매칭되게 한다.
상이한 연산자들와 단일 문자들을 결합시키는 것은 표현식들의 복잡한 하위패턴들 (subpattern) 을 구성될 수 있게 한다. 예를 들어서, (th(is|at)*) 와 같은 하위패턴은 th, this, that, thisis, thisat, thatis, 또는 thatat와 같은 다수의 문자열들과 매칭할 수도 있다. 표현식의 복잡한 하위패턴의 다른 실례는 탐색할 문자들의 리스트의 리스팅을 가능하게 하는 문자 클래스 구성 [...] 을 포함하는 것일 수도 있다. 예를 들어서, gr[ea]y는 grey 및 gray 모두를 탐색한다. 다른 복잡한 하위패턴 실례들은 예를 들어서, [A-Z] 와 같은 문자들의 범위를 표시하기 위한 데시 (dash) 또는 임의의 하나의 문자와 매칭하는 메타-문자 "."를 사용할 수도 있는 것들이다. 패턴의 요소는 원자적 요소 또는 하나 이상의 메타-문자들과 결합되는 하나 이상의 원자적 요소들의 결합일 수도 있다.
DFA 상태 머신 또는 NFA 상태 머신으로의 입력은 통상적으로 (8-비트) 바이트들의 문자열과 같은 세그먼트이며, 즉 알파벳이 입력 스트림 (즉, 수신된 패킷들) 으로부터의 단일 바이트 (하나의 문자 또는 심볼) 일 수도 있다. 입력 스트림 내의 각 세그먼트 (예를 들어서, 바이트) 는 일 상태에서 다른 상태로의 천이를 낳을 수도 있다. DFA 상태 머신 또는 NFA 상태 머신의 상태들 및 천이 함수들은 그래프에 의해서 표현될 수도 있다. 그래프 내의 각 노드는 상태를 나타내며, 그래프 내의 호들 (arcs) (또는, 본 명세서에서 천이 호들로 지칭됨) 은 상태 천이들을 나타낼 수도 있다. 상태 머신의 현 상태는 그래프 내의 특정 노드를 선택하는 노드 식별자에 의해서 표현될 수도 있다.
문자들의 입력 스트림 내에서 정규 표현식을 프로세싱하고 정규 표현식에 의해서 기술되는 패턴 또는 패턴들을 찾기 위해서는 DFA를 사용하는 것은 결정성 런 타임 (run time) 수행을 갖는 것으로 특성화될 수도 있다. DFA의 다음 상태는 입력 문자 (또는 심볼) 및 DFA의 현 상태로부터 결정될 수도 있는데, 그 이유는 DFA 상태마다 오직 하나의 상태 천이가 존재하기 때문이다. 이로써, DFA의 런 타임 수행은 결정론적인 것으로서 말해지며 그 거동은 입력으로부터 완벽하게 예측될 수도 있다. 그러나, 이러한 결정성으로 인해 절충되는 것은 노드들의 개수 (또는 그래프 크기) 가 패턴의 크기와 함게 지수적으로 증가할 수도 있는 그래프이다.
이와 대조하여서, NFA 그래프의 노드들의 개수 (또는 그래프 크기) 는 패턴의 크기와 선형적으로 증가하는 것으로 특성화될 수도 있다. 그러나, 문자들의 입력 스트림 내에서 정규 표현식을 프로세싱하고 정규 표현식에 의해서 기술되는 패턴 또는 패턴들을 찾기 위해서는 NFA를 사용하는 것은 비결정성 (non-deterministic) 런 타임 수행을 갖는 것으로 특성화될 수도 있다. 예를 들어서, 입력 문자 (또는 심볼) 및 NFA의 현 상태가 주어지면, 천이할 NFA의 2 개 이상의 다음 상태가 존재할 수도 있다. 이로써, NFA의 다음 상태는 입력 및 NFA의 현 상태에 의해서 고유하게 결정될 수 없다. 이로써, NFA의 런 타임 수행은 비결정론적인 것으로서 말해지며 그 거동은 입력으로부터 완벽하게 예측될 수 없다.
도 2a 내지 도 2g는 DFA "그래프 폭증 (graph explosion)" 개념을 도시한다. 도 2a, 도 2b 및 도 2c는 각기 패턴들 ".*a[^\n]", ".*a[^\n] [^\n]", ".*a[^\n] [^\n] [^\n]" 에 대한 NFA 그래프들을 나타내며, 도 2d, 도 2e 및 도 2f는 각기 동일한 패턴들에 대한 DFA 그래프들을 나타낸다. 도 2a 내지 도 2f에 도시되고 도 2g의 표에 의해서 요약되는 바와 같이, NFA 그래프는 몇몇 패턴들에 대해서 선형으로 증가하는 반면에, DFA 그래프는 동일한 패턴들에 대해서 지수적으로 증가하며 이로써 그래프 폭증을 발생한다. 도시된 바와 같이, 소정의 패턴 또는 패턴들에 대해서, DFA 상태들의 개수는 통상적으로 수백 개 이상의 크기의 상태만큼 또는 천 개 이상의 크기의 상태만큼 NFA 상태들의 개수보다 많을 수도 있다. 이는 "그래프 폭증"의 실례이며, DFA의 전형적인 특성이다.
본 명세서에서 개시된 실시예들에 따라서, 컨텐츠 탐색은 DFA, NFA, 및 이들의 조합을 사용하여서 수행될 수도 있다. 일 실시예에 따라서, 런 타임 프로세서, 코-프로세서, 이들의 조합이 하드웨어로 구현될 수도 있으며 컴파일러 및 워커 (walker) 를 구현하도록 구성될 수도 있다.
컴파일러는 패턴 또는 패턴들의 입력 리스트 (또는 서명들 또는 규칙들로서 알려짐) 를 DFA, NFA 또는 이들의 조합 내로 컴파일링할 수도 있다. DFA 및 NFA는 DFA 그래프 및 표 및 NFA 그래프 및 표와 같은 이진 데이터 구조들일수도 있다.
워커는 런 타임 프로세싱, 예를 들어서, 입력 스트림 내의 패턴의 존재를 식별하는 동작들, 또는 패턴을 입력 스트림 내의 컨텐츠로 매칭시키는 동작을 수행할 수도 있다. 컨텐츠는 인터넷 프로토콜 데이터그램의 페이로드 부분이거나 입력 스트림 내의 임의의 다른 적합한 페이로드일 수도 있다. DFA 또는 NFA 그래프의 런 타임 프로세싱은 본 명세서에서 패턴 매칭을 결정하도록 페이로드를 사용하여서 DFA 그래프 또는 NFA 그래프를 워킹 (walking) 또는 트라버싱하는 (traversing) 것으로서 지칭될 수도 있다. DFA, NFA 또는 이들의 조합을 생성하도록 구성된 프로세서는 본 명세서에서 컴파일러로서 지칭될 수도 있다. 생성된 DFA, NFA 또는 이들의 조합을 사용하여서 페이로드의 런 타임 프로세싱을 구현하도록 구성된 프로세서는 본 명세서에서 워커로서 지칭될 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, 네트워크 서비스 프로세서 (100) 는 보안 어플라이언스 (102) 에서 컴파일러 및 워커를 구현하도록 구성될 수도 있다.
도 3은 본 명세서에서 개시된 실시예들이 구현될 수도 있는 도 1의 보안 어플라이언스 (102) 의 다른 실시예의 블록도이다. 도 1을 참조하여서 기술된 바와 같이, 보안 어플라이언스 (102) 는 하나 이상의 네트워크들에 동작하게 커플링되며 가속화 유닛 (106) 을 포함할 수도 있는 네트워크 서비스 프로세서 (100) 및 메모리 (104) 를 포함할 수도 있다. 도 3를 참조하면, 네트워크 서비스 프로세서 (100) 는 이진 이미지 (112) 를 생성하는 컴파일러 (306) 및 이진 이미지 (112) 를 사용하는 워커 (320) 를 구현하도록 구성될 수도 있다. 예를 들어서, 컴파일러 (306) 는 (도 1에 도시된) 수신된 패킷들 (101a) 에 대해 패턴 매칭 방법들을 수행하기 위해서 워커 (320) 에 의해서 사용되는 컴파일링된 규칙 데이터를 포함하는 이진 이미지 (112) 를 생성할 수도 있다. 컴파일러 (306) 는 DFA 및 NFA에 유리하게 적합한 규칙 데이터를 결정하는 것에 기초하여서, DFA, NFA 또는 이들의 조합에 대해 컴파일링된 규칙 데이터를 결정함으로써 이진 이미지 (112) 를 생성할 수도 있다.
본 명세서에서 개시된 실시예들에 따라서, 컴파일러 (306) 는 하나 이상의 정규 표현식 패턴들의 세트 (304) 및 선택적인 퀄리파이어 (qualifier) (308) 를 포함할 수도 있는 규칙 세트 (310) 를 프로세싱함으로써 이진 이미지 (112) 를 생성할 수도 있다. 규칙 세트 (310) 로부터, 컴파일러 (306) 는 하나 이상의 정규 표현식 패턴들 모두로부터 선택된 하위패턴들을 사용하여 통합된 (unified) DFA (312) 를 생성하고 런 타임 프로세싱 동안에 워커 (320) 에 의해서 사용되게 하나 이상의 정규 표현식 패턴들의 세트 (304) 내의 적어도 하나의 패턴에 대한 적어도 하나의 NFA (314) 를 생성하고 통합된 DFA (312) 의 상태들 (미도시) 과 적어도 하나의 NFA (314) 의 상태들 간에서 워커 (320) 를 천이시키기 위한 맵핑 정보를 포함하는 메타데이터 (미도시) 를 생성할 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, 생성된 각 NFA는 하나 이상의 정규 표현식 패턴들의 세트 (304) 내의 특정 패턴에 대한 것이며, 통합된 DFA는 하나 이상의 정규 표현식 패턴들의 세트 (304) 내의 모든 패턴들로부터의 모든 하위패턴들에 기초하여서 생성될 수도 있다.
통합된 DFA (312) 및 적어도 하나의 NFA (314) 는 그래프로서 데이터 구조 방식으로 또는 임의의 다른 적합한 형태로 표현될 수 있으며, 메타데이터 내의 맵핑은 하나 이상의 표로서 데이터 구조 방식으로 또는 임의의 다른 적합한 형태로 표현될 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, 소정의 패턴으로부터 선택된 하위패턴이 소정의 패턴 전체이면, 어떠한 NFA도 이 소정의 패턴에 대해서 생성되지 않는다.
워커 (320) 는 수신된 패킷들 (101a) 내의 페이로드로부터의 세그먼트들을 프로세싱 (또한, 본 명세서에서 소모하는 것으로도 지칭함) 하는 것에 기초하여서 통합된 DFA (312) 및 적어도 하나의 NFA (314) 의 상태들을 천이시킴으로써 페이로드를 사용하여서 통합된 DFA (312) 및 적어도 하나의 NFA (314) 를 워킹하도록 구성될 수도 있다. 프로세싱은 페이로드 내의 현 오프셋을 현 세그먼트로부터 다른 세그먼트로 업데이트하는 것을 포함할 수도 있다. 현 오프셋을 업데이트하는 것은 워킹의 방향에 기초할 수도 있으며, 예를 들어서, 워커 (320) 는 순방향 또는 역방향으로 통합된 DFA (312) 또는 적어도 하나의 NFA (314) 를 워킹할 수 있으며, 순방향 워킹에 기초하여서 현 오프셋을 증분시키고 역방향 워킹에 기초하여서 현 오프셋을 감분시킬 수 있다. 이로써, 워커 (320) 는 통합된 DFA (312) 및 적어도 하나의 NFA (314) 를 워킹을 통해서 페이로드를 워킹할 수 있다.
규직 세트 (310) 는 하나 이상의 정규 표현식 패턴들의 세트 (304) 를 포함하며 PCRE (Perl Compatible Regular Expression) 스크립트 파일 형태로 또는 현재 알려졌거나 이후에 개발될 임의의 다른 적합한 형태로 될 수도 있다. PCRE는 보안 및 네트워킹 애플리케이션들에서 정규 표현식 신택스 (syntax) 에 대한 사실상의 표준 (de facto standard) 이 되었다. 심도 있는 패킷 검사를 요구하는 많은 애플리케이션들이 출현하고 보다 많은 위협들이 인터넷에서 만연함에 따라서, 바이러스/공격들 또는 애플리케이션들을 식별하기 위한 대응하는 서명들/패턴들도 또한 보다 복잡하게 되었다. 예를 들어서, 서명 데이터베이스는 간단한 문자열 패턴을 갖는 것으로부터 와일드 카드 문자들, 범위들, 문자 클래스들, 및 진보된 PCRE 서명들을 갖는 정규 표현식 (regex) 패턴들로 진화하였다.
도 3에 도시된 바와 같이, 선택적인 퀄리파이어 (308) 각각은 정규 표현식 패턴들의 세트 (304) 내의 패턴과 연관될 수도 있다. 예를 들어서, 선택적인 퀄리파이어 (322) 는 패턴 (316) 과 연관될 수도 있다. 선택적인 퀄리파이어 (308) 각각은 퀄리파이어들과 연관된 패턴을 프로세싱하기 위해 목표된 맞춤 (custom), 진보된 PCRE 서명 옵션들, 또는 다른 적합한 옵션들을 지정하는 하나 이상의 퀄리파이어들일 수도 있다. 컴파일러 (306) 는 하나 이상의 정규 표현식 패턴들의 세트 (304) 내의 모든 패턴들로부터 선택된 하위패턴들 (302) 을 사용하여서 통합된 DFA (312) 를 생성할 수도 있다. 컴파일러 (306) 는 하나 이상의 정규 표현식 패턴들의 세트 (304) 내의 각 패턴으로부터 하위패턴들 (302) 을 선택할 수도 있다. 컴파일러 (306) 는 하나 이상의 정규 표현식 패턴들의 세트 (304) 내의 적어도 하나의 패턴 (316) 에 대한 적어도 하나의 NFA (314) 를 생성하며, 적어도 하나의 NFA (314) 를 생성하기 위해서 사용된 적어도 하나의 패턴 (315) 의 부분 (미도시) 및 적어도 하나의 NFA (314) 의 런 타임 프로세싱 (즉, 워킹) 에 대한 적어도 하나의 워킹 방향은 선택된 하위패턴 (318) 의 길이가 고정된 것인지 가변하는 것인지에 대한 여부 및 적어도 하나의 패턴 (316) 내에서의 선택된 하위패턴 (318) 의 위치에 기초하여서 결정될 수도 있다. 컴파일러 (306) 는 통합된 DFA (312) 및 적어도 하나의 NFA (314) 를 적어도 하나의 메모리 (104) 에 저장할 수도 있다.
하위패턴은 일 패턴으로부터의 하나 이상의 연속하는 요소들의 세트이며, 이 패턴으로부터의 각 요소는 페이로드로부터의 세그먼트들과 매칭하기 위해서, DAF 또는 NFA 그래프에서 일 노드에 의해서 표현될 수도 있다. 상술한 바와 같이 요소는 노드에 의해서 표현되는 문자 클래스 또는 노드에 의해서 표현되는 단일 텍스트 문자일 수도 있다. 컴파일러 (306) 는 패턴 내의 어느 하위패턴이 NFA에 보다 양호하게 적합하는지를, 해당 하위패턴이 도 2a 내지 도 2g를 참조하여서 상술한 바와 같이, 과잉 DFA 그래프 폭증을 유발시킬 가능성이 있는지의 여부에 기초하여서 결정할 수도 있다. 예를 들어서, 연속하는 텍스트 문자들을 포함하는 하위패턴으로부터 DFA를 생성하는 것은 DFA 그래프 폭증을 낳지 않을 것이지만, 상술한 바와 같은 복잡한 하위패턴은 연산자들 및 문자들을 포함할 수도 있으며 이로써 DFA 그래프 폭증을 유발할 수도 있다. 예를 들어서, 다수 회 반복되는 보다 큰 문자 클래스 또는 와일드 카드 문자를 포함하는 하위패턴 (예를 들어서, [^\n]* 또는 [^\n]{16}) 은 DFA에서 과잉하는 상태들을 유발할 수도 있으며 이로써 NFA에 있어서 보다 유리하게 적합할 수도 있다.
전체 패턴의 매칭을 결정하는 것은 통합된 DFA, 적어도 하나의 NFA 또는 이들의 조합으로부터의 매칭 결과들을 사용함으로써 구해질 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, 수신된 패킷들 (101) 내의 페이로드가 패턴 (316) 으로부터 선택된 하위패턴 (318) 과 매칭하는 컨텐츠를 포함하면, 워커는 패턴 (318) 에 대해서 적어도 하나의 NFA를 워킹하도록 천이할 수도 있다. 워커 (320) 는 선택된 하위패턴 (318) 의 매칭, 및 페이로드 내의 하위패턴에 대한 엔드 오프셋 (end offset) 으로서 매칭 하위패턴의 마지막 문자의 수신된 패킷들 내에서의 위치를 식별하는 오프셋을 보고할 수도 있다.
하위패턴 매칭은, 이 하위패턴이 패턴의 하위세트이면 패턴에 대한 부분적 매칭일 수도 있다. 이로써, 워커 (320) 는 패턴에 대한 최종 매칭을 결정하기 위해서, 패턴에 대한 적어도 하나의 NFA를 워킹함으로써 페이로드 내의 패턴의 나머지 부분을 탐색하는 것을 계속할 수도 있다. 패턴이 수신된 패킷 (101a) 내의 하나 이상의 페이로드들을 거칠 수 있다는 것이 이해되어야 한다.
도 4는 도 1의 HNA 코-프로세서 (108) 의 환경의 예시적인 실시예의 블록도 (405) 이다. 본 명세서에서 개시된 실시예들에 따라서, HFA (110) 는 DFA 프로세싱을 참조하여서 워커 (320) 의 기능을 구현하도록 구성될 수도 있으며 HNA (108) 는 NFA 프로세싱을 참조하여서 워커 (320) 의 기능을 구현하도록 구성될 수도 있다.
본 명세서에서 개시된 실시예들에 따라서, HNA (108) 는 인스트럭션 큐 (454) 로부터 적어도 하나의 인스트럭션들 (453) 을 판독하도록 구성될 수도 있다. 인스트럭션 큐 (454) 는 HNA (108) 에 의해서 프로세싱될 호스트 (미도시) 에 의해서 전송될 수도 있는 적어도 하나의 인스트럭션 (453) 을 저장하도록 구성될 수도 있다. 적어도 하나의 인스트럭션 (453) 은 S1 (459a), S2 (459b), 또는 S3 (459c) 와 같은 적어도 하나의 잡 (job) 을 포함할 수도 있다. 적어도 하나의 잡 각각은 입력 스트림 내에서 매칭하는 도 3a의 하위패턴들 (302) 중 소정의 하위패턴에 대해서 도 1의 HFA 코-프로세서 (110) 에 의해서 식별되는 부분적 매칭 결과들에 기초하여서 결정될 수도 있다.
적어도 하나의 잡 중 소정의 잡은 적어도 하나의 NFA (314) 중 소정의 NFA, 소정의 NFA의 적어도 하나의 소정의 노드, 소정의 페이로드 내의 적어도 하나의 소정의 오프셋, 및 적어도 하나의 워킹 방향을 표시할 수도 있으며, 적어도 하나의 워킹 방향 각각은 적어도 하나의 소정의 노드 중 일 노드에 대응한다. 적어도 하나의 잡 각각은, 소정의 하위패턴에 대응하는 적어도 하나의 패턴 (304) 중 소정의 패턴에 대하여 소정의 NFA 내에서의 매칭을 HNA로 하여금 가속화시키는 (advancing), HFA에 의한 프로세싱의 결과들을 포함할 수도 있다. 이로써, 각 잡은 HNA 코-프로세서 (108) 에 의해서 소정의 패턴의 매칭을 가속화시키기 위해서 HFA 코-프로세서 (110) 에 의해서 결정된 부분적 매칭 결과들을 나타낸다.
HNA (108) 는 그 안에 저장된 적어도 하나의 포인터 (미도시) 또는 다른 적합한 인스트럭션 정보를 판독함으로써 적어도 하나의 인스트럭션 (453) 을 프로세싱할 수도 있다. 적어도 하나의 포인터는 입력 버퍼 (458) 로의 입력 버퍼 포인터 (미도시) 를 포함할 수도 있다. 적어도 하나의 인스트럭션 (453) 은 페이로드 (462) 로의 페이로드 포인터 (미도시), 매칭 결과 버퍼 (466) 로의 결과 버퍼 포인터 (미도시), 세이브 버퍼 (save buffer) (464) 로의 세이프 버퍼 포인터 (미도시) 및 런 스택 (run stack) (460) 으로의 런 스택 포인터 (미도시) 를 또한 포함할 수도 있다.
입력 버퍼 (458), 런 스택 (run stack) (460) 및 세이브 버퍼 (save buffer) (464) 는 본 명세서에서 각기 입력 스택, 런 스택 및 세이브 스택으로서 지칭될 수도 있지만, 입력 버퍼 (458), 런 스택 (run stack) (460) 및 세이브 버퍼 (save buffer) (464) 는 스택의 LIFO (last in first out) 특성을 보이거나 보이지 않을 수도 있다. 입력 버퍼 (458), 런 스택 (run stack) (460) 및 세이브 버퍼 (save buffer) (464) 는 동일하거나 상이한 물리적 버퍼 내에 위치할 수도 있다. 동일한 물리적 버퍼 내에 위치하면, 입력 버퍼 (458), 런 스택 (run stack) (460) 및 세이브 버퍼 (save buffer) (464) 의 엔트리들은 엔트리들의 필드 설정사항에 기초하여서 구별될 수도 있거나, 임의의 다른 적합한 방식으로 구별될 수도 있다. 입력 스택 (458) 및 런 스택 (460) 은 온-칩형일 수도 있는 동일한 물리적 버퍼 내에 위치할 수도 있으며 세이브 버퍼 (464) 는 오프-칩형일 수도 있는 다른 물리적 버퍼 내에 위치할 수도 있다.
적어도 하나의 인스트럭션 (453) 의 S1 (459a), S2 (459b), 또는 S3 (459c) 와 같은 적어도 하나의 잡은 HNA (108) 에 의한 프로세싱을 위해서 입력 스택 (458) 내에 저장될 수도 있다. 적어도 하나의 인스트럭션의 적어도 하나의 잡은 각각 HFA (110) 에 의해서 프로세싱된, 페이로드 (462) 와 같은 동일한 소정의 페이로드에 속할 수도 있다.
HNA (108) 는 입력 버퍼 포인터에 기초하여서, 잡들 S1 (459a), S2 (459b), 또는 S3 (459c) 와 같은, 입력 버퍼 (458) 로부터의 적어도 하나의 잡을 로딩 (즉, 페치 또는 검색) 하도록 구성될 수도 있다. HNA (108) 는 적어도 하나의 잡을 런 스택 (460) 으로 푸싱 (push) (즉, 저장) 할 수도 있다. HNA (108) 는 엔트리 S1 (459a), S2 (459b), 또는 S3 (459c) 와 같은, 런 스택으로부터의 소정의 잡을 팝핑 (popping) (즉, 판독, 페치, 로딩 등) 하고 소정의 잡을 프로세싱할 수도 있다. 각 적어도 하나의 잡 (예를 들어서, S1 (459a), S2 (459b), 또는 S3 (459c)) 은 페이로드 (462) 의 세그먼트 (미도시) 에 대한 페이로드 오프셋 (미도시), 및 그래프 (457) 로의 포인터를 포함할 수도 있으며, 그래프 (457) 는 도 3의 적어도 하나의 NFA (314) 와 같은, 적어도 하나의 유한 오토마톤 중 소정의 유한 오토마톤일 수도 있다.
HNA (108) 는 도 1 및 도 3a의 이진 이미지 (112) 내에 포함될 수도 있는 그래프 메모리 (456) 로부터 그래프 (457) 를 로딩하고 (즉, 페치하고) 페이로드 (462) 의 각각의 페이로드 오프셋과 대응하는 페이로드 세그먼트들을 사용하여서 그래프 (457) 를 프로세싱하는 것을 시작할 수도 있다. HNA (108) 는 페이로드 세그먼트들을 사용하여서 그래프 (457) 의 노드들을 워킹함으로써 그래프 (457) 를 프로세싱할 수도 있다. 그래프 (457) 의 부분적으로 매칭하는 경로는 그래프 (457) 를 생성하는데 사용된 소정의 패턴에 대해 페이로드의 연속하는 세그먼트들과 매칭하는 그래프 (457) 의 적어도 2 개의 노드들을 포함할 수도 있다. 부분적으로 매칭하는 경로는 본 명세서에서 쓰레드 (thread) 또는 활성 쓰레드로서 지칭될 수도 있다.
HNA (108) 이 페이로드 (462) 로부터의 페이로드 세그먼트들을 사용하여서 그래프 (457) 를 프로세싱할 때에, 그래프 (457) 내에서 그의 위치를 세이브 (save) 하고 그 위치로 돌아가기 (resume) 위해서 런 스택 (460) 으로/으로부터 엔트리들을 푸싱 및 팝핑한다. 예를 들어서, HNA (108) 는, 워킹된 노드가 다음 노드가 워킹할 다수의 옵션들을 제공하면, 그래프 내의 그의 위치를 세이브할 필요가 있을 수도 있다. 예를 들어서, HNA (108) 는 그래프 내에 나타난 포크 (fork) 와 같은, 다수의 프로세싱 경로 옵션들을 제공하는 노드를 워킹할 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, DFA 또는 NFA의 노드들은 노드 타입과 연관될 수도 있다. 분할 (split) 또는 가변 카운트 노드 타입과 연관된 노드들은 다수의 프로세싱 경로 옵션들을 제공할 수도 있다. 분할 및 가변 카운트 노드 타입들은 도 5a 및 도 6a를 참조하여서 이하에서 더 개시된다.
본 명세서에서 개시된 실시예들에 따라서, HNA (108) 는 다수의 프로세싱 경로들 중 소정의 경로를 선택하고, 런 스택 (460) 으로 엔트리를 푸싱하도록 구성될 수 있으며, 이 엔트리는 HNA (108) 로 하여금 선택된 경로를 따라서 워킹된 노드에서의 미스매칭 (mismatch) (즉, 부정적) 결과를 결정하는 것에 기초하여서, 다수의 프로세싱 경로들 중 선택되지 않는 경로로 돌아가서 이를 따라서 진행하게 한다. 이로써, 런 스택 (460) 상에 엔트리를 푸싱하는 것은 탐색되지 않은 컨텍스트 (context) 를 나타내는 그래프 (457) 내의 위치를 세이브할 수도 있다. 탐색되지 않은 컨텍스트는, 소정의 세그먼트가 페이로드 (462) 내의 대응하는 페이로드 오프셋에 위치할 수도 있을 때에, HNA (108) 가 소정의 노드로 돌아가고 페이로드 (462) 의 소정의 세그먼트를 사용하여서 소정의 노드를 워킹하도록, 그래프 (457) 의 소정의 노드 및 이에 대응하는 페이로드 오프셋을 표시할 수도 있다. 이로써, 런 스택 (460) 은 엔진 (462) 으로 하여금 그래프 (457) 의 탐색되지 않은 경로를 기억하고 이후에 워킹하게 하는데 사용될 수도 있다. 소정의 노드 및 소정의 페이로드 내의 대응하는 오프셋을 표시하는 엔트리를 푸싱 또는 저장하는 것은 본 명세서에서 탐색되지 않은 컨텍스트, 쓰레드 또는 비활성 쓰레드를 저장하는 것으로서 지칭될 수도 있다. 소정의 노드 및 소정의 페이로드 내의 대응하는 오프셋을, 소정의 페이로드 내의 대응하는 오프셋에 위치하는 세그먼트를 사용하여서 소정의 노드를 워킹하기 위해서, 표시하는 엔트리를 팝핑, 페칭 및 로딩하는 것은 본 명세서에서 쓰레드를 활성화시키는 것으로서 지칭될 수도 있다. 소정의 노드 및 소정의 페이로드 내의 대응하는 오프셋을 표시하는 엔트리를 폐기하는 것은 쓰레드를 리타이어 (retire) 시키는 것 또는 엔트리를 플러싱 (flushing) 하는 것으로서 본 명세서에서 지칭될 수도 있다.
런 스택 (460) 은 HNA (108) 가 그래프 (457) 를 사용하여서 페이로드 (462) 의 세그먼트들을 워킹하면서 페이로드 (462) 의 끝부분에 도달한 경우에 그래프 (457) 내의 그의 위치를 세이브하게 할 수도 있다. 예를 들어서, HNA (108) 는 페이로드 (462) 또는 페이로드 (462) 의 일부가 소정의 패턴과 부분적으로 매칭하고 페이로드 (462) 의 현 페이로드 오프셋이 페이로드 (462) 의 엔드 오프셋 (end offset) 이다고 결정할 수도 있다. 이로써, HNA (108) 는 소정의 패턴의 오직 부분적 매칭만이 발견되었고 전체 페이로드 (462) 가 프로세싱되었음을 결정할 수도 있다. 이로써, HNA (108) 는 프로세싱된 페이로드 (462) 와 동일한 플로우에 대응하는 다음 페이로드를 사용하는 워킹을 계속하도록 런 스택 (460) 컨텐츠를 세이브 버퍼 (464) 내에 세이브할 수도 있다. 세이브 버퍼 (464) 는 전체 페이로드 (462) 가 프로세싱된 경우에 런 스택 (460) 의 런닝 상태 (running state) 를 미러링 (mirroring) 하면서, 런 스택 (460) 의 적어도 하나의 런 스택 엔트리를 저장하도록 구성될 수도 있다.
패턴의 최종 (즉, 전체 또는 완료된) 매칭을 찾은 것에 기초하여서, HNA는 현 잡, 예를 들어서 S1 (459a) 와 같은, 입력 버퍼로부터 로딩된 잡과 연관된 런 스택 (460) 내의 엔트리들을 팝핑 및 폐기하고 매칭 결과들 (미도시) 을 매칭 결과 버퍼들 (466) 에 세이브할 수도 있다. 이와 달리, HNA (108) 는 모든 가능한 매칭 경로들이 관심 대상이 될 수도 있을 때에 현 잡 (current job) 과 연관된 런 스택 (460) 의 엔트리들을 프로세싱하는 것을 계속할 수도 있다.
매칭 결과들은 패턴의 최종 매칭이 결정된 노드와 연관된 노드 어드레스를 포함할 수도 있다. 패턴의 최종 매칭이 결정된 노드는 본 명세서에서 마킹된 노드 (marked node) 로서 지칭될 수도 있다. 그래프 (457) 내에서의 최종 매칭 위치의 노드 어드레스 또는 다른 식별자, 매칭 패턴 식별자, 매칭 패턴 길이 또는 임의의 다른 적합한 매칭 결과들 또는 이들의 조합이 매칭 결과들 내에 포함될 수도 있다.
현 잡과 연관된 런 스택 엔트리들 모두를 프로세싱한 것에 기초하여서, HNA (108) 가 인스트럭션 (453) 의 잡들을 순차적으로 프로세싱하도록 구성될 수도 있는 경우에, 입력 버퍼 (458) 로부터 이전에 로딩된 다음 잡 (예를 들어서, S2 (459b)) 을 런 스택으로부터 로딩할 수도 있다. 이로써, HNA (108) 는 그래프 메모리 (456) 로부터 다음 그래프 (미도시) 를 페칭하고, 다음 잡에 의해서 식별된 페이로드 (462) 로부터의 하나 이상의 페이로드 세그먼트들을 사용하여서 다음 그래프를 워킹하고, 런 스택 (460) 이 빌 때까지 추가 잡들을 계속 프로세싱할 수도 있다.
페이로드 (462) 를 사용하여서 그래프 (457) 를 워킹하는 동안에 페이로드 (462) 의 미스매칭을 찾는 것에 기초하여서, HNA (108) 는 현 잡 (예를 들어서, S1 (459a)) 과 연관된 엔트리를 런 스택 (460) 으로부터 팝핑하고 팝핑된 엔트리의 컨텐츠에 기초하여서 페이로드 (462) 의 다음 세그먼트를 사용하여서 다음 노드를 워킹할 수도 있다. 런 스택 (460) 이 현 잡과 연관된 엔트리를 포함하지 않으면, HNA (108) 는 현 잡을 완료하고 입력 버퍼 (458) 로부터 이전에 로딩된 다음 잡 (예를 들어서, S2 (459c)) 을 런 스택 (460) 으로부터 로딩할 수도 있다. 이로써, HNA (108) 는 로딩된 다음 잡에 기초하여서 다음 그래프를 워킹하고 런 스택 (460) 이 빌 때까지 추가 잡들을 계속 프로세싱하도록 구성될 수도 있다.
본 명세서에서 개시된 실시예들에 따라서, HNA (108) 의 워커 (320) 기능은 소정의 NFA를 추정적인 방식으로 (in a speculative manner) 워킹함으로써 입력 스트림에 대해 적어도 하나의 정규 표현식 패턴을 매칭하는 것을 최적화시키는 것을 포함할 수도 있다. 이 추정적 방식은 입력 스트림 내의 패킷의 페이로드 내의 소정의 오프셋에서의 세그먼트를 사용하여서, 병행하여 (in parallel), 소정의 NFA의 적어도 2 개의 노드들을 워킹하는 것을 포함할 수도 있다. 이 워킹은 적어도 2 개의 노드들의 각각의 노드에서, 페이로드 내의 소정의 오프셋에서, 세그먼트에 대한 매칭 결과를 결정하는 것을 포함할 수도 있다. 워킹은 결정된 각 매칭 결과의 주합 (aggregation) 에 기초하여서, 소정의 유한 오토마톤을 워킹하기 위한 적어도 하나의 후속 동작을 결정하는 것을 더 포함할 수도 있다. 소정의 NFA를 추정적인 방식으로 워킹함으로써 입력 스트림에 대해 적어도 하나의 정규 표현식 패턴을 매칭하는 것을 최적화시키는 것은 이하에서 더 개시된다.
도 5a는 입력 스트림 (미도시) 내의 정규 표현식 패턴 (502) 을 매칭시키기 위해서 워커 (320) 에 의해서 사용될 수도 있는 NFA 그래프 (504) 의 예시적인 실시예의 블록도 (500) 이다. 상술한 바와 같이, HNA (108) 는 NFA 프로세싱에 있어서 워커 (320) 의 기능을 구현하도록 구성될 수도 있다.
예시적인 실시예에서, 입력 스트림은 페이로드 (542) 를 갖는 패킷 (미도시) 을 포함할 수도 있다. 정규 표현식 패턴 (502) 은 문자 h, 및 이에 후속하는, 개행 문자 (newline character) 와 매칭하지 않는 한정되지 않은 개수의 연속하는 문자들 (즉, [^\n]*) 을 특정하는 패턴 "h[^\n]*ab" 이다. 한정되지 않은 개수는 제로 또는 그 이상일 수도 있다. 패턴 (502) 은 또한 개행 문자와 매칭하지 않는 한정되지 않은 개수의 문자들을 연속하여 따르는 문자들 "a" 및 "b"을 더 포함한다. 예시적인 실시예에서, 페이로드 (542) 는 페이로드 (542) 내의 각각의 오프셋들 (520a 내지 520d) (즉, 0,1,2,3) 에 대해서 세그먼트들 (522a 내지 522d) (즉, h,x,a,b) 을 포함한다.
정규 표현식 패턴 (502), NFA 그래프 (504), 페이로드 (542), 세그먼트들 (522a 내지 522d) 및 오프셋들 (520a 내지 520d) 은 예시적인 목적을 위해서 사용된 실례들을 나타내며, 본 명세서에서 개시된 시스템들, 방법들 및 대응하는 장치는 임의의 적합한 정규 표현식 패턴, NFA 그래프, 페이로드, 세그먼트들 및 오프셋들에 적용될 수 있음이 이해되어야 한다. 또한, NFA 그래프 (504) 는 보다 큰 NFA 그래프 (미도시) 의 하위-섹션일 수도 있음이 이해되어야 한다. 또한, 페이로드 (542) 는 보다 큰 페이로드 (미도시) 의 부분이며 이 부분은 보다 큰 페이로드의 시작위치, 끝위치 또는 임의의 위치에 있을 수도 있으며, 예시적인 실시예에서의 것과는 상이한 오프셋들을 낳을 수도 있다.
예시적인 실시예에서, NFA 그래프 (504) 는 정규 표현식 패턴 (502) 을 입력 스트림에 매칭시키도록 구성된다. 예를 들어서, NFA 그래프 (504) 는 노드들 (N0 506, N1 508, N2 510, N3 512, N4 514, 및 N5 515) 과 같은, 컴파일러 (306) 에 의해서 생성된 복수의 노드들을 포함하는 그래프일 수도 있다. 노드 (NO 506) 는 패턴 (502) 에 대한 시작 노드를 나타내며, 노드 (N5 515) 는 패턴 (502) 에 대한 마킹된 노드를 나타낼 수도 있다. 마킹된 노드 (N5 515) 는 입력 스트림에 대해 매칭되는 패턴 (502) 의 최종 (즉, 전체 또는 완료된) 매칭을 반영하는 표시자와 연관될 수도 있다. 이로써, 워커 (302) 는 패턴 (502) 이, 마킹된 노드 (N5 515) 를 트라버싱하는 것에 기초하여서, 입력 스트림에서 매칭한다고 결정할 수도 있다.
본 명세서에서 개시된 실시예에 따라서, 워커 (320) 는 정규 표현식 패턴 (502) 을 입력 스트림에 대해 매칭시키기 위해서 NFA 그래프 (504) 를 통해서 한번에 하나의 세그먼트로 해서 페이로드 (542) 의 세그먼크들 (522a 내지 522d) 을 워킹할 수도 있다. 소정의 노드를 워킹하는 것을 위한 세그먼트들 (516) 중 소정의 세그먼트는 페이로드 (542) 내의 현 오프셋인 오프셋들 (518) 의 각각의 오프셋에 기초하여서 결정될 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, 워커 (320) 는 현 오프셋을 증분 또는 감분시킴으로써 현 오프셋을 업데이트할 수도 있다. 예를 들어서, 워커 (320) 는 순방향 또는 역방향으로 NFA 그래프 (504) 를 워킹하고 이로써 현 오프셋을 각기 증분 또는 감분시킴으로써 순방향 (543) 또는 역방향 (546) 으로 페이로드 (542) 로부터의 세그먼트들을 워킹할 수도 있다.
노드들 (N0 506, N2 510, N3 512, N4 514) 은 페이로드 (542) 의 소정의 세그먼트에 대해 각각의 요소를 매칭하도록 구성되는 반면에, 노드들 (N1 508 및 N5 515) 은 어떠한 매칭 기능도 표시하지 않는 노드 타입의 노드들이며 따라서 페이로드 (542) 로부터 프로세싱하지 않을 것이다. 예시적인 실시예에서, 노드 (N1 508) 는 다수의 천이 경로 옵션들을 워커 (320) 에 제공하는 분할 노드이다. 예를 들어서, 분할 노드 (N1 508) 를 워킹하는 것은 엡실론 (epsilon) 경로들 (530a 및 530b) 을 제공한다. 본 명세서에서 개시된 실시예들에 따라서, 워커 (320) 는 워커 (306) 와 상호 일치하는 묵시적 (implicit) 설정사항에 기초하여서 다수의 경로들 (530a 및 530b) 중 소정의 경로를 선택할 수도 있다. 예를 들어서, 컴파일러 (306) 는 워커 (320) 가 결정성 경로를 따른다는 묵시적 이해에 기초하여서, 예를 들어서, 워커 (320) 가 분할 노드 (508) 를 워킹하는 것에 기초하여서 상부 엡실론 경로 (530a) 를 선택한다는 묵시적 이해에 기초하여서 NFA 그래프 (504) 를 생성할 수도 있다. 본 명세서에서 개시된 실시예에 따라서, 상부 엡실론 경로 (530a) 가 레이지 경로 (lazy path) 를 나타내는 때에 상부 엡실론 경로 (530a) 가 선택될 수도 있다. 레이지 경로는 요소들의 최단 가능한 매칭을 나타내는 경로일 수도 있다.
본 명세서에서 개시된 실시예들에 따라서, 분할 노드 (508) 는 다수의 경로 옵션들을 제공하도록 분할 노드 메타데이터 (미도시) 와 연관될 수도 있다. 예를 들어서, 분할 노드 메타데이터는 예시적인 실시예에서 노드들 (N2 510 및 N3 512) 와 같은 다수의 후속 노드들을 직접적으로 아니면 간접적으로 표시할 수도 있다. 다수의 후속 노드들이 직접적으로 표시되면, 메타데이터는 후속 노드들 (N2 510 및 N3 512) 에 대한 절대 어드레스들 또는 포인터들을 포함할 수도 있다. 다수의 후속 노드들이 간접적으로 표시되면, 메타데이터는 후속 노드들 (N2 510 및 N3 512) 에 대한 절대 어드레스들 또는 그들로의 포인터들을 푸는데 (resolve) 사용될 수 있는 인덱스 또는 오프셋들을 포함할 수도 있다. 이와 달리, 후속 노드들을 직접적으로 아니면 간접적으로 표시하기 위한 다른 적합한 형태가 사용될 수도 있다.
묵시적 이해는 분할 노드 메타데이터 내의 특정 엔트리 위치에 포함되는 노드 메타데이터에 기초하여서 다수의 후속 노드들 중 소정의 후속 노드를 선택하게 워커 (320) 를 구성시키는 것을 포함할 수도 있다. 컴파일러 (306) 는 지정된 엔트리 위치에서의 소정의 후속 노드의 표시를 포함하는 분할 노드 메타데이터를 생성하도록 구성될 수도 있다. 이로써, 상부 엡실론 경로 (530a) 와 같은 소정의 경로가 분할 노드 (N1 508) 에서 워커 (320) 에 의해서 선택될 것이라는 묵시적 이해는 NFA 그래프 (504) 를 생성하는 컴파일러 (306) 에 의해서 사용될 수도 있다.
도 5b는 레이지 비-추정적 방식 (lazy non-speculative manner) 으로 페이로드 (542) 를 사용하여 도 5a의 NFA 그래프를 워킹하기 위한 프로세싱 사이클들의 예시적인 실시예의 표 (538) 이다. 프로세싱 사이클들은 하나 이상의 클록 사이클들을 포함할 수도 있음이 이해되어야 한다.
표 (538) 에서 도시된 바와 같이, 프로세싱 사이클들 (540a 내지 540h) 은 매칭 결과 (534) 를 결정하고 매칭 결과 (534) 에 기초하여서 워커 동작 (536) 을 결정하기 위해서 현 오프셋 (532) 에서의 페이로드 (542) 로부터의 세그먼트를 사용하여서 현 노드 (530) 를 워킹하는 것을 포함할 수도 있다. 예시적인 실시예에서, 노드 (N0 506) 는 문자 노드 타입을 가질 수도 있다. 예를 들어서, 노드 (N0 506) 는 입력 스트림 내의 문자 "h"와 매칭하게 구성된 문자 노드일 수도 있다. 예시적인 실시예에서, 워커 (320) 는 프로세싱 사이클 (540a) 에서 현 오프셋 (520a) 에서의 세그먼트 (522a) (즉, "h") 를 사용하여서 워킹 노드 (NO 506) 를 워킹할 수도 있다.
워커 (320) 는 세그먼트 (522a) 가 노드 (NO 506) 에서의 문자 "h"와 매칭할 때에 매칭 결과 (534) 가 긍정적 (positive) 매칭 결과이라고 결정할 수도 있다. 시작 노드 (NO 506) 와 연관된 메타데이터 (미도시) 를 통해서 컴파일러 (306) 에 의해서 특정되는 바와 같이, 워커 (320) 는 순방향으로 워킹하고 노드 (NO 506) 와 연관된 메타데이터에 의해서 표시되는 후속 노드를 페치하고 현 오프셋을 520a (즉, "0") 으로부터 520b (즉, "1") 로 증분할 수도 있다. 노드 (NO 506) 에 의해서 표시되는 후속 노드는 예시적인 실시예에서 분할 노드 N1 (508) 이다. 이로써, 워커 (320) 는 페이로드 (542) 내에서 현 오프셋을 "1"로 업데이트하고 분할 노드 (N1 508) 로 천이하는 것을 포함하는 프로세싱 사이클 (540a) 에서의 동작 (536) 을 취한다. 이러한 천이는 분할 노드 (N1 508) 를 페치하는 것 (또한, 본 명세서에서는 로딩하는 것으로도 지칭됨) 을 포함할 수도 있다.
분할 노드 (N1 508) 가 예를 들어서 엡실론 경로들 (530a 및 530b) 과 같은, 다수의 천이 경로 옵션들을 제공하기 때문에, 프로세싱 사이클 (540b) 에서의 동작 (536) 은 페이로드 (542) 와 독립적으로 그리고 페이로드 (542) 로부터의 소모 (즉, 프로세싱) 없이, 상부 엡실론 경로 (530a) 를 선택하고 노드 (N2 510) 를 페칭하는 것을 포함할 수도 있다. 어떠한 매칭 기능도 분할 노드 (N1 508) 에 의해서 수행되지 않기 때문에, 현 오프셋/세그먼트 (532) 는 변화되지 않으며, 이로써 페이로드는 프로세싱 사이클 (540b) 동안 프로세싱되지 않는다.
분할 노드 (N1 508) 는 다수의 경로 옵션들을 제공하기 때문에, 동작 (536) 은 예를 들어서 노드 (N3 512) 의 직접적 또는 간접적 식별자 및 현 오프셋 (520b) (즉, "1") 을 저장함으로써 탐색되지 않은 컨텍스트를 저장하는 것을 포함할 수도 있다. 선택된 천이 경로는 본 명세서에서 현 또는 활성 쓰레드로 지칭될 수도 있으며 저장된 각 트라버싱되지 않은 경로 (untraversed transition path) 는 본 명세서에서 저장된 쓰레드로서 지칭될 수도 있다. 각 쓰레드는 대응하는 노드 식별자 및 페이로드 내의 오프셋에 의해서 식별될 수도 있다. 이로써, 탐색되지 않은 컨텍스트는 탐색되지 않은 쓰레드 (즉, 경로) 를 식별할 수도 있다.
탐색되지 않은 컨텍스트를 저장하는 것은, 부정적인 매칭 결과가 선택된 부분적으로 매칭하는 경로를 따라서 발생하면, 예를 들어서, 부정적인 매칭 결과가 노드 (N2 510) 에서 또는 노드 (N2 510) 로부터 연장된 경로를 따르는 노드들에서 결정되면, 워커 (320) 로 하여금 페이로드 (542) 내의 오프셋 (520b) 에서의 세그먼트 "1"를 사용하여서 노드 (N3 512) 를 워킹하게 하기 위해서 노드 (N3 512) 로 돌아가는 것을 기억하게 할 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, 탐색되지 않은 컨텍스트는 패턴 (502) 에 대한 최종 매칭이 선택된 천이 경로를 따라서 식별된 경우에 탐색되지 않은 컨텍스트를 페기할지 아니면 프로세싱할지를 워커 (320) 에게 표시하는 DUP (Discard Unexplored Processing) 표시자로 마킹될 수도 있다.
예를 들어서, 입력 스트림 내의 패턴 (502) 에 대한 최종 (즉, 전체 또는 완료된) 매칭을 표시하는 마킹된 노드 (N5 515) 에 도달하는 것에 기초하여서, 워커 (320) 는 패턴 (502) 과 매칭하는 NFA 그래프 (504) 의 다른 경로를 결정하기 위해서 오프셋 (520b) 에서의 세그먼트 "x"를 사용하여서 노드 (N3 512) 를 워킹함으로써 탐색되지 않은 컨텍스트를 프로세싱할지 아니면 탐색되지 않은 컨텍스트를 폐기할지의 여부를 결정하는데 DUP 표시자를 사용할 수도 있다. 탐색되지 않은 컨텍스트를 DUP 표시자로 마킹하는 것은 예를 들어서, 탐색되지 않은 컨텍스트와 연관된 비트 또는 필드를, 스택 엔트리의 목표된 프로세싱을 알리도록, 참 (true) 으로 설정함으로써 아니면 스택 엔트리의 목표된 폐기를 알리도록, 거짓 (false) 으로 설정함으로써와 같이, 임의의 적합한 방식으로 탐색되지 않은 컨텍스트를 마킹하는 것을 포함할 수도 있다.
저장된 쓰레드가 트라버싱되는지의 여부는 컴파일러 (306) 에 의해서 결정될 수도 있다. 예를 들어서, 컴파일러 (306) 는 각 노드에 대한 대응하는 메타데이터 내의 설정사항을 구성함으로써 DUP 표시자가 설정되는지의 여부를 제어할 수도 있다. 이와 달리, 컴파일러 (306) 는, 모든 저장된 쓰레드들이 트라버싱되게 되게 특정하고, 모든 가능한 매칭들이 식별되게 하는, 유한 오토마톤과 연관된 보편적인 (global) 메타데이터 내에 포함된 보편적인 설정사항을 구성할 수도 있다.
예시적인 실시예에서, 엡실론 천이 경로 (530a) 의 선택은 노드 (N2 510) 에서 또는 현 쓰레드의 노드 (N4 514) 와 같은 후속 노드에서의 매칭 실패를 검출하는 것을 낳을 수도 있다. 이로써, 매칭 실패가 검출되면, 엡실론 천이 경로 (530b) 에 대해 저장된 쓰레드가 이어서 트라버싱될 수도 있다. 이와 달리, 엡실론 천이 경로 (530b) 가 컴파일러 (306) 에 의해서 특정되면, 엡실론 천이 경로 (530b) 는, 엡실론 천이 경로 (530b) 를 트라버싱하는 것이 매칭 실패의 검출을 낳은지의 여부와 상관없이, 트라버싱될 수도 있다.
트라버싱되지 않은 천이 경로를 저장하는 것은 엔트리 내의 현 오프셋 (522b) 의 표시와 연관되게 후속 노드 (N3 513) 의 식별자를 저장함으로써, 도 4의 런 스택 (460) 과 같은, 스택 상에 엔트리를 푸싱하는 것을 포함할 수도 있다. 후속 노드 (N3 513) 의 식별자는 후속 노드의 값, 포인터 또는 임의의 다른 적합한 표시자일 수도 있다. 오프셋의 값은 페이로드 (542) 내의 세그먼트들 (516) 의 위치들을 표시하는 수치 값, 포인트 또는 임의의 다른 적합한 값일 수도 있다.
예시적인 실시예에 따라서, 상부 경로 (즉, 엡실론 천이 경로 (530a)) 를 선택하는 것에 기초하여서, 워커 (320) 는 프로세싱 사이클 (540c) 에서 노드 (N2 510) 를 페치하여 현 오프셋 (520b) (즉, "1") 에서의 세그먼트 (522b) (즉, "x") 를 노드 (N2 510) 의 요소 "a"에 대해 매칭시키고자 할 수도 있다. 세그먼트 (522b) (즉, "x") 가 노드 (N2 510) 의 요소 "a"와 매칭하지 않기 때문에, 프로세싱 사이클 (540c) 에서의 동작 (536) 은 런 스택 (460) 으로부터 엔트리를 팝핑하는 것을 포함할 수도 있다. 팝핑된 엔트리 (544b) 는 예시적인 실시예에서 노드 (N3 512) 및 오프셋 (520b) (즉, "1") 을 표시하는 저장된 엔트리 (544a) 와 같은, 가장 최근에 팝핑된 엔트리 (most recently popped entry) 일 수도 있다.
워커 (320) 는 노드 (N3 512) 로 천이하여서 페이로드 (542) 내의 오프셋 (520b) 에 위치한 세그먼트 "x"를 사용하여서 노드 (N3 512) 를 워킹할 수도 있다. 이로써, 프로세싱 사이클 (540d) 은 매칭 결과 (534) 가 프로세싱 사이클 (540d) 에 대해서 긍정적임을 나타낸다. 프로세싱 사이클 (540d) 에 대한 동작 (536) 은 오프셋 (520c) 으로 현 오프셋을 업데이트하는 것 및 노드 (N3 512) 에 의해서 표시된 후속 노드일 수도 있는 분할 노드 (N1 508) 로 뒤로 천이하는 것을 포함할 수도 있다.
분할 노드 (508) 로의 모든 호들이 엡실론 천이이므로, 워커 (320) 는 다시 다수의 경로 옵션들 중 일 경로를 선택하고, 현 오프셋이 프로세싱 사이클 (540e) 에 대해서는 업데이트되지 않을 때에는 페이로드 (542) 로부터 소모하지 (즉, 프로세싱하지) 않을 수도 있다. 예시적인 실시예에서, 워커 (320) 는 다시 엡실론 천이 경로 (530a) 를 선택한다. 이로써, 워커 (320) 는 다시 노드 (N3 512) 및 현 오프셋 (이제는, 520c (즉, "2")) 을 런 스택 (460) 상에 푸싱함으로써 쓰레드를 저장한다. 프로세싱 사이클 (540f) 에 대해서 도시된 바와 같이, 워커 (320) 는 노드 (N2 510) 를 페치하고 오프셋 (520c (즉, "2")) 에서의 세그먼트 (522c) (즉, "a") 를 노드 (N2 510) 의 요소 "a"로 매칭시킨다. "a"가 노드 (N2 510) 에서 매칭하기 때문에, 워커 (320) 는 현 오프셋을 오프셋 (520d) (즉, "3") 으로 업데이트하고 컴파일러 (306) 에 의해서 구성된 바와 같은 노드 (N2 510) 메타데이터에 의해서 특정되는 노드 (N4 514) 로 천이한다.
이로써, 프로세싱 사이클 (540g) 에 대해서, 워커 (320) 는 후속 노드 (N4 514) 및 오프셋 (520d) 에서의 후속 세그먼트 (522d) (즉, "b") 를 페치할 수도 있다. "b"가 노드 (N4 514) 에서 매칭하기 때문에, 워커 (320) 는 후속 노드 (N5 515) 로 천이할 수도 있다. 노드 (N5 515) 는 입력 스트림 내의 정규 표현식 패턴 (542) 의 최종 매칭 (즉, 전체 또는 완료된 매칭) 을 알리는 표시자와 연관된 마킹된 노드이다. 이로써, 프로세싱 사이클 (540h) 에 대해서, 워커 (320) 는 현 경로를 따르는 워킹을 중단하고 엔트리를 매칭 결과 버퍼 (466) 내에 저장함으로써 최종 매칭을 보고할 수도 있다. 이어서, 워커 (320) 는 저장된 쓰레드들에 대해서 런 스택 (460) 을 체크하고 저장된 쓰레드들을, 대응하는 DUP 표시자에 의해서 표시된 바와 같이, 폐기하거나 활성화시킬 수도 있다. 이로써, 워커 (320) 는 노드 (N3 512) 및 오프셋 (520) (즉, "2") 을 식별하는 엔트리를 팝핑하고, 저장된 쓰레드를, 오프셋 (520c) 에서의 세그먼트 (522c) 를 사용하여서 노드 (N3 512) 를 워킹함으로써 활성화시킬지 아니면 폐기할지를 여부를 팝핑된 엔트리 (popped entry) 와 연관된 DUP 표시자에 따라서 결정한다.
도 5b의 표 (538) 에 도시된 바와 같이, 페이로드 (542) 를 패턴 (502) 으로 매칭하기 위한 프로세싱 사이클의 개수는 8 개이며, 워커 (320) 는 노드 (N3 512) 를 2 회 기억하고 거기로 복귀하기 위해서 탐색되지 않은 컨텍스트를 푸싱 및 팝핑하였다. 또한, 표 (538) 는 비추정적인 방식으로 페이로드 (542) 를 사용하여서 NFA 그래프 (504) 를 워킹하는 것은 노드 (N2 510) 및 노드 (N3 512) 에서의 2 개의 프로세싱 사이클들에서, 세그먼트 "x"를 프로세싱하는 것을 낳음을 보인다. 본 명세서에서 개시된 실시예들에 따라서, 이러한 수행은 매칭을 위해서 필요한 프로세싱 사이클의 개수를 줄이고, 세그먼트가 프로세싱될 수 있는 회수를 줄이고, 탐색되지 않은 컨텍스트를 저장 및 검색하는데 필요한 푸싱 및 팝핑 동작들을 위해서 메모리가 액세스되는 회수를 줄임으로써 개선될 수도 있다.
본 명세서에서 개시된 실시예들로부터 획득된 성능 최적화는, 소정의 오프셋에서의 소정의 세그먼트는 NFA 내의 적어도 2 개의 노드들에 의해서 프로세싱될 수 있으며, 소정의 오프셋에서의 소정의 세그먼트가 적어도 2 개의 노드들에 의해서 프로세싱되는 시간의 대부분 (예를 들어서, 99 퍼센트) 동안에, 소정의 세그먼트는 적어도 2 개의 노드들 중 제 1 노드에서 매칭하는 것을 실패하고 적어도 2 개의 노드들 중 제 2 노드에서 매칭하는 것을 성공한다는 것을 관측함에 기초할 수도 있다. 예를 들어서, 도 5a의 예시적인 실시예에서, 도 5b의 표 (538) 를 참조하여서 상술한 바와 같이, 소정의 오프셋 (520b) (즉, "1") 에서의 세그먼트 (522b) (즉, "x") 는 노드들 (N2 510 및 N3 512) 모두에 의해서 프로세싱되지만, 노드 (N2 510) 에서는 매칭하지 않고 노드 (N3 512) 에서 매칭한다.
본 명세서에서 개시된 실시예들에 따라서, 매칭 성능은 적어도 2 개의 노드들의 각 노드에서 병행하여 (in parallel) 소정의 오프셋에서의 세그먼트를 프로세싱함으로써 최적화될 수도 있다. 병행하여 적어도 2 개의 노드들을 프로세싱하는 것은 본 명세서에서 추정적 프로세싱 (speculative processing) 으로서 지칭될 수도 있다. 본 명세서에서 개시된 실시예들은 적어도 2 개의 노드들 중 선택된 노드에서의 매칭 동작이 미스매칭 (mismatch) 을 낳을 것이라는 가정에 기초할 수도 있다. 적어도 2 개의 노드들 중 선택된 노드는 본 명세서에서 요소 노드 (element node) 로 지칭될 수도 있다. 선택된 노드에서의 미스매칭에 기초하여서 트라버싱될 것인, 적어도 2 개의 노드들 중 비선택된 노드는 본 명세서에서 "병행 노드 (parallel node)" 로서 지칭될 수 있으며, 동일한 세그먼트가 선택된 노드에 의해서 프로세싱되는 바와 동일한 프로세싱 사이클에서 추정적으로 프로세싱될 수 있으며 이로써 매칭 성능이 개선된다. 이하에서, 도 5d를 참조하여서 기술될 바와 같이, 노드 (N2 510) 및 노드 (N3 512) 모두는 소정의 오프셋 (520b) 에서의 세그먼트 "x"를 사용하여서 프로세싱되며, 소정의 오프셋 (520b) 에서의 세그먼트 "x"가 노드 N2 (510) 에서 워킹되는 바와 동일한 프로세싱 사이클에서 소정의 오프셋 (520b) 에서의 세그먼트 "x"를 노드 (N3 512) 에서 추정적으로 (speculatively) 워킹함으로써 매칭 성능을 최적화시킬 수 있다.
도 5c는 레이지 추정적 (lazy speculative) 프로세싱 규칙들 (578a 내지 578d) 의 표 (570) 의 예시적인 실시예의 블록도이다. 표 (570) 는 요소 노드 매칭 결과들 (574) 및 병행 노드 매칭 결과들 (572) 에 기초하는 동작들 (576) 을 갖는 진리 표 (truth table) 이다. 레이지 추정적 (lazy speculative) 프로세싱 규칙들 (578a 내지 578d) 에 대응하는 4 개의 가능한 경우들이 도시된다. 예를 들어서, 레이지 추정적 프로세싱 규칙들 (578a 내지 578d) 각각은 각기 매칭 결과 긍정적/긍정적, 매칭 결과 긍정적/부정적, 매칭 결과 부정적/긍정적, 및 매칭 결과 부정적/부정적에 기초하는 각각의 후속 동작 (576) 을 갖는다. 후속 동작 (576) 은 병행 노드 (572) 의 매칭 결과와 요소 노드 (574) 의 매칭 결과의 주합에 기초할 수도 있다.
추정적 프로세싱 규칙 (578b) 은, 동작 (576) 이 오프셋을 업데이트하는 것을 표시하고 어떠한 천이도 없음을 표시하기 때문에, 요소 노드와 병행 노드에서 병행하여서 매칭을 함으로써 이 규칙이 매칭 성능을 최적화하기 때문에, 특정 관심 대상이 될 수도 있다. 이로써, 추정적 프로세싱 규칙 (578b) 은 노드 페칭을 위한 메모리 액세스를 제거하면서, 요소 노드와 병행 노드가 병행하여서 후속 세그먼트를 프로세싱하게 한다.
후속 동작 (576) 은, 병행 노드가 추정적으로 프로세싱되기 때문에, 요소 노드에 대한 매칭 결과가 긍정적이면 요소 노드에 대한 후속 동작을 제공하는 것으로, 정해진다. 예를 들어서, 요소 노드에서의 매칭 결과가 긍정적이면, 후속 동작 (576) 은 페이로드 내의 현 오프셋을 업데이트하고 후속 노드로 천이하는 것을 포함하며, 후속 노드느 요소 노드와 연관된 메타데이터에 의해서 특정된 것이다. 요소 노드에 대한 매칭 결과가 긍정적이면, 병행 노드에 대한 매칭 결과가, 후속 동작 (576) 이 탐색되지 않은 컨텍스트를 저장하기 위해서 병행 노드 및 현 오프셋을 푸싱하는 것을 포함할지의 여부를 결정하는데, 사용된다.
예를 들어서, 추정적 프로세싱 규칙 (578a) 이, 현 오프셋에서의 세그먼트를 사용하여서 워커 (320) 가 병행 노드로 복귀하게, 이러한 복귀가 NFA 그래프에서 다른 부분적으로 매칭하는 쓰레드를 산출할 수도 있기 때문에, 하도록 하는 엔트리를 런 스택 (460) 에 푸싱한다. 그러나, 레이지 추정적 프로세싱 규칙 (578c) 에 대한 경우에서와 같이, 병행 노드에서의 매칭 결과가 부정적 매칭 결과이면, 탐색되지 않은 컨텍스트는 런 스택 상으로 푸싱되지 않는데, 그 이유는 현 오프셋에서의 세그먼트를 사용하여서 병행 노드로 복귀하는 것은 패턴의 부분적 매칭을 촉진시키지 못할 것이기 때문이다. 이로써, 매칭 성능은 역시 레이지 추정적 프로세싱 규칙 (578c) 에 의해서 최적화될 수 있는데, 그 이유는 레이지 추정적 프로세싱 규칙 (578c) 이 매칭을 위한 푸싱 동작 및 팝핑 동작 중 적어도 하나의 세트를 필요로 하지 않기 때문이다.
레이지 추정적 프로세싱 규칙 (578d) 에 의해서 도시된 바와 같이, 각 노드에서 부정적인 매칭 결과를 포함하는, 병행 노드의 매칭 결과 (572) 와 요소 노드의 매칭 결과 (574) 의 주합에 기초하여서, 적어도 하나의 후속 동작은 소정의 경로의 워킹을 중단하는 것을 포함할 수도 있다. 페이로드 내의 후속하는 소정의 오프셋에서의 후속 세그먼트는 예를 들어서 저장된 쓰레드에 대해 런 스택 (460) 을 체크하고 저장되었다면 저장된 쓰레드를 팝핑함으로써, 탐색되지 않은 컨텍스트를 감지하는 것에 기초하여서 워킹될 수도 있다. 방법은 탐색되지 않은 컨텍스트를 감지하지 않는 것에 기초하여서 워킹을 종결할 수도 있다.
레이지 추정적 프로세싱 규칙들 (578a 및 578c) 에 의해서 도시된 바와 같이, 요소 노드에서 세그먼트에 대한 긍정적인 매칭 결과를 포함하는 요소 노드의 매칭 결과 (574) 와, 병행 노드에서 세그먼트에 대한 긍정적인 매칭 결과 또는 부정적인 매칭 결과를 포함하는 병행 노드의 매칭 결과 (572) 의 주합에 기초하여서, 적어도 하나의 후속 동작은 후속 오프셋을 생성하게 소정의 오프셋을 업데이트하고 후속 노드로 천이하는 것을 포함한다. 후속 노드는 요소 노드와 연관된 메타데이터에 기초하여서 식별될 수도 있다. 이로써, 후속 노드는 페이로드 내의 후속 오프셋에서의 후속 세그먼트를 사용하여서 워킹될 수도 있다. 레이지 추정적 프로세싱 규칙 (578a) 에 의해서 도시된 바와 같이, 병행 노드에서의 세그먼트에 대한 긍적적인 매칭 결과에 기초하여서, 적어도 하나의 후속 동작은 스택 엔트리 내에 탐색되지 않은 컨텍스트를 저장하고 스택 엔트리를 스택 상으로 푸싱하는 것을 더 포함할 수도 있다. 탐색되지 않은 컨텍스트는 병행 노드 및 소정의 오프셋을 직접적으로 또는 간접적으로 식별한다.
도 5d는 레이지 추정 방식으로 페이로드 (542) 를 사용하여서 도 5a의 NFA 그래프 (504) 를 트라버싱하기 위한 프로세싱 사이클들 (554a 내지 554f) 의 예시적인 실시예의 표 (550) 이다. 표 (550) 에 도시된 바와 같이, 프로세싱 사이클들 (554a 내지 554f) 은 매칭 결과 (534') 를 결정하고 매칭 결과 (534') 에 기초하여서 워커 동작 (536') 을 결정하기 위해서 현 오프셋 (532') 에서의 페이로드 (542) 로부터의 세그먼트를 사용하여서 현 노드 (530') 를 트라버싱하는 것 (traversing) 을 포함할 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, 워커 (320) 는 페이로드 (542) 내의 소정의 오프셋에서의 소정의 세그먼트를 사용하여서, 노드 (N2 510) 및 노드 (N3 512) 양자를 병행하여서 프로세싱하여서, 도 5c에 개시된 레이지 추정적 프로세싱 규칙들을 사용하여서 매칭 성능을 최적화시킬 수도 있다. 예를 들어서, 이하에서 기술되는 바와 같이, 프로세싱 사이클들 (554c 및 554d) 은 노드 (N2 510) 및 노드 (N3 512) 에 대한 매칭 결과들의 주합에 기초하여서 워커 동작 (536') 을 결정할 수도 있다.
위에서 개시한, 도 5b의 실시예와 유사하게, 워커 (320) 는 현 오프셋 (520a) (즉, "0") 에서의 세그먼트 (522a) (즉, "h") 를 사용하여서 시작 노드 (NO 506) 를 워킹할 수도 있다. 워커 (320) 는 세그먼트 (522a) 가 노드 (NO 506) 에서의 문자 "h"와 매칭할 때에 매칭 결과 (534') 가 긍정적 매칭 결과이라고 결정할 수도 있다. 도 5b의 실시예와 유사하게, 노드 (NO 506) 에 의해서 표시되는 후속 노드는 분할 노드 N1 (508) 이다. 이로써, 워커 (320) 는 페이로드 (542) 내에서 현 오프셋을 오프셋 (520b) (즉, "1") 로 업데이트하고 분할 노드 (N1 508) 로 천이하는 것을 포함하는 프로세싱 사이클 (554a) 에서의 동작 (536') 을 취한다. 이러한 천이는 분할 노드 (N1 508) 를 페치하는 것 (또한, 본 명세서에서는 로딩하는 것으로도 지칭됨) 을 포함할 수도 있다.
도 5d의 예시적인 실시예에 따라서, 분할 노드 (N1 508) 와 연관된 분할 노드 메타데이터가 추정적 프로세싱 표시자를 포함할 수도 있다. 추정적 프로세싱 표시자가 분할 노드 메타데이터 내에 포함되지 않으면, 워커 (320) 는 도 5b의 예시적인 실시예에서와 같이 계속될 수도 있다. 추정적 프로세싱 표시자를 포함하는 것은 필드 또는 다른 적합한 데이터를 분할 노드 메타데이터 내에 설정하는 것을 포함할 수도 있다. 필드를 설정하는 것은 추정적 프로세싱을 알리기 위해서 참으로 필드를 구성하고 비-추정적 프로세싱을 알리기 위해서 거짓으로 필드를 구성하는 것을 포함할 수도 있다. 추정적 프로세싱 표시자를 포함하는 것은 워커 (320) 로 하여금 추정적으로 (즉, 병행하여서) 프로세싱될 NFA 그래프 (504) 의 적어도 2 개의 노드들을 워킹하게 하는 임의의 적합한 방식으로 수행될 수도 있다.
도 5d의 예시적인 실시예에 따라서, 분할 노드가 추정적 프로세싱 표시자를 포함하면, 페이로드로부터의 어떠한 세그먼트도 프로세싱 사이클 (554b) 에서는 프로세싱되지 않지만, 워커 (320) 는 노드 (N2 510) 및 노드 (N3 512) 를 페치한다. 예시적인 실시예에서, 노드 (N3 512) 가 추정적으로 프로세싱 (즉, 워킹) 될 것이면, 노드 (N2 510) 는 요소 노드로서 지칭되고 노드 (N3 512) 는 병행 노드 또는 추정 노드로서 지칭될 수도 있다.
프로세싱 사이클 (554c) 에 대해서 도시된 바와 같이, 워커 (320) 는 요소 노드 (N2 510) 에서 세그먼트 (522b) (즉, "x") 에 대한 부정적인 매칭 결과 및 병행 노드 (N3 512) 에서 긍정적인 매칭 결과를 결정할 수도 있다. 이러한 매칭 결과의 주합은 도 5c의 레이지 추정적 프로세싱 규칙 엔트리 (578b) 로 맵핑된다. 이로써, 레이지 추정적 프로세싱 규칙 엔트리 (578b) 의 후속 동작 (576) 은 현 오프셋이 업데이트되고 요소 노드 (N2 510) 및 병행 노드 (N3 512) 가 각기 다시 한번 프로세싱될 것을 특정한다. 요소 노드 (N2 510) 및 병행 노드 (N3 512) 가 프로세싱 사이클 (554c) 에서 이미 페치되었기 때문에, 프로세싱 사이클 (554d) 에서는 어떠한 노드도 페치될 필요가 없다.
프로세싱 사이클 (554d) 에 대해서 도시된 바와 같이, 워커 (320) 는 오프셋 (520c) (즉, "2") 인 업데이트된 오프셋에서의 세그먼트 (522c) (즉, "a") 를 사용하여서 요소 노드 (N2 510) 및 병행 노드 (N3 512) 를 워킹한다. "a"가 개행 문자가 아니기 때문에, 세그먼트 "a" 가 요소 노드 (N2 510) 에서의 요소 "a"와 매칭하고 병행 노드 (N3 512) 에서의 요소 "^\n" 과 매칭할 때에 매칭 결과 (534') 는 요소 노드 (N2 510) 및 병행 노드 (N3 512) 양자에서 모두 긍적적이다. 이로써, 프로세싱 사이클 (554d) 에 대한 매칭 결과 (534') 의 주합은 도 5c의 레이지 추정적 프로세싱 규칙 엔트리 (578a) 로 맵핑된다. 이로써, 병행 노드 (N3 512) 및 현 오프셋 (520c) (즉, "2") 을 표시하는 탐색되지 않은 컨텍스트가 런 스택 (460) 상에 푸싱되고, 요소 노드의 메타데이터에 의해서 특정된 후속 노드는 페치될 수도 있다.
예시적인 실시예에 따라서, 현 오프셋은 오프셋 (520d) (즉, "3") 으로 업데이트하고 노드 (N4 514) 가 페치되고 워커 (320) 를 이 노드로 천이시킨다. 세그먼트 (522d) (즉, "b") 에 대한 긍정적 매칭 결과가 노드 (N4 514) 에서 프로세싱 사이클 (554e) 동안에 결정될 수도 있으며 워커 (320) 는 마킹된 노드 (N5 515) 를 페치하고, 노드 (N4 514) 와 연관된 메타데이터 내에서 노드 (N4 514) 에 대한 후속 노드로서 특정될 수도 있는 마킹된 노드 (N5 515) 로 천이할 수도 있다. 노드 (N5 515) 가 마킹된 노드이기 때문에, 워커는 매칭 결과 버퍼 (466) 로 최종 매칭 결과를 저장하고 활성 쓰레드 (예를 들어서, 현 경로) 를 워킹하는 것을 중단하고 런 스택 (460) 이 비어 있지 않다면 저장된 쓰레드를 활성화하는 것을 중단한다.
예를 들어서, 워커 (320) 는 빈 상태에 대해서 런 스택 (460) 을 체크할 수도 있다. 예시적인 실시예에서, 탐색되지 않은 컨텍스트가 프로세싱 사이클 (554d) 에서 런 스택 (460) 으로 푸싱되었기 때문에 런 스택 (460) 이 비어 있지 않는다. 이로써, 워커 (320) 는 오프셋 (520d) (즉, "3") 에서의 세그먼트 (522d) (즉, "b") 를 사용하여서 병행 노드 (N3 512) 로 워킹하는 것을 가속시키는 것을 표시하는 탐색되지 않은 컨텍스트를 팝핑하며 상술한 바와 같이, 스택 엔트리와 연관된 DUP 표시자에 기초하여서 탐색되지 않은 컨텍스트를 폐기 또는 프로세싱할지의 여부를 결정할 수도 있다. 예시적인 실시예의 표 (550) 에 도시된 바와 같이, 페이로드 (542) 를 패턴 (502) 에 대해 매칭시키기 위한 프로세싱 사이클들의 개수는 6 개이며, 이는 도 5b의 예시적인 실시예에서 사용된 8 개의 프로세싱 사이클들에 비해서 줄어든 개수이다.
도 6a는 입력 스트림 내의 정규 표현식 패턴 (502) 을 매칭시키기 위해서 워커 (320) 에 의해서 사용될 수도 있는 NFA 그래프 (604) 의 블록도 (600) 이다. 예시적인 실시예에서, 분할 노드 (N1 508), 추정 노드 (N3 512) 및 엡실론 천이 경로들 (530a 및 530b) 을 포함하는, 도 5a의 섹션 (507) 은 가변 카운트 노드 (N1N3' 607) 에 의해서 표현된다. 가변 카운트 노드 (N1N3' 607) 는 도 5a의 분할 노드 (N1 508) 및 병행 (즉, 추정) 노드 (N3 512) 의 주합이다.
본 명세서에서 개시된 실시예들에 따라서, 가변 카운트 노드 (N1N3' 607) 는 문자 클래스 (611) (즉, [^\n]) 와 같은 소정의 요소, 가변 카운트 노드에 의해서 표시된 바와 같은, 무한 회수와 같은, 인스턴스들 (instances) 의 가변 회수 (613) 를 식별하도록 구성될 수도 있다. 인스턴스들 (instances) 의 가변 회수 (613) 는 적어도 제로 회수이거나 인스턴스들의 임의의 다른 적합한 회수일 수도 있다. 소정의 요소인 문자 클래스 (611) 는 예시적인 실시예를 예시하기 위한 것이며 소정의 요소는 가변 카운트 노드 (N1N3') 에 의해서 매칭되는 임의의 적합한 요소일 수도 있음이 이해되어야 한다.
가변 카운트 노드는 가변 회만큼 요소를 매칭시킬 수도 있는 노드이며, 회수는 범위 (예를 들어서, 0 회 내지 5 회) 에 의해서 규정될 수도 있다. 가변 카운트 노드는 4 개의 타입의 가변 카운트 노드들: 레이지 (lazy) 노드, 그리디 (greedy) 노드, 포제시브 (possesive) 노드, 또는 올 매칭 노드 (all match node) 중 하나의 노드일 수도 있다. 가변 카운트 레이지 노드는 범위 내에서 요소들의 최단 가능한 매칭을 찾도록 구성될 수도 있다. 가변 카운트 그리디 또는 포제시브 노드는 범위 내에서 요소들의 최장 가능한 매칭을 찾도록 구성될 수도 있다. 가변 카운트 올 매칭 노드는 페이로드 내의 모든 매칭들을 돌려보내도록 구성될 수도 있다.
가변 카운트 레이지 노드는 가변 카운트 레이지 노드와 연관된 메타데이터에 의해서 식별되는 후속 노드에서 세그먼트의 미스매칭에 기초하여서 페이로드로부터의 세그먼트의 단일 인스턴스를 프로세싱 (즉, 소모) 하도록 구성될 수도 있다. 가변 카운트 그리디 노드는, 연속하는 세그먼트들 중 하나의 세그먼트의 미스매칭이 가변 카운트 그리디 노드에서 결정될 때까지 또는 가변 카운트 그리디 노드가 가변 개수의 연속하는 세그먼트들 중 전체 개수를 프로세싱 (즉, 소모) 할 때까지, 페이로드로부터의 연속하는 세그먼트들을 프로세싱하도록 구성될 수도 있다.
도 6a의 예시적인 실시예에서, 가변 카운트 노드 (N1N3' 607) 는 요소 노드 (N2 610) 와 같은 후속 노드 (617) 를 직접적으로 또는 간접적으로 식별하는 메타데이터 (609) 와 연관된 가변 카운트 레이지 노드이다. 예시적인 실시예에서, 워커는 입력 스트림 내의 소정의 요소 (611) 의, 가변 회수의 연속하는 인스턴스들 (613) 중, 제로 이상의 매칭 인스턴스들에 기초하여, 요소 노드 (N2 610) 로의 워킹을 가속시킨다. 예를 들어서, 예시적인 실시예에서, 가변 카운트 레이지 노드 (N1N3' 607) 는 무한 회수로 문자 클래스 요소 "^\n" (즉, 개행 문자가 아님) 의 제로 이상의 인스턴스를 매칭시키도록 구성된다.
본 명세서에서 개시된 실시예들에 따라서, NFA의 각 노드는 노드 타입, 요소, 카운트, 및 후속 노드와 같은, 적어도 4 개의 필드를 포함하는 메타데이터와 연관될 수도 있지만, 적어도 4 개의 필드들 중 하나 이상은 노드 타입에 기초하여서 적용되지 않을 수도 있다.
가변 카운트 레이지 노드 (N1N3' 607) 와 연관된 메타데이터 (609) 는 가변 회수 (613) 에 대한 총 회수의 비교를 가능하게 하도록 페이로드에서 긍정적으로 매칭하는 요소 (611) 의 연속하는 인스턴스들의 총 회수 (미도시) 를 추적하기 위한 카운트 (미도시) 를 포함할 수도 있다.
본 명세서에서 개시된 실시예들에 따라서, 워커 (320) 는 입력 스트림 내의 정규 표현식 패턴 (502) 의 매칭 성능을 최적화하기 위해서 추정적 방식으로 NFA 그래프 (604) 를 워킹하도록 구성될 수도 있다.
도 6b는 레이지 비-추정적 방식으로 페이로드 (542) 를 사용하여서 도 6a의 NFA 그래프 (604) 를 트라버싱하기 위한 프로세싱 사이클들 (628a 내지 628g) 의 예시적인 실시예의 표 (618) 이다. 상술한 도 5a 및 도 5b의 실시예들과 유사하게, 워커 (320) 는 현 오프셋 (520a) (즉, "0") 에서의 세그먼트 (522a) (즉, "h") 를 사용하여서 시작 노드 (N0 606) 를 워킹할 수도 있다. 워커 (320) 는 세그먼트 (522a) 가 시작 노드 (N0 606) 에서의 문자 "h"와 매칭하기 때문에 매칭 결과 (624) 가 프로세싱 사이클 (628a) 에서 긍정적인 매칭 결과라고 결정할 수도 있다. 도 6a의 예시적인 실시예에서, 시작 노드 (N0 606) 에 의해서 표시된 후속 노드는 가변 카운트 레이지 노드 (N1N3' 607) 이다. 이로써, 워커 (320) 는 페이로드 (542) 내에서 현 오프셋을 오프셋 (520b) (즉, "1") 으로 업데이트하고 가변 카운트 레이지 노드 (N1N3' 607) 로 천이하는 것을 포함하는 동작 (626) 을 프로세싱 사이클 (628a) 에서 취한다. 천이는 가변 카운트 레이지 노드 (N1N3' 607) 를 페치하는 것 (본 명세서에서는 로딩으로도 지칭됨) 을 포함할 수도 있다.
가변 카운트 레이지 노드 (N1N3' 607) 가 레이지하기 때문에, 프로세싱 사이클 (628b) 에서의 동작 (626) 은 예를 들어서, 가변 카운트 레이지 노드 (N1N3' 607) 의 직접적 또는 간접적 식별자 및 현 오프셋 (520b) (즉, "1") 을 저장하고 가변 카운트 레이지 노드 (N1N3' 607) 에 의해서 식별된 후속 노드 (617) 로 현 오프셋을 업데이트하지 않고 가속됨으로써, 탐색되지 않은 컨텍스트를 저장하는 것을 포함할 수도 있다. 이로써, 어떠한 페이로드도 프로세싱 사이클 (628a) 에서 가변 카운트 레이지 노드 (N1N3' 607) 에 의해서 프로세싱되지 않는다.
탐색되지 않은 컨텍스트를 저장하는 것은, 부정적인 매칭 결과가 선택된 부분적으로 매칭하는 경로를 따라서 발생하면, 예를 들어서, 부정적인 매칭 결과가 노드 (N2 610) 에서 또는 노드 (N2 610) 로부터 연장된 경로를 따르는 노드들에서 결정되면, 워커 (320) 로 하여금 페이로드 (542) 내의 오프셋 (520b) 에서의 세그먼트 "x"를 사용하여서 가변 카운트 레이지 노드 (N1N3' 607) 를 워킹하게 하기 위해서 가변 카운트 레이지 노드 (N1N3' 607) 로 돌아가는 것을 기억하게 할 수도 있다. 탐색되지 않은 컨텍스트를 저장하기 위해서, 워커 (320) 는 가변 카운트 레이지 노드 (N1N3' 607) 에 대한 식별자 및 오프셋 (520b) 을 포함하는 엔트리를 런 스택 (460) 상에 푸싱한다 (630a).
본 명세서에서 개시된 실시예들에 따라서, 탐색되지 않은 컨텍스트는 패턴 (502) 에 대한 최종 매칭이 선택된 천이 경로를 따라서 식별된 경우에 푸싱된 탐색되지 않은 컨텍스트를 페기할지 아니면 프로세싱할지를 워커 (320) 에게 표시하는 DUP (Discard Unexplored Processing) 표시자로 마킹될 수도 있다. 예를 들어서, 입력 스트림 내의 패턴 (502) 에 대한 최종 (즉, 전체 또는 완료된) 매칭을 표시하는 마킹된 노드 (N5 615) 에 도달하는 것에 기초하여서, 워커 (320) 는 패턴 (502) 과 매칭하는 NFA 그래프 (604) 의 다른 경로를 결정하기 위해서 오프셋 (520b) 에서의 세그먼트 "x"를 사용하여서 가변 카운트 레이지 노드 (N1N3' 607) 를 워킹함으로써 탐색되지 않은 컨텍스트를 프로세싱할지 아니면, 입력 스트림 내의 패턴 (502) 의 오직 하나의 매칭 경로만이 관심 대상일 때에 탐색되지 않은 컨텍스트를 폐기할지의 여부를 결정하는데 푸싱된 스택 엔트리의 DUP 표시자를 사용할 수도 있다.
도 6b의 예시적인 실시예에 따라서, 워커 (320) 는 노드 (N2 610) 를 페치하여서 프로세싱 사이클 (628c) 에서 현 오프셋 (520b) (즉, "1") 에서의 세그먼트 (522b) (즉, "x") 를 노드 (N2 610) 의 요소 "a"로 매칭 (즉, 탐색) 하려고 할 수도 있다. "x"가 노드 (N2 610) 의 요소 "a"와 매칭하지 않기 때문에, 프로세싱 사이클 (628c) 에서의 동작 (626) 은 런 스택 (460) 으로부터 엔트리를 팝핑하는 것 (630b) 을 포함할 수도 있다. 팝핑된 엔트리는 가변 카운트 레이지 노드 (N1N3' 607) 및 오프셋 (520b) (즉, "1") 을 표시하는 최근에 푸싱된 (630a) 엔트리와 같은, 가장 최근에 팝핑된 엔트리일 수도 있다.
워커 (320) 는 가변 카운트 레이지 노드 (N1N3' 607) 로 천이하여서 페이로드 (542) 내의 오프셋 (520b) 에 위치한 세그먼트 "x"를 사용하여서 가변 카운트 레이지 노드 (N1N3' 607) 를 워킹할 수도 있다. "x"가 개행 문자가 아니기 때문에, "x"는 가변 카운트 레이지 노드 (N1N3' 607) 에서 긍정적으로 매칭하며 프로세싱 사이클 (628d) 은 매칭 결과 (624) 가 프로세싱 사이클 (628d) 에 대해서 긍정적임을 나타낸다. 프로세싱 사이클 (628d) 에 대한 동작 (616) 은 오프셋 (520c) 으로 현 오프셋을 업데이트하는 것 및 가변 카운트 레이지 노드 (N1N3' 607) 와 연관된 메타데이터에 의해서 표시된 후속 노드일 수도 있는 요소 노드 (N2 610) 로 뒤로 천이하는 것을 포함할 수도 있다.
프로세싱 사이클 (628e) 에 대해서 도시된 바와 같이, 워커 (320) 는 노드 (N2 610) 를 페치하고 오프셋 (520c) (즉, "2") 에서의 세그먼트 (522c) (즉, "a") 를 비교한다. "a"가 요소 노드 (N2 610) 에서 긍정적 매칭이기 때문에, 워커 (320) 는 현 오프셋을 오프셋 (520d) (즉, "3") 으로 업데이트하고 노드 N4 (614) 로 천이한다.
이로써, 프로세싱 사이클 (628f) 에 있어서, 워커 (320) 는 노드 (N4 614) 및 오프셋 (520d) 에서의 세그먼트 (522d) (즉, "b") 를 페치한다. "b"가 노드 (N4 614) 에서 긍정적 매칭이기 때문에, 워커 (320) 는 노드 N5 (615) 로 천이한다. 노드 (N5 615) 는 입력 스트림 내의 정규 표현식 패턴 (542) 의 최종 매칭 (즉, 전체 또는 완료된 매칭) 을 알리는 표시자와 연관된 마킹된 노드이다. 이로써, 프로세싱 사이클 (628g) 에 대해서, 워커 (320) 는 워킹을 중단하고 엔트리를 매칭 결과 버퍼 (466) 내에 저장함으로써 최종 매칭을 보고할 수도 있다. 이어서, 워커 (320) 는 저장된 쓰레드들에 대해서 런 스택 (460) 을 체크하고 저장된 쓰레드들을, 런 스택 (460) 내의 엔트리들의 대응하는 DUP 표시자에 의해서 표시된 바와 같이, 폐기하거나 활성화시킬 수도 있다.
도 6b의 표 (618) 에 도시된 바와 같이, 페이로드 (542) 를 패턴 (502) 으로 매칭하기 위한 프로세싱 사이클의 개수는 7 개이며, 워커 (320) 는 가변 카운트 레이지 노드 (N1N3' 607) 를 기억하고 거기로 오프셋 (520b) 에서의 세그먼트 "x"를 사용하여서 복귀하기 위해서 탐색되지 않은 컨텍스트를 푸싱 (630a) 및 팝핑 (630b) 하였다. 이로써, 또한, 표 (618) 는 세그먼트 "x"가 가변 카운트 레이지 노드 (N1N3' 607) 및 노드 (N2 610) 양자에서 워커 (320) 에 의해서 프로세싱 (즉, 소모) 되었고 노드 (N2 610) 에서는 미스매칭 (즉, 부정적 매칭) 이었고 가변 카운트 레이지 노드 (N1N3' 607) 에서 긍정적 매칭이었음을 보인다.
본 명세서에서 개시된 실시예들에 따라서, 이러한 매칭 수행은 매칭을 위해서 필요한 프로세싱 사이클의 개수를 줄이고, 소정의 세그먼트가 프로세싱될 수 있는 프로세싱 사이클들의 개수를 줄이고, 탐색되지 않은 컨텍스트를 저장 및 검색하는데 필요한 푸싱 동작 및 팝핑 동작의 회수를 줄여서 메모리가 액세스되는 회수를 줄임으로써 개선될 수도 있다. 도 5d에 대해서 상술한 바와 같은 워킹과 마찬가지로, 본 명세서에서 개시된 실시예들은 추정적 방식으로 NFA 그래프 (604) 를 워킹할 수도 있다.
예를 들어서, 워커 (320) 는 페이로드 (542) 내의 소정의 오프셋에서의 소정의 세그먼트를 사용하여서 NFA (604) 의 적어도 2 개의 노드를 병행하여서 워킹하도록 구성될 수도 있다. 워커 (320) 는 적어도 2 개의 노드들의 각 노드에서, 페이로드 내의 소정의 오프셋에서의 세그먼트에 대한 매칭 결과를 결정할 수도 있다. 워커 (320) 는 각 결정된 매칭 결과의 주합에 기초하여서, NFA 그래프 (604) 를 워킹하기 위한 적어도 하나의 후속 동작을 결정할 수도 있다.
도 6c는 레이지 추정 방식으로 페이로드 (542) 를 사용하여서 도 6a의 NFA 그래프 (604) 를 트라버싱하기 위한 프로세싱 사이클들 (658a 내지 658e) 의 다른 예시적인 실시예의 표 (648) 이다. 표 (648) 에 도시된 바와 같이, 프로세싱 사이클들 (658a 내지 658e) 은 매칭 결과 (654) 를 결정하고 매칭 결과 (654) 에 기초하여서 워커 동작 (656) 을 결정하기 위해서 현 오프셋 (652) 에서의 페이로드 (542) 로부터의 세그먼트를 사용하여서 현 노드 (650) 를 트라버싱하는 것 (traversing) 을 포함할 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, 워커 (320) 는 페이로드 (542) 내의 소정의 오프셋에서의 소정의 세그먼트를 사용하여서, 가변 카운트 레이지 노드 (N1N3' 607) 및 요소 노드 (N2 610) 양자를 병행하여서 프로세싱하여서, 도 5c에 위에서 개시된 레이지 추정적 프로세싱 규칙들을 사용하여서 매칭 성능을 최적화시킬 수도 있다.
도 6c의 예시적인 실시예에 따라서, 가변 카운트 레이지 노드 (N1N3' 607) 와 연관된 메타데이터 (609) 는 추정적 프로세싱 표시자 (미도시) 를 포함할 수도 있다. 추정적 프로세싱 표시자가 가변 카운트 레이지 노드 메타데이터 내에 포함되지 않으면, 워커 (320) 는 도 6b의 예시적인 실시예에서와 같이 계속될 수도 있다.
추정적 프로세싱 표시자를 포함하는 것은 워커 (320) 로 하여금 추정적으로 프로세싱될 NFA 그래프 (604) 의 적어도 2 개의 노드들을 워킹하게 하는 임의의 적합한 방식으로 수행될 수도 있다. 병행하여 프로세싱되는 적어도 2 개의 노드들은 요소 노드 및 병행 노드를 포함할 수도 있다. 예시적인 실시예에서, 노드 (N2 610) 는 요소 노드로서 지칭되고 가변 카운트 레이지 노드 (N1N3' 607) 는 병행 노드로서 지칭될 수도 있다.
도 6c의 예시적인 실시예에 따라서, 가변 카운트 레이지 노드 메타데이터가 추정적 프로세싱 표시자를 포함하면, 페이로드 내의 현 오프셋에 대응하는 세그먼트가 프로세싱 사이클 (658b) 에서 프로세싱되며, 워커 (320) 는 요소 노드 (N2 610) 및 가변 카운트 레이지 노드 (N1N3' 607) 양자를 페치할 수도 있다. 프로세싱 사이클 (658b) 에 대해서 도시된 바와 같이, 워커 (320) 는 요소 노드 (N2 610) 에서 세그먼트 (522b) (예를 들어, "x") 에 대한 부정적 매칭 결과를 결정하고 가변 카운트 레이지 노드 (N1N3' 607) 에서 긍정적 매칭 결과를 결정한다. 이러한 매칭 결과의 주합은 레이지 추정적 프로세싱 규칙 엔트리 (578b) 로 맵핑된다. 이로써, 동작 (576) 은 현 오프셋이 업데이트되고 요소 노드 (N2 610) 및 가변 카운트 레이지 노드 (N1N3' 607) 와 같은 요소 노드 및 병행 노드가 각기 다시한번 프로세싱 (즉, 워킹) 되도록 특정한다. 요소 노드 (N2 610) 및 가변 카운트 레이지 노드 (N1N3' 607) 가 프로세싱 사이클 (658b) 에서 이미 페치되었기 때문에, 프로세싱 사이클 (658c) 에서는 어떠한 페치도 필요하지 않다.
프로세싱 사이클 (658c) 에 대해서 도시된 바와 같이, 워커 (320) 는 페이로드 (542) 내의 오프셋 (520c) (즉, "2") 인 업데이트된 오프셋에서의 세그먼트 (522c) (즉, "a") 를 사용하여서 요소 노드 (N2 610) 및 병행 노드 (N1N3' 607) 를 워킹한다. "a"가 개행 문자가 아니기 때문에, 세그먼트 "a" 가 요소 노드 (N2 610) 에서의 요소 "a"와 매칭하고 병행 노드 (N1N3' 607) 에서의 요소 "^\n" 과 매칭할 때에 매칭 결과 (654) 는 요소 노드 (N2 510) 및 병행 노드 (N1N3' 607) 양자에서 모두 긍적적이다.
이로써, 프로세싱 사이클 (658c) 에 대한 매칭 결과들 (654) 인 긍정적 매칭 결과들의 주합은 레이지 추정적 프로세싱 규칙 엔트리 (578a) 로 맵핑된다. 이로써, 병행 노드 (N1N3' 607) 및 현 오프셋 (520c) (즉, "2") 을 표시하는 탐색되지 않은 컨텍스트가 런 스택 (460) 상에 푸싱되고, 요소 노드 (610) 의 메타데이터에 의해서 특정된 후속 노드는 페치될 수도 있다. 예시적인 실시예에 따라서, 현 오프셋은 오프셋 (520d) (즉, "3") 으로 업데이트하고 노드 (N4 614) 가 요소 노드 (N2 610) 의 메타데이터에 의해서 표시된 후속 노드이기 때문에 노드 (N4 614) 가 페치될 수도 있다.
세그먼트 (522d) (즉, "b") 에 대한 긍정적 매칭 결과가 노드 (N4 614) 에서 프로세싱 사이클 (658d) 동안에 결정될 수도 있으며 워커 (320) 는 노드 (N4 614) 와 연관된 메타데이터 내에서 노드 (N4 614) 에 대한 후속 노드로서 특정될 수도 있는 마킹된 노드 (N5 615) 로 천이할 수도 있다. 노드 (N5 615) 가 마킹된 노드이기 때문에, 워커는 매칭 결과 버퍼 (466) 로 최종 매칭 결과를 저장하고 활성 쓰레드 (예를 들어서, 현 경로) 를 워킹하는 것을 중단할 수도 있다.
워커 (320) 는 빈 상태에 대해서 런 스택 (460) 을 체크할 수도 있다. 예시적인 실시예에서, 탐색되지 않은 컨텍스트가 프로세싱 사이클 (658c) 에서 런 스택 (460) 으로 푸싱되었기 때문에 런 스택 (460) 이 비어 있지 않는다. 이로써, 워커 (320) 는 오프셋 (520c) (즉, "2") 에서의 세그먼트 (522d) (즉, "a") 를 사용하여서 병행 노드 (N1N3' 607) 로 워킹하는 것을 가속시키는 것을 표시하는 탐색되지 않은 컨텍스트를 팝핑하며 스택 엔트리와 연관된 DUP 표시자에 기초하여서 탐색되지 않은 컨텍스트를 폐기 또는 프로세싱할지의 여부를 결정할 수도 있다.
예시적인 실시예의 표 (648) 에 도시된 바와 같이, 페이로드 (542) 를 패턴 (502) 에 대해 매칭시키기 위한 추정적 프로세싱을 사용하는 프로세싱 사이클들의 개수는 5 개이며, 이는 도 6b의 비-추정적 프로세싱 예시적인 실시예에서 필요한 7 개의 프로세싱 사이클들에 비해서 줄어든 개수이다. 상술한 예시적인 실시예들에 의해서 도시된 바와 같은, 추정적 프로세싱에 기초한 이러한 성능 증가는 예시적인 설명을 위한 것이며 추정적 프로세싱을 사용하여서 달성된 성능 이득들은 예시된 것보다 클 수도 있다는 것이 이해되어야 한다. 예를 들어서, 이러한 성능 이득은 입력 페이로드에 의존하여서 증가할 수도 있다. 입력 스트림의 컨텐츠에 기초하여서, 병행 노드로부터 그리고 병행 노드로의 천이를 위한 도 6b의 푸싱 (630a) 및 팝핑 (630b) 과 같은 추가 처닝 (churning) 은 상이한 페이로드들에 대해서 보다 보편적이며 이로써 이하에서 기술되는 바와 같이 보다 큰 성능 이득들을 낳는다.
도 6d는 도 6a의 NFA 그래프 (604) 를 사용하여서 워킹될 수도 있는 다른 페이로드 (662) 의 블록도 (660) 이다. 페이로드 (662) 는 오프셋들 (672) 에서의 세그먼트들 (670) 을 포함한다. 세그먼트들 (674a-f) 은 세그먼트들 (h, x, x, x, a, 및 b) 에 각기 대응하고, 이 세그먼트들은 각기 오프셋들 (676a-f) (즉, 0, 1, 2, 3, 4, 및 5) 으로 맵핑한다.
도 6e는 레이지 비-추정적 방식 (non-speculative manner) 으로 도 6d의 페이로드 (662) 를 사용하여서 도 6a의 NFA 그래프 (604) 를 워킹하기 위한 프로세싱 사이클들 (681a 내지 681k) 의 예시적인 실시예의 표 (680) 이다. 표 (680) 에서 도시된 바와 같이, 프로세싱 사이클들 (681a 내지 681k) 은 매칭 결과 (686) 를 결정하고 매칭 결과 (686) 에 기초하여서 워커 동작 (688) 을 결정하기 위해서 현 오프셋 (684) 에서의 페이로드 (662) 로부터의 세그먼트를 사용하여서 현 노드 (682) 를 워킹하는 것을 포함할 수도 있다. 예시적인 실시예에서 도시된 바와 같이, 패턴 (502) 의 최종 매칭이 페이로드 (662) 에서 발견되기 전에 11 개의 프로세싱 사이클들이 필요하다. 또한, 프로세싱 사이클들은, 워커 (320) 가 요소 노드 (N2 610) 에서 미스매칭 세그먼트를 결정하여서 요소 노드 (N2 610) 와 병행 노드 (607) 간에서의 워커 (320) 의 처닝을 유발할 때에, 병행 노드 (N1N3' 607) 에 대한 탐색되지 않은 컨텍스트가 다수회 푸싱 및 팝핑되었음을 반영한다. 노드들 간에서의 이러한 처닝으로 인해서 워커 (320) 는 대응하는 메모리 액세스들을 위해서 필요한 추가 프로세서 사이클들로 인해서 성능을 희생하면서 (at a performance cost) 요소 노드 (N2 610) 와 병행 노드 (607) 를 페치한다. 이러한 메모리 액세스들은 특히 메모리들이 에러 보정 코드 (ECC) 보호된 타입의 메모리들일 수도 있기 때문에 비용이 들 수도 있다. 이로써, 푸싱 또는 팝핑 동작을 위한 ECC 보호된 메모리를 액세스하는 것은 4 개 이상의 클록 주기들을 취할 수도 있다.
도 6f는 레이지 추정적 방식 (speculative manner) 으로 도 6d의 페이로드 (662) 를 사용하여서 도 6a의 NFA 그래프 (604) 를 트라버싱하기 위한 프로세싱 사이클들 (691a 내지 691g) 의 다른 예시적인 실시예의 표 (690) 이다. 표 (690) 에서 도시된 바와 같이, 프로세싱 사이클들 (691a 내지 691g) 은 매칭 결과 (696) 를 결정하고 매칭 결과 (696) 에 기초하여서 워커 동작 (698) 을 결정하기 위해서 현 오프셋 (694) 에서의 페이로드 (662) 로부터의 세그먼트를 사용하여서 현 노드 (692) 를 트라버싱하는 것을 포함할 수도 있다. 예시적인 실시예에서 도시된 바와 같이, 도 6e의 비추정적 프로세싱 실시예의 11 개의 프로세싱 사이클들 (681a 내지 681k) 과 대조하여서, 패턴 (502) 의 최종 매칭이 페이로드 (662) 에서 발견되기 전에 7 개의 프로세싱 사이클들이 필요하다. 본 명세서에서 개시된 실시예들에 따라서, 워커 (320) 는 예시적인 실시예에서 병행 노드인 가변 카운트 레이지 노드 (N1N3' 607) 및 예시적인 실시예에서 요소 노드인 노드 (N2 610) 양자를 페이로드 (662) 내의 소정의 오프셋에서의 소정의 세그먼트를 사용하여서 병행하여서 프로세싱하며, 이로써 도 5c에서 상술한 레이지 추정적 프로세싱 규칙들을 사용하여서 매칭 성능을 최적화할 수 있다.
상술한 바와 같이, 가변 카운트 노드는 가변 회수로 요소와 매칭할 수도 있는 노드이며, 이 회수는 범위 (예를 들어서, 0 내지 5 회) 에 의해서 규정될 수 있으며, 레이지 또는 그리디와 같은 노드 타입과 연관될 수도 있다. 범위 내에서 요소들의 최단 가능한 매칭을 찾도록 구성될 수도 있는, 레이지 노드 타입을 갖는 가변 카운트 노드 (즉, 가변 카운트 레이지 노드) 와 대조하여서, 그리디 노드 타입 을 갖는 가변 카운트 노드 (즉, 가변 카운트 그리디 노드) 는 범위 내에서 요소들의 최장 가능한 매칭을 찾도록 구성될 수도 있다. 예를 들어서, 상술한 바와 같이, 워커 (320) 는 범위 내에서 요소들의 최단 가능한 매칭을 찾도록 상부 엡실론 경로 (530a) 를 선택하도록 구성될 수도 있다. 그러나, 범위 내에서 요소들의 최장 가능한 매칭을 찾기 위해서, 하부 엡실론 경로 (530b) 가 그리디 경로를 나타내는 때에 워커 (320) 는 하부 엡실론 경로 (530b) 를 선택하도록 구성될 수도 있다.
컴파일러 (306) 는 그리디 경로 선택을 실행하게 워커 (320) 가 하부 엡실론 경로 (530b) 를 선택하도록 하게 할 수 있는 분할 노드 메타데이터를 생성하도록 구성될 수도 있다. 이로써, 워커 (320) 는 연속하는 세그먼트들 각각이 추정적 노드 (N3 512) 에서 긍정적으로 매칭하면, 입력 스트림으로부터의 연속하는 세그먼트들을 프로세싱하도록 분할 노드 (508) 와 추정적 노드 (N3 512) 간에서 반복적으로 천이할 수도 있다. 연속하는 세그먼트들 중 소정의 세그먼트와 부정적으로 매칭하는 것에 기초하여서, 워커 (320) 는 상부 엡실론 경로 (530a) 를 통해서 요소 노드 (N2 510) 로 천이할 수도 있는데, 이는 세그먼트 미스매칭이 결정될 때까지 페이로드로부터의 연속하는 세그먼트들을 프로세싱하도록 그리디 경로가 구성될 수도 있기 때문이다.
도 7은 입력 스트림 내의 정규 표현식 패턴 (502) 을 매칭시키기 위해서 워커 (320) 에 의해서 사용될 수도 있는 다른 NFA 그래프 (704) 의 블록도 (700) 이다. 예시적인 실시예에서, 분할 노드 (N1 508), 추정적 노드 (N3 512), 및 엡실론 천이 경로들 (530a 및 530b) 을 포함하는, 도 5a의 섹션 (507) 은 가변 카운트 노드 (N1N3' 707) 에 의해서 표현된다. 도 6a의 가변 카운트 레이지 노드 (N1N3' 607) 과 대조하여서, 가변 카운트 노드 (N1N3' 707) 는 예시적인 실시예에서 가변 카운트 그리디 노드이다. 가변 카운트 노드 (N1N3' 707) 를 가변 카운트 그리디 노드로서 식별하는 노드 타입 (719) 이 가변 카운트 노드 (N1N3' 707) 와 연관된 메타데이터 (709) 내에 포함될 수도 있다.
가변 카운트 그리디 노드 (N1N3' 707) 는, 세그먼트 미스매칭 (즉, 부정적 매칭) 이 결정될 때까지 또는 가변 카운트 그리디 노드가 임계 개수의 긍정적으로 매칭하는 연속하는 세그먼트들을 프로세싱한 때가지 가변 카운트 그리디 노드 (N1N3' 707) 에서 연속하는 세그먼트들을 프로세싱하도록 구성될 수도 있다. 이 임계 개수는 가변 카운트 그리디 노드 (N1N3' 707) 와 연관된 값들의 범위에서의 상위 값일 수도 있다.
본 명세서에서 개시된 실시예들에 따라서, 가변 카운트 그리디 노드 (N1N3' 707) 는 문자 클래스 요소 (711) (즉, [^\n]) 와 같은 소정의 요소, 가변 카운트 그리디 노드 (N1N3' 707) 와 연관된 메타데이터 (709) 에 의해서 식별되는 바와 같은 인스턴스들 (instances) 의 가변 회수 (713) 를 식별하도록 구성될 수도 있다. 인스턴스들의 가변 회수 (713) 는 예시적인 실시예에서 적어도 제로 회수이거나 무한회와 같은 인스턴스들의 임의의 다른 적합한 회수일 수도 있다. 소정의 문자 클래스 요소 (711) 및 인스턴스들의 가변 회수 (713) 는 예시적인 실시예를 예시하기 위한 것이며 소정의 요소는 가변 회수 (713) 만큼 가변 카운트 그리디 노드 (N1N3' 707) 에 의해서 매칭되는 임의의 적합한 요소일 수도 있음이 이해되어야 한다.
도 7의 예시적인 실시예에서, 가변 카운트 그리디 노드 (N1N3' 707) 와 연관된 메타데이터 (709) 는 요소 노드 (N2 710) 와 같은 후속 노드 (717) 를 직접적으로 또는 간접적으로 식별한다. 예시적인 실시예에서, 워커 (320) 는, 인스턴스들의 가변 회수 (713) 만큼 입력 스트림 내의 요소 (711) 와 긍정적으로 매칭한 것에 기초하여서 또는 세그먼트 미스매칭에 기초하여서, 요소 노드 (N2 710) 로 워킹을 천이시킬 수도 있다. 예를 들어서, 예시적인 실시예에서, 가변 카운트 그리디 노드 (N1N3' 707) 는 입력 스트림 내의 문자 클래스 요소 "^\n" (즉, 개행 문자가 아님) 의 무한 회수의 연속하는 인스턴스들을 매칭시키도록 구성된다. 가변 카운트 그리디 노드 (N1N3' 707) 와 연관된 메타데이터 (709) 는 가변 회수 (713) 에 대한 총 회수의 비교를 실현하도록 페이로드 내에서 긍정적으로 매칭되는 요소 (711) 의 연속하는 인스턴스들의 총 회수를 추적하기 위한 카운트 값 (미도시) 을 포함할 수도 있다. 가변 회수 (713) 가 예시적인 실시예에서 무한회이기 때문에, 워커 (320) 는 개행 문자가 프로세싱될 때까지 가변 카운트 그리디 노드 (N1N3' 707) 에서 입력 스트림으로부터의 연속하는 세그먼트들을 프로세싱하도록 진행할 수도 있다. 선택적으로, 가변 카운트 그리디 노드 (N1N3' 707) 에서 가장 조기에 (earliest) 긍정적으로 매칭되는 세그먼트를 표시하는 시작 오프셋 (미도시) 이 또한 가변 카운트 그리디 노드 (N1N3' 707) 와 연관된 메타데이터 (709) 내에 포함될 수도 있으며 페이로드 내의 현 오프셋을 결정하기 위해서 카운트 값과 함께 사용될 수도 있다.
도 8은 페이로드 (842) 의 블록도 (800) 이며, 그리디 비-추정적 방식 (greedy non-speculative manner) 으로 페이로드 (842) 를 사용하여서 도 7의 NFA 그래프 (704) 를 트라버싱하기 위한 프로세싱 사이클들 (828a 내지 828n) 의 예시적인 실시예의 표 (818) 이다. 워커 (320) 는 현 오프셋 (820a) (즉, "0") 에서의 세그먼트 (822a) (즉, "h") 를 사용하여서 시작 노드 (N0 706) 를 워킹할 수도 있다. 워커 (320) 는 세그먼트 (822a) 가 노드 (NO 706) 에서의 문자 "h"와 매칭할 때에 매칭 결과 (810) 가 긍정적 (positive) 매칭 결과이라고 결정할 수도 있다. 도 7의 예시적인 실시예에서, 시작 노드 (NO 706) 에 의해서 표시되는 후속 노드는 가변 카운트 그리디 노드 (N1N3' 707) 이다. 이로써, 워커 (320) 는 페이로드 (842) 내의 현 오프셋을 오프셋 (820b) (즉, "1") 으로 업데이트하고 시작 노드 (NO 706) 에 대해서 후속 노드인 가변 카운트 그리디 노드 (N1N3' 707) 를 페치하고 이 노드로 천이하는 것을 포함하는 동작 (812) 을 프로세싱 사이클 (828a) 에서 취할 수도 있다.
가변 카운트 그리디 노드 (N1N3' 707) 는 그리디 노드 타입이기 때문에, 프로세싱 사이클들 (828b 내지 828h) 에서의 동작 (812) 은 가변 카운트 그리디 노드 (N1N3' 707) 에서 긍정적으로 매칭된 연속하는 세그먼트들의 총 개수를 추적하기 위해서 프로세싱 사이클들 (828b 내지 828h) 각각에서 가변 카운트 그리디 노드 (N1N3' 707) 와 연관된 메타데이터 (709) 내에 포함된 카운트 값을 증분하는 것을 포함할 수도 있다. 프로세싱 사이클들 (828b 내지 828h) 에서의 동작 (812) 은 프로세싱 사이클들 (828b 내지 828h) 에 의해서 도시된 바와 같이 세그먼트들 (816) 의 후속 세그먼트를 프로세싱하기 위해서 세그먼트 오프셋들 (818) 의 후속 세그먼트 오프셋으로 현 오프셋을 업데이트하는 것을 더 포함할 수도 있다. 이러한 카운트 값 증분 및 현 오프셋 업데이트는, 프로세싱 사이클 (828i) 에 대해서 도시된 경우에서와 같이, 현 오프셋 (808) 에서의 페이로드 세그먼트의 미스매칭이 결정될 때까지 계속될 수도 있다.
표 (818) 에서 도시된 바와 같이, 현 오프셋 (820i) 에서의 세그먼트 (828i) 는 프로세싱 사이클 (828i) 에 있어서 가변 카운트 그리디 노드 (N1N3' 707) 에서 부정적으로 매칭한다. 본 명세서에서 개시된 실시예들에 따라서, 가변 카운트 그리디 노드 (N1N3' 707) 의 후속 노드 (N2 710) 의 식별자와 같은 탐색되지 않은 컨텍스트가 가변 카운트 그리디 노드 (N1N3' 707) 의 카운트 값 및 1로 설정될 수도 있는 DUP 표시자와 함께 저장될 수도 있다.
프로세싱 사이클 (828i) 에서의 부정적 매칭 결과 (810) 에 기초하여서, 워커는 가변 카운트 그리디 노드 (N1N3' 707) 와 연관된 메타데이터 (709) 에 의해서 직접적으로 또는 간접적으로 표시된 후속 노드를 페치하고, 최장 가능한 매칭을 찾기 위해서, 가변 카운트 그리디 노드 (N1N3' 707) 에서 부정적으로 매칭된 세그먼트 (820i) 를 사용하여서 노드 (N2 710) 를 워킹하도록 노드 (N2 710) 로 천이할 수도 있다.
프로세싱 사이클 (828j) 에 대해서 도시된 바와 같이, 세그먼트 "\n"이 요소 노드 (N2 710) 의 요소 "a"와 매칭하지 않기 때문에 노드 (N2 710) 에서 부정적인 매칭 결과 (810) 를 갖는다. 이로써, 워커 (320) 는 가변 카운트 그리디 노드 (N1N3' 707) 에서 이전에 긍정적으로 매칭된 연속하는 세그먼트들을 증분적으로 언롤링 (unroll) 하도록 진행할 수도 있다. 예를 들어서, 워커 (320) 는, 최장 가능한 매칭을 찾기 위해서, 가변 카운트 그리디 노드 (N1N3' 707) 에서 긍정적으로 매칭되고 후속 노드 (N2 710) 에서도 매칭하는 가장 최근에 워킹된 세그먼트를 결정하기 위해서, 세그먼트들 (820h...820b) 을 언롤링할 수도 있다. 언롤링 동작은 세그먼트 미스매칭 이전에 가변 카운트 노드에서 매칭된 긍정적으로 매칭된 연속하는 세그먼트들의 개수의 카운트 및 요소 노드를 식별하는 저장된 컨텍스트를 팝핑하는 것을 포함할 수도 있다. 언롤링 동작은 카운트를 감분하고 요소 노드를 식별하고 감분된 카운트를 포함하는 저장된 컨텍스트를 푸싱하는 것을 포함할 수도 있다. 언롤링 동작은 현 오프셋을 업데이트하고 요소 노드를 페치하는 것을 더 포함할 수도 있다.
프로세싱 사이클 (828k) 에 대해서 도시된 바와 같이, 세그먼트 (820h) 는 요소 노드 (N2 710) 에서 부정적으로 매칭되며, 워커 (320) 는 프로세싱 사이클 (828j) 의 언롤링 동작 (830) 과 유사하게, 도시된 동작들 (812) 을 취하며, 이로써 프로세싱 사이클 (828l) 에 대해서 도시된 바와 같이 세그먼트 (820g) 가 요소 노드 (N2 710) 에서 매칭되는지의 여부를 결정함으로써 언롤링하도록 진행한다. 세그먼트 (820g) (즉, "a") 가 요소 노드 (N2 710) 에서 긍정적으로 매칭되기 때문에, 워커 (320) 는 현 오프셋을 업데이트하고 요소 노드 (N2 710) 와 연관된 메타데이터를 통해서 식별될 수도 있는 후속 노드 (N4 714) 를 페치할 수도 있다. 세그먼트 (820h) 는 프로세싱 사이클 (828m) 에 대해서 도시된 바와 같이 노드 (N4 714) 에서 긍정적으로 매칭될 수 있으며 워커 (320) 는 워커 (320) 는 현 오프셋을 업데이트하고 요소 노드 (N4 714) 와 연관된 메타데이터를 통해서 식별될 수도 있는 후속 노드 (N5 715) 를 페치할 수도 있다.
노드 (N5 715) 는 입력 스트림 내의 정규 표현식 패턴 (842) 의 최종 (즉, 완료된 또는 전체) 매칭을 알리는 표시자와 연관된 마킹된 노드이다. 이로써, 프로세싱 사이클 (828n) 에서, 워커 (320) 는 워킹을 중단하고 매칭 결과 버퍼 (466) 내에 엔트리를 저장함으로써 최종 매칭을 보고할 수도 있다. 이어서, 워커는 저장된 쓰레드에 대해 런 스택 (460) 을 체크하고 런 스택 (460) 내의 엔트리들의 대응하는 DUP 표시자에 의해서 표시된 바와 같이 저장된 쓰레드들을 폐기 아니면 활성화시킬 수도 있다.
페이로드 (842) 세그먼트 컨텐츠에 기초하여서, 언롤링을 위한 프로세싱 사이클들의 수는 증가할 수도 있다. 도시된 바와 같이, 언롤링 사이클들 (828j 및 828k) 각각에 대한 동작 (812) 은 컨텍스트 팝핑 및 푸싱을 포함하며, 이들은 상술한 바와 같은 비용이 드는 동작들일 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, 매칭 성능은 매칭을 위해서 필요한 프로세싱 사이클들의 수를 줄임으로써 그리고 컨텍스트를 저장 및 검색하기 위한 푸싱 및 팝핑 동작들의 수를 줄임으로써 메모리가 액세스되는 회수를 줄임으로써 개선될 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, 매칭 성능은 추정적 방식으로 워킹함으로써 개선될 수도 있다. 예를 들어서, 워커 (320) 는 NFA 그래프 (704) 를 추정적 방식으로 워킹할 수도 있다. 상술한 바와 같이, 적어도 2 개의 노드들을 병행하여서 프로세싱하는 것은 본 명세서에서 추정적 프로세싱으로서 지칭될 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, 그리디 경로 프로세싱에 기초한 매칭 성능은 이하에서 개시된 바와 같은 추정적 프로세싱에 의해서 최적화될 수도 있다.
도 9a는 네트워크에 동작하게 커플링된 보안 어플라이언스 내의 적어도 하나의 메모리에 동작하게 커플링된 적어도 하나의 프로세서에서 구현될 수도 있는 방법의 예시적인 실시예의 흐름도 (900) 이다. 이 방법은 시작되어 (902) 적어도 하나의 메모리 내의 적어도 하나의 정규 표현식 패턴으로부터 생성된 복수의 노드들을 포함하는 적어도 하나의 유한 오토마톤을 저장하고 적어도 하나의 메모리를 적어도 하나의 프로세서에 동작하게 커플링할 수도 있다 (904). 적어도 하나의 프로세서는 네트워크에 동작하게 커플링된 하드웨어 네트워크 인터페이스를 통해서 수신된 입력 스트림 내의 적어도 하나의 정규 표현식 패턴을 매칭시키도록, 입력 스트림의 세그먼트들을 사용하여서, 적어도 하나의 유한 오토마톤을 워킹 (walk) 하도록 구성될 수도 있다. 워킹은 입력 스트림 내의 패킷의 페이로드 내의 현 오프셋에서의 세그먼트를 사용하여서, 적어도 하나의 유한 오토마톤의 소정의 유한 오토마톤의 적어도 2 개의 노드들을 병행하여 (in parallel) 반복적으로 워킹하는 것을 포함하며 (906), 반복적으로 워킹하는 것은 병행하여 워킹된 적어도 2 개의 노드들 중 소정의 노드에서 세그먼트와 긍정적으로 매칭한 것에 기초하며, 현 오프셋은 반복마다 후속 오프셋 (next offset) 으로 업데이트될 수도 있다. 예시적인 실시예에서, 방법은 이후에 종결된다 (908).
도 9b는 그리디 추정적 프로세싱 규칙들 (978a 내지 978d) 의 표 (970) 의 예시적인 실시예의 블록도이다. 표 (970) 는 요소 노드 매칭 결과들 (974) 및 가변 카운트 그리디 노드 매칭 결과들 (972) 에 기초하는 동작들 (976) 을 갖는 진리 표 (truth table) 이다. 그리디 추정적 (greedy speculative) 프로세싱 규칙들 (978a 내지 978d) 에 대응하는 4 개의 가능한 경우들이 도시된다. 예를 들어서, 그리디 추정적 프로세싱 규칙들 (978a 내지 978d) 각각은 각기 매칭 결과 긍정적/긍정적, 매칭 결과 긍정적/부정적, 매칭 결과 부정적/긍정적, 및 매칭 결과 부정적/부정적에 기초하는 각각의 후속 동작 (976) 을 갖는다.
그리디 추정적 프로세싱 규칙들 (978a 및 978b) 은 가변 카운트 그리디 노드 및 요소 노드가, 노드 페칭을 위한 메모리 액세스를 제거하면서, 가변 카운트 그리디 노드에서의 긍정적 매칭에 기초하여서, 페이로드 내의 현 오프셋에서의 세그먼트를 병행하여서 반복적으로 프로세싱하게 할 수 있다. 또한, 그리디 추정적 프로세싱 규칙 (978a) 은 대응하는 동작 (976) 에 의해서 도시된 바와 같이 컨텍스트를 저장하는 것을 포함한다. 그리디 추정적 프로세싱 규칙 (978a) 은 소정의 노드 및 요소 노드에서, 페이로드 내의 현 오프셋에서의 세그먼트와 긍정적으로 매칭하는 것에 기초하여서, 소정의 유한 오토마톤의 다음 노드 및 후속 오프셋을 식별하는 컨텍스트를 저장하는 것을 포함한다. 요소 노드는 요소 및 후속 노드를 식별하는 메타데이터와 연관된다.
가변 카운트 그리디 노드 및 요소 노드 양자에서 세그먼트와 긍정적으로 매칭하는 것에 기초하여서 컨텍스트를 저장하는 것은 워커 (320) 가 위의 도 8를 참조하여서 개시된 바와 같은 언롤링 동작 (830) 과 같은 언롤링을 제거하기 위해서 세그먼트 오프셋 및 노드 정보를 기록하게 한다. 컨텍스트를 저장하는 것은 업데이트된 현 오프셋 (즉, 후속 오프셋) 과 함께, 요소 노드와 연관된 메타데이터를 통해서 식별된 후속 노드의 어드레스 또는 다른 식별자를 푸싱하는 것을 포함할 수도 있다.
그리디 추정적 프로세싱 규칙 (978c) 에 의해서 도시된 바와 같이, 요소 노드 및 가변 카운트 그리디 노드를 병행하여 반복적으로 워킹하는 것이 중단되고, 현 오프셋이 업데이트된다. 후속 노드가 페치되고 워커는 업데이트된 현 오프셋에서의 후속 세그먼트를 사용하여서 후속 노드를 워킹할 수도 있다. 이로써, 그리디 추정적 프로세싱 규칙 (978c) 은 반복적 워킹을 중단하는 것, 현 오프셋을 후속 오프셋으로 업데이트하는 것, 페이로드 내의 후속 오프셋에서의 후속 세그먼트를 사용하여서 후속 노드를 워킹하는 것을 포함할 수도 있다.
그리디 추정적 프로세싱 규칙 (978d) 에 의해서 도시된 바와 같이, 요소 노드 매칭 결과 (974) 및 가변 카운트 그리디 노드 매칭 결과 (972) 가 모두 부정적인 것에 기초하여서, 동작 (976) 은 소정의 경로의 워킹을 중단하는 것을 포함할 수도 있다. 이로써, 페이로드 내의 후속 소정의 오프셋에서의 후속 세그먼트가 예를 들어서 저장된 쓰레드에 대해서 런 스택 (460) 을 체크하고 저장되었다면 저장된 쓰레드를 팝핑함으로써, 탐색되지 않은 컨텍스트를 감지하는 것에 기초하여서 워킹될 수도 있다. 이와 달리, 탐색되지 않은 컨텍스트를 감지하지 않는 것에 기초하여서 또는 모든 저장된 쓰레드들이 대응하는 DUP 표시자에 기초하여서 폐기되는 것으로서 마킹되면, 워킹이 종료될 수도 있다. 이로써, 그리디 추정적 프로세싱 규칙 (978d) 은 반복적으로 워킹하는 것을 중단하는 것, 및 런 스택 (460) 으로부터의 스택 엔트리를 팝핑하는 것을 포함하는 적어도 하나의 후속 동작을 특정할 수도 있다. 런 스택 (460) 이 비어 있지 않은 상태에 기초하여서, 스택 상으로 가장 최근에 푸싱된 엔트리인 스택 엔트리가 팝핑될 수도 있고, 워킹은 팝핑된 스택 엔트리에 기초한 후속 엔트리를 사용하여서 후속 노드로 가속될 수도 있다. 이와 달리, 런 스택 (460) 이 비어 있는 상태에 기초하여서, 워킹은 종료될 수도 있다.
도 10은 추정적 방식으로 NFA 그래프를 프로세싱하기 위한 방법의 다른 예시적인 실시예의 흐름도 (1000) 이다. 이 방법은 시작하여서 (1002), 가변 카운트 그리디 (VCG) 노드를 페치할 수도 있다 (1004). 방법은 페치된 VCG 노드가 추정적 노드인지의 여부를 체크할 수도 있다 (1006). 추정적 프로세싱 표시자가 VCG 노드와 연관된 메타데이터 내에 포함되는 것에 기초하여서, 워커 (320) 는 VCG 노드가 추정적 노드이라고 결정할 수도 있다. VCG 노드가 추정적 노드가 아니면, 방법은 예시적인 실시예에서 종료된다 (1032).
VCG 노드가 추정적 노드이면, 방법은 요소 노드를 페치할 수도 있다 (1008). 페치된 요소 노드는 VCG 노드와 연관된 메타데이터를 통해서 식별되는 후속 노드일 수도 있다. 방법은 VCG 노드 및 요소 노드 모두에서 현 오프셋에서의 세그먼트를 프로세싱할 수도 있다 (1010). VCG 노드는 페이로드 내의 제 1 요소의 가변 회수의 연속하는 인스턴스들을 매칭시키도록 구성될 수도 있으며, 요소 노드는 페이로드 내의 제 2 요소의 단일 인스턴스를 매칭시키도록 구성될 수도 있다.
방법은 현 오프셋에서의 세그먼트가 VCG 노드에서 긍정적으로 매칭되는지의 여부를 체크할 수도 있다 (1012). 현 오프셋에서의 세그먼트가 VCG 노드에서 긍정적으로 매칭되는지의 여부를 체크하는 것은, 세그먼트가 VCG 노드와 연관된 메타데이터를 통해서 식별된 제 1 요소와 긍정적으로 매칭한다고 결정하는 것 및 VCG 노드에서 긍정적으로 매칭된 연속하는 세그먼트들의 카운트 값이 소정의 임계치를 초과하지 않았다고 결정하는 것을 포함할 수도 있다. 현 오프셋에서의 세그먼트가 VCG 노드에서 긍정적으로 매칭되면, VCG 노드와 연관된 메타데이터 내에 포함된 카운트 값이 증분될 수도 있다 (1014).
방법은 현 오프셋에서의 세그먼트가 요소 노드에서 긍정적으로 매칭되는지의 여부를 체크할 수도 있다 (1016). 현 오프셋에서의 세그먼트가 요소 노드에서 긍정적으로 매칭되는지의 여부를 체크하는 것은, 세그먼트가 요소 노드와 연관된 메타 데이터를 통해서 식별된 제 2 요소와 긍정적으로 매칭한다고 결정하는 것을 포함할 수도 있다. VCG 노드 및 요소 노드에서 긍정적으로 매칭한다고 이렇게 결정하는 것은, 현 오프셋에서의 세그먼트가 양 노드들에서 병행하여서 프로세싱되기 때문에, 병행하여 발생한다는 것이 이해되어야 한다. VCG 노드 및 요소 노드는 적어도 하나의 프로세서의 동일한 프로세싱 사이클 내에서, 페이로드 내의 현 오프셋에서의 세그먼트를 사용하여서 병행하여 워킹될 수도 있다.
현 오프셋에서의 세그먼트가 요소 노드에서 긍정적으로 매칭되면, 현 오프셋은 후속 오프셋으로 업데이트되며 (1018), 컨텍스트가 저장될 수도 있다 (1020). 컨텍스트를 저장하는 것은 후속 오프셋과 함께, 요소 노드의 메타데이터를 통해서 식별된 후속 노드의 어드레스 또는 다른 식별자를 푸싱하는 것을 포함할 수도 있다. 방법은 VCG 노드 및 요소 노드 양자에서 현 오프셋에서의 세그먼트를 프로세싱하는 것 (1010) 으로 돌아감으로써 다음 반복 시에 VCG 노드 및 요소 노드 양자에서 후속 오프셋에서의 세그먼트를 프로세싱하도록 진행할 수도 있다.
그러나, 현 오프셋에서의 세그먼트가 요소 노드에서 긍정적으로 매칭되지 않는다고 결정되면 (1016), 방법은 현 오프셋을 후속 오프셋으로 업데이트하고 (1034), 방법은 VCG 노드 및 요소 노드 양자에서 현 오프셋에서의 세그먼트를 프로세싱하는 것 (1010) 으로 돌아감으로써 다음 반복 시에 VCG 노드 및 요소 노드 양자에서 후속 오프셋에서의 세그먼트를 프로세싱하도록 진행할 수도 있다. 이로써, 워킹은 VCG 노드에서 세그먼트와 긍정적으로 매칭되는 것에 기초하여서, 페이로드 내의 현 오프셋에서의 세그먼트를 사용하여서, VCG 노드 및 요소 노드 양자를 병행하여서 반복적으로 워킹하는 것을 포함할 수도 있다. 현 오프셋은 (1018) 및 (1034) 에 의해서 도시된 바와 같이 반복마다 다음 오프셋으로 업데이트될 수도 있다.
그러나, 현 오프셋에서의 세그먼트가 VCG 노드에서 긍정적으로 매칭되지 않는다고 결정되면 (1012), 방법은 반복적으로 워킹하는것 것을 중단하며, 방법은 현 오프셋에서의 세그먼트가 요소 노드에서 긍정적으로 매칭되는지의 여부를 결정할 수도 있다 (1022). 그렇지 않다면, 방법은 저장된 컨텍스트에 기초하여서 천이하고 (1030), 방법은 예시적인 실시예에서 종료된다 (1032).
그러나, 현 오프셋에서의 세그먼트가 요소 노드에서 긍정적으로 매칭된다고 결정되면 (1022), 방법은 현 오프셋을 후속 오프셋으로 업데이트할 수도 있다 (1024). 방법은 후속 노드에서의 후속 오프셋에서의 세그먼트를 프로세싱하고 (1028) 이후에 예시적인 실시예에서 종료된다 (1032).
도 11은 도 8의 페이로드 (842) 를 사용하여서 그리디 추정적 방식 (greedy speculative manner) 으로 도 7의 NFA 그래프 (704) 를 트라버싱하기 위한 프로세싱 사이클들 (1158a 내지 1158k) 의 예시적인 실시예의 표 (1148) 이다. 표 (1148) 에 도시된 바와 같이, 프로세싱 사이클들 (1158a 내지 1158k) 은 매칭 결과 (1154) 를 결정하고 이에 기초하여서 적어도 하나의 후속하는 동작 (1156) 을 결정하기 위해서 현 오프셋 (1152) 에서의 페이로드 (842) 로부터의 세그먼트를 사용하여서 현 노드 (1150) 를 트라버싱하는 것을 포함할 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, 워커 (320) 는 페이로드 (842) 내의 소정의 오프셋에서의 소정의 세그먼트를 사용하여서, 가변 카운트 그리디 노드 (N1N3' 707) 및 요소 노드 (N2 710) 양자를 병행하여서 프로세싱하여서, 도 9b를 참조하여서 위에서 개시된 그리디 추정적 프로세싱 규칙들을 사용하여서 매칭 성능을 최적화시킬 수도 있다. 가변 카운트 그리디 노드 (N1N3' 707) 및 요소 노드 (N2 710) 는 적어도 하나의 프로세서의 동일한 프로세싱 사이클 내에서, 페이로드 내의 현 오프셋에서의 세그먼트를 사용하여서 병행하여 워킹될 수도 있다.
본 명세서에서 개시된 실시예들에 따라서, 가변 카운트 그리디 노드와 연관된 메타데이터는 추정적 프로세싱 표시자를 포함할 수도 있다. 본 명세서에서 개시된 실시예들에 따라서, 추정적 프로세싱 표시자가 가변 카운트 그리디 노드 (N1N3' 707) 와 연관된 메타데이터 (709) 내에 포함되지 않으면, 워커 (320) 는 도 8의 예시적인 실시예서와 같이 계속될 수도 있다. 추정적 프로세싱 표시자를 포함하는 것은 워커 (320) 로 하여금 페이로드 내의 현 오프셋에서의 세그먼트를 사용하여서 가변 카운트 그리디 노드 및 요소 노드를 병행하여서 워킹하게 하는 임의의 적합한 방식으로 수행될 수도 있다.
도 11의 예시적인 실시예에 따라서, 워커 (320) 는 현 오프셋 (820a) (즉, "0") 에서의 세그먼트 (822a) (즉, "h") 를 사용하여서 시작 노드 (N0 706) 를 워킹할 수도 있다. 워커 (320) 는 세그먼트 (822a) 가 노드 (NO 706) 에서의 문자 "h"와 매칭할 때에 프로세싱 사이클 (1158a) 에서 매칭 결과 (1154) 가 긍정적 (positive) 매칭 결과이라고 결정할 수도 있다. 도 11의 예시적인 실시예에서, 시작 노드 (NO 706) 에 의해서 표시되는 후속 노드는 가변 카운트 그리디 노드 (N1N3' 707) 이다. 이로써, 워커 (320) 는 페이로드 (842) 내의 현 오프셋을 오프셋 (820b) (즉, "1") 으로 업데이트하고 가변 카운트 그리디 노드 (N1N3' 707) 인, 시작 노드 (NO 706) 의 메타데이터와 연관된 후속 노드를 페치하는 것을 포함하는 동작 (1156) 을 프로세싱 사이클 (1158a) 에서 취할 수도 있다.
도 11의 예시적인 실시예에 따라서, 가변 카운트 그리디 노드 (N1N3' 707) 와 연관된 메타데이터 (709) 가 프로세싱 사이클 (1158a) 에서 검출되는 것과 같은 추정적 프로세싱 표시자 (미도시) 를 포함한다. 이로써, 동작 (1156) 은 요소 노드 (N2 710) 인, 이 메타데이터 (709) 를 통해서 식별된 후속 노드를 페치하고, 페이로드 (842) 내의 현 오프셋 (820b) (즉, "1") 에서의 세그먼트를 사용하여서 가변 카운트 그리디 노드 (N1N3' 707) 및 요소 노드 (N2 710) 양자를 워킹하도록 이 양 노드들로 천이하는 것을 포함한다.
프로세싱 사이클 (1158b) 에 대해서 도시된 바와 같이, 워커 (320) 는 요소 노드 (N2 710) 에서 세그먼트 (822b) (즉, "x") 에 대한 부정적인 매칭 결과 및 가변 카운트 그리디 노드 (N1N3' 707) 에서 긍정적인 매칭 결과를 결정할 수도 있다. 이러한 매칭 결과들은 그리디 추정적 프로세싱 규칙 엔트리 (978b) 로 맵핑된다. 이로써, 동작 (976) 은 현 오프셋이 업데이트되고 노드 (N2 710) 및 노드 (N1N3' 707) 와 같은, 요소 노드 및 가변 카운트 그리디 노드가, 가변 카운트 그리디 노드 (N1N3' 707) 에서의 긍정적인 매칭 결과에 기초하여서, 각기 다시 한번 프로세싱 (즉, 워킹) 될 것을 특정한다. 노드 (N2 710) 및 노드 (N1N3' 707) 는 프로세싱 사이클 (1158b) 에서 이미 페치되었기 때문에, 프로세싱 사이클 (1158c) 에서는 어떠한 노드도 페치될 필요가 없다. 메타데이터 (709) 내에 포함된 카운트 값 (미도시) 은 가변 카운트 그리디 노드 (N1N3' 707) 에서의 긍정적인 매칭 결과 (1154) 에 기초하여서 1로 증분될 수 있으며, 현 오프셋은 2로 업데이트될 수도 있다.
프로세싱 사이클 (1158c) 에 대해서 도시된 바와 같이, 워커 (320) 는 페이로드 (842) 내의 오프셋 (820c) (즉, "2") 인 업데이트된 오프셋에서의 세그먼트 (822c) (즉, "x") 를 사용하여서 요소 노드 (N2 710) 및 가변 카운트 그리디 노드 (N1N3' 707) 를 워킹한다. "x"가 개행 문자가 아니기 때문에, 세그먼트 "x" 가 요소 노드 (N2 710) 에서의 요소 "a"와 매칭하지 않고 가변 카운트 그리디 노드 (N1N3' 707) 에서의 요소 "^\n" 과 매칭할 때에 매칭 결과 (1154) 는 요소 노드 (N2 710) 에서는 다시 부정적이지만 가변 카운트 그리디 노드 (N1N3' 707) 에서는 긍정적이 된다. 다시, 매칭 결과들 (1154) 은 그리디 추정적 프로세싱 규칙 엔트리 (978b) 로 맵핑된다. 이로써, 동작 (976) 은 현 오프셋이 업데이트되고 노드 (N2 710) 및 노드 (N1N3' 707) 와 같은, 요소 노드 및 가변 카운트 그리디 노드가, 가변 카운트 그리디 노드 (N1N3' 707) 에서의 긍정적인 매칭 결과에 기초하여서, 각기 다시 한번 프로세싱 (즉, 워킹) 될 것을 특정한다. 카운트 값은 가변 카운트 그리디 노드 (N1N3' 707) 에서의 긍정적인 매칭 결과 (1154) 에 기초하여서 2로 증분될 수 있으며, 현 오프셋은 3으로 증분될 수도 있다.
프로세싱 사이클 (1158d) 에 대해서 도시된 바와 같이, 워커 (320) 는 페이로드 (842) 내의 오프셋 (820d) (즉, "3") 인 현 오프셋에서의 세그먼트 (822c) (즉, "x") 를 사용하여서 요소 노드 (N2 710) 및 가변 카운트 그리디 노드 (N1N3' 707) 를 워킹한다. 다시 한번, 매칭 결과 (1154) 는 요소 노드 (N2 710) 에서는 다시 부정적이지만 가변 카운트 그리디 노드 (N1N3' 707) 에서는 긍정적이며, 이로써, 동작 (1156) 은 위에서 개시된 프로세싱 사이클 (1158b) 및 프로세싱 사이클 (1158c) 에서와 유사하다.
프로세싱 사이클 (1158e) 에 대해서 도시된 바와 같이, 워커 (320) 는 페이로드 (842) 내의 오프셋 (820d) (즉, "4") 인 현 오프셋에서의 세그먼트 (822e) (즉, "a") 를 사용하여서 요소 노드 (N2 710) 및 가변 카운트 그리디 노드 (N1N3' 707) 를 워킹한다. 매칭 결과 (1154) 는 요소 노드 (N2 710) 및 가변 카운트 그리디 노드 (N1N3' 707) 모두에서 긍정적이다. 매칭 결과들 (1154) 은 그리디 추정적 프로세싱 규칙 엔트리 (978a) 로 맵핑된다. 이로써, 카운트 값을 증분하고 현 오프셋을 업데이트하는 것에 추가하여서, 동작 (1156) 은 요소 노드 (N2 710) 와 연관된 메타데이터를 통해서 식별된 후속 노드인 노드 (N4 714) 및 이제 5인 현 오프셋을 식별하는 스택 엔트리를 푸싱하는 것을 포함하는, 탐색되지 않은 컨텍스트를 저장하는 것을 더 포함한다. 이로써, 후속 사이클이 가변 카운트 그리디 노드 (N1N3' 707) 에서 세그먼트 미스매칭을 결정하면, 요소 노드 (N2 710) 및 가변 카운트 그리디 노드 (N1N3' 707) 가 동일한 세그먼트와 긍정적으로 매칭한 오프셋을 찾고자 하는 언롤링을 제거하면서, 워커 (320) 는 현 오프셋 5에서의 세그먼트 (822f) 를 사용하여서 노드 (N4 714) 를 워킹할 수도 있다.
프로세싱 사이클들 (1158f, 1158g 및 1158h) 에 대해서 도시된 바와 같이, 워커 (320) 는 가변 카운트 그리디 노드 (N1N3' 707) 에서의 긍정적 매칭 결과 (1154) 에 기초하여서 가변 카운트 그리디 노드 (N1N3' 707) 및 요소 노드 (N2 710) 의 반복적 워킹을 계속한다. 그러나, 프로세싱 사이클 (1158g) 에 대해서 도시된 바와 같이, 상술한 바와 같은, 프로세싱 사이클 (1158e) 에서와 유사하게, 연속하는 프로세싱 사이클 (1158h) 에서 사용되도록 업데이트된 현 오프셋인 오프셋 7에 대응하는 오프셋 (822h) 에 대응하는 세그먼트를 사용하여서, 요소 노드 (N2 710) 와 연관된 메타데이터를 통해서 식별된 후속 노드인 노드 (N4 714) 로 워커가 복귀할 수 있도록 탐색되지 않은 컨텍스트가 저장될 수도 있다.
프로세싱 사이클 (1158i) 에 대해서 도시된 바와 같이, 워커 (320) 는 요소 노드 (N2 710) 에서 세그먼트 (822i) (즉, "\n") 에 대한 부정적인 매칭 결과 및 가변 카운트 그리디 노드 (N1N3' 707) 에서 부정적인 매칭 결과를 결정할 수도 있다. 이러한 매칭 결과들은 그리디 추정적 프로세싱 규칙 엔트리 (978d) 로 맵핑된다. 이로써, 가변 카운트 그리디 노드 (N1N3' 707) 에서의 매칭 결과 (1154) 가 부정적이기 때문에, 요소 노드 (N2 710) 및 가변 카운트 그리디 노드 (N1N3' 707) 를 반복적으로 워킹하는 것은 중단된다. 워커 (320) 는 저장된 엔트리에 대해서 스택을 체크하고 스택이 비어 있지 않다면, 가장 최근에 푸싱된 엔트리가 팝핑될 수도 있다. 이로써, 프로세싱 사이클 (1158g) 에서 푸싱된 엔트리가 팝핑되어서 워커가 노드 (N4 714) 를 페치하고 오프셋 (820h) 에서의 세그먼트 (822h) 를 사용하여서 노드 (N4 714) 로 천이하게 할 수 있다.
프로세싱 사이클 (1158j) 에 대해서 도시된 바와 같이, 프로세싱 사이클 (1158h) 에서 팝핑된 스택 엔트리를 통해서 식별된 오프셋 (820h) 에서의 세그먼트 (822h) (즉, "b") 가 노드 (N4 714) 에서 긍정적으로 매칭된다. 이로써, 워커 (320) 는 현 오프셋을 오프셋 (820i) 으로 업데이트하고 노드 (N4 714) 와 연관된 메타데이터를 통해서 식별된 후속 노드인 노드 (N5 715) 를 페치한다.
노드 (N5 715) 가 마킹된 노드이기 때문에, 워커는 최종 매칭 결과를 매칭 결과 버퍼 (466) 에 저장하고 활성 쓰레드 (예를 들어서, 현 경로) 를 워킹하는 것을 중단할 수도 있다. 워커 (320) 는 런 스택 (460) 이 빈 상태에 있는지를 체크할 수도 있다. 예시적인 실시예에서, 탐색되지 않은 컨텍스트가 프로세싱 사이클 (1158e) 에서 스택 (460) 으로 푸싱되었기 때문에, 런 스택 (460) 은 빈 상태가 아니다. 이로써, 워커 (320) 는 오프셋 (820f) (즉, "5") 에서의 세그먼트 (822f) (즉, "b") 를 사용하여서 노드 (N4 714) 로의 워킹을 가속화시키는 것을 포함하는 탐색되지 않은 컨텍스트를 팝핑하고 스택 엔트리와 연관된 DUP 표시자에 기초하여서 탐색되지 않은 컨텍스트를 폐기할지 프로세싱할지를 결정할 수도 있다.
본 명세서에서 개시된 실시예들에 따라서, 현 오프셋을 업데이트하는 것은 각기 워킹의 순방향 또는 역방향에 기초하여서 현 오프셋을 증분 또는 감분시키는 것을 포함할 수도 있다. 이로써, 현 오프셋을 증분 또는 감분시키는 것은 실례들의 워킹 방향에 따라서 예시적 목적을 위한 것이다.
예시적인 실시예의 표 (1148) 에서 도시된 바와 같이, 페이로드 (842) 를 패턴 (542) 에 대해 매칭시키기 위해 그리디 추정적 프로세싱을 사용하는 프로세싱 사이클들의 개수는 11 개이며, 이는 도 8의 그리디 비추정적 프로세싱의 예시적인 실시예에서 필요한 14 개의 프로세싱 사이클들에 비해서 감소된 개수이다. 위에서 개시된 예시적인 실시예들에서 도시된 바와 같은 그리디 추정적 프로세싱에 기초한 이러한 성능 증가는 예시적 목적을 위한 것이며 그리디 추정적 프로세싱을 사용하여서 달성되는 성능 이득은 예시된 것보다 더 클 수 있음이 이해되어야 한다. 예를 들어서, 이러한 성능 이득은 입력 페이로드에 따라서 증가할 수도 있다. 입력 스트림의 컨텐츠에 기초하여서, 도 8의 프로세싱 사이클들 (828j 및 828k) 에서의언롤링과 같은 추가 언롤링은 상이한 페이로드들에 대해서 보다 보편적이며 보다 큰 성능 이득을 낳을 수 있다.
도 12는 본 발명의 다양한 실시예들이 구현될 수도 있는 컴퓨터 (1200) 의 내부 구조의 실례의 블록도이다. 컴퓨터 (1200) 는 시스템 버스 (1202) 를 포함하며, 버스는 컴퓨터 또는 프로세싱 시스템의 컴포턴트들 중에서 데이터를 전달하기 위해서 사용되는 하드웨어 라인들의 세트이다. 시스템 버스 (1202) 는 본질적으로는 컴퓨터 시스템의 상이한 요소들 (예를 들어서, 프로세서, 디스크 저장부, 메모리, 입출력 포트들, 네트워크 포트들 등) 간의 정보의 전달을 가능하게 하는 컴퓨터 시스템들의 상이한 요소들을 접속시키는 공유형 전달자 (conduit) 이다. 다양한 입출력 장치들 (예를 들어서, 키보드, 마우스, 디스플레이, 프린터, 스피커 등) 을 컴퓨터 (1200) 로 접속시키는 입출력 장치 인터페이스 (1204) 는 시스템 버스 (1202) 와 함께 동작한다. 네트워크 인터페이스 (1206) 는 컴퓨터 (1200) 로 하여금 네트워크에 어태치된 다양한 다른 장치들로 접속되게 한다. 메모리 (1208) 는 본 발명의 실시예들을 구현하는데 사용될 수도 있는 컴퓨터 소프트웨어 인스트럭션 (1210) 및 데이터 (1212) 를 위한 휘발성 저장을 제공한다. 디스크 저장부 (1214) 는 본 발명의 실시예들을 구현하는데 사용될 수도 있는 컴퓨터 소프트웨어 인스트럭션 (1210) 및 데이터 (1212) 를 위한 비휘발성 저장을 제공한다. 중앙 프로세서 유닛 (1218) 은 시스템 버스 (1202) 와 함께 동작하며 컴퓨터 인스트럭션들의 실행을 제공한다.
본 발명의 다른 예시적인 실시예들은 컴퓨터 프로그램 제품을 사용하여서 구성될 수 있다: 예를 들어서, 본 발명의 예시적인 실시예들을 구현하기 위한 소프트웨어 내에 제어 사항들이 프로그래밍될 수도 있다. 본 발명의 다른 예시적인 실시예들은 프로세서에 의해서 실행될 수 있으며 실행되어서 프로세서로 하여금 본 명세서에서 개시된 방법들을 완료하게 하는 인스트럭션들을 포함하는 비일시적 컴퓨터 판독가능한 매체를 포함할 수도 있다. 본 명세서에서 기술된 블록도 및 흐름도의 요소들은 소프트웨어, 하드웨어, 펌웨어 또는 차후에 결정되는 다른 유사한 구현으로 해서 구현될 수도 있음이 이해되어야 한다. 또한, 본 명세서에서 기술된 블록도 및 흐름도의 요소들은 소프트웨어, 하드웨어, 펌웨어로 해서 임의의 방식으로 조합 또는 분할될 수도 있다.
용어 "본 명세서에서"는, 논의 대상, 규정사항들, 또는 데이터 캐리 (carry) 가 본 명세서에서 제공된 교시사항들을 포함하는 출원 또는 특허 내로 적용 (forward) 되게, 이러한 특허 또는 출원으로 이동가능한 것으로 이해되어야 한다.
소프트웨어로 구현되는 경우에, 소프트웨어는 본 명세서에서 기술된 예시적인 실시예들을 지원할 수 있는 임의의 언어로 기록될 수도 있다. 소프트웨어는 RAM, ROM, CD-ROM, 등과 같은 컴퓨터 판독가능한 매체의 임의의 형태로 저장될 수도 있다. 동작 시에, 범용 또는 애플리케이션-특정 프로세서가 본 기술 분야에서 잘 이해되는 방식으로 소프트웨어를 로딩 및 실행할 수 있다. 블록도 및 흐름도는 보다 많은 또는 보다 작은 수의 요소들을 포함하거나 상이하게 배열 또는 배향되거나, 상이하게 표현될 수도 있음이 또한 이해되어야 한다. 구현예는 본 발명의 실시예들의 실행들을 예시하는 블록도, 흐름도 및/또는 네트워크도 및 블록도 및 흐름도의 수에 영향을 줄 수도 있음이 이해되어야 한다.
본 발명은 본 발명의 예시적인 실시예들을 참조하여서 특정하게 도시 및 기술되었지만, 형태 및 세부사항에서의 다양한 변경들이 첨부된 청구항들에 의해서 포함되는 본 발명의 범위를 벗어나지 않으면서 이루어질 수도 있음이 본 기술 분야의 당업자에게 이해될 것이다.

Claims (37)

  1. 네트워크에 동작하게 커플링된 (coupled) 보안 어플라이언스 (appliance) 로서,
    적어도 하나의 정규 표현식 패턴으로부터 생성된 복수의 노드들을 포함하는 적어도 하나의 유한 오토마톤 (finite automaton) 을 저장하도록 구성된 적어도 하나의 메모리; 및
    상기 적어도 하나의 메모리에 동작하게 커플링된 적어도 하나의 프로세서를 포함하며,
    상기 적어도 하나의 프로세서는 상기 네트워크를 통해서 수신된 입력 스트림 내의 상기 적어도 하나의 정규 표현식 패턴을 매칭시키도록, 상기 입력 스트림의 세그먼트들을 사용하여서, 상기 적어도 하나의 유한 오토마톤을 워킹 (walk) 하도록 구성되며,
    상기 워킹은 상기 입력 스트림 내의 패킷의 페이로드 내의 현 오프셋에서의 세그먼트를 사용하여서, 상기 적어도 하나의 유한 오토마톤의 소정의 유한 오토마톤의 적어도 2 개의 노드들을 병행하여 (in parallel) 반복적으로 워킹하는 것을 포함하며,
    상기 반복적으로 워킹하는 것은 병행하여 워킹된 상기 적어도 2 개의 노드들 중 소정의 노드에서 상기 세그먼트와 긍정적으로 매칭한 것에 기초하며,
    상기 현 오프셋은 반복마다 후속 오프셋 (next offset) 으로 업데이트되는,
    보안 어플라이언스.
  2. 제 1 항에 있어서,
    상기 반복적으로 워킹하는 것은 반복마다,
    상기 적어도 하나의 프로세서의 동일한 프로세싱 사이클 내에서, 상기 페이로드 내의 현 오프셋에서의 세그먼트를 사용하여서 상기 적어도 2 개의 노드들을 병행하여 워킹하는 것을 더 포함하는,
    보안 어플라이언스.
  3. 제 1 항에 있어서,
    상기 적어도 2 개의 노드는 상기 페이로드 내의 요소의 단일 인스턴스 (instance) 와 매칭하도록 구성된 요소 노드 (element node) 를 포함하며,
    상기 반복적으로 워킹하는 것은 반복마다,
    상기 소정의 노드 및 상기 요소 노드에서 상기 페이로드 내의 현 오프셋에서의 세그먼트와 긍정적으로 매칭하는 것에 기초하여서, 상기 후속 오프셋 및 상기 소정의 유한 오토마톤의 후속 노드를 식별하는 컨텍스트를 저장하는 것을 더 포함하며,
    상기 요소 노드는 상기 요소와 상기 후속 노드를 식별하는 메타데이터와 연관된,
    보안 어플라이언스.
  4. 제 3 항에 있어서,
    상기 적어도 하나의 프로세서에 동작하게 커플링된 적어도 하나의 스택을 더 포함하며,
    상기 컨텍스트를 저장하는 것은 상기 컨텍스트를 스택 엔트리에 저장하고 상기 스택 엔트리를 상기 적어도 하나의 스택 상으로 푸싱하는 (pushing) 것을 포함하는,
    보안 어플라이언스.
  5. 제 1 항에 있어서,
    상기 소정의 노드는 상기 페이로드 내의 요소의 임계 회수의 연속하는 인스턴스들을 매칭시키도록 구성된 가변 카운트 그리디 (variable count greedy) (VCG) 노드이며,
    상기 VCG 노드에서 상기 세그먼트와 긍정적으로 매칭하는 것은 상기 세그먼트를 상기 요소와 긍정적으로 매칭시킨 것에 기초하는,
    보안 어플라이언스.
  6. 제 5 항에 있어서,
    상기 VCG 노드에서 상기 세그먼트와 긍정적으로 매칭하는 것은, 상기 VCG 노드와 연관된 카운트 값을 증분시키는 것을 포함하며, 상기 증분된 카운트 값이 상기 임계 회수 이하인 것에 더 기초하며,
    상기 방법은 상기 세그먼트를 상기 요소와 부정적으로 매칭시킨 것 또는 상기 임계 회수가 초과되었다고 결정한 것에 기초하여서, 상기 VCG 노드에서 상기 세그먼트와 부정적으로 매칭하는 것을 더 포함하는,
    보안 어플라이언스.
  7. 제 1 항에 있어서,
    상기 적어도 2 개의 노드들 중 상기 소정의 노드는 메타데이터와 연관되며,
    상기 적어도 2 개의 노드들을 병행하여 반복적으로 워킹하는 것은 상기 소정의 노드의 상기 메타데이터가 추정적 프로세싱 표시자 (speculative processing indicator) 를 포함하는 것에 더 기초하는,
    보안 어플라이언스.
  8. 제 1 항에 있어서,
    병행하여 워킹된 상기 적어도 2 개의 노드들은 요소 노드 및 VCG 노드를 포함하며, 상기 소정의 노드는 상기 VCG 노드이며,
    상기 VCG 노드는 상기 페이로드 내의 제 1 요소의 가변 회수의 연속하는 인스턴스들을 매칭시키도록 구성되며,
    상기 요소 노드는 상기 페이로드 내의 제 2 요소의 단일 인스턴스를 매칭시키도록 구성되는,
    보안 어플라이언스.
  9. 제 8 항에 있어서,
    상기 VCG 노드는 상기 요소 노드, 상기 연속하는 인스턴스들의 가변 회수, 상기 제 1 요소를 직접적으로 또는 간접적으로 식별하는 메타데이터와 연관된,
    보안 어플라이언스.
  10. 제 9 항에 있어서,
    상기 VCG 노드와 연관된 메타데이터는 상기 가변 회수에 대한 총 회수의 비교를 실현하기 위해서 상기 페이로드 내에서 매칭하는 상기 제 1 요소의 연속하는 인스턴스들의 총 회수를 추적하기 위한 카운트 값을 더 포함하는,
    보안 어플라이언스.
  11. 제 8 항에 있어서,
    상기 제 1 요소는 제 1 문자 또는 제 1 문자 클래스 (class) 중 하나이며,
    상기 제 2 요소는 제 2 문자 또는 제 2 문자 클래스 (class) 중 하나인,
    보안 어플라이언스.
  12. 제 8 항에 있어서,
    상기 소정의 유한 오토마톤은 비-결정성 유한 오토마톤 (non-deterministic finite automaton) (NFA) 그래프이며,
    상기 NFA 그래프는 상기 VCG 노드로부터 상기 요소 노드로의 천이를 포함하며,
    상기 VCG 노드는 상기 NFA 그래프에서 상기 요소 노드를 선행하는,
    보안 어플라이언스.
  13. 제 8 항에 있어서,
    상기 워킹은,
    상기 VCG 노드에서 상기 페이로드 내의 상기 현 오프셋에서의 세그먼트와 부정적으로 매칭하는 것에 기초하여서, 그리고 상기 요소 노드에서 상기 페이로드 내의 상기 현 오프셋에서의 세그먼트와 긍정적으로 매칭하는 것에 기초하여서,
    반복적으로 워킹하는 것을 중단하는 것;
    상기 현 오프셋을 상기 후속 오프셋으로 업데이트하는 것; 및
    상기 페이로드 내의 상기 후속 오프셋에서의 후속 세그먼트를 사용하여 상기 후속 노드를 워킹하는 것을 더 포함하는,
    보안 어플라이언스.
  14. 제 13 항에 있어서,
    상기 현 오프셋을 업데이트하는 것은 각기 상기 워킹의 순방향 또는 역방향에 기초하여서 상기 현 오프셋을 증분 또는 감분시키는 것을 포함하는,
    보안 어플라이언스.
  15. 제 8 항에 있어서,
    상기 적어도 하나의 프로세서에 동작하게 커플링된 적어도 하나의 스택을 더 포함하며,
    상기 워킹은,
    상기 VCG 노드 및 상기 요소 노드에서 상기 세그먼트와 부정적으로 매칭하는 것에 기초하여서,
    상기 반복적인 워킹을 중단하는 것;
    상기 적어도 하나의 스택이 비어 있지 않은 상태에 기초하여서 상기 적어도 하나의 스택으로부터 스택 엔트리를 팝핑하고, 상기 팝핑된 스택 엔트리에 기초하여서 후속 세그먼트를 사용하여서 후속 노드로의 워킹을 가속시키는 것; 및
    상기 적어도 하나의 스택이 비어 있는 상태에 기초하여서 상기 워킹을 종료하는 것을 더 포함하며,
    상기 스택 엔트리는 상기 스택 상에 가장 최근에 푸싱된 엔트리인,
    보안 어플라이언스.
  16. 제 1 항에 있어서,
    상기 현 오프셋을 증분 또는 감분시킴으로써 상기 현 오프셋이 상기 후속 오프셋으로 업데이트되는,
    보안 어플라이언스.
  17. 제 16 항에 있어서,
    상기 현 오프셋은 워킹의 순방향에 기초하여서 증분되고 워킹의 역방향에 기초하여서 감분되는,
    보안 어플라이언스.
  18. 제 1 항에 있어서,
    상기 적어도 하나의 유한 오토마톤은 결정성 유한 오토마톤 (deterministic finite automaton) (DFA) 및 적어도 하나의 비-결정성 유한 오토마톤 (non-deterministic finite automaton) (NFA) 을 포함하며,
    상기 소정의 유한 오토마톤은 상기 적어도 하나의 NFA 중 소정의 NFA인,
    보안 어플라이언스.
  19. 적어도 하나의 메모리 내의 적어도 하나의 정규 표현식 패턴으로부터 생성된 복수의 노드들을 포함하는 적어도 하나의 유한 오토마톤을 저장하는 단계; 및
    상기 적어도 하나의 메모리를 적어도 하나의 프로세서로 동작하게 커플링시키는 단계를 포함하며,
    상기 적어도 하나의 프로세서는 상기 네트워크에 동작하게 커플링된 하드웨어 네트워크 인터페이스를 통해서 수신된 입력 스트림 내의 상기 적어도 하나의 정규 표현식 패턴을 매칭시키도록, 상기 입력 스트림의 세그먼트들을 사용하여서, 상기 적어도 하나의 유한 오토마톤을 워킹하도록 구성되며,
    상기 워킹은 상기 입력 스트림 내의 패킷의 페이로드 내의 현 오프셋에서의 세그먼트를 사용하여서, 상기 적어도 하나의 유한 오토마톤의 소정의 유한 오토마톤의 적어도 2 개의 노드들을 병행하여 반복적으로 워킹하는 단계를 포함하며,
    상기 반복적으로 워킹하는 단계는 병행하여 워킹된 상기 적어도 2 개의 노드들 중 소정의 노드에서 상기 세그먼트와 긍정적으로 매칭한 것에 기초하며,
    상기 현 오프셋은 반복마다 후속 오프셋으로 업데이트되는,
    방법.
  20. 제 19 항에 있어서,
    상기 반복적으로 워킹하는 단계는 반복마다,
    상기 적어도 하나의 프로세서의 동일한 프로세싱 사이클 내에서, 상기 페이로드 내의 현 오프셋에서의 세그먼트를 사용하여서 상기 적어도 2 개의 노드들을 병행하여 워킹하는 단계를 더 포함하는,
    방법.
  21. 제 19 항에 있어서,
    상기 적어도 2 개의 노드는 상기 페이로드 내의 요소의 단일 인스턴스 (instance) 와 매칭하도록 구성된 요소 노드 (element node) 를 포함하며,
    상기 반복적으로 워킹하는 단계는 반복마다,
    상기 소정의 노드 및 상기 요소 노드에서 상기 페이로드 내의 현 오프셋에서의 세그먼트와 긍정적으로 매칭하는 것에 기초하여서, 상기 후속 오프셋 및 상기 소정의 유한 오토마톤의 후속 노드를 식별하는 컨텍스트를 저장하는 단계를 더 포함하며,
    상기 요소 노드는 상기 요소와 상기 후속 노드를 식별하는 메타데이터와 연관된,
    방법.
  22. 제 21 항에 있어서,
    상기 보안 어플라이언스는 적어도 하나의 스택을 더 포함하며,
    상기 방법은 상기 적어도 하나의 프로세서를 상기 적어도 하나의 스택에 동작하게 커플링시키는 단계를 더 포함하며,
    상기 컨텍스트를 저장하는 단계는 상기 컨텍스트를 스택 엔트리에 저장하고 상기 스택 엔트리를 상기 적어도 하나의 스택 상으로 푸싱하는 (pushing) 단계를 포함하는,
    방법.
  23. 제 19 항에 있어서,
    상기 소정의 노드는 상기 페이로드 내의 요소의 임계 회수의 연속하는 인스턴스들을 매칭시키도록 구성된 가변 카운트 그리디 (variable count greedy) (VCG) 노드이며,
    상기 VCG 노드에서 상기 세그먼트와 긍정적으로 매칭하는 단계는 상기 세그먼트를 상기 요소와 긍정적으로 매칭시킨 것에 기초하는,
    방법.
  24. 제 23 항에 있어서,
    상기 VCG 노드에서 상기 세그먼트와 긍정적으로 매칭하는 단계는 상기 VCG 노드와 연관된 카운트 값을 증분시키는 단계를 포함하며, 상기 증분된 카운트 값이 상기 임계 회수 이하인 것에 더 기초하며,
    상기 방법은 상기 세그먼트를 상기 요소와 부정적으로 매칭시킨 것 또는 상기 임계 회수가 초과되었다고 결정한 것에 기초하여서, 상기 VCG 노드에서 상기 세그먼트와 부정적으로 매칭하는 단계를 더 포함하는,
    방법.
  25. 제 19 항에 있어서,
    상기 적어도 2 개의 노드들 중 상기 소정의 노드를 메타데이터와 연관시키는 단계를 더 포함하며,
    상기 적어도 2 개의 노드들을 병행하여 반복적으로 워킹하는 단계는 상기 소정의 노드의 상기 메타데이터가 추정적 프로세싱 표시자 (speculative processing indicator) 를 포함하는 것에 더 기초하는,
    방법.
  26. 제 19 항에 있어서,
    병행하여 워킹된 상기 적어도 2 개의 노드들은 요소 노드 및 VCG 노드를 포함하며, 상기 소정의 노드는 상기 VCG 노드이며,
    상기 VCG 노드는 상기 페이로드 내의 제 1 요소의 가변 회수의 연속하는 인스턴스들을 매칭시키도록 구성되며,
    상기 요소 노드는 상기 페이로드 내의 제 2 요소의 단일 인스턴스를 매칭시키도록 구성되는,
    방법.
  27. 제 26 항에 있어서,
    상기 VCG 노드를 상기 요소 노드, 상기 연속하는 인스턴스들의 가변 회수, 상기 제 1 요소를 직접적으로 또는 간접적으로 식별하는 메타데이터와 연관시키는 단계를 더 포함하는,
    방법.
  28. 제 27 항에 있어서,
    상기 VCG 노드와 연관된 메타데이터는 상기 가변 회수에 대한 총 회수의 비교를 실현하기 위해서 상기 페이로드 내에서 매칭하는 상기 제 1 요소의 연속하는 인스턴스들의 총 회수를 추적하기 위한 카운트 값을 더 포함하는,
    방법.
  29. 제 26 항에 있어서,
    상기 제 1 요소는 제 1 문자 또는 제 1 문자 클래스 (class) 중 하나이며,
    상기 제 2 요소는 제 2 문자 또는 제 2 문자 클래스 (class) 중 하나인,
    방법.
  30. 제 26 항에 있어서,
    상기 소정의 유한 오토마톤은 비-결정성 유한 오토마톤 (non-deterministic finite automaton) (NFA) 그래프이며,
    상기 NFA 그래프는 상기 VCG 노드로부터 상기 요소 노드로의 천이를 포함하며,
    상기 VCG 노드는 상기 NFA 그래프에서 상기 요소 노드를 선행하는,
    방법.
  31. 제 26 항에 있어서,
    상기 워킹은,
    상기 VCG 노드에서 상기 페이로드 내의 상기 현 오프셋에서의 세그먼트와 부정적으로 매칭하는 것에 기초하여서, 그리고 상기 요소 노드에서 상기 페이로드 내의 상기 현 오프셋에서의 세그먼트와 긍정적으로 매칭하는 것에 기초하여서,
    반복적으로 워킹하는 것을 중단하는 단계;
    상기 현 오프셋을 상기 후속 오프셋으로 업데이트하는 단계; 및
    상기 페이로드 내의 상기 후속 오프셋에서의 후속 세그먼트를 사용하여 상기 후속 노드를 워킹하는 단계를 더 포함하는,
    방법.
  32. 제 31 항에 있어서,
    상기 현 오프셋을 업데이트하는 단계는 각기 상기 워킹의 순방향 또는 역방향에 기초하여서 상기 현 오프셋을 증분 또는 감분시키는 단계를 포함하는,
    방법.
  33. 제 26 항에 있어서,
    상기 보안 어플라이언스는 적어도 하나의 스택을 더 포함하며,
    상기 방법은 상기 적어도 하나의 프로세서를 상기 적어도 하나의 스택에 동작하게 커플링시키는 단계를 더 포함하며,
    상기 워킹은,
    상기 VCG 노드 및 상기 요소 노드에서 상기 세그먼트와 부정적으로 매칭하는 것에 기초하여서,
    상기 워킹을 중단하는 단계;
    상기 적어도 하나의 스택이 비어 있지 않은 상태에 기초하여서 상기 적어도 하나의 스택으로부터 스택 엔트리를 팝핑하고, 상기 팝핑된 스택 엔트리에 기초하여서 후속 세그먼트를 사용하여서 후속 노드로의 워킹을 가속시키는 단계; 및
    상기 적어도 하나의 스택이 비어 있는 상태에 기초하여서 상기 워킹을 종료하는 단계를 더 포함하며,
    상기 스택 엔트리는 상기 스택 상에 가장 최근에 푸싱된 엔트리인,
    방법.
  34. 제 19 항에 있어서,
    상기 현 오프셋을 증분 또는 감분시킴으로써 상기 현 오프셋이 상기 후속 오프셋으로 업데이트되는,
    방법.
  35. 제 34 항에 있어서,
    상기 현 오프셋은 워킹의 순방향에 기초하여서 증분되고 워킹의 역방향에 기초하여서 감분되는,
    방법.
  36. 제 19 항에 있어서,
    상기 적어도 하나의 유한 오토마톤은 결정성 유한 오토마톤 (deterministic finite automaton) (DFA) 및 적어도 하나의 비-결정성 유한 오토마톤 (non-deterministic finite automaton) (NFA) 을 포함하며,
    상기 소정의 유한 오토마톤은 상기 적어도 하나의 NFA 중 소정의 NFA인,
    방법.
  37. 인스트럭션들의 시퀀스를 그 상에 인코딩한 비일시적 컴퓨터-판독가능한 매체로서,
    상기 인스트럭션들의 시퀀스는 적어도 하나의 프로세서에 의해서 실행될 때에, 상기 적어도 하나의 프로세서로 하여금,
    입력 스트림 내의 적어도 하나의 정규 표현식 패턴을 매칭시키도록, 상기 적어도 하나의 정규 표현식 패턴으로부터 생성된 복수의 노드들을 포함하는 적어도 하나의 유한 오토마톤을, 상기 입력 스트림의 세그먼트들을 사용하여서, 워킹하게 하며,
    상기 워킹은 상기 입력 스트림 내의 패킷의 페이로드 내의 현 오프셋에서의 세그먼트를 사용하여서, 상기 적어도 하나의 유한 오토마톤의 소정의 유한 오토마톤의 적어도 2 개의 노드들을 병행하여 반복적으로 워킹하는 것을 포함하며,
    상기 반복적으로 워킹하는 것은 병행하여 워킹된 상기 적어도 2 개의 노드들 중 소정의 노드에서 상기 세그먼트와 긍정적으로 매칭한 것에 기초하며,
    상기 현 오프셋은 반복마다 후속 오프셋으로 업데이트되는,
    비일시적 컴퓨터-판독가능한 매체.
KR1020140113845A 2014-01-31 2014-08-29 유한 오토마톤 프로세싱을 최적화시키기 위한 방법 및 장치 KR101633649B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/169,830 2014-01-31
US14/169,830 US9602532B2 (en) 2014-01-31 2014-01-31 Method and apparatus for optimizing finite automata processing

Publications (2)

Publication Number Publication Date
KR20150091209A true KR20150091209A (ko) 2015-08-10
KR101633649B1 KR101633649B1 (ko) 2016-06-28

Family

ID=53755121

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140113845A KR101633649B1 (ko) 2014-01-31 2014-08-29 유한 오토마톤 프로세싱을 최적화시키기 위한 방법 및 장치

Country Status (2)

Country Link
US (1) US9602532B2 (ko)
KR (1) KR101633649B1 (ko)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7110525B1 (en) 2001-06-25 2006-09-19 Toby Heller Agent training sensitive call routing system
US9398033B2 (en) 2011-02-25 2016-07-19 Cavium, Inc. Regular expression processing automaton
CN103858392B (zh) 2011-08-02 2018-12-14 凯为公司 用于更新规则编译数据结构的方法和装置
US9203805B2 (en) 2011-11-23 2015-12-01 Cavium, Inc. Reverse NFA generation and processing
US9563399B2 (en) 2013-08-30 2017-02-07 Cavium, Inc. Generating a non-deterministic finite automata (NFA) graph for regular expression patterns with advanced features
US9426166B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for processing finite automata
US9426165B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for compilation of finite automata
US9419943B2 (en) 2013-12-30 2016-08-16 Cavium, Inc. Method and apparatus for processing of finite automata
US9544402B2 (en) 2013-12-31 2017-01-10 Cavium, Inc. Multi-rule approach to encoding a group of rules
US9275336B2 (en) 2013-12-31 2016-03-01 Cavium, Inc. Method and system for skipping over group(s) of rules based on skip group rule
US9667446B2 (en) 2014-01-08 2017-05-30 Cavium, Inc. Condition code approach for comparing rule and packet data that are provided in portions
US9904630B2 (en) 2014-01-31 2018-02-27 Cavium, Inc. Finite automata processing based on a top of stack (TOS) memory
US10002326B2 (en) 2014-04-14 2018-06-19 Cavium, Inc. Compilation of finite automata based on memory hierarchy
US10110558B2 (en) 2014-04-14 2018-10-23 Cavium, Inc. Processing of finite automata based on memory hierarchy
US9438561B2 (en) 2014-04-14 2016-09-06 Cavium, Inc. Processing of finite automata based on a node cache
US9513919B2 (en) 2015-04-28 2016-12-06 Intel Corporation Method and apparatus for speculative decompression
US10552130B1 (en) * 2017-06-09 2020-02-04 Azul Systems, Inc. Code optimization conversations for connected managed runtime environments
KR102006220B1 (ko) 2018-05-24 2019-08-02 주식회사 윈스 시그니처 재구성 장치 및 방법
US10656949B2 (en) 2018-07-13 2020-05-19 Fungible, Inc. Instruction-based non-deterministic finite state automata accelerator
US10635419B2 (en) 2018-07-13 2020-04-28 Fungible, Inc. Incremental compilation of finite automata for a regular expression accelerator
US10645187B2 (en) 2018-07-13 2020-05-05 Fungible, Inc. ARC caching for determininstic finite automata of regular expression accelerator
US10983721B2 (en) 2018-07-13 2021-04-20 Fungible, Inc. Deterministic finite automata node construction and memory mapping for regular expression accelerator
US11263190B2 (en) 2019-09-26 2022-03-01 Fungible, Inc. Data ingestion and storage by data processing unit having stream-processing hardware accelerators
US11636115B2 (en) 2019-09-26 2023-04-25 Fungible, Inc. Query processing using data processing units having DFA/NFA hardware accelerators
US11636154B2 (en) 2019-09-26 2023-04-25 Fungible, Inc. Data flow graph-driven analytics platform using data processing units having hardware accelerators
US11269525B2 (en) 2020-01-06 2022-03-08 International Business Machines Corporation Co-processing a plurality of dependent systems with a finite number of processing threads
US11934964B2 (en) 2020-03-20 2024-03-19 Microsoft Technology Licensing, Llc Finite automata global counter in a data flow graph-driven analytics platform having analytics hardware accelerators
US11630729B2 (en) 2020-04-27 2023-04-18 Fungible, Inc. Reliability coding with reduced network traffic

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004013777A1 (en) * 2002-08-05 2004-02-12 Fish Robert System and method of parallel pattern matching
WO2007109445A1 (en) * 2006-03-21 2007-09-27 At & T Corp. Monitoring regular expressions on out-of-order streams
WO2008005772A2 (en) * 2006-07-03 2008-01-10 Reservoir Labs, Inc. System, apparatus, and methods for pattern matching

Family Cites Families (90)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5428554A (en) 1992-09-03 1995-06-27 International Business Machines Corporation Hierarchical graph analysis method and apparatus
US5608662A (en) 1995-01-12 1997-03-04 Television Computer, Inc. Packet filter engine
US5893142A (en) 1996-11-14 1999-04-06 Motorola Inc. Data processing system having a cache and method therefor
US6314513B1 (en) 1997-09-30 2001-11-06 Intel Corporation Method and apparatus for transferring data between a register stack and a memory resource
US6954424B2 (en) 2000-02-24 2005-10-11 Zarlink Semiconductor V.N., Inc. Credit-based pacing scheme for heterogeneous speed frame forwarding
US8010469B2 (en) 2000-09-25 2011-08-30 Crossbeam Systems, Inc. Systems and methods for processing data flows
US20070192863A1 (en) 2005-07-01 2007-08-16 Harsh Kapoor Systems and methods for processing data flows
US20110238855A1 (en) 2000-09-25 2011-09-29 Yevgeny Korsunsky Processing data flows with a data flow processor
US7046848B1 (en) 2001-08-22 2006-05-16 Olcott Peter L Method and system for recognizing machine generated character glyphs and icons in graphic images
US7143087B2 (en) 2002-02-01 2006-11-28 John Fairweather System and method for creating a distributed network architecture
US7225188B1 (en) 2002-02-13 2007-05-29 Cisco Technology, Inc. System and method for performing regular expression matching with high parallelism
JP4047053B2 (ja) 2002-04-16 2008-02-13 富士通株式会社 繰り返しを含む順序パターンを用いた検索装置および方法
AU2003251492A1 (en) 2002-06-11 2003-12-22 Ashish A. Pandya High performance ip processor for tcp/ip, rdma and ip storage applications
US7119577B2 (en) 2002-08-28 2006-10-10 Cisco Systems, Inc. Method and apparatus for efficient implementation and evaluation of state machines and programmable finite state automata
US7305391B2 (en) 2003-02-07 2007-12-04 Safenet, Inc. System and method for determining the start of a match of a regular expression
US7594002B1 (en) 2003-02-14 2009-09-22 Istor Networks, Inc. Hardware-accelerated high availability integrated networked storage system
EP1604277A2 (en) 2003-02-28 2005-12-14 Lockheed Martin Corporation Hardware accelerator personality compiler
US7093231B2 (en) 2003-05-06 2006-08-15 David H. Alderson Grammer for regular expressions
US20050108518A1 (en) 2003-06-10 2005-05-19 Pandya Ashish A. Runtime adaptable security processor
US7685254B2 (en) 2003-06-10 2010-03-23 Pandya Ashish A Runtime adaptable search processor
US7870161B2 (en) 2003-11-07 2011-01-11 Qiang Wang Fast signature scan
US7685637B2 (en) 2004-06-14 2010-03-23 Lionic Corporation System security approaches using sub-expression automata
US8301788B2 (en) 2004-09-10 2012-10-30 Cavium, Inc. Deterministic finite automata (DFA) instruction
US7594081B2 (en) 2004-09-10 2009-09-22 Cavium Networks, Inc. Direct access to low-latency memory
US8392590B2 (en) 2004-09-10 2013-03-05 Cavium, Inc. Deterministic finite automata (DFA) processing
US8560475B2 (en) 2004-09-10 2013-10-15 Cavium, Inc. Content search mechanism that uses a deterministic finite automata (DFA) graph, a DFA state machine, and a walker process
US20080189784A1 (en) 2004-09-10 2008-08-07 The Regents Of The University Of California Method and Apparatus for Deep Packet Inspection
US7260558B1 (en) 2004-10-25 2007-08-21 Hi/Fn, Inc. Simultaneously searching for a plurality of patterns definable by complex expressions, and efficiently generating data for such searching
US7356663B2 (en) 2004-11-08 2008-04-08 Intruguard Devices, Inc. Layered memory architecture for deterministic finite automaton based string matching useful in network intrusion detection and prevention systems and apparatuses
US7710988B1 (en) 2005-03-11 2010-05-04 Xambala Corporation Method and system for non-deterministic finite automaton filtering
US7979368B2 (en) 2005-07-01 2011-07-12 Crossbeam Systems, Inc. Systems and methods for processing data flows
US20080229415A1 (en) 2005-07-01 2008-09-18 Harsh Kapoor Systems and methods for processing data flows
US7805392B1 (en) 2005-11-29 2010-09-28 Tilera Corporation Pattern matching in a multiprocessor environment with finite state automaton transitions based on an order of vectors in a state transition table
US7702629B2 (en) 2005-12-02 2010-04-20 Exegy Incorporated Method and device for high performance regular expression pattern matching
US20080097959A1 (en) 2006-06-14 2008-04-24 Nec Laboratories America, Inc. Scalable xml filtering with bottom up path matching and encoded path joins
US20080034427A1 (en) 2006-08-02 2008-02-07 Nec Laboratories America, Inc. Fast and scalable process for regular expression search
US8220048B2 (en) 2006-08-21 2012-07-10 Wisconsin Alumni Research Foundation Network intrusion detector with combined protocol analyses, normalization and matching
GB2441351B (en) 2006-09-01 2010-12-08 3Com Corp Positionally dependent pattern checking in character strings using deterministic finite automata
US8024691B2 (en) 2006-09-28 2011-09-20 Mcgill University Automata unit, a tool for designing checker circuitry and a method of manufacturing hardware circuitry incorporating checker circuitry
GB2452420B (en) 2006-10-27 2009-05-06 3Com Corp Signature checking using deterministic finite state machines
WO2008073824A1 (en) 2006-12-08 2008-06-19 Pandya Ashish A Dynamic programmable intelligent search memory
US8055601B2 (en) 2006-12-08 2011-11-08 Pandya Ashish A Compiler for compiling content search rules comprising a regular expression using a programmable intelligent search memory (PRISM) and vectors
US7996348B2 (en) 2006-12-08 2011-08-09 Pandya Ashish A 100GBPS security and search architecture using programmable intelligent search memory (PRISM) that comprises one or more bit interval counters
US7962434B2 (en) 2007-02-15 2011-06-14 Wisconsin Alumni Research Foundation Extended finite state automata and systems and methods for recognizing patterns in a data stream using extended finite state automata
FR2913785B1 (fr) 2007-03-13 2009-06-12 St Microelectronics Sa Gestion de memoire tampon circulaire
WO2008129635A1 (ja) 2007-04-12 2008-10-30 Fujitsu Limited 性能障害要因分析プログラムおよび性能障害要因分析装置
US9021582B2 (en) 2007-04-24 2015-04-28 Juniper Networks, Inc. Parallelized pattern matching using non-deterministic finite automata
US7788206B2 (en) 2007-04-30 2010-08-31 Lsi Corporation State machine compression using multi-character state transition instructions
US8024802B1 (en) 2007-07-31 2011-09-20 Hewlett-Packard Development Company, L.P. Methods and systems for using state ranges for processing regular expressions in intrusion-prevention systems
US20100138367A1 (en) 2007-08-02 2010-06-03 Nario Yamagaki SYSTEM, METHOD, AND PROGRAM FOR GENERATING NON-DETERMINISTIC FINITE AUTOMATON NOT INCLUDING e-TRANSITION
US8086609B2 (en) 2007-11-01 2011-12-27 Cavium, Inc. Graph caching
US8819217B2 (en) 2007-11-01 2014-08-26 Cavium, Inc. Intelligent graph walking
US7949683B2 (en) 2007-11-27 2011-05-24 Cavium Networks, Inc. Method and apparatus for traversing a compressed deterministic finite automata (DFA) graph
US8180803B2 (en) 2007-11-27 2012-05-15 Cavium, Inc. Deterministic finite automata (DFA) graph compression
US8051085B1 (en) 2008-07-18 2011-11-01 Netlogic Microsystems, Inc. Determining regular expression match lengths
US8683590B2 (en) 2008-10-31 2014-03-25 Alcatel Lucent Method and apparatus for pattern matching for intrusion detection/prevention systems
US8473523B2 (en) * 2008-10-31 2013-06-25 Cavium, Inc. Deterministic finite automata graph traversal with nodal bit mapping
TWI482083B (zh) 2008-12-15 2015-04-21 Univ Nat Taiwan 二階段式正規表示式比對處理方法及系統
TWI383618B (zh) 2008-12-22 2013-01-21 Univ Nat Taiwan 管線架構型正規表示式樣式比對處理電路
US20100192225A1 (en) 2009-01-28 2010-07-29 Juniper Networks, Inc. Efficient application identification with network devices
KR101034389B1 (ko) 2009-04-22 2011-05-16 (주) 시스메이트 패킷 내 시그니처 위치에 따른 시그니처 검색 방법
US8219776B2 (en) 2009-09-23 2012-07-10 Lsi Corporation Logical-to-physical address translation for solid state disks
US20110016154A1 (en) 2009-07-17 2011-01-20 Rajan Goyal Profile-based and dictionary based graph caching
US8554698B2 (en) 2009-10-17 2013-10-08 Polytechnic Institute Of New York University Configuring state machines used to order and select matching operations for determining whether an input string matches any of at least one regular expression using lookahead finite automata based regular expression detection
US8291258B2 (en) 2010-01-08 2012-10-16 Juniper Networks, Inc. High availability for network security devices
US8458354B2 (en) 2010-01-27 2013-06-04 Interdisciplinary Center Herzliya Multi-pattern matching in compressed communication traffic
US8522199B2 (en) 2010-02-26 2013-08-27 Mcafee, Inc. System, method, and computer program product for applying a regular expression to content based on required strings of the regular expression
US8650146B2 (en) 2010-06-24 2014-02-11 Lsi Corporation Impulse regular expression matching
CN102075511B (zh) 2010-11-01 2014-05-14 北京神州绿盟信息安全科技股份有限公司 一种数据匹配设备和方法以及网络入侵检测设备和方法
US9398033B2 (en) 2011-02-25 2016-07-19 Cavium, Inc. Regular expression processing automaton
US20120221494A1 (en) 2011-02-25 2012-08-30 International Business Machines Corporation Regular expression pattern matching using keyword graphs
US8848970B2 (en) 2011-04-26 2014-09-30 Digimarc Corporation Salient point-based arrangements
US8990259B2 (en) * 2011-06-24 2015-03-24 Cavium, Inc. Anchored patterns
US9203805B2 (en) 2011-11-23 2015-12-01 Cavium, Inc. Reverse NFA generation and processing
US9280600B2 (en) 2012-03-20 2016-03-08 Yissum Research Development Company Of The Hebrew University Of Jerusalem Ltd. Method and system for decompression-free inspection of shared dictionary compressed traffic over HTTP
US9558299B2 (en) 2012-04-30 2017-01-31 Hewlett Packard Enterprise Development Lp Submatch extraction
RU2608464C2 (ru) 2012-09-28 2017-01-18 Телефонактиеболагет Лм Эрикссон (Пабл) Устройство, способ и сетевой сервер для обнаружения структур данных в потоке данных
US9064032B2 (en) 2012-10-05 2015-06-23 Intel Corporation Blended match mode DFA scanning
US8862585B2 (en) * 2012-10-10 2014-10-14 Polytechnic Institute Of New York University Encoding non-derministic finite automation states efficiently in a manner that permits simple and fast union operations
US9304768B2 (en) 2012-12-18 2016-04-05 Intel Corporation Cache prefetch for deterministic finite automaton instructions
US9177253B2 (en) 2013-01-31 2015-11-03 Intel Corporation System and method for DFA-NFA splitting
US9426165B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for compilation of finite automata
US9426166B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for processing finite automata
US9563399B2 (en) 2013-08-30 2017-02-07 Cavium, Inc. Generating a non-deterministic finite automata (NFA) graph for regular expression patterns with advanced features
US9419943B2 (en) 2013-12-30 2016-08-16 Cavium, Inc. Method and apparatus for processing of finite automata
US9432284B2 (en) * 2014-01-08 2016-08-30 Cavium, Inc. Method and apparatus for compiling search trees for processing request keys based on a key size supported by underlying processing elements
US9904630B2 (en) 2014-01-31 2018-02-27 Cavium, Inc. Finite automata processing based on a top of stack (TOS) memory
US10110558B2 (en) 2014-04-14 2018-10-23 Cavium, Inc. Processing of finite automata based on memory hierarchy
US10002326B2 (en) 2014-04-14 2018-06-19 Cavium, Inc. Compilation of finite automata based on memory hierarchy
US9438561B2 (en) 2014-04-14 2016-09-06 Cavium, Inc. Processing of finite automata based on a node cache

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004013777A1 (en) * 2002-08-05 2004-02-12 Fish Robert System and method of parallel pattern matching
WO2007109445A1 (en) * 2006-03-21 2007-09-27 At & T Corp. Monitoring regular expressions on out-of-order streams
WO2008005772A2 (en) * 2006-07-03 2008-01-10 Reservoir Labs, Inc. System, apparatus, and methods for pattern matching

Also Published As

Publication number Publication date
KR101633649B1 (ko) 2016-06-28
US20150220845A1 (en) 2015-08-06
US9602532B2 (en) 2017-03-21

Similar Documents

Publication Publication Date Title
KR101633649B1 (ko) 유한 오토마톤 프로세싱을 최적화시키기 위한 방법 및 장치
US9419943B2 (en) Method and apparatus for processing of finite automata
US9904630B2 (en) Finite automata processing based on a top of stack (TOS) memory
US9823895B2 (en) Memory management for finite automata processing
US10002326B2 (en) Compilation of finite automata based on memory hierarchy
US8516456B1 (en) Compact instruction format for content search systems
US9438561B2 (en) Processing of finite automata based on a node cache
US10110558B2 (en) Processing of finite automata based on memory hierarchy
US9426166B2 (en) Method and apparatus for processing finite automata
US9304768B2 (en) Cache prefetch for deterministic finite automaton instructions
EP2668574B1 (en) Utilizing special purpose elements to implement a fsm
US8886680B2 (en) Deterministic finite automata graph traversal with nodal bit mapping
US8819217B2 (en) Intelligent graph walking
US20150067776A1 (en) Method and apparatus for compilation of finite automata
US7529746B2 (en) Search circuit having individually selectable search engines
US9046916B2 (en) Cache prefetch for NFA instructions
US20060259508A1 (en) Method and apparatus for detecting semantic elements using a push down automaton
US20140143195A1 (en) Complex nfa state matching
US8935270B1 (en) Content search system including multiple deterministic finite automaton engines having shared memory resources
US8898094B2 (en) NFA character class matching
US20140215090A1 (en) Dfa sub-scans

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190515

Year of fee payment: 4