KR20150079475A - 소프트웨어-규정된 네트워크 프로세싱 엔진에서 병렬적 및 조건적 데이터 조작 방법 및 장치 - Google Patents

소프트웨어-규정된 네트워크 프로세싱 엔진에서 병렬적 및 조건적 데이터 조작 방법 및 장치 Download PDF

Info

Publication number
KR20150079475A
KR20150079475A KR1020140194027A KR20140194027A KR20150079475A KR 20150079475 A KR20150079475 A KR 20150079475A KR 1020140194027 A KR1020140194027 A KR 1020140194027A KR 20140194027 A KR20140194027 A KR 20140194027A KR 20150079475 A KR20150079475 A KR 20150079475A
Authority
KR
South Korea
Prior art keywords
processing engine
instructions
inputs
bits
mux
Prior art date
Application number
KR1020140194027A
Other languages
English (en)
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 KR20150079475A publication Critical patent/KR20150079475A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/10Architectures or entities
    • H04L65/1013Network architectures, gateways, control or user entities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/12Protocol engines

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Devices For Executing Special Programs (AREA)
  • Logic Circuits (AREA)

Abstract

본 발명의 실시예들이 소프트웨어-규정된 네트워크 (SDN) 프로세싱 엔진에서의 신속하고 조건적인 데이터 수정 및 생성에 관한 것이다. 다수의 입력들의 수정 및 다수의 출력들의 생성은 병렬적으로 수행될 수 있다. 각 입력 또는 출력 데이터의 크기는 클 수 있는데, 예를 들어서 수백 바이트들이다. 프로세싱 엔진은 제어 경로 및 데이터 경로를 포함한다. 제어 경로는 입력들을 수정하고 새로운 출력들을 생성하기 위한 인스트럭션을 생성한다. 데이터 경로 제어 경로에 의해서 생성된 모든 인스트럭션들을 실행한다. 프로세싱 엔진은 통상적으로, 데이터 수정 및 생성을 위한 조건들 및 규칙들이 프로세싱 엔진에 의해서 지원되는 네트워크 특징부들 및 프로토콜들에 따라서 재구성될 수 있게 프로그램가능하다. SDN 프로세싱 엔진은 다수의 대형 크기의 데이터 플로우들을 프로세싱하는 것을 가능하게 하며 이러한 데이터를 조작할 시에 효율적이다. SDN 프로세싱 엔진은 다수의 백-투-백 입력 및 출력 데이터 플로우들을 사용하여서 최고의 처리량을 달성할 수 있다.

Description

소프트웨어-규정된 네트워크 프로세싱 엔진에서 병렬적 및 조건적 데이터 조작 방법 및 장치{METHOD AND APPARATUS FOR PARALLEL AND CONDITIONAL DATA MANIPULATION IN SOFTWARE-DEFINED NETWORK PROCESSING ENGINE}
본 발명은 소프트웨어-규정된 네트워크 프로세싱 엔진에서 다수의 데이터 플로우들의 조작에 관한 것이다. 특히, 본 발명은 소프트웨어-규정된 네트워크 프로세싱 엔진에서 병렬적 및 조건적 데이터 조작 방법 및 장치에 관한 것이다.
SDN (software-defined networking) 기술은 네트워크의 새로운 표준, 프로토콜들 및 서비스들로의 신속하고 용이한 적응을 가능하게 한다. SDN은 네트워크 앱스트랙트 (abstract) 를 다음과 같은 2 개의 개별 플레인들로 분할한다: 제어 플레인 및 데이터 전달 플레인. 이러한 분할은 네트워크 오퍼레이터들이 고가의 기존의 데이터 전달 플레인을 재사용하면서 제어 플레인을 구성/프로그래밍함으로써 네트워크의 특징부를 신속하게 변화시키고/시키거나 새로운 특징부들을 네트워크에 부가하는 것을 가능하게 한다. SDN은 새로운 네트워크 특징부들 및 서비스들을 전개시키는데 있어서 시간 및 비용을 줄일 수 있다. 플레인-분할된 네트워킹 인프라스트럭처는 또한 네트워크 오퍼레이터들을 위해 관리 태스크들을 단순화시킬 수도 있다.
각 SDN 디바이스는 때로 병렬로 다수의 고-처리량 데이터 플로우들을 프로세싱하기 위해서 요구된다. 이러한 SDN 디바이스에서, 데이터를 조작하는 것을 책임질 수 있는 하나 이상의 프로세싱 엔진들이 존재한다. 이러한 프로세싱 엔진들에서의 데이터 조작은 데이터들의 컨텐츠들 자체들 및 SDN 디바이스를 위해서 구성된 네트워크 특징부들에 의존한다. 이러한 프로세싱 엔진들에 의해서 프로세싱되는 데이터는 각각이 수백 바이트에 달할 수 있는 큰 크기로 될 수 있다.
종래 기술 ASIC-기반 설계들은 SDN 프로세싱 엔진에서 예상되는 바와 같이 상이한 네트워크 특징부들을 재프로그래밍 및/또는 재구성하기 위한 충분한 유연성을 제공하지 않는다. 이와 달리, 이러한 엔진들을 구현하기 위한 최신의 64 비트 범용 CPU들을 사용하는 것은 사이클당 수백 데이터 바이트들을 프로세싱하는데 요구되는 SDN 디바이스들의 네트워크 대역폭 및 레이턴시 요건을 만족시키지 못한다. FPGA들을 사용하는 다른 종래 기술 구현예들도 역시 로직 셀 용량에서의 그들의 한계사항 및 고 레이턴시를 사용하여서 저 주파수에서 실행되는 FPGA 칩들을 제조하는 그들의 내부 상호접속 배선들에서의 높은 복잡성으로 인해서 고 처리량으로 복잡한 네트워크 프로토콜들을 수행하기에 적합하지 않다.
SDN (software-defined networking) 프로세싱 엔진은 병렬적 및 조건적 데이터 조작을 위해서 제시된다. 사용자들은 그들이 SDN 프로세싱 엔진이 지원하기를 원하는 특징부들 및 프로토콜들에 따른 데이터 프로세싱을 위한 조건들 및 규칙들을 프로그램할 수 있다. SDN 프로세싱 엔진은 최고 처리량으로 병렬로 다수의 입력들 및 출력들을 프로세싱할 수 있다. SDN 프로세싱 엔진은 다음과 같은 2 개의 경로들을 포함한다: 제어 경로 및 데이터 경로. 제어 경로는 제어 비트 추출기, 워드 비교 콘, 다중 스테이지 로직 콘 및 인스트럭션 테이블들을 포함한다. 제어 경로는 구성된 네트워크 특징부들의 일부 특정 조건들을 입력들이 만족시키는지를 검사하도록 구성된다. 검사 결과에 기초하여서, 제어 경로는 입력을 수정하고/하거나 새로운 출력들을 생성하기 위한 인스트럭션들을 생성한다. 데이터 경로 지연 매칭 큐 (delay matching queue) 및 인스트럭션 실행 블록을 포함한다. 데이터 경로는 제어 경로에 의해서 생성된 인스트럭션들을 실행시키도록 구성된다. 모든 인스트럭션들은, 다수의 데이터 플로우들을 동시에 조작하기 위해서 병렬로 실행된다. 제안된 프로세싱 엔진이 프로그램가능하기 때문에, 이는 하드웨어 전용 ASIC 설계들보다 매우 많은 유연성을 가지며 따라서 SDN 디바이스들에서 채택될 수 있다.
일 양태에서, SDN 프로세싱 엔진이 제공된다. 이 SDN 프로세싱 엔진은 프로그램가능한 인스트럭션들의 조건적 생성을 위한 제어 경로; 및 제어 경로에 의해서 생성된 인스트럭션들을 실행하기 위한 데이터 경로를 포함한다. 프로세싱 엔진은 병렬로 N 개의 입력들을 수신하고 M 개의 출력들을 생성하도록 구성된다. 일부 실시예들에서, M 개의 출력들 각각의 컨텐츠는 입력 컨텐츠 중에서 수정된 것이거나 새롭게 생성된 컨텐츠이다.
일부 실시예들에서, 제어 경로는, N 개의 입력들로부터 제어 비트들을 추출하기 위한 제어 비트 추출기; N 개의 입력들의 워드들을 비교하기 위한 워드 비교 콘 (Word Comparing Cone); 제어 비트들 및 워드 비교 콘의 결과 비트들에 대해서 복잡한 연산식들 (expressions) 및 조건들을 수행하기 위한 다중-스테이지 MUX/LUT 로직 콘; 및 데이터 조작을 위한 인스트럭션들을 포함하는 복수의 인스트럭션 테이블들을 포함한다. 제어 비트 추출기, 워드 비교 콘, 다중-스테이지 MUX/LUT 로직 콘 및 복수의 인스트럭션 테이블들 중 적어도 하나는 사용자들이 프로세싱 엔진들이 수행하기 원하는 네트워크 특징부들 (features) 및 프로토콜들에 기초하여서 재구성가능하며 프로그램가능하다.
일부 실시예들에서, 제어 비트 추출기는 입력들의 사전규정된 포맷들에 기초하여서 N 개의 입력들로부터 제어 비트들을 추출한다.
일부 실시예들에서, 워드 비교 콘은 K 개의 구성가능한 MUX/CMP 로직 셀들을 포함한다. MUX/CMP 로직 셀들 각각은 N 개의 입력들로부터의 2 개의 W-바이트 워드들을 비교할 수 있다. MUX/CMP 로직 셀들 각각은 2 개의 W-바이트 워드들 각각의 W 바이트들 내의 오직 특정 비트들만이 비교되게 하고/하거나 상기 입력들 중 하나로부터의 하나의 W-바이트 워드들이 상수 값과 비교되게 하도록 구성될 수 있다. 일부 실시예들에서, MUX/CMP 로직 셀들 각각은 적어도 3 개의 연산들을 지원하며, 적어도 3 개의 연산들은 "같음" (= =) 연산, "보다 큼" (>) 연산 및 "보다 작음" (<) 연산을 포함한다.
일부 실시예들에서, MUX/LUT 로직 콘은 S 개의 스테이지들을 포함한다. S 개의 스테이지들 중 제 1 스테이지는 프로세싱 엔진으로의 N 개의 입력들의 제어 비트들 및 워드 비교 콘의 출력 비트들을 포함하는 입력 비트들을 갖는다. 스테이지 i의 모든 출력 비트는 스테이지 i+1에 대한 입력 비트들이다. MUX/LUT 로직 콘의 마지막 스테이지의 출력 비트들은 복수의 인스트럭션 테이블들을 판독하기 위한 인덱스들을 형성한다.
일부 실시예들에서, 스테이지 i P i 개의 구성가능한 MUX/LUT 셀들을 포함한다. MUX/LUT 셀들 각각은 L 개의 임의의 비트들을 선택하기 위한 L 개의 멀티플렉서들을 포함한다. L 개의 선택가능한 비트들은 2 L 비트들을 갖는 룩업 테이블 cfg_LUT 에 대한 포인터로서 구성된다. 룩업 테이블 cfg _ LUT 의 출력은 1-비트이다. 일부 실시예들에서, 룩업 테이블 cfg _ LUT은 플롭들 (flops) 로 구축된다.
일부 실시예들에서, 복잡한 로직 연산식들 및 조건들을 MUX/LUT 로직 콘으로 맵핑하도록 합성 툴이 사용된다. 합성 툴의 실례는 UC 버클리대의 ABC 툴이다.
일부 실시예들에서, 복수의 인스트럭션 테이블들은 T 개의 프로그램가능한 인스트럭션 테이블들을 포함한다. MUX/LUT 로직 콘의 출력들은 T 개의 프로그램가능한 인스트럭션 테이블들에 대한 판독 어드레스들인 인덱스들을 형성한다. M 개의 출력들 각각이 T 개의 프로그램가능한 인스트럭션 테이블들 중 적어도 하나와 연관되도록 T 는 적어도 프로세싱 엔진의 M 개의 출력들과 동일하다. 일부 실시예들에서, T 개의 프로그램가능한 인스트럭션 테이블들 중 테이블 i 는 A i -비트 어드레스를 가지며, 테이블 i 는 2 Ai 개에 달하는 엔트리들을 갖는다. 테이블 i 의 각 엔트리는 Q i 개의 인스트럭션들을 포함한다. 일부 실시예들에서, T 개의 프로그램가능한 인스트럭션 테이블들 각각은 SRAM 으로부터 또는 플롭들의 어레이들로부터 구축된다.
일부 실시예들에서, 프로세싱 엔진은 카피 인스트럭션들 및 ALU 인스트럭션들을 포함하는 적어도 2 개의 종류의 인스트럭션들을 지원한다. 카피 인스트럭션은 입력으로부터 출력으로의 C 개에 달하는 바이트들을 카피한다. 이와 달리, 상기 카피 인스트럭션은 상수 값을 출력으로 카피한다. ALU 인스트럭션들 각각은 입력들로부터의 2 W-바이트 워드들의 ALU 연산의 결과를 출력으로 카피한다. 상기 ALU 연산으로의 입력은 상수 값일 수 있다. ALU 연산은, 가산 (+), 감산 (-), 비트단위 AND (&), 비트단위 OR (|), 비트단위 XOR (^), 비트단위 좌측 시프트 (<<), 및 비트단위 우측 시프트 (>>) 중 하나이다. 일부 실시예들에서, 카피 인스트럭션 또는 ALU 인스트럭션 각각은 해당 인스트럭션 내의 비트마스크 필드를 사용함으로써 비트 또는 바이트 조작을 지원한다.
일부 실시예들에서, 데이터 경로는, 데이터가 올바른 시간들에 프로세싱되게 데이터 경로의 레이턴시를 제어 경로의 레이턴시에 매칭시키기 위한 지연 매칭 큐; 및 특정 입력들을 수정하거나 새로운 출력들을 생성하기 위해서 제어 경로에 의해서 생성된 모든 인스트럭션들을 실행하기 위한 인스트럭션 실행 블록을 포함한다.
일부 실시예들에서, 프로세싱 엔진이 백-투-백 데이터 프로세싱 (back-to-back data processing) 으로 최고의 처리량을 달성하도록, 제어 경로의 레이턴시와 동일한 깊이를 갖는 FIFO 및 시프트 레지스터 중 하나이다.
일부 실시예들에서, 인스트럭션 실행 블록은 제어 경로에 의해서 생성된 모든 인스트럭션들을 병렬적으로 실행하기 위한 하드웨어 모듈들을 포함한다. 하드웨어 모듈 각각은 인스트럭션들 중 하나를 실행한다.
일부 실시예들에서, 프로세싱 엔진의 출력은, 출력의 초기 컨텐츠가 모든 인스트럭션들이 실행되기 이전의 특정 입력의 컨텐츠일 경우에, 특정 입력의 수정이다. 이와 달리, 프로세싱 엔진의 출력은, 출력의 초기 컨텐츠가 모든 인스트럭션들이 실행되기 이전에 모두 제로들일 경우에는, 새롭게 생성된다.
다른 양태에서, SDN 프로세싱 엔진에서 병렬적 및 조건적 데이터 조작을 하는 방법이 제공된다. 일부 실시예들에서, 프로세싱 엔진은 프로그램가능하다.
이 방법은 N 개의 입력들을 수신하는 단계; N 개의 입력들을 제어 경로 및 데이터 경로를 통해서 프로세싱 엔진을 통해서 플로우시키는 단계를 포함한다. 이 방법은 또한 N 개의 입력들로부터 제어 비트들을 동시에 추출하고, N 개의 입력들의 워드들을 비교하고, 지연 큐를 통해서 N 개의 입력들을 전송하는 단계를 포함한다. 이 방법은 또한 제어 비트들 및 비교로부터의 결과 비트들에 대하여 복잡한 연산식들 및 조건들을 수행하여서 인덱스들을 리턴시키는 단계를 포함한다. 이 방법은 또한 인덱스들에 기초하여서, N 개의 입력들이 어떻게 수정될 것이고 M 개의 출력들이 어떻게 생성될 것인지를 가이드하도록 구성된 인스트럭션들을 회수하는 단계를 포함한다. 이 방법은 또한 N 개의 입력들에 대해서 인스트럭션들을 병렬적으로 실행하여서 M 개의 출력들을 생성하는 단계를 포함한다.
일부 실시예들에서, M 개의 출력들 각각의 컨텐츠들은 새롭게 생성되고/되거나 N 개의 입력들 중 하나의 수정된 컨텐츠이다.
일부 실시예들에서, 추출, 비교, 복잡한 연산식들 및 조건들 및 인스트럭션 테이블들은 프로세싱 엔진의 제어 경로에서 구현되고, 지연 큐 및 인스트럭션들의 실행은 프로세싱 엔진의 데이터 경로에서 구현된다.
일부 실시예들에서, 프로세싱 엔진의 N 개의 입력들 및 M 개의 출력들 각각의 데이터 포맷은, 데이터 크기를 식별하기 위한 "길이" 필드; 페이로드의 첫 번째 바이트의 위치를 식별하기 위한 "오프셋" 필드; 데이터 타입을 식별하기 위한 "제어" 필드; 및 페이로드를 포함하기 위한 "바디" 필드를 포함한다.
도 1은 본 발명의 실시예에 따른 SDN 시스템에서의 병렬적 및 조건적 데이터 조작을 위한 SDN 프로세싱 엔진의 블록도를 예시한다.
도 2는 본 발명의 실시예에 따른 도 1의 SDN 프로세싱 엔진의 각 데이터 입력 및 출력의 포맷을 예시한다.
도 3은 본 발명의 실시예에 따른 워드 비교 콘 (word comparing cone) 의 블록도를 예시한다.
도 4는 본 발명의 실시예에 따른 MUX/CMP 로직 셀의 개략을 예시한다.
도 5는 본 발명의 실시예에 따른 MUX/LUT 로직 콘 (logic cone) 의 블록도를 예시한다.
도 6은 본 발명의 실시예에 따른 MUX/LUT 셀의 개략을 예시한다.
도 7은 본 발명의 실시예에 따른 인스트럭션 테이블들의 블록도를 예시한다.
도 8a는 본 발명의 실시예에 따른 카피 인스트럭션의 포맷을 예시한다.
도 8b는 본 발명의 실시예에 따른 도 8a의 카피 인스트럭션을 구현하는 개략을 예시한다.
도 9a는 본 발명의 실시예에 따른 ALU 인스트럭션의 포맷을 예시한다.
도 9b는 본 발명의 실시예에 따른 도 9a의 ALU 인스트럭션을 구현하는 개략을 예시한다.
전술한 바들은 첨부 도면들에서 예시된 바와 같은, 본 발명의 예시적인 실시예들의 다음의 보다 구체적인 설명으로부터 명백해질 것이며, 이 첨부 도면에서 유사한 참조 부호는 상이한 뷰들에 걸쳐서 동일한 부분들을 지칭한다. 도면들은 반드시 축척대로 된 것이 아니며 대신에 본 발명의 실시예들을 예시할 때에 강조될 수 있다.
다음의 설명에서, 다수의 세부사항들이 설명을 위해서 제시된다. 그러나, 본 발명은 이러한 특정 세부사항들을 사용하지 않고서도 실시될 수 있음을 본 기술 분야의 당업자는 이해할 것이다. 따라서, 본 발명은 도시된 실시예들로 한정되는 것은 아니며 본 명세서에서 기술된 원리 및 특징과 부합되는 가장 넓은 범위가 부여되어야 한다.
SDN (software-defined networking) 프로세싱 엔진은 병렬적 및 조건적 데이터 조작을 위해서 제시된다. 사용자들은 그들이 SDN 프로세싱 엔진이 지원하기를 원하는 특징부들 및 프로토콜들에 따른 데이터 프로세싱을 위한 조건들 및 규칙들을 프로그램할 수 있다. SDN 프로세싱 엔진은 최고 처리량으로 병렬로 다수의 입력들 및 출력들을 프로세싱할 수 있다. SDN 프로세싱 엔진은 다음과 같은 2 개의 경로들을 포함한다: 제어 경로 및 데이터 경로. 제어 경로는 제어 비트 추출기, 워드 비교 콘, 다중 스테이지 로직 콘 및 인스트럭션 테이블들을 포함한다. 제어 경로는 구성된 네트워크 특징부들의 일부 특정 조건들을 입력들이 만족시키는지를 검사하도록 구성된다. 검사 결과에 기초하여서, 제어 경로는 입력을 수정하고/하거나 새로운 출력들을 생성하기 위한 인스트럭션들을 생성한다. 데이터 경로 지연 매칭 큐 및 인스트럭션 실행 블록을 포함한다. 데이터 경로는 제어 경로에 의해서 생성된 인스트럭션들을 실행시키도록 구성된다. 모든 인스트럭션들은, 다수의 데이터 플로우들을 동시에 조작하기 위해서 병렬로 실행된다. 제안된 프로세싱 엔진이 프로그램가능하기 때문에, 이는 하드웨어 전용 ASIC 설계들보다 매우 많은 유연성을 가지며 따라서 SDN 디바이스들에서 채택될 수 있다.
도 1은 본 발명의 실시예에 따른 SDN 시스템에서의 병렬적 및 조건적 데이터 조작을 위한 SDN 프로세싱 엔진 (100) 의 블록도를 예시한다. 데이터 통상적으로 2 개의 경로들, 즉 제어 경로 (105) 및 데이터 경로 (110) 를 통해서 SDN 프로세싱 엔진 (100) 을 통해서 흐른다.
제어 경로 (105) 는 제어 비트 추출기 (CBE) (115), 워드 비교 콘 (WCC) (120), MUX/LUT 로직 콘 (MLLC) (125), 및 인스트럭션 테이블들 (130) 을 포함한다. 제어 경로 (105) 는 콘들 내에서 프로그램된 조건들에 따라서 인스트럭션들을 생성하는 것을 책임진다. 용어 "콘 (cone)" 은 본 명세서에서 다양한 복잡한 로직 연산식들 및 조건 체크들을 수행하기 위해서 재구성가능한 스테이지들에서의 로직 요소들의 그룹을 지칭한다. 일부 측면들에서, 용어 "콘"은 로직 "클라우드"로서 지칭될 수 있다. 제어 경로 (105) 내의 모든 블록들 (115-130) 은 바람직하게는 프로그램가능하다.
데이터 경로 (110) 는 지연 매칭 큐 (135) 및 인스트럭션들 실행 블록 (140) 을 포함한다. 데이터 경로 (110) 는 입력 데이터를 수정하고/하거나 새로운 출력 데이터를 생성하기 위해서 제어 경로 (105) 에 의해서 생성된 인스트럭션들을 실행하는 것을 감당한다.
SDN 프로세싱 엔진 (100) 은 N 개의 입력들을 수신하고 M 개의 출력들을 생성한다. SDN 프로세싱 엔진 (100) 의 M 개의 출력들 각각은 새롭게 생성된 데이터이거나 SDN 프로세싱 엔진 (100) 으로의 N 개의 입력들 중 하나의 수정된 버전일 수 있다. 이러한 M 개의 출력들의 콘텐츠들은 전적으로 사용자들이 SDN 프로세싱 엔진 (100) 의 제어 경로 (105) 내에서의 블록들을 (115-130) 을 어떻게 구성하고 프로그램하는지에 달려 있다.
N 개의 입력들 및 M 개의 출력들 각각은 상이한 크기들을 갖기 때문에, 이러한 크기들은 N 개의 입력들 및 M 개의 출력들이 SDN 프로세싱 엔진 (100) 에 의해서 적절하게 프로세싱될 수 있도록 데이터 포맷에서 식별된다. 도 2는 본 발명의 실시예에 따른 SDN 프로세싱 엔진 (100) 의 각 입력 및 출력 데이터 (200) 의 데이터 포맷을 예시한다. 각 입력 및 출력 데이터 (200) 은 통상적으로 다음과 같은 4 개의 필드들을 포함한다: "길이" 필드 (205), "오프셋" 필드 (210), "제어" 필드 (215) 및 "바디" 필드 (220).
"길이" 필드 (205) 는 각각의 데이터의 길이 또는 크기를 식별한다. 크기는 통상적으로 바이트들의 수로 된다. "오프셋" 필드 (210) 는 데이터 내의 "바디" 필드 (220) 의 첫 번째 바이트의 위치를 식별한다. 달리 말하면, "오프셋" 필드 (210) 는 "제어" 필드 (215) 의 크기를 식별한다. "제어" 필드 (215) 는 데이터 내에서 캡슐화된 주 특징부들을 식별하는 가장 중요한 비트들을 포함한다. 예를 들어서, "제어" 필드 (215) 는 데이터 타입, 예를 들어서 Ethernet 프레임, IP 패킷, TCP 애플리케이션 데이터, 또는 룩업 데이터 결과를 식별하거나 데이터의 우선순위를 식별하도록 구성된다. "바디" 필드 (220) 는 데이터의 바디 또는 페이로드를 포함한다.
다시 도 1를 참조하면, SDN 프로세싱 엔진 (100) 은 통상적으로 SDN 프로세싱 엔진 (100) 이 N 개의 입력들 간에 모든 상호 정보를 갖도록 모든 N 개의 입력들이 프로세싱 이전에 가용될 때까지 대기한다. 모든 N 개의 입력들은 SDN 프로세싱 엔진 (100) 에 의해서 프로세싱되기 이전에 서로 합쳐져서 데이터의 큰 천크 (chunk) 가 된다.
입력들의 "제어" 필드들은 통상적으로 입력들의 가장 중요한 비트들을 포함한다. 이로써, 이러한 제어 비트들은 CBE (115) 에 의해서 추출된다. 모든 추출된 제어 비트들은, SDN 프로세싱 엔진 (100) 이 입력들에 대해서 무엇을 할지 및 출력들을 어떻게 생성할지를 결정할 수 있도록, 제어 경로 (105) 내의 MLLC (125) 에 의해서 더 프로세싱된다.
한편, 모든 N 개의 입력들은 또한 WCC (120) 로 전송된다. SDN 프로세싱 엔진 (100) 은 입력들 내의 특정 워드들이 입력들 내의 다른 특정 워드들과 동일한지 (매칭되는지), 더 큰지 또는 더 작은지의 여부에 대한 체크를 WCC (120) 에서 수행한다. 이러한 워드 체킹 결과들은 SDN 프로세싱 엔진 (100) 이 이러한 입력들의 후속 프로세싱을 위한 결정들을 행하는데 유용한 입력들의 관계 및 특성을 표시한다.
도 3은 본 발명의 실시예에 따른 워드 비교 콘 (WCC) (300) 의 블록도를 예시한다. 일부 실시예들에서, 도 1의 WCC (120) 은 WCC (300) 과 유사하게 구성된다. WCC (300) 은 K 개의 재구성가능한 멀티플렉싱/비교 (MUX/CMP) 로직 셀들 (305) 을 포함하며, 여기서 모든 N 개의 입력들은 MUX/CMP 로직 셀들 (305) 로 전송된다. 각 MUX/CMP 로직 셀들 (305) 은 워드 비교를 수행하게 구성된다. WCC (300) 은 SDN 프로세싱 엔진 (100) 이 N 개의 입력들에 대해서 K 회의 워드 비교를 병렬적으로 수행하여서 K 개의 워드 비교 결과 비트들을 리턴시킨다.
도 4는 본 발명의 실시예에 따른 MUX/CMP 로직 셀 (400) 의 개략을 예시한다. 일부 실시예들에서, 도 3의 MUX/CMP 로직 셀 (305) 은 MUX/CMP 로직 셀 (400) 과 유사하게 구성된다. MUX/CMP 로직 셀 (400) 은 N 개의 입력들 간에서 2 개의 특정 W-바이트 워드들을 비교하도록 구성된다. MUX/CMP 로직 셀 (400) 의 구성은 바람직하게는 소프트웨어에 의해서 그의 레지스터들을 통해서 이루어진다. 일부 실시예들에서, MUX/CMP 로직 셀 (400) 의 설계는 복수의 레지스터들 및 복수의 멀티플렉서들을 사용한다. "cfg_muxA_SrcID" 레지스터는 N 개의 입력들 중 어느 입력이 MuxA (405) 에 의해 선택되는지를 표시한다. "cfg _ muxA _ ByteOffset " 레지스터는 어느 바이트들로부터 선택된 입력에서의 시작 바이트가 취해질지를 표시한다. 이러한 시작 바이트 위치로부터, W 개의 연속하는 바이트들이 선택된 입력으로부터 MuxA (405) 을 위해서 취해진다. 마찬가지로, "cfg _ muxB _ SrcID" 레지스터 및 "cfg _ muxB _ ByteOffset" 레지스터가 사용되어서 MuxB (410) 을 위해서 선택된 입력으로부터 W 바이트들을 취한다. W 는 통상적으로 2 바이트들 (16 비트들) 또는 4 바이트들 (32 비트들) 이다. 그러나, W 는 다른 값일 수도 있다. 일부 실시예들에서, W 는 입력으로부터 취해질 바이트들의 최대 수를 나타내며 엔진 설계자들에 의해서 선택된다.
통상적으로, MuxA (405) 및 MuxB (410)의 2 개의 선택된 W-바이트 워드들이 서로 비교되며; 그러나, 일부 인스턴스들에서, MuxA (405) 및 MuxB (410)의 이러한 2 개의 선택된 W-바이트 워드들에서의 오직 특정 비트들만이 비교될 필요가 있다. 2 개의 비트마스크 레지스터들, 즉 "cfg _ muxA _ BitMask" 및 "cfg _ muxB _ BitMask," 이, 사용자들이 2 개의 선택된 워드들에서의 오직 특정 비트들만을 비교하기 원한다면, 이 선택된 워드들과 함께 사용될 수 있다. 이러한 2 개의 비트마스크 레지스터들은 또한 비교되는 2 개의 워드들이 W 바이트들보다 작은 바이트들을 갖는 경우에 사용될 수 있다. 예를 들어서, W 가 4이면, 비트마스크 레지스터들은 N 개의 입력들로부터의 2 개의 4-바이트 워드들, 또는 2 개의 3-바이트 워드들, 또는 2 개의 2-바이트 워드들, 또는 1 개의 1-바이트 워드들을 비교하도록 설정될 수 있다.
또한, 일부 인스턴스들에서, N 개의 입력들로부터 선택된 워드는 상수 값과 비교될 필요가 있다. 2 개의 레지스터들, 즉 "cfg _ muxA _ IsConst" 및 "cfg_muxB_IsConst" 가, 사용자들이 2 개의 선택된 워드들 중 하나를 상수 값과 비교하기 원한다면, 비트마스크 레지스터들과 함께 사용될 수 있다. 특히, "cfg_muxA_IsConst" 이 1이면, "cfg _ muxA _ BitMask" 레지스터는 MuxA (405) 의 상수 값이 된다. 마찬가지로, "cfg _ muxB _ IsConst" 1이면, "cfg _ muxB _ BitMask" 레지스터는 MuxB (410) 의 상수 값이 된다. 상수 값들에 대해서 비트마스크 레지스터들을 재사용하는 것은 유리하게는 MUX/CMP 로직 셀들에 대한 하드웨어 비용을 줄일 수 있다.
MUX/CMP 로직 셀 (400) 의 목표된 비교 연산은 "cfg _ CompareCode" 레지스터를 사용하여서 선택된다. 일부 실시예들에서, 다음과 같은 3 개의 비교 연산들이 지원된다: "과 같음" (= =), "보다 큼" (>) 및 "보다 작음" (<) 연산. MUX/CMP 로직 셀 (400) 은 비교 결과가 참인지 거짓인지를 표시하는 1-비트 출력을 리턴시킨다.
보다 많은 또는 보다 적은 수의 비교 연산들이 지원될 수 있지만, 상이한 연산들이 간단히 2 개의 MUX/CMP 로직 셀들을 사용하여서 수행될 수 있다. 예를 들어서, "보다 크거나 같음" (>=) 연산이 필요하면, 제 1 MUX/CMP 로직 셀이 "보다 큼" 연산을 수행하도록 사용되고, 제 2 MUX/CMP 로직 셀이 사용되어서 "과 같음" 연산을 수행한다. 이러한 2 개의 MUX/CMP 로직 셀들로부터 기인되는 2 개의 비트들은 비교가 참인지 거짓인지를 표시한다 (즉, 11은 참을 표시하고, 10 및 01 양자는 거짓을 표시함).
도 3을 다시 참조하면, WCC (300) 내의 K 개의 MUX/CMP 로직 셀들 (305) 은 K 개의 워드 비교 결과 비트들을 리턴시키며, 결과 비트들 각각은 K 개의 MUX/CMP 로직 셀들 (305) 각각으로부터 온다. 보다 많은 MUX/CMP 로직 셀들이 워드 비교 콘 내에 존재하면, 보다 많은 워드 비교 연산들이 병렬적으로 수행될 수 있지만 하드웨어 비용이 든다는 것이 이해되어야 한다. K 는 통상적으로 8 내지 32이다. 그러나, K 는 SDN 프로세싱 엔진에서의 입력들의 수 (예를 들어서, N) 보다 작은 한 다른 값일 수 있다.
도 1를 다시 참조하면, CBE (115) 로부터의 추출된 제어 비트들 및 WCC (120) 로부터의 K 개의 결과 비트들 모두가 합쳐져서 MLLC (125) 에 전송된다. MLLC (125) 은 바람직하게는 구성가능하다. MLLC (125) 는 제어 비트들 및 K 개의 결과 비트들 내의 특정 비트들이 사용자들에 의해서 SDN 프로세싱 엔진 (100) 을 위해서 구성된 네트워크 특징부들의 일부 조건들을 만족시키는지를 체크한다. 체크 결과들에 따라서, MLLC (125) 는 입력들을 수정하고/하거나 새로운 출력들을 생성하기 위한 인스트럭션들을 생성하는, 인스트럭션 테이블들 (130) 을 판독하기 위해서 인덱스들을 구동시키도록 구성된다.
도 5는 본 발명의 실시예에 따른 MUX/LUT 로직 콘 (MLLC) (500) 의 블록도를 예시한다. 일부 실시예들에서, 도 1의 MLLC (125) 는 MLLC (500) 와 유사하게 구성된다. MLLC (500) 는 S 개의 스테이지들을 포함하며, 여기서 스테이지 iP i 개의 멀티플렉서/룩업(MUX/LUT) 셀들 (505) 을 포함한다. 스테이지 0에 대한 입력 비트들은 제어 비트들 추출기, 예를 들어서 CBE (115) 로부터의 모든 제어 비트들, 및 워드 비교 콘 (120), 예를 들어서 WCC (120) 으로부터의 K 개의 결과 비트들이다. 스테이지 0에 대한 출력 비트들은 스테이지 1에 대한 입력 비트들이다. 일반적으로, 스테이지 i 내의 모든 MUX/LUT 셀들의 출력 비트들은 스테이지 i+1 내의 MUX/LUT 셀들의 입력 비트들이다. 최종 스테이지의 출력 비트들은 도 1의 인스트럭션 테이블 (130) 을 판독하기 위한 어드레스들인 인덱스들을 형성한다.
도 6은 본 발명의 실시예에 따른 MUX/LUT 셀 (600) 의 개략도이다. 일부 실시예들에서, 도 5의 MUX/LUT 셀 (505) 은 MUX/LUT 셀 (600) 과 유사하게 구성된다. MUX/LUT 셀 (600) 은 L 개의 멀티플렉서들 (MUX들) (605) 을 포함하며, 이들은 그의 입력 비트들로부터의 L 개의 특정 비트들의 선택을 가능하게 한다. 이러한 L 개의 MUX들 (605) 은 바람직하게는 L 개의 레지스터들을 통해서 재구성가능하다. 이러한 L 개의 MUX들 (605) 로부터의 L 개의 선택된 비트들은 재구성가능한 룩업 테이블 (cfg_LUT) (610) 을 포인팅하는 인덱스를 형성한다. cfg _ LUT (610) 은 그의 L-비트 인덱스에 대응하는 2 L 비트들을 갖는다. MUX/LUT 셀 (600) 내로의 각 입력에 대해서, 오직 하나의 결과 비트만이 cfg_LUT (610) 에 의해서 리턴된다. 일부 실시예들에서, cfg _ LUT (610) 는 플롭들 (flops) 로부터 구축되는데 그 이유는 cfg _ LUT (610) 는 통상적으로 작은 수의 엔트리들을 가지며 각 엔트리는 오직 1 비트를 가지기 때문이다.
MUX/LUT 셀 (600) 은 그의 입력 비트들로부터 선택된 L 비트들의 임의의 불 연산식 (Boolean expression) 을 수행하도록 구성된다. 예를 들어서, (1) L 이 3이고, (2) 3 개의 선택된 비트들은 a, b 및 c 이며 (3) 불 연산식 (Boolean expression) X = (a & b | c) 가 체크될 것이라고 가정하자. X 는, a 및 b 모두가 1이거나, 또는 c 가 1이면 1이다. a, b 및 c 가 인덱스 I 의 3 비트들이면, X 는, I 가 110(2)=6, 111(2)=7, 001(2)=1, 011(2)=3 또는 101(2)=5와 동일하면, 1이다. 따라서, 8-비트 cfg _LUT 은 11101010(2)로서 프로그램된다.
다시 도 5를 참조하면, MLLC (500) 내의 각 스테이지는 복수의 MUX/LUT 셀들 (505) 을 포함하기 때문에, 각 스테이지는 입력 비트들의 몇몇 불 연산식을 체크하는 것을 병렬적으로 수행할 수 있다. 또한, MLLC (500) 이 복수의 스테이지들을 포함하기 때문에, MLLC (500) 는 복잡한 연산식들을 병렬적으로 체크할 수 있다. MLLC (500) 내의 각 스테이지는 MUX/LUT 셀들 (505) 의 동일한 또는 상이한 수를 포함할 수 있다.
보다 많은 MUX들이 MUX/LUT 셀 내에 존재하거나, 보다 많은 MUX/LUT 셀들이 스테이지 내에 존재하고/하거나 보다 많은 스테이지들이 MLLC 내에 존재하면, SDN 프로세싱 엔진의 보다 강한 체크 능력이 가능하지만 이는 하드웨어 비용을 초래한다는 것이 이해되어야 한다. MUX/LUT 셀은 통상적으로 4 개 내지 6 개의 MUX들을 갖고, 스테이지는 통상적으로 32 개 내지 128 개의 MUX/LUT 셀들을 갖고, MLLC (500) 은 통상적으로 3 개 내지 6 개의 스테이지들을 갖는다. 그러나, 보다 많은 또는 보다 적은 MUX들이 MUX/LUT 셀 내에서 가능하다. 보다 많은 또는 보다 적은 MUX/LUT 셀들이 스테이지 내에서 가능하다. 마찬가지로, 보다 많은 또는 보다 적은 스테이지들이 MLLC 내에서 가능하다.
특정 연산식들 및 조건들을 수행하게 도 1의 MLLC (125) 을 프로그램하기 위해서, 합성 툴 (synthesis tool) 이 사용되어서 이러한 연산식들을 로직 콘 구조들에 맵핑시킨다. 예를 들어서, 캘리포니아의 버클리 대학의 과학자들에 의해서 개발된 ABC로 명명된 오픈-소스가 사용되어서 몇몇 네트워크 프로파일들 및 프로토콜들 (예를 들어서 Ethernet, VLAN, 라우팅, 브리징, iVIF, ACL 룩업들) 을 표현하는 연산식들 및 조건들을 MLLC (125) 로 맵핑시킬 수 있다.
MLLC (125) 은 인스트럭션 테이블들 (130) 을 판독하기 위한 인스트럭션 테이블 인덱스들을 리턴시킨다. 이러한 테이블 인덱스들은 입력들의 각 그룹마다 로직 콘들 내에서 프로그램된 조건들 및 연산식들의 결과들이다. 상이한 입력들에 대해서, MLLC (125) 에 의해서 출력된 테이블 인덱스들은 상이할 수 있다. 따라서, 상이한 인스트럭션들은 인스트럭션 테이블들 (130) 에 의해서 리턴될 수 있다. 이러한 인스트럭션들은 SDN 프로세싱 엔진 (100) 으로의 입력들이 SDN 프로세싱 엔진 (100) 의 데이터 경로 (110) 내에서 어떻게 수정될 것이며 출력들이 어떻게 생성될지를 가이드하도록 구성된다.
SDN 프로세싱 엔진 (100) 은 T 개의 인스트럭션 테이블들을 구비한다. SDN 프로세싱 엔진 (100) 이 M 개의 출력들을 가지기 때문에, TM 개의 출력들 각각이 적어도 하나의 테이블과 연관되게 적어도 M 과 동일해야 한다. SDN 프로세싱 엔진 (100) 의 출력은 다수의 인스트럭션 테이블들과 연관되지만, 어떠한 단일 테이블도 2 개의 또는 그보다 많은 출력들에 속하지 않는다. 인스트럭션 테이블들을 SDN 프로세싱 엔진 내의 각 출력 포트에 할당하는 것은 SDN 프로세싱 엔진의 설계자들에 의해서 선택되는 설계 옵션이다.
도 7은 본 발명의 실시예에 따른 인스트럭션 테이블들 (700) 의 블록도를 예시한다. 일부 실시예들에서, 도 1의 인스트럭션 테이블들 (130) 은 인스트럭션 테이블들 (700) 과 유사하게 구성된다. 각 테이블 (705) 의 판독 어드레스는 MLLC, 예를 들어서 MLLC (125) 의 출력 비트들로부터 취해진다. 테이블 iA i -비트 어드레스를 가지며 이는 테이블 i 가 2 Ai 에 달하는 엔트리들을 가짐을 의미한다. 보다 많은 엔트리들이 테이블 (705) 내에 존재하면, 보다 유연성이 있는 엔진이 대응하는 출력 데이터를 조작할 수 있지만 이는 하드웨어 비용을 초래한다는 것이 이해되어야 한다. 테이블 (705) 의 엔트리들의 수는 통상적으로 16 개 내지 256 개이며 이는 테이블 (705) 의 어드레스 폭이 4 비트 내지 8 비트임을 의미한다. 그러나, 보다 많은 또는 보다 적은 엔트리들이 테이블 (705) 내에서 가능하다. 일부 실시예들에서, 테이블들 (705) 은 SRAM 메모리들 또는 플롭들의 어레이들로부터 구축된다.
테이블 i 의 각 엔트리는 Q i 개의 인스트럭션들을 포함하며; 따라서 테이블 iQ i 개의 인스트럭션들을 입력 데이터가 가용한 각 사이클 동안에 리턴시킬 것이다. 모든 이러한 Q i 개의 인스트럭션들은 SDN 프로세싱 엔진의 데이터 경로 내에서 병렬적으로 실행되어서 테이블 i와 연관된 출력 j 을 생성한다.
모든 인스트럭션들은 데이터 경로 내에서 병렬적으로 실행된다. 엔트리당 보다 많은 인스트럭션들이 테이블 내에 존재한다면, 각 출력을 위해서 보다 많은 데이터 조작 연산들이 병렬적으로 실행될 수 있지만 이는 하드웨어 비용이 든다는 것이 이해되어야 한다. 입력으로부터 수정된 출력에 있어서, 그의 대응하는 테이블의 각 엔트리당 인스트럭션들의 수는 통상적으로 4 개 내지 8 개이다. 새롭게 생성된 출력에 있어서, 그의 대응하는 테이블의 각 엔트리당 인스트럭션들의 수는 통상적으로 8 개 내지 16 개이다.
도 1을 다시 참조하면, 인스트럭션 테이블들 (130) 에 의해서 리턴된 모든 인스트럭션들은 데이터 경로 (110) 내의 인스트럭션들 실행 블록 (140) 으로 전송되며, 이 실행 블록은 모든 이러한 인스트럭션들을 병렬적으로 실행시킨다. 인스트럭션들이 데이터 경로 (110) 내에서 실행되기 이전에, SDN 프로세싱 엔진 (100) 내로의 모든 N 개의 입력들은 제어 경로 (105) 의 지연과 매칭시키기 위해서 지연 매칭 큐 (135) 을 경험한다. 지연 매칭 큐 (110) 는 제어 경로 (105) 로부터의 인스트럭션들이 대응하는 지연된 입력들과 정확한 시간에 수신되도록 제어 경로 (105) 의 레이턴시와 동일한 깊이를 갖는 FIFO 또는 시프트 레지스터일 수 있다. 또한, 지연 매칭 큐 (135) 은 SDN 프로세싱 엔진 (100) 이 입력 포트들 상에서의 백-투-백 데이터를 사용하여서 최고의 처리량을 달성하는 것을 보장한다.
일부 실시예들에서, 다음과 같은 2 개의 종류의 인스트럭션들이 SDN 프로세싱 엔진 (100) 에 의해서 지원된다: 카피 인스트럭션들, 및 ALU 인스트럭션들. 카피 인스트럭션은 입력으로부터 특정 바이트들을 카피하고 이들을 출력 내의 특정 위치에 페이스트하는 것을 수행한다. ALU 인스트럭션은 입력들로부터 2 개의 특정 워드들을 취하고 이어서 ALU 연산을 수행하고, 마지막으로 ALU 결과를 출력 내의 특정 위치에 페이스트된다. 2 개의 종류의 인스트럭션들이 SDN 프로세싱 엔진 (100) 에 의해서 지원되지만, 보다 많은 또는 보다 적은 인스트럭션들이 SDN 프로세싱 엔진 (100) 에 의해서 지원될 수 있다.
도 8a는 본 발명의 실시예에 따른 카피 인스트럭션 (800) 의 포맷을 예시한다. 도 8b는 본 발명의 실시예에 따른 카피 인스트럭션 (800) 을 구현하는 개략을 예시한다. 통상적으로, 하드웨어 설계 (850) 는 카피 인스트럭션 (800) 을 SDN 프로세싱 엔진의 데이터 경로 (110) 에서 실행한다.
"En" 필드 (805) 는 이 인스트럭션이 실행될지의 여부를 표시한다. 인스트럭션이 인에이블되면 (enabled) (비트 "En" 은 1임), "src _ID" 필드 (810) 가 사용되어서 입력들 중 하나의 입력을 선택한다. "src _ByteOffset" 필드 (815) 는 C 개의 바이트들 중 최대가 카피되는, 선택된 입력 내에서의 제 1 바이트 위치를 포인팅한다. 일부 실시예들에서, C 는 4 바이트들 내지 8 바이트들이다. "BitMask" 필드 (820) 가 사용되어서 카피된 바이트들 내에서 특정 비트들을 마스킹한다. 이는 사용자들로 하여금 전체 C 개의 바이트들을 카피하는 것 이외에 비트들을 카피하거나 C 개보다 적은 바이트들을 카피하게 한다. 카피 인스트럭션 (800) 은 "IsConst" 필드 (805) 을 1로 설정함으로써 상수 값을 카피하는 것을 가능하게 한다. 이러한 경우에, 상수 값은 "BitMask" 필드 (820) 에 의해서 주어진다. 마지막으로, 카피-및-마스킹된 바이트들 또는 상수 바이트들이 수신지 출력에 페이스트된다. 이들은 바이트들을 대응하는 출력 내에서 "Dst_ByteOffset" 필드 (830) 에 의해서 주어진 시작 위치에 오버라이트한다.
도 9a는 본 발명의 실시예에 따른 ALU 인스트럭션 (900) 의 포맷을 예시한다. 도 9b는 본 발명의 실시예에 따른 ALU 인스트럭션 (900) 을 구현하는 개략을 예시한다. 통상적으로, 하드웨어 설계 960 는 ALU 인스트럭션 (900) 을 SDN 프로세싱 엔진의 데이터 경로 (110) 내에서 실행한다.
"En" 필드 (905) 는 이 인스트럭션이 실행될지의 여부를 나타낸다. 카피 인스트럭션 (800) 과 마찬가지로, "SrcA_ID" 필드 (915), "SrcA_ByteOffset" 필드 (920) 및 "SrcA_BitMask" 필드 (925) 가 사용되어서 srcA에 대해서 입력으로부터 W 개에 달하는 바이트들을 카피 및 마스킹한다. "SrcB_ID" 필드 (935), "SrcB_ByteOffset" 필드 (940) 및 "SrcB_BitMask" 필드 (945) 가 사용되어서 srcB에 대해서 입력으로부터 W 개에 달하는 바이트들을 카피 및 마스킹한다. 사용자들은 srcA 또는 srcB에 대하여 상수 값들을 할당할 수도 있다. "SrcA_IsConst" 필드 (930) 가 1로 설정되면, srcA 는 "SrcA_BitMask" 필드 (925) 에서 설정된 값과 동일한 상수 값을 갖는다. "SrcB_IsConst" 필드 (950) 가 1로 설정되면, srcB 는 "SrcB _ BitMask" 필드 (915) 에서 설정된 값과 동일한 상수 값을 갖는다. 카피된 바이트들 W 의 수는 ALU의 지원되는 비트폭에 따라서 사전규정된다. W 는 통상적으로 2 바이트들 (16 비트들) 또는 4 바이트들 (32 비트들) 이다. 그러나, W 는 다른 값일 수 있다.
srcA 및 srcB에 대한 카피된 바이트들 또는 상수 값들 ALU의 2 개의 입력 연산자들 (operands) 이 된다. ALU 연산은 "OpCode" 필드 (910) 에 의해서 선택된다. SDN 프로세싱 엔진에 대해서 가장 유용한 연산들은 다음과 같다: 가산 (+), 감산 (-), 비트단위 (bitwise) AND (&), 비트단위 OR (|), 비트단위 XOR (^), 비트단위 좌측 시프트 (<<), 및 비트단위 우측 시프트(>>). ALU 인스트럭션은 제로를 사용하여서 소스의 가산 또는 비트단위 OR 연산을 구성함으로써 카피 인스트럭션으로서 사용된다. 이어서, ALU 결과가 수신지 출력의 "Dst _ ByteOffset" 필드 955 에 의해서 주어진 시작 바이트 위치로 페이스트된다.
출력은, 그의 초기 컨텐츠가 모든 인스트럭션들이 실행되기 이전의 특정 입력의 컨텐츠이면, 이 특정 입력의 수정이다. 출력은, 그의 초기 컨텐츠가 모든 인스트럭션들이 실행되기 이전에 모든 제로들이면 새롭게 생성된다.
각 출력은 그 자신의 인스트럭션 테이블들을 가지며; 그리고, 각 인스트럭션 테이블은 다수의 인스트럭션들을 리턴시킨다. 모든 이러한 인스트럭션들은 대응하는 출력을 구축하게 병렬적으로 실행된다. SDN 시스템에서, 카피 연산들이 ALU 연산들보다 빈번하게 사용된다. 또한, ALU 인스트럭션들은 보다 복잡하므로 카피 인스트럭션들보다 많은 하드웨어 비용이 든다. 따라서, 각 테이블 엔트리는 통상적으로 오직 1 개 내지 2 개의 ALU 인스트럭션들을 가지며, 나머지는 카피 인스트럭션들이며 이로써 가장 비용 효율적인 설계를 달성한다.
본 발명의 실시예들이 소프트웨어-규정된 네트워크 (SDN) 프로세싱 엔진에서의 신속하고 조건적인 데이터 수정 및 생성에 관한 것이다. 다수의 입력들의 수정 및 다수의 출력들의 생성은 병렬적으로 수행될 수 있다. 각 입력 또는 출력 데이터의 크기는 클 수 있는데, 예를 들어서 수백 바이트들이다. 프로세싱 엔진은 제어 경로 및 데이터 경로를 포함한다. 제어 경로는 입력들을 수정하고 새로운 출력들을 생성하기 위한 인스트럭션을 생성한다. 데이터 경로 제어 경로에 의해서 생성된 모든 인스트럭션들을 실행한다. 프로세싱 엔진은 통상적으로, 데이터 수정 및 생성을 위한 조건들 및 규칙들이 프로세싱 엔진에 의해서 지원되는 네트워크 특징부들 및 프로토콜들에 따라서 재구성될 수 있게 프로그램가능하다. SDN 프로세싱 엔진은 다수의 대형 크기의 데이터 플로우들을 프로세싱하는 것을 가능하게 하며 이러한 데이터를 조작할 시에 효율적이다. SDN 프로세싱 엔진은 다수의 백-투-백 입력 및 출력 데이터 플로우들을 사용하여서 최고의 처리량을 달성할 수 있다.
본 기술 분야의 당업자는 다른 용도들을 이해하며 이점들이 또한 존재함을 이해할 것이다. 본 발명이 다수의 특정 세부사항을 참조하여서 기술되었지만, 본 발명은 본 발명의 사상 내에서 다른 특정 형태로 실시될 수 있음을 본 기술 분야의 당업자는 이해할 것이다. 따라서, 본 발명은 전술한 예시적인 세부사항들에 의해서 한정되기보다는 첨부된 청구항들에 의해서 규정됨을 본 기술 분야의 당업자는 이해할 것이다.

Claims (36)

  1. SDN (software-defined network) 프로세싱 엔진으로서,
    프로그램가능한 인스트럭션들의 조건적 생성을 위한 제어 경로; 및
    상기 제어 경로에 의해서 생성된 상기 인스트럭션들을 실행하기 위한 데이터 경로를 포함하며,
    상기 프로세싱 엔진은 병렬로 N 개의 입력들을 수신하고 M 개의 출력들을 생성하도록 구성되는, SDN 프로세싱 엔진.
  2. 제 1 항에 있어서,
    상기 M 개의 출력들 각각의 컨텐츠는 입력 컨텐츠 중에서 수정된 것이거나 새롭게 생성된 컨텐츠인, SDN 프로세싱 엔진.
  3. 제 1 항에 있어서,
    상기 제어 경로는,
    상기 N 개의 입력들로부터 제어 비트들을 추출하기 위한 제어 비트 추출기 (Control Bits Extractor);
    상기 N 개의 입력들의 워드들을 비교하기 위한 워드 비교 콘 (Word Comparing Cone);
    상기 제어 비트들 및 상기 워드 비교 콘의 결과 비트들에 대해서 복잡한 연산식들 (expressions) 및 조건들을 수행하기 위한 다중-스테이지 MUX/LUT 로직 콘 (Logic Cone); 및
    데이터 조작을 위한 인스트럭션들을 포함하는 복수의 인스트럭션 테이블들 (Instruction Tables) 을 포함하는, SDN 프로세싱 엔진.
  4. 제 3 항에 있어서,
    상기 제어 비트 추출기, 상기 워드 비교 콘, 상기 다중-스테이지 MUX/LUT 로직 콘 및 상기 복수의 인스트럭션 테이블들 중 적어도 하나는 사용자들이 상기 프로세싱 엔진들이 수행하기 원하는 네트워크 특징부들 (features) 및 프로토콜들에 기초하여서 재구성가능하며 프로그램가능한, SDN 프로세싱 엔진.
  5. 제 3 항에 있어서,
    상기 제어 비트 추출기는 입력들의 사전규정된 포맷들에 기초하여서 상기 N 개의 입력들로부터 상기 제어 비트들을 추출하는, SDN 프로세싱 엔진.
  6. 제 3 항에 있어서,
    상기 워드 비교 콘은 K 개의 구성가능한 MUX/CMP 로직 셀들 (Logic Cells) 을 포함하는, SDN 프로세싱 엔진.
  7. 제 6 항에 있어서,
    상기 MUX/CMP 로직 셀들 각각은 상기 N 개의 입력들로부터의 2 개의 W-바이트 워드들을 비교하기 위한 것인, SDN 프로세싱 엔진.
  8. 제 7 항에 있어서,
    상기 2 개의 W-바이트 워드들 각각의 W 바이트들 내의 오직 특정 비트들만이 비교되는, SDN 프로세싱 엔진.
  9. 제 6 항에 있어서,
    상기 MUX/CMP 로직 셀들 각각은 상기 입력들 중 하나로부터의 하나의 W-바이트 워드를 상수 값과 비교하기 위한 것인, SDN 프로세싱 엔진.
  10. 제 6 항에 있어서,
    상기 MUX/CMP 로직 셀들 각각은 적어도 3 개의 연산들을 지원하며,
    상기 적어도 3 개의 연산들은 "같음" (= =) 연산, "보다 큼" (>) 연산 및 "보다 작음" (<) 연산을 포함하는, SDN 프로세싱 엔진.
  11. 제 3 항에 있어서,
    상기 MUX/LUT 로직 콘은 S 개의 스테이지들을 포함하며,
    상기 S 개의 스테이지들 중 제 1 스테이지는 상기 프로세싱 엔진으로의 상기 N 개의 입력들의 제어 비트들 및 상기 워드 비교 콘의 출력 비트들을 포함하는 입력 비트들을 가지며,
    스테이지 i의 모든 출력 비트는 스테이지 i+1에 대한 입력 비트들이며,
    상기 S 개의 스테이지들 중 마지막 스테이지의 출력 비트들은 상기 복수의 인스트럭션 테이블들을 판독하기 위한 인덱스들을 형성하는, SDN 프로세싱 엔진.
  12. 제 11 항에 있어서,
    상기 스테이지 i P i 개의 구성가능한 MUX/LUT 셀들을 포함하는, SDN 프로세싱 엔진.
  13. 제 12 항에 있어서,
    상기 MUX/LUT 셀들 각각은 해당 MUX/LUT 셀로의 입력 비트들로부터 L 개의 임의의 비트들을 선택하기 위한 L 개의 멀티플렉서들을 포함하는, SDN 프로세싱 엔진.
  14. 제 13 항에 있어서,
    상기 L 개의 선택가능한 비트들은 2 L 비트들을 갖는 룩업 테이블 cfg _ LUT 에 대한 포인터로서 구성되며,
    상기 룩업 테이블 cfg _ LUT 의 출력은 1-비트인, SDN 프로세싱 엔진.
  15. 제 14 항에 있어서,
    상기 룩업 테이블 cfg _ LUT은 플롭들 (flops) 로 구축되는, SDN 프로세싱 엔진.
  16. 제 3 항에 있어서,
    복잡한 로직 연산식들 및 조건들을 상기 MUX/LUT 로직 콘으로 맵핑하도록 합성 툴이 사용되는, SDN 프로세싱 엔진.
  17. 제 3 항에 있어서,
    상기 복수의 인스트럭션 테이블들은 T 개의 프로그램가능한 인스트럭션 테이블들을 포함하며,
    상기 MUX/LUT 로직 콘의 출력들은 상기 T 개의 프로그램가능한 인스트럭션 테이블들에 대한 판독 어드레스들인 인덱스들을 형성하며,
    상기 M 개의 출력들 각각이 상기 T 개의 프로그램가능한 인스트럭션 테이블들 중 적어도 하나와 연관되도록 T 는 적어도 상기 프로세싱 엔진의 M 개의 출력들과 동일한, SDN 프로세싱 엔진.
  18. 제 17 항에 있어서,
    상기 T 개의 프로그램가능한 인스트럭션 테이블들 중 테이블 i 는 A i -비트 어드레스를 가지며,
    상기 테이블 i 는 2 Ai 개에 달하는 엔트리들을 갖는, SDN 프로세싱 엔진.
  19. 제 18 항에 있어서,
    상기 테이블 i 의 각 엔트리는 Q i 개의 인스트럭션들을 포함하는, SDN 프로세싱 엔진.
  20. 제 17 항에 있어서,
    상기 T 개의 프로그램가능한 인스트럭션 테이블들 각각은 SRAM 으로부터 또는 플롭들의 어레이들로부터 구축되는, SDN 프로세싱 엔진.
  21. 제 1 항에 있어서,
    상기 프로세싱 엔진은 카피 인스트럭션들 및 ALU 인스트럭션들을 포함하는 적어도 2 개의 종류의 인스트럭션들을 지원하는, SDN 프로세싱 엔진.
  22. 제 21 항에 있어서,
    상기 카피 인스트럭션은 입력으로부터 출력으로의 C 개에 달하는 바이트들을 카피하는, SDN 프로세싱 엔진.
  23. 제 21 항에 있어서,
    상기 카피 인스트럭션은 상수 값을 출력으로 카피하는, SDN 프로세싱 엔진.
  24. 제 21 항에 있어서,
    상기 ALU 인스트럭션은 입력들로부터의 2 W-바이트 워드들의 ALU 연산의 결과를 출력으로 카피하는, SDN 프로세싱 엔진.
  25. 제 24 항에 있어서,
    상기 ALU 연산의 입력은 상수 값인, SDN 프로세싱 엔진.
  26. 제 25 항에 있어서,
    상기 ALU 연산은, 가산 (+), 감산 (-), 비트단위 AND (&), 비트단위 OR (|), 비트단위 XOR (^), 비트단위 좌측 시프트 (<<), 및 비트단위 우측 시프트 (>>) 중 하나인, SDN 프로세싱 엔진.
  27. 제 21 항에 있어서,
    상기 카피 인스트럭션 또는 상기 ALU 인스트럭션 각각은 해당 인스트럭션 내의 비트마스크 필드를 사용함으로써 비트 또는 바이트 조작을 지원하는, SDN 프로세싱 엔진.
  28. 제 1 항에 있어서,
    상기 데이터 경로는,
    데이터가 올바른 시간들에 프로세싱되게 상기 데이터 경로의 레이턴시를 상기 제어 경로의 레이턴시에 매칭시키기 위한 지연 매칭 큐 (Delay Matching Queue); 및
    특정 입력들을 수정하거나 새로운 출력들을 생성하기 위해서 상기 제어 경로에 의해서 생성된 모든 인스트럭션들을 실행하기 위한 인스트럭션 실행 블록 (Instruction Execution Block) 을 포함하는, SDN 프로세싱 엔진.
  29. 제 28 항에 있어서,
    상기 프로세싱 엔진이 백-투-백 데이터 프로세싱 (back-to-back data processing) 으로 최고의 처리량을 달성하도록, 상기 제어 경로의 레이턴시와 동일한 깊이를 갖는 FIFO 및 시프트 레지스터 중 하나인, SDN 프로세싱 엔진.
  30. 제 28 항에 있어서,
    상기 인스트럭션 실행 블록은 상기 제어 경로에 의해서 생성된 모든 인스트럭션들을 병렬적으로 실행하기 위한 하드웨어 모듈들을 포함하며,
    상기 하드웨어 모듈들 각각은 상기 인스트럭션들 중 하나를 실행하는, SDN 프로세싱 엔진.
  31. 제 28 항에 있어서,
    출력은, 상기 출력의 초기 컨텐츠가 모든 인스트럭션들이 실행되기 이전의 특정 입력의 컨텐츠일 경우에, 상기 특정 입력의 수정이며,
    상기 출력은, 상기 출력의 초기 컨텐츠가 모든 인스트럭션들이 실행되기 이전에 모두 제로들일 경우에는, 새롭게 생성되는, SDN 프로세싱 엔진.
  32. SDN 프로세싱 엔진에서 병렬적 및 조건적 데이터 조작을 하는 방법으로서,
    N 개의 입력들을 수신하는 단계;
    상기 N 개의 입력들을 제어 경로 및 데이터 경로를 통해서 상기 프로세싱 엔진을 통해서 플로우시키는 단계;
    상기 N 개의 입력들로부터 제어 비트들을 동시에 추출하고, 상기 N 개의 입력들의 워드들을 비교하고, 지연 큐를 통해서 상기 N 개의 입력들을 전송하는 단계;
    상기 제어 비트들 및 상기 비교로부터의 결과 비트들에 대하여 복잡한 연산식들 및 조건들을 수행하여서 인덱스들을 리턴시키는 단계;
    상기 인덱스들에 기초하여서, 상기 N 개의 입력들이 어떻게 수정될 것이고 M 개의 출력들이 어떻게 생성될 것인지를 가이드하도록 구성된 인스트럭션들을 회수하는 (retrieving) 단계; 및
    상기 N 개의 입력들에 대해서 상기 인스트럭션들을 병렬적으로 실행하여서 상기 M 개의 출력들을 생성하는 단계를 포함하는, 데이터 조작 방법.
  33. 제 32 항에 있어서,
    상기 추출, 상기 비교, 상기 복잡한 연산식들 및 조건들 및 인스트럭션 테이블들은 상기 프로세싱 엔진의 상기 제어 경로에서 구현되고,
    상기 지연 큐 및 상기 인스트럭션들의 실행은 상기 프로세싱 엔진의 상기 데이터 경로에서 구현되는, 데이터 조작 방법.
  34. 제 32 항에 있어서,
    상기 M 개의 출력들 각각의 컨텐츠는 새롭게 생성되고/되거나 상기 N 개의 입력들 중 하나의 수정된 컨텐츠인, 데이터 조작 방법.
  35. 제 32 항에 있어서,
    상기 프로세싱 엔진의 상기 N 개의 입력들 및 상기 M 개의 출력들 각각의 데이터 포맷은,
    데이터 크기를 식별하기 위한 "길이" 필드;
    페이로드의 첫 번째 바이트의 위치를 식별하기 위한 "오프셋" 필드;
    데이터 타입을 식별하기 위한 "제어" 필드; 및
    상기 페이로드를 포함하기 위한 "바디" 필드를 포함하는, 데이터 조작 방법.
  36. 제 32 항에 있어서,
    상기 프로세싱 엔진은 프로그램가능한, 데이터 조작 방법.
KR1020140194027A 2013-12-30 2014-12-30 소프트웨어-규정된 네트워크 프로세싱 엔진에서 병렬적 및 조건적 데이터 조작 방법 및 장치 KR20150079475A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/144,260 US9880844B2 (en) 2013-12-30 2013-12-30 Method and apparatus for parallel and conditional data manipulation in a software-defined network processing engine
US14/144,260 2013-12-30

Publications (1)

Publication Number Publication Date
KR20150079475A true KR20150079475A (ko) 2015-07-08

Family

ID=53481841

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140194027A KR20150079475A (ko) 2013-12-30 2014-12-30 소프트웨어-규정된 네트워크 프로세싱 엔진에서 병렬적 및 조건적 데이터 조작 방법 및 장치

Country Status (6)

Country Link
US (1) US9880844B2 (ko)
JP (1) JP6537823B2 (ko)
KR (1) KR20150079475A (ko)
CN (1) CN104866284B (ko)
HK (1) HK1208943A1 (ko)
TW (1) TW201543359A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101858957B1 (ko) * 2017-12-12 2018-05-17 주식회사 위더스플래닛 Sdn 기반 중앙 집중식 wlan 네트워크 구축을 위한 제어 시스템

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11308114B1 (en) * 2013-12-23 2022-04-19 Cazena, Inc. Platform for provisioning a data analytics environment
US10003676B2 (en) * 2015-02-20 2018-06-19 Cavium, Inc. Method and apparatus for generating parallel lookup requests utilizing a super key
CN106095360B (zh) * 2016-05-31 2018-11-27 福州瑞芯微电子股份有限公司 基于调色板的图像处理方法和图像处理装置
CN109818762B (zh) * 2017-11-20 2022-03-08 中国电信股份有限公司 用于实现sdn控制器自动注册的方法、适配器和系统
US11146506B2 (en) 2018-12-14 2021-10-12 At&T Intellectual Property I, L.P. Parallel data processing for service function chains spanning multiple servers
US10805164B2 (en) 2018-12-14 2020-10-13 At&T Intellectual Property I, L.P. Controlling parallel data processing for service function chains

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4929939A (en) * 1988-10-31 1990-05-29 International Business Machines Corporation High-speed switching system with flexible protocol capability
US5319347A (en) * 1992-04-30 1994-06-07 Sgs-Thomson Microelectronics, Inc. Parallelized magnitude comparator for comparing a binary number to a fixed value
US6667984B1 (en) 1998-05-15 2003-12-23 Polytechnic University Methods and apparatus for arbitrating output port contention in a switch having virtual output queuing
ATE319249T1 (de) 2000-01-27 2006-03-15 Ibm Verfahren und vorrichtung für klassifizierung von datenpaketen
US6831917B1 (en) 2000-05-10 2004-12-14 Cisco Technology, Inc. Network address translation for multicast virtual sourcing
US7075926B2 (en) * 2000-05-24 2006-07-11 Alcatel Internetworking, Inc. (Pe) Programmable packet processor with flow resolution logic
US7461167B1 (en) 2002-11-22 2008-12-02 Silicon Image, Inc. Method for multicast service in a crossbar switch
US7685436B2 (en) 2003-10-02 2010-03-23 Itt Manufacturing Enterprises, Inc. System and method for a secure I/O interface
EP1553738A1 (en) * 2004-01-12 2005-07-13 Thomson Licensing S.A. Method and apparatus for generating data packets
US7275069B2 (en) * 2004-04-26 2007-09-25 Tarari, Inc. System and method for tokening documents
KR100603567B1 (ko) 2004-09-02 2006-07-24 삼성전자주식회사 스위치에서의 대역폭 예약을 통한 QoS 보장 방법 및 그시스템
US20060059269A1 (en) 2004-09-13 2006-03-16 Chien Chen Transparent recovery of switch device
US7787463B2 (en) * 2006-01-26 2010-08-31 Broadcom Corporation Content aware apparatus and method
US8112622B2 (en) 2006-12-08 2012-02-07 Broadcom Corporation Chaining port scheme for network security
US7961489B2 (en) * 2007-04-23 2011-06-14 Marvell Israel (MISL)Ltd. Comparing data representations to stored patterns
US8259715B2 (en) 2007-07-25 2012-09-04 Hewlett-Packard Development Company, L.P. System and method for traffic load balancing to multiple processors
US8054744B1 (en) 2007-10-25 2011-11-08 Marvell International Ltd. Methods and apparatus for flow classification and flow measurement
GB2481819B (en) * 2010-07-07 2018-03-07 Advanced Risc Mach Ltd Switching between dedicated function hardware and use of a software routine to generate result data
US8627057B2 (en) * 2010-12-22 2014-01-07 Intel Corporation Reconfigurable sensing platform for software-defined instrumentation
CN102724101B (zh) 2011-03-29 2015-01-21 华为技术有限公司 报文转发方法及系统与中继代理设备
US9159420B1 (en) 2011-08-16 2015-10-13 Marvell Israel (M.I.S.L) Ltd. Method and apparatus for content addressable memory parallel lookup
US8711860B2 (en) 2011-12-22 2014-04-29 Telefonaktiebolaget L M Ericsson (Publ) Controller for flexible and extensible flow processing in software-defined networks
US20140153443A1 (en) 2012-11-30 2014-06-05 International Business Machines Corporation Per-Address Spanning Tree Networks
CN104022960B (zh) * 2013-02-28 2017-05-31 新华三技术有限公司 基于OpenFlow协议实现PVLAN的方法和装置
US9590914B2 (en) 2013-11-05 2017-03-07 Cisco Technology, Inc. Randomized per-packet port channel load balancing
US9973599B2 (en) * 2013-12-04 2018-05-15 Mediatek Inc. Parser for parsing header in packet and related packet processing apparatus
US9825884B2 (en) 2013-12-30 2017-11-21 Cavium, Inc. Protocol independent programmable switch (PIPS) software defined data center networks

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101858957B1 (ko) * 2017-12-12 2018-05-17 주식회사 위더스플래닛 Sdn 기반 중앙 집중식 wlan 네트워크 구축을 위한 제어 시스템

Also Published As

Publication number Publication date
CN104866284B (zh) 2019-05-28
CN104866284A (zh) 2015-08-26
US9880844B2 (en) 2018-01-30
JP2015165649A (ja) 2015-09-17
TW201543359A (zh) 2015-11-16
HK1208943A1 (en) 2016-03-18
US20150186143A1 (en) 2015-07-02
JP6537823B2 (ja) 2019-07-03

Similar Documents

Publication Publication Date Title
KR102402176B1 (ko) 소프트웨어-규정된 네트워크 엔진에서 패킷 수정 및 포워딩을 위해서 룩업들을 생성하고 결정들을 수행하기 위한 장치 및 방법
JP6537823B2 (ja) ソフトウェア・デファインド・ネットワーク処理エンジンにおける並行かつ条件付きのデータ操作の方法および装置
US10516626B1 (en) Generating configuration data and API for programming a forwarding element
US10805437B2 (en) Compiler and hardware interactions to remove action dependencies in the data plane of a network forwarding element
US11588734B2 (en) Systems for providing an LPM implementation for a programmable data plane through a distributed algorithm
US11258707B1 (en) Systems for building data structures with highly scalable algorithms for a distributed LPM implementation
EP2777155B1 (en) Embedded memory and dedicated processor structure within an integrated circuit
US10003676B2 (en) Method and apparatus for generating parallel lookup requests utilizing a super key
US20220166718A1 (en) Systems and methods to prevent packet reordering when establishing a flow entry
US9270517B1 (en) Tuple construction from data packets
US11425036B1 (en) Pipelined match-action circuitry

Legal Events

Date Code Title Description
N231 Notification of change of applicant
N231 Notification of change of applicant
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid