KR101476114B1 - 룩업 프론트 엔드 입력 프로세서 - Google Patents

룩업 프론트 엔드 입력 프로세서 Download PDF

Info

Publication number
KR101476114B1
KR101476114B1 KR1020147005800A KR20147005800A KR101476114B1 KR 101476114 B1 KR101476114 B1 KR 101476114B1 KR 1020147005800 A KR1020147005800 A KR 1020147005800A KR 20147005800 A KR20147005800 A KR 20147005800A KR 101476114 B1 KR101476114 B1 KR 101476114B1
Authority
KR
South Korea
Prior art keywords
packet
key
processing
rules
lookup
Prior art date
Application number
KR1020147005800A
Other languages
English (en)
Other versions
KR20140053272A (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 KR20140053272A publication Critical patent/KR20140053272A/ko
Application granted granted Critical
Publication of KR101476114B1 publication Critical patent/KR101476114B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/18Protocol analysers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2023Failover techniques
    • G06F11/203Failover techniques using migration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/04Addressing variable-length words or parts of words
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0615Address space extension
    • G06F12/0623Address space extension for memory modules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1642Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • 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/46Multiprogramming arrangements
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/02Knowledge representation; Symbolic representation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/02Knowledge representation; Symbolic representation
    • G06N5/027Frames
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1075Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers for multiport memories each having random access ports and serial ports, e.g. video RAM
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/742Route cache; Operation thereof
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2441Traffic characterised by specific attributes, e.g. priority or QoS relying on flow classification, e.g. using integrated services [IntServ]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/39Credit based
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/02Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
    • H04L63/0227Filtering policies
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/06Network architectures or network communication protocols for network security for supporting key management in a packet data network
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/10Network architectures or network communication protocols for network security for controlling access to devices or network resources
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • 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/02Protocol performance
    • 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/22Parsing or analysis of headers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/7452Multiple parallel or consecutive lookup operations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/02Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
    • H04L63/0227Filtering policies
    • H04L63/0263Rule management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02BCLIMATE CHANGE MITIGATION TECHNOLOGIES RELATED TO BUILDINGS, e.g. HOUSING, HOUSE APPLIANCES OR RELATED END-USER APPLICATIONS
    • Y02B70/00Technologies for an efficient end-user side electric power management and consumption
    • Y02B70/30Systems integrating technologies related to power network operation and communication or information technologies for improving the carbon footprint of the management of residential or tertiary loads, i.e. smart grids as climate change mitigation technology in the buildings sector, including also the last stages of power distribution and the control, monitoring or operating management systems at local level
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

패킷 처리기는 네트워크 아키텍처 내에서 패킷들의 룰 매칭 (rule matching) 을 제공한다. 패킷 처리기는 다수의 룩업 엔진 및 각각의 온-칩 메모리 유닛을 갖는 룩업 클러스터 컴플렉스를 포함한다. 각 룩업 엔진은 패킷과 연관된 키 요청을 수신하고 패킷 데이터와 매칭하는 룰들의 서브세트를 결정한다. 이러한 룰 매칭의 결과로서, 룩업 엔진은 매칭의 발견 여부를 표시하는 응답 메시지를 보낸다. 룩업 프론트 엔드는 응답 메시지를 더 처리하고 대응하는 응답을 호스트에 제공한다.

Description

룩업 프론트 엔드 입력 프로세서{LOOKUP FRONT END INPUT PROCESSOR}
본원은 2011년 8월 2일자에 출원된 미국 가출원 번호 61/514,344; 2011년 8월 2일자에 출원된 미국 가출원 번호 61/514,382; 2011년 8월 2일자에 출원된 미국 가출원 번호 61/514,379; 2011년 8월 2일자에 출원된 미국 가출원 번호 61/514,400; 2011년 8월 2일자에 출원된 미국 가출원 번호 61/514,406; 2011년 8월 2일자에 출원된 미국 가출원 번호 61/514,407; 2011년 8월 2일자에 출원된 미국 가출원 번호 61/514,438; 2011년 8월 2일자에 출원된 미국 가출원 번호 61/514,447; 2011년 8월 2일자에 출원된 미국 가출원 번호 61/514,450; 2011년 8월 2일자에 출원된 미국 가출원 번호 61/514,459; 및 2011년 8월 2일자에 출원된 미국 가출원 번호 61/514,463에 대한 우선권을 주장한다. 상기 특허 문헌들의 전체 교시 내용들은 본 명세서에서 참조로서 인용된다.
OSI (Open Systems Interconnection) 레퍼런스 모델은 전송 매체를 통해서 통신하도록 사용되는 7 개의 네트워크 프로토콜 계층들 (L1 내지 L7) 을 규정한다. 이 중 상위 층들 (L4 내지 L7) 은 종단간 통신을 다루고 하위 층들 (L1 내지 L3) 은 로컬 통신 (local communications) 을 다룬다.
네트워킹 애플리케이션 인지 (aware) 시스템들은 예를 들어서 HTTP (HyperText Transfer Protocol) 및 SMTP (Simple Mail Transfer Protocol) 와 같은 L7 네트워크 프로토콜 층 및 TCP (Transmission Control Protocol) 와 같은 L4 네트워크 프로토콜 층과 같은 L3 네트워크 프로토콜 층 내지 L7 네트워크 프로토콜 층의 범위를 처리, 필터링 및 스위칭할 필요가 있다. 이러한 네트워크 프로토콜 층들을 처리하는 것 이외에, 네트워킹 애플리케이션 인지 시스템들은 L3 네트워크 프로토콜 층 내지 L7 네트워크 프로토콜 층에 대한 액세스 및 콘텐츠 기반 보안을 사용하여서 이러한 프로토콜 층들을 동시에 안전하게 보호할 필요가 있으며, 이러한 보안 방식은 와이어 스피드 (wire-speed) 에서의 AV (Anti- Virus) 기능 및 AS (Anti-Spam) 기능, 방화벽 (Firewall), VPN (Virtual Private Network), SSL (Secure Sockets Layer), IDS (Intrusion Detection System), IPSec (Internet Protocol Security) 을 포함한다.
오늘날의 인터넷에서 네트워크 동작의 효율 및 보안을 개선하는 것은 인터넷 사용자에게 궁극적 목표로서 되고 있다. 액세스 제어, 트래픽 엔지니어링, 침입 검출 및 수많은 다른 네트워크 서비스들에서는 패킷 헤더의 다수의 필드들을 기초로 하여서 패킷들을 분별하는 이른바 패킷 분류가 요구된다.
인터넷 라우터는 라우팅, 레이트 한정 (rate limiting), 방화벽에서의 액세스 제어, 가상 대역폭 할당, 정책 기반 라우팅, 서비스 차별화, 로드 밸런싱 (load balancing), 트래픽 쉐이핑 (traffic shaping) 및 트래픽 과금 (traffic billing) 과 같은 다수의 진보된 인터넷 서비스들을 구현하기 위해서 패킷들을 분류한다. 이러한 서비스들에서, 인터넷 라우터는 상이한 플로우로 들어오는 패킷들을 분류하고 이어서 이러한 분류 결과에 따라서 적합한 동작들을 수행할 필요가 있다.
분류자는 필터들의 세트 또는 룰들 (rules) 의 세트를 사용하여서 플로우 또는 클래스를 특정한다. 예를 들어서, 방화벽에서의 각 룰은 소스 어드레스 및 수신지 어드레스 세트를 특정하고 이에 대응하는 부정 또는 허용 동작을 이와 연관시킨다. 이와 달리, 이러한 룰들은 어드레싱 및 프로토콜 정보를 포함하는, OSI 모델의 층 2 내지 층 5 을 포함하는 패킷 헤더의 몇몇 필드들에 기초할 수 있다.
몇몇 타입의 독점적 (proprietary) 하드웨어 상에서, ACL (Access Control List) 는 호스트 또는 층 3 디바이스 상에서 가용한 포트 넘버 (port number) 또는 네트워크 대몬 명 (network daemon names) 에 적용되는 룰들을 지칭하며, 각각은 서비스를 사용하도록 허용된 호스트들 및/또는 네트워크들의 리스트를 갖는다. 개별 서버들 및 라우터들 모두 네트워크 ACL들을 가질 수 있다. ACL들은 인바운드 트래픽 및 아웃바운드 트래픽 모두를 제어하도록 구성될 수 있다.
본 개시의 예시적인 실시예들은 패킷 처리 방법을 제공한다. 이 방법은 패킷 헤더 데이터를 통해서 룩업 요청을 제공하는 호스트와 이 패킷 데이터의 룰 매칭을 제공하기 위한 탐색 클러스터 간을 인터페이싱하는 룩업 프론트 엔드 (LUF) 프로세서에 의해서 동작될 수 있다. 먼저, 패킷의 패킷 헤더 및 연관된 그룹 식별자 (GID) 를 포함하는 룩업 요청이 수신된다. 이어서, 상기 패킷 헤더의 데이터에 기초하여서 적어도 하나의 키가 생성된다. 적어도 하나의 테이블 식별자 (TID) 를 결정하도록 상기 GID가 보편적 규정 테이블 (global definition table) 과 비교된다. 상기 패킷에 대한 룰 매칭 (rule matching) 을 동작시킬 수 있는 프로세싱 클러스터들의 서브세트가 상기 TID에 기초하여서 결정된다. 이어서, 가용성 (availability) 에 기초하여서 상기 서브세트의 프로세싱 클러스터들 중 하나가 선택된다. 이어서, 상기 키를 사용하여 룰 매칭을 개시시키도록 상기 적어도 하나의 키 및 상기 적어도 하나의 TID를 포함하는 키 요청이 상기 선택된 프로세싱 클러스터에 포워딩된다.
다른 실시예들에서, 패킷 헤더 인덱스 (PHIDX) 를 결정하도록 상기 GID가 보편적 규정 테이블과 비교되고, 상기 적어도 하나의 키는 상기 PHIDX에 따라서 생성된다. 상기 PHIDX는 패킷 헤더 테이블 (PHT) 내의 엔트리를 인덱싱하며, 상기 엔트리는 상기 적어도 하나의 키를 생성하기 위해서 상기 패킷 헤더로부터 데이터를 추출하기 위한 룰들 (rules) 을 표시한다.
또 다른 실시예들에서, 키 포맷 테이블 인덱스 (KFTIDX) 를 결정하도록 상기 GID가 보편적 규정 테이블과 비교되며, 상기 KFTIDX는 키 포맷 테이블 내의 엔트리를 인덱싱하며, 상기 엔트리는 상기 프로세싱 클러스터에서 상기 키로부터 필드들을 추출하기 위한 인스트럭션들을 표시한다. 상기 키 요청은 상기 KFTIDX를 더 포함한다.
또 다른 실시예들에서, 복수의 키들이 패킷 데이터로부터 생성되고, 각 키는 각각의 키 요청 시에 구현되며, 상기 복수의 키들 중 각각의 키는 상기 복수의 키들 중 다른 키에 포함된 데이터와 구별되는 상기 패킷 헤더의 데이터의 적어도 일부를 포함한다. 또한, 상기 프로세싱 클러스터는 상기 프로세싱 클러스터의 서브세트 중 각각의 프로세싱 클러스터에서 계류 중인 (pending) 요청들의 개수에 대한 상기 프로세싱 클러스터에서의 계류 중인 요청들의 개수에 기초하여서 선택된다. 상기 선택된 프로세싱 클러스터에서의 계류 중인 요청들의 개수는 상기 프로세싱 클러스터들의 서브세트 중에서 최소이며, 이는 "가장 덜 분주한" 클러스터를 의미한다. 이를 결정하기 위해서, 상기 프로세싱 클러스터들의 서브세트 중 각각의 프로세싱 클러스터에서의 계류 중인 요청들의 개수의 카운트를 유지될 수 있다. 선택된 프로세싱 클러스터가 가용될 수 없다고 검출되면, 상기 적어도 하나의 키 요청이 리트리 큐 (retry queue) 로 포워딩되며, 이 리트리 큐는 다시 키 요청을 선택된 클러스터에 포워딩하기 위해서 이후에 액세스되게 된다.
또 다른 실시예들에서, 상기 적어도 하나의 키 요청은 복수의 서브-트리 요청들 (sub-tree requests) 로 분할되며, 각 서브-트리 요청은 클러스터들에 저장된 서브-트리 또는 룰들의 다른 서브세트에 대응한다. 이어서, 키 요청은 서브-트리 요청으로서 선택된 프로세싱 클러스터 (또는 다수의 선택된 클러스터) 에 포워딩된다.
또 다른 실시예들에서, 장치는 패킷 분류를 위한 룰들의 세트를 나타내는 룰 컴파일링된 데이터 구조 (Rule Complied Data Structure:RCDS) 를 저장하는 메모리를 포함한다. 이 장치는 상기 RCDS에 대한 증분된 업데이트 (incremental update) 에 대한 하나 이상의 호스트 명령을 수신하도록 구성된 호스트 명령 인터페이스를 더 포함한다. 또한, 프로세서가 상기 메모리 및 상기 호스트 명령 인터페이스에 접속되며, 수신된 패킷들을 분류하기 위한 RCDS를 능동 탐색하도록 구성되며, 상기 RCDS는 상기 수신된 하나 이상의 호스트 명령에 기초하여서 업데이트되며, 상기 RCDS는 수행되는 상기 능동 탐색의 관점 (perspective) 으로부터 자동으로 업데이트된다.
전술한 바들은 첨부 도면에서 예시되는 바와 같은 본 발명의 예시적인 실시예들에 대한 다음의 보다 구체적인 설명들로부터 명백해질 것이며, 상이한 도면들에서 유사한 참조 부호는 유사한 구성 요소를 나타낸다. 이 도면들은 반드시 축척 (scale) 에 맞게 된 것은 아니며 대신에 본 발명의 실시예들을 예시하기 위해서 강조될 수 있다.
도 1은 본원에서 기술되는 탐색 프로세서의 예시적인 실시예들을 채용하는 네트워크 요소들을 포함하는 통상적인 네트워크 토폴러지 (topology) 의 블록도이다.
도 2a 내지 도 2c는 라우터들에서 채용된 탐색 프로세서의 예시적인 실시예들을 예시하는 블록도들이다.
도 3a는 라우터 아키텍처의 예시적인 실시예의 도면이다.
도 3b는 탐색 프로세서를 채용하는 라우터의 예시적인 실시예들을 예시하는 블록도이다.
도 3c는 스위칭형 백플레인 (backplane) 을 포함하는 라우터의 다른 실시예의 블록도이다.
도 3d는 탐색 프로세서를 채용하는 라우터의 예시적인 실시예를 예시하는 블록도이다.
도 4a 및 도 4b는 탐색 프로세서의 예시적인 실시예들의 블록도들이다.
도 4c는 일 실시예에서의 LCC (Lookup Cluster Complex) 의 블록도이다.
도 4d는 일 실시예에서의 LCC에서의 입력 및 출력 데이터를 예시하는 블록도이다.
도 5는 단일 패킷 헤더로부터의 다수의 룩업 요청들의 생성을 예시하는 블록도이다.
도 6은 일 실시예에서의 LUE (Lookup Engine) 및 이와 연관된 OCM (on-chip memory) 의 블록도이다.
도 7은 메모리 구조로 룰들을 로딩하는 컴파일러 (complier) 의 예시적인 실시예을 예시하는 블록도이다.
도 8은 탐색 블록 또는 탐색 클러스터의 예시적인 실시예을 예시하는 블록도이다.
도 9a는 패킷 내의 소정의 키 (key) 에 대한 룰들을 로딩하는데 채용되는 메모리 구조의 예시적인 실시예를 예시하는 블록도이다.
도 9b는 키를 수신하고 메모리 구조로부터의 룰들의 세트를 로딩하는 TWE에 의해서 채용되는 메모리 구조의 예시적인 실시예들을 예시하는 도면이며, 여기서 상기 룰들은 외부 메모리 내에 저장된다.
도 10a는 탐색 프로세서에 의해서 채용되는 예시적인 프로세스를 예시하는 흐름도이다.
도 10b는 BPP (Bucket Post Processor) 에 의해 룰들의 세트를 사용하여서 키에 대해서 탐색을 수행하는 예시적인 프로세스를 예시하는 흐름도이다.
도 11은 예시적인 LUF 입력 프로세서 (LIP) 의 블록도이다.
도 12는 예시적인 페이로드 헤더 추출자 (PHE) 의 블록도이다.
도 13은 LIP에 의해서 선택 가능한 상이한 바이트 스와핑 모드들을 나타내는 패킷도이다.
도 14는 정상적인 키 확장 모드에서 동작하는 PHE를 나타내는 패킷도이다.
도 15는 LIP의 예시적인 스케줄러 출력 관리자의 블록도이다.
도 16은 요청들 및 명령들을 파싱하고 이들을 내부 리소스로 스케줄링하기 위한 예시적인 절차의 데이터 흐름도이다.
도 17은 예시적인 LUF 출력 프로세서 (LOP) 의 블록도이다.
도 18은 예시적인 LUF 응답 처리 프론트 엔드 (LOP_LE) 의 블록도이다.
도 19는 예시적인 룩업 응답 처리 백 엔드 (LOP_BE) 의 블록도이다.
도 20는 예시적인 LOP 출력 프로세서 (LOP_OP) 의 블록도이다.
도 21은 본 개시의 예시적인 실시예들을 구현하기 위한 예시적인 데이터 구조의 블록도이다.
도 22a 및 도 22b는 내부 리소스들로부터 수신된 응답들을 오더링 및 병합하기 위한 예시적인 절차의 흐름도이다.
도 23은 본 개시의 다양한 실시예들이 구현될 수 있는 컴퓨터의 블록도이다.
오래 동안 패킷 분류는 광범위하게 연구되어 왔지만, i) 네트워크 대역폭이 계속적으로 성장하고 있으며, ii) 네트워크 애플리케이션 복잡성이 증가하고 있으며, (iii) 네트워크 시스템에 대한 기술 혁신이 이루어지고 있기 때문에, 연구자들은 여전히 신규하면서 효율적인 패킷 분류 방식을 찾고자 하고 있다.
네트워크 대역폭에 대한 요구가 폭발하는 것은 일반적으로 데이터 트패픽 성장때문이다. 앞서가는 서비스 제공자들은 6 내지 9 개월 단위로 그들의 백본 네트워크 상에서 대역폭이 2 배로 됨을 보고한다. 따라서, 모든 에지 디바이스 및 코어 디바이스 상에서의 지수적으로 증가하는 트래픽을 처리하기 위해서 새로운 패킷 분류 방식들이 요구된다.
네트워크 애플리케이션들의 복잡성이 증가하는 바는 네트워크 서비스들에서 구현되고 있는 내트워크 애플리케이션의 수가 증가하기 때문이다. 패킷 분류가 서비스 인지 라우팅, 침입 방지 및 트래픽 쉐이핑 (shaping) 과 같은 다양한 종류의 애플리케이션들을 위해서 광범위하게 사용되고 있다. 따라서, 새로운 패킷 분류 방식은 큰 성능 손실 없이 다양한 타입의 룰 세트들을 다룰 수 있도록 지능적이어야 한다.
또한, 다중 코어 프로세서와 같은 새로운 기술들은 전례가 없는 컴퓨팅 능력 및 크게 통합된 자원들을 제공한다. 따라서, 새로운 패킷 분류 방식은 진보된 하드웨어 및 소프트웨어 기술들에 잘 맞추어져야 한다.
기존의 패킷 분류 알고리즘들은 시간적 이점을 취하기 위해서 메모리를 희생시키고 있다. 이러한 절충이 계속적으로 개선되고 있을지라도, 합리적 메모리 양에 대해서 얻을 수 있는 시간은 여전히 전반적으로 빈약하다.
기존의 알고리즘 방식들이 가지고 있는 문제점들로 인해서, 벤더들은 모든 룰들에 대하여 패킷들을 동시에 체크하기 위해서 무작위 병렬 하드웨어 (brute-force parallel hardware) 를 채용하는 TCAM (ternary content-addressable memory) 를 사용한다. 알고리즘 방식에 비한 TCAM의 주요 이점들은 속도 및 판정 품질 (determinism) 이다 (모든 TCAM들은 모든 데이터베이스에 대해서 동작한다).
TCAM은 완전 연관 메모리 (fully associative memory) 로서 기능하는 하드웨어 디바이스이다. TCAM 셀은 0, 1 또는 'X'인 3 개의 값들을 저장하며, 이 X 값은 무시 비트 (don't care bit) 를 나타내며 TCAM이 클린 스타 (kleene star) '*' 와 같은 와일드카드 (wildcard) 를 포함하는 룰과 매칭하는 것을 가능하게 하는 셀당 마스크 (per-cell mask) 로서 동작한다. 동작 시에, 전체 패킷 헤더가 TCAM에 제공되어서 자신과 매칭하는 엔트리 (룰) 을 결정할 수 있다. 그러나, TCAM의 복잡성으로 인해서 오직 소량의 비유연하면서 상대적으로 저속인 구현만이 가능하며 이로써 많은 전력을 소모하게 된다. 따라서, 특정 데이터 구조 상에서 동작하는 효율적인 알고리즘 방식이 필요하다.
현 알고리즘 방법들은 수학적 분석 및/또는 소프트웨어 시뮬레이션 (관측 기반 방식) 의 수준에 머무르고 있다.
우수한 시간/특별한 복잡도를 갖도록 제안된 수학적 방식이 보고되었다. 그러나, 이러한 종류의 방법은 현실의 네트워크 디바이스들에서는 구현될 수 없는 것으로 알려졌는데 그 이유는 수학적 방식은 문제를 단순화하고/하거나 큰 상수 팩터 (large constant factor) 를 생략하여서 명시적인 최악의 경우의 바운드 (explicit worst-case bound) 를 은폐하도록 특별한 조건들을 부가하기 때문이다.
제안된 관측 기반 방식은 현실에서의 사용을 위한 효율적인 방식을 달성하기 위해서 룰들에서 관측되는 통계적 특성들을 사용한다. 그러나, 이러한 알고리즘 방법은 일반적으로 특정 타입의 룰들에 대해서만 양호하게 동작한다. 상이한 이용 상황을 위한 패킷 분류 룰들은 다양한 특징들을 갖기 때문에, 매우 소수의 관측 기반 방법들만이 다양한 조건 하에서 안정적인 성능을 달성하기 위해서 상이한 타입의 룰 세트들에서 리던던시 (redundancy) 을 완전하게 활용할 수 있다.
패킷 분류는 또한 정책 데이터베이스, 플로우 분류자, 또는 간단하게 분류자 (classifier) 로 지칭되는 패킷 분류자를 사용하여서 수행된다. 분류자는 룰들 또는 정책들의 집합이다. 수신된 패킷들이 룰들과 매칭되며 이 룰들은 매칭된 패킷에 대하여 취할 동작들을 결정한다. 일반적인 패킷 분류에서는 라우터가 패킷 헤더 내의 다수의 필드들에 기초하여서 패킷을 분류할 필요가 있다. 분류자의 각 룰은 패킷 헤더의 'F' 필드들 상의 기준 사항들 (criteria) 에 따라서 패킷이 속할 수 있는 클래스를 특정하고 식별자 (예를 들어서, 클래스 ID) 를 각 클래스와 연관시킨다. 예를 들어서, 플로우 분류자 내의 각 룰은 플로우 플로우 세부 사항 (flow specifiation) 이며, 여기서 각 플로우는 개별 클래스 내에 있다. 식별자가 각 룰과 연관된 동작 (operation) 을 고유하게 특정한다. 각 룰은 'F' 필드를 갖는다. R[i]로 지칭되는 룰 R의 i 번째 필드는 패킷 헤더의 i 번째 필드 상의 규칙적 표현 (regular expression) 이다. 패킷 P는 매 i에 대해서 특정 룰 R을 매칭하며 패킷 P의 헤더의 i 번째 필드는 상기 규칙적 표현 R[i]을 만족시킨다.
이러한 룰들에 의해서 특정된 클래스들이 중첩될 수 있다. 예를 들어서, 일 패킷은 몇 개의 룰들과 매칭할 수 있다. 이 경우에, 몇 개의 룰들이 중첩하면, 이 룰들이 분류자에서 나타나는 순서가 룰들의 상대적 우선 순위를 결정한다. 달리 말하면, 다수의 룰들과 매칭한 패킷은 분류자 내에서 룰들 중에서 가장 먼저 나타난 룰의 식별자 (클래스 ID) 에 의해서 식별된 클래스에 속한다. 다른 실시예들에서, 각 룰에 우선 순위 표시가 제공될 수 있다.
패킷 분류자는 분류자 테이블 내의 룰들을 분석 및 카테고리화하고 수신된 패킷을 상기 분류자 테이블로부터의 룰과 매칭하는데 사용되는 결정 트리 (decision tree) 를 생성할 수 있다. 결정 트리는 트리 형태의 결정 그래프 또는 모델 및 찬스 이벤트 결과 (chance event outcome), 자원 코스트 (resource cost) 및 유틸리티 (utility) 를 포함하는 그들의 가능한 결과들을 사용하는 결정 지원 툴이다. 결정 트리는 통상적으로 목표에 가장 도달할 가능성이 큰 전략을 식별하는 바를 돕도록 동작 리서치 (operation research) 시에, 특히 결정 분석 시에 사용된다. 결정 트리의 다른 용도는 조건적 확율을 계산하기 위한 서술형 수단 (descriptive means) 이다. 결정 트리는 수신된 패킷을 처리하는 방식을 결정하기 위해서 수신된 패킷을 분류자 테이블 내의 룰과 선택 매칭하는데 사용될 수 있다.
도 1은 탐색 프로세서의 예시적인 실시예들을 채용하는 네트워크 요소들을 포함하는 통상적인 네트워크 토폴러지 (topology) 의 블록도이다. 네트워크 토폴러지는 다수의 코어 라우터들 (104a 내지 104h) 을 포함하는 인터넷 코어 (102) 를 포함한다. 다수의 코어 라우터들 (104a 내지 104h) 각각은 다수의 코어 라우터들 (104a 내지 104h) 중 적어도 하나의 다른 라우터에 접속된다. 인터넷 코어 (102) 의 에지 상에 있는 코어 라우터들 (즉, 코어 라우터들 (104b 내지 104e) 및 코어 라우터 (104h)) 은 적어도 하나의 에지 라우터 (106a 내지 106f) 에 접속된다. 각 에지 라우터 (106a 내지 106f) 는 적어도 하나의 액세스 라우터 (108a 내지 108e) 에 접속된다.
코어 라우터들 (104a 내지 104h) 은 인터넷 코어 (102) 또는 인터넷 백본 (backbone) 내에서 동작하도록 구성된다. 코어 라우터들 (104a 내지 104h) 은 인터넷 코어 (102) 의 다수의 통신 인터페이스들을 지원하도록 구성되며 다수의 통신 프로토콜 각각의 최고 스피드로 패킷들을 포워딩하도록 더 구성된다.
에지 라우터 (106a 내지 106f) 는 인터넷 코어 (102) 의 에지에 배치된다. 에지 라우터 (106a 내지 106f) 는 인터넷 코어 (102) 외부의 액세스 라우터 (108a 내지 108e) 와 인터넷 코어 (102) 내의 코어 라우터 (104a 내지 104h) 를 서로 브리지한다. 에지 라우터 (106a 내지 106f) 는 액세스 라우터 (108a 내지 108e) 에서 코어 라우터 (104a 내지 104h) 로 패킷들을 포워딩하고 이와 반대로 패킷들을 포워딩하는 브리징 프로토콜 (bridging protocol) 을 사용하도록 구성될 수 있다.
액세스 라우터 (108a 내지 108e) 는 홈 사용자 또는 사무실과 같은 최종 사용자에 의해서 사용되는 라우터이며 에지 라우터 (106a 내지 106f) 중 하나에 접속되며 이로써 코어 라우터 (104a 내지 104h) 중 하나에 접속됨으로써 인터넷 코어 (102) 에 전송된다. 이러한 방식으로, 에지 라우터 (106a 내지 106f) 는 에지 라우터 (106a 내지 106f) 및 이와 상호 접속된 코어 라우터 (104a 내지 104h) 를 통해서 임의의 다른 에지 라우터 (106a 내지 106f) 에 접속될 수 있다.
본 명세서에서 기술되는 탐색 프로세서는 코어 라우터 (104a 내지 104h), 에지 라우터 (106a 내지 106f) 및 액세스 라우터 (108a 내지 108e) 중 임의의 라우터에 상주할 수 있다. 이러한 각 라우터 내에서 본 명세서에서 기술된 탐색 프로세서는 룰들의 세트에 기초하여서 인터넷 프로토콜 (IP) 패킷들을 분석하고 적합한 네트워크 경로를 따라서 IP 패킷들을 포워딩하도록 구성된다.
도 2a는 에지 라우터 (106) 에서 사용되는 탐색 프로세서 (202) 의 예시적인 실시예들을 예시하는 블록도 (200) 이다. 제공자 에지 라우터와 같은 에지 라우터 (106) 는 탐색 프로세서 (202), 제 1 호스트 프로세서 (204) 및 제 2 호스트 프로세서 (214) 를 포함한다. 제 1 호스트 프로세서 (204) 는 인그레스 (ingress) 호스트 프로세서로서 구성된다. 제 1 호스트 프로세서 (204) 는 네트워크로부터 인그레스 패킷 (206) 을 수신한다. 제 1 호스트 프로세서 (204) 는 인그레스 패킷 (206) 으로부터의 패킷 헤더 (또는 필드) 를 포함하는 룩업 요청을 인터레이큰 인터페이스 (Interlaken interface) (208) 를 사용하여서 탐색 프로세서 (202) 에 포워딩한다. 이어서, 탐색 프로세서 (202) 는 네트워크 상에서 상기 인그레스 패킷 (206) 을 포워딩하기 위한 경로를 결정하기 위해서 복수의 룰을 채용하는 복수의 룰 처리 엔진들을 사용하여서 패킷 헤더를 처리한다. 패킷 헤더를 갖는 룩업 요청을 처리한 후에, 탐색 프로세서 (202) 는 경로 정보를 제 1 호스트 프로세서 (204) 에 포워딩하고 상기 제 1 호스트 프로세서 (204) 는 상기 처리된 인그레스 패킷 (210) 을 네트워크 내의 다른 네트워크 요소로 포워딩한다.
유사하게, 제 2 호스트 프로세서 (214) 는 에그레스 (egress) 호스트 프로세서로서 구성된다. 제 2 호스트 프로세서 (214) 는 네트워크로부터 전송될 에그레스 패킷 (216) 을 수신한다. 제 2 호스트 프로세서 (214) 는 에그레스 패킷 (216) 으로부터의 패킷 헤더 (또는 필드) 를 포함하는 룩업 요청을 제 2 인터레이큰 인터페이스 (Interlaken interface) (218) 를 사용하여서 탐색 프로세서 (202) 에 포워딩한다. 이어서, 탐색 프로세서 (202) 는 네트워크 상에서 상기 에그레스 패킷 (216) 을 포워딩하기 위한 경로를 결정하기 위해서 복수의 룰을 채용하는 복수의 룰 처리 엔진들을 사용하여서 패킷 헤더를 처리한다. 상기 제 2 호스트 프로세서 (214) 는 상기 처리된 에그레스 패킷 (220) 을 네트워크 내의 다른 네트워크 요소로 포워딩한다.
도 2b는 탐색 프로세서 (202) 를 채용하도록 구성된 에지 라우터 (106) 의 다른 예시적인 실시예를 예시하는 블록도 (202) 이다. 이 실시예에서, 에지 라우터 (106) 는 예를 들어서 제 1 탐색 프로세서 (202a) 및 제 2 탐색 프로세서 (202b) 와 같은 복수의 탐색 프로세서 (202) 를 포함한다. 복수의 탐색 프로세서 (202a 및 202b) 는 각기 복수의 인터레이큰 인터페이스 (226a 및 226b) 를 사용하여서 패킷 프로세서 (228) 에 접속된다. 복수의 탐색 프로세서 (202a 및 202b) 는 단일 인터레이큰 인터페이스를 통해서 패킷 프로세서 (228) 에 접속될 수 있다. 에지 라우터 (106) 는 패킷 프로세서 (228) 에서 전 처리된 (pre-processed) 패킷들 (222) 의 패킷 헤더 (또는 필드) 를 갖는 룩업 요청을 수신한다. 탐색 프로세서 (202a 및 202b) 중 하나는 룰들의 세트 및 상기 패킷 헤더 내의 데이터에 기초하여서 상기 전 처리된 패킷 (222) 의 적합한 포워딩 수신지를 찾기 위해서 패킷 헤더를 탐색하고 룩업 요청에 대한 응답을 패킷 프로세서 (228) 로 한다. 이어서, 패킷 프로세서 (228) 는 후 처리된 (post processed) 패킷 (224) 을 탐색 프로세서 (202a 및 202b) 에 의해서 수행된 룩업 요청 응답에 기초하여서 네트워크로 전송한다.
도 2c는 탐색 프로세서 (202) 를 채용한 액세스 라우터 (246) 의 예시적인 실시예를 예시하는 블록도 (240) 이다. 액세스 라우터 (246) 는 인그레스 패킷 프로세서 (242) 에서 입력되는 패킷 (250) 을 수신한다. 이어서, 인그레스 패킷 프로세서 (242) 는 이 입력된 패킷 (250) 의 패킷 헤더를 갖는 룩업 요청을 탐색 프로세서 (202) 에 포워딩한다. 탐색 프로세서 (202) 는 룩업 요청의 패킷 헤더에 기초하여서 입력된 패킷 (250) 의 포워딩 경로를 결정하고 룩업 요청에 대한 응답을 인터레이큰 인터페이스 (252) 를 통해서 에그레스 패킷 프로세서 (244) 로 한다. 이어서, 에그레스 패킷 프로세서 (244) 는 포워딩된 패킷 (248) 을 네트워크로 출력한다.
도 3a는 라우터 아키텍처의 예시적인 실시예의 도면 (300) 이다. 라우터 아키텍처는 프로세서 (308) 및 메모리 (304) 를 포함하는 프로세서 카드 (303) 와 접속된 스위칭형 백플레인 (302) 을 포함한다. 이 스위칭형 백플레인 (302) 은 복수의 라인 카드들 (306a 내지 306h) 에도 접속된다. 라인 카드들 (306a 내지 306h) 각각은 본 명세서에서 기술되는 탐색 프로세서를 포함한다.
도 3b는 탐색 프로세서 (202) 를 채용하는 라우터의 예시적인 실시예들을 예시하는 블록도 (320) 이다. 라우터는 라인 카드들 (306a 및 306b) 및 프로세서 카드 (303) 에 접속되는 스위칭형 백플레인 (302) 을 포함한다. 프로세서 카드 (303) 는 프로세서 (308) 및 라우팅 테이블 (328) 을 포함하며, 이 라우팅 테이블은 프로세서 카드 (303) 의 메모리 (304) 내에 저장될 수 있다. 각 라인 카드 (306a 및 306b) 는 각기 로컬 버퍼 메모리 (322a 및 322b), 포워딩 테이블 (324a 및 324b) 및 MAC (media access control) 층 (326a 및 326b) 을 포함한다. 탐색 프로세서 (202) 는 라인 카드들 (306a 및 306b) 의 포워딩 테이블 (324a 및 324b) 내에 각기 존재한다.
실례로서, 패킷이 라인 카드 (304a) 의 MAC 층 (326a) 에서 수신된다. MAC 층 (326a) 은 이 패킷을 포워딩 테이블 (324a) 에 전송한다. 이어서, 이 패킷 및 적합한 포워딩 테이블 정보가 로컬 버퍼 메모리 (322a) 내에 저장된다. 이어서, 프로세서 카드 (303) 는 그의 라우팅 테이블 (328) 에 액세스하여서 수신된 패킷을 어느 곳으로 포워딩할지를 결정한다. 이 결정 결과에 기초하여서, 라우터는 적합한 라인 카드 (304b) 를 선택하고 상기 패킷 및 이의 포워딩 정보를 상기 적합한 라인 카드의 로컬 버퍼 메모리 (322b) 내에 저장하고 이 패킷을 네트워크 외부로 포워딩한다.
도 3c는 스위칭형 백플레인 (backplane) 을 포함하는 라우터의 다른 실시예의 블록도 (340) 이다. 스위칭형 백플레인 (302) 은 프로세스 카드 (303), 라인 카드들 (342b 내지 342h) 및 서비스 카드 (342a) 에 접속된다. 프로세서 카드 (303) 는 메모리 (304) 및 프로세서 (308) 를 포함한다. 서비스 카드 (342a) 는 일 타입의 라인 카드 (342a 내지 342h) 이다. 또한, 본 명세서에서 기술된 탐색 프로세서는 서비스 카드 (342a) 내에도 존재할 수 있다.
도 3d는 탐색 프로세서 (202) 를 채용하는 라우터의 예시적인 실시예들을 예시하는 블록도 (360) 이다. 스위칭형 백플레인 (302) 은 프로세스 카드 (303) 및 서비스 카드 (342a) 또는 라인 카드들 (342b 내지 342h) 에 접속된다. 라인 카드들 (342a 및 342b) 은 서비스 카드 (342a) 또는 라인 카드 (342b 내지 342h) 일 수 있다. 라인 카드들 (342a 및 342b) 은 포워딩 테이블 및 대응 정책 모듈 (344a 및 344b) 및 MAC (media access control) 층 (326a 및 326b) 을 포함한다. 탐색 프로세서 (202) 는 라인 카드들 (342a 및 342b) 내에 각기 존재한다. 라인 카드 (342a) 가 네트워크로부터 MAC 층 (346b) 을 통해서 그의 포워딩 테이블 및 대응 정책 모듈 (344a) 에서 패킷을 수신한다. 탐색 프로세서 (202) 가 프로세서 카드 (303) 내의 라우팅 테이블 (328) 에 따른 포워딩 테이블 및 대응 정책 모듈 (344a) 에 따라서 패킷을 처리하고 이 패킷을 적합한 라인 카드 (342b) 로 포워딩하며 이후에 네트워크로 포워딩될 것이다.
도 4a는 탐색 프로세서 (202) 의 예시적인 실시예들의 블록도 (400) 이다. 탐색 프로세서 (202) 는 시리얼라이저 (serializer) / 디시리얼라이저 (deserializer) (SerDes) 인터페이스 (402) 에 접속된다. 일 실시예에서, SerDes 인터페이스 (402) 는 초당 최소 10 Gb 까지의 데이터 전달 속도를 달성할 수 있는 8 개의 전송 레인들 (lanes) 을 포함한다. 탐색 프로세서 (202) 는 SerDes 인터페이스 (402) 에 접속된 4중 (quad) 레인 인터페이스들의 2 개의 세트 (404a 및 404b) 를 포함한다. 4중 레인 인터페이스들의 2 개의 세트 (404a 및 404b) 각각은 각기 제 1 인터레이큰 인터페이스 (406a) 및 제 2 인터레이큰 인터페이스 (406b) 에 접속된다. 이어서, 제 1 인터레이큰 인터페이스 (406a) 및 제 2 인터레이큰 인터페이스 (406b) 는 각기 제 1 룩업 프론트 엔드 (LUF) (408a) 및 제 2 룩업 프론트 엔드 (LUF) (408b) 에 접속된다. 이어서, 제 1 룩업 프론트 엔드 (LUF) (408a) 및 제 2 룩업 프론트 엔드 (LUF) (408b) 는 크로스바 (crossbar) (412) (또한, 지능형 페브릭 (intelligent fabric) 또는 'X-bar' 로서 기술됨) 에 접속된다.
이 크로스바 (412) 는 제 1 수퍼클러스터 (supercluser) (410a) 및 제 2 수퍼클러스터 (supercluser) (410b) 에 접속된다. 각 제 1 수퍼클러스터 (410a) 및 제 2 수퍼클러스터 (410b) 내에는 복수의 탐색 블록들 (412a 내지 412d) 이 존재한다. 각 탐색 블록 (412) 또는 탐색 클러스터는 수신된 패킷으로부터 키 (key) 를 수신하고 이 키를 처리하기 하기 위한 룰들의 세트를 결정 및 로딩하고 이러한 룰들을 사용하여서 실행된 탐색의 결과들을 출력하도록 구성된다. 크로스바 (412) 및 수퍼클러스터들 (410a 및 410b) 은 룩업 클러스터 컴플렉스 (LCC) (414) 의 일부이다.
도 4b는 본 명세서에서 기술되는 탐색 프로세서의 예시적인 실시예의 블록도 (420) 이다. 탐색 프로세서는 LUF 입력 프로세서 (LIP) (424) 및 LUF 출력 프로세서 (LOP) (440) 인 것으로서 도시된 바와 같은 LUF (408) 를 포함한다. 이 탐색 프로세서는 수퍼클러스터들 (410a 및 410b) 을 포함하는 LCC (414) 를 더 포함한다. LIP (424) 는 인터레이큰 입력 (422a) 및 인터레이큰 입력 (422b) 을 수신한다. LIP (424) 는 스케줄러 (428a 및 428b), 패킷 헤더 테이블 (430a 및 430b), 룰 데이터베이스 로케이션 (location) 테이블 (432a 및 432b) 및 그룹 규정 테이블 (426) 을 포함한다. LIP (424) 는 테이블들, CSR들 및 요청들 (434a 및 434b) 을 생성하여서 LCC (414) 에 전송한다. LCC (414) 는 수퍼클러스터들 (410a 및 410b) 및 그 내의 탐색 클러스터들 (미도시) 에 기초하여서 응답들 (436a 및 436b) 을 생성한다. 이어서, LOP (440) 가 이 응답들을 수신하여서 이들을 인터레이큰 출력부 (442a) 및 인터레이큰 출력부 (442b) 를 통해서 출력한다.
본 명세서에서 기술되는 프로세서는 패킷과 매칭하는 하나 이상의 룰들 (예를 들어서, 매칭 룰들) 을 로딩한다. 일반적으로, 패킷은 헤더, 페이로드 및 트레일러와 같은 부분들로 분할될 수 있다. 패킷의 헤더 (또는 패킷 헤더) 는 예를 들어서 필드들로 더 분할될 수 있다. 따라서, 프로세서는 패킷의 하나 이상의 부분들 (또는 필드들) 과 매칭하는 하나 이상의 룰들을 더 찾을 수 있다.
탐색 프로세서는 패킷 또는 패킷들의 부분들과 매칭하는 하나 이상의 룰들을 찾는 "룩업 요청 (lookup request)" 을 실행할 수 있다. 이 룩업 요청은 먼저느 하나 이상의 매칭하는 룰들을 찾을 수 있다.
본 명세서에서 개시된 프로세서의 견지에서 보면, 룩업 요청을 실행하는 바는 (1) 호스트 프로세서로부터 룩업 요청을 수신하는 동작에서 시작된다. 룩업 요청은 패킷 헤더 및 그룹 식별자 (GID) 를 포함한다.
(2) GID가 GDT (global definition/description table:보편적 규정/서술 테이블) 내의 엔트리를 인덱싱한다. 각 GDT는 (a) n 개의 테이블 식별자 (TID), (b) 패킷 헤더 인덱스 (PHIDX) 및 (c) 키 포맷 테이블 인덱스 (KFTIDX) 를 포함한다.
(3) 각 TID가 트리 로케이션 테이블 (TLT:tree location table) 내의 엔트리를 인덱싱한다. 각 TLT 엔트리는 하나 이상의 매칭 룰들을 탐색하는 룩업 엔진 또는 프로세서 코어를 식별한다. 이로써, 각 TID는 어느 룩업 엔진 또는 프로세서 코어가 하나 이상의 매칭 룰들을 탐색할지 및 특정의 하나 이상의 매칭 룰들이 어디에 저장될지를 모두 특정하게 된다.
(4) 또한, 각 TID는 트리 액세스 테이블 (TAT) 내의 엔트리를 인덱싱한다. 각 TAT 엔트리는 룰들의 테이블 또는 트리로 지칭되는 룰들 (또는 룰들을 향하는 포인터들 (pointers)) 의 집합을 저장하는 메모리 내에서의 시작 어드레스 (예를 들어서, 루트 노드 (root node)) 를 제공한다. "룰들의 테이블", "룰들의 트리" "테이블" 또는 "트리"는 본원 전체에서 상호 교환 가능하게 사용된다. 결국, TID는 TAT를 식별하고, TAT는 하나 이상의 매칭 룰들을 찾을 수 있는 룰들의 세트 또는 집합을 식별한다.
(5) GDT 엔트리의 PHIDX는 패킷 헤더 테이블 (PHT) 내의 엔트리를 인덱싱한다. PHT 내의 각 엔트리는 패킷 헤더로부터 n 개의 키들을 추출하는 방식을 프로세서에게 지시한다.
(6) GDT 엔트리의 KFTIDX는 키 포맷 테이블 (KFT) 내의 엔트리를 인덱싱한다. KFT 내의 각 엔트리는 패킷 헤더로부터 추출된 n 개의 키들 각각으로부터 하나 이상의 필드들 (즉, 패킷 헤더의 부분들) 을 추출하도록 하는 인스트럭션들을 제공한다.
(7) 프로세서가 각 TID와 함께 패킷으로부터 추출된 각각의 필드를 사용하여서 룰들의 서브세트 (subset) 를 탐색한다. 각 서브세트는 각 추출된 필드와 매칭할 수도 있는 (possibly) 룰들을 포함한다.
(8) 이어서, 프로세서는 각 서브세트의 각 룰과 추출된 필드를 비교한다. 프로세서는 매칭하는 룰을 응답 시에 또는 룩업 응답 시에 제공한다.
룩업 요청 및 이의 열거된 스테이지들의 상술한 설명은 룩업 요청의 개념을 제공하기 위해서 기술되었다. 이러한 개념들은 다양한 방식으로 구현될 수 있다. 예를 들어서, 본 발명의 예시적인 실시예들에서, 이러한 개념들은 탐색 프로세서에 의해서 구현될 수 있다.
상술한 바와 같이, 탐색 프로세서는 패킷에 대한 룩업 요청을 처리한다. 룩업 요청 처리 시에, 프로세서는 패킷으로부터 헤더 또는 필드를 추출하고 이 추출된 것들이 하나 이상의 룰들에 적용된다. 헤더의 필드는 키로서 지칭될 수 있다.
탐색 프로세서는 룰들의 하나 이상의 트리를 저장한다. 일 실시예에서, 룰들의 트리는 소정의 키에 대해서 룰들의 세트를 좁혀가도록 (narrow down) 프로세서에 의해서 채용되는 메모리 구조이며, 룰은 키 값의 테스트이다. 이 트리는 루트 노드 또는 시작 어드레스를 갖는다. 탐색 프로세서는 TWE (트리 워킹 엔진: tree walk engine) 을 사용하여서 특정 키에 대한 트리를 트라버스한다 (traverse). 결국에는 TWE는 트리 내의 메모리 어드레스를 향하는 포인터에 도달하게 된다. 이 포인터는 룰들의 버킷 (bucket) 을 가리키거나 직접적으로 메모리 내의 룰을 가리키는 포인터일 수 있다.
룰들의 버킷은 룰들을 향하는 포인터들의 세트이다. 포인터가 룰들의 버킷을 가리키면, BWE (버킷 워킹 엔진:bucket walk engine) 이 상기 키 및 버킷에 기초하여서 온 칩 메모리 (on chip memory) 와 같은 메모리 내의 룰들을 향하는 포인터를 결정한다. 메모리 내의 룰들의 그룹은 천크 (chunk) 로 지칭된다. 천크는 순차적으로 어드레스될 수 있는 룰들이거나 다른 방식으로 그룹핑된 (grouped) 룰들일 수 있다. 포인터가 메모리 내의 룰들을 바로 가리키면, 이 포인터는 천크를 직접적으로 가리킬 수 있다.
프로세서가 일단 메모리부터의 룰들의 천크를 로딩하면, 프로세서는 이 키 및 룰들의 천크를 룰 매칭 엔진 (RME) 에 전송한다. 룰 매칭 엔진은 이 키가 상기 천크 내의 룰들과 매칭하는지의 여부를 결정한다. 이어서, 룰 매칭 엔진 및 탐색 프로세서는 선택된 룰 및 매칭 결과를 룩업 요청 응답으로서 전송한다.
도 4c는 보다 세부적으로 2 개의 수퍼클러스터들 (410a 및 410b) 을 포함하는 LCC (Lookup Cluster Complex) (414) 의 블록도이다. 각 수퍼클러스터는 다수의 (예를 들어서, 8 개의) 클러스터들을 포함하며, 각 클러스터 (예를 들어서, 클러스터 (412a) 는 LUE (452a 내지 452h) 또는 LUE (453a 내지 453h) 및 이와 연관된 온 칩 메모리 (454a 내지 454h) 또는 온 칩 메모리 (455a 내지 455h) 및 크로스바 디바이스 (412) 를 포함한다. 예시적인 탐색 프로세서는 패킷 데이터 처리를 위해서 이러한 수퍼클러스터들 (410a 및 410b) 을 2 개 이상 포함할 수 있다.
도 4d는 일 실시예에서의 LCC (414) 에서의 입력 및 출력 데이터를 예시하는 블록도이다. LCC (414) 는 룩업 요청 또는 다른 통신 시에 다음의 같은 정보를 수신하도록 구성될 수 있다:
(1) LFTWCLMSK (Least Full Cluster Mask) 는 소정의 탐색 시에 수퍼클러스터마다 인에이블 (enable) 할 클러스터를 선택하는데 사용되는 비트 마스크이다.
(2) KCLMSK (Key Cluster Mask) 는 LCC 내에서 어느 클러스터가 키 요청 데이터를 수락해야 하는지를 표시한다. KCLMSK는 탐색 시작 시에 참여하지 않을 수 있는 클러스터들이 프로세싱의 마지막 부분을 수행할 수 있게 한다. 수퍼클러스터 내의 Xbar 세그먼트들 (segment) 은 탐색 동작이 클러스터들 간에서 이동할 수 있게 한다. KCLMSK는 잠재적으로 참여할 수 있는 모든 클러스터들을 통지한다.
(3) TID (트리 ID) 및 KFTIDX (키 포맷 인덱스) 는 상기 마스크들과 함께 실행 (트리 또는 룰들의 세트를 나타내는 RCDS를 워킹하는 (walking) 실행) 이 개시되는 트리 루트들을 선택한다.
(4) KID (키 ID) 는 LUF가 인-플라이트 인벤토리 (in-flight inventory) 를 추적하고 요청에 대한 응답 결과를 매칭하도록 유지된다.
(5) KEY는 트리 또는 RCDS를 탐색하기 위해서 헤더 튜플들 (tuples) 로부터 추출된 데이터이다.
탐색 프로세서는 단일 패킷 헤더에 대해 1 회 내지 4 회의 탐색을 개시하는 (launching) 방법을 제공한다. 이러한 요청들 각각은 헤더들 내에서 완전하게 상이하면서 완전하게 독립적인 필드 세트들을 탐색할 수 있다. 이러한 탐색들은 이들이 동일한 패킷 헤더에 대한 것임을 통보하는 것과 함께 매번 독립적인 탐색일 수 있다. 탐색 페브릭 (LCC) 은 이러한 탐색들을 완전하게 상이한 탐색들로 간주하며 (서브-키 (sub-key ID) 가 입력 및 출력된 것 외에) 초기 요청 확장에 대한 어떠한 지식도 가지고 있지 않다.
또한, LCC (414) 는 룩업 요청 또는 다른 통신에 대한 응답 시에 다음의 정보를 출력하도록 구성될 수 있다:
(1) KID는 응답된 키 ID이다.
(2) RuleData는 호스트로의 역 (back) 응답의 일부이다.
(3) RulePriority는 서브-트리 (sub-tree) (또는 서브-RCDS) 응답과 연관되면서 LUF로 하여금 다수의 클러스터 응답 결과로부터 하나의 최상의 응답을 선택하게 하는 메트릭 (metric) 이다. MinRule은 또한 호스트로의 역 응답의 일부이다.
공통 패킷에 대응하는 다수의 응답 메시지들이, 호스트로 반대로 전달될 때에, 공통 ID를 공유하고 클록마다 다수의 응답을 생성하도록 병합되어서 (coalesced) 소망하는 처리량이 달성된다. 이 응답들은 병합될 필요가 없지만 이 응답들이 병합된다면 인터페이스 대역폭이 보다 효율적으로 사용될 수 있다. 예시적인 실시예에서, 1 개 내지 4 개의 응답들이 일 응답 메시지로 병합되고 이로써 최초의 탐색 요청 시의 요청 수와 일치하게 된다.
도 5는 단일 룩업 요청 (550) 으로부터 복수의 키 요청들을 생성하는 바를 예시하는 블록도이다. 패킷 헤더 (552) 를 포함하는 룩업 요청 (550) 은 명령 인터페이스 (command interface) 를 거쳐서 LUF (408) 도달한다. GID (그룹 ID) (554) 필드는 다양한 내부 LUF (408) 테이블을 인덱싱하며 LUF (408) 로 하여금 개별적인 키들 (또는 "서브 키"로 지칭됨) 을 갖는 4 개에 달하는 상이한 키 요청들 (560a 내지 560d) 을 생성할 수 있게 하며, 상기 각 개별 키들은 4 번의 독립적인 탐색을 개시하는데 사용될 수 있다. 예시적인 실례에서, 키 요청 (560a) 의 키는 476 비트에 달하는 비트 폭을 가지며 패킷 헤더 (552) 는 512 비트에 달하는 비트 폭을 가질 수 있다. 이 키들은 매우 작은 입도로 해서 (on a nibble granularity basis) 재구성될 수 있으며 소비자 애플리케이션 층에 의해서 완벽하게 재배열될 수 있다. 예시적인 실시예에서, 탐색 프로세서는 16 개에 달하는 키 재구성 방식을 사전 저장할 수 있다.
LUF (408) 의 서브 키 확장 인덱스 모듈은 패킷 헤더 (552) 가 각각의 키 요청들 (560a 내지 506d) 에 대해서 어떻게 다수의 서브 키들로 분할될 지를 결정한다. 패킷 헤더 (552) 를 다수의 서브 키들로 확장시킨 후에, LUF (408) 의 서브-트리 확장 및 스케줄링 모듈은 각 키 요청들 (560a 내지 506d) 이 탐색 프로세서의 적합한 부분으로 향하게 한다.
서브 키 확장의 다운스트림에서, LUF (408) 스케줄러는 예를 들어서 서브 키마다 다수의 서브 RCDS 워킹 (walk) 을 수행할 클러스터들을 선택한다. 각 서브 키는 결국에는 호스트로 응답되지만 내부적으로는 사용되지 않은 공통 XID (556) 을 공유하는 개별 탐색으로서 간주된다. 따라서, LUF (408) 는 확장되어서 단일 요청에 대해서 4 개의 서브 키들을 추적한다.
도 6은 일 실시예에서의 LUE (Lookup Engine) (650) 및 이와 연관된 OCM (on-chip memory) (690) 의 블록도이다. LUE (650) 는 탐색 프로세서 및 도 4a 내지 도 4d를 참조하여서 상술한 LCC 구성 내에서 구현될 수 있다. 일 실시예에 따라서, 룰 프로세싱 시에, LUE (650) 는 하나 이상의 트리 워킹 엔진들 (TWEs) (660) 의 컴플렉스 (complex), 하나 이상의 버킷 워킹 엔진들 (BWEs) (670) 의 컴플렉스, 및 룰 매칭 엔진들 (RME) (680a 내지 680c) 을 포함한다. 룰 프로세싱이 (이하에서 기술될 바와 같이) 외부 메모리로 확장되는 다른 실시예에서, LUE (650) 는 추가 RME를 구비한 버킷 포스트-프로세서 (bucket post-processor) (BPP) 를 더 포함할 수 있다. LUE (650) 와 연관된 OCM (690) 은 LUE (650) 에 의한 룰 매칭을 위해서 룰들을 저장한다.
예시적인 탐색 프로세서의 동작 시에, 호스트 인터페이스 (도 4a) 는 호스트로부터 룩업 요청을 수신한다. LUF (도 4a에서의 LUF (408a)) 는 룩업 요청을 하나 이상의 키 요청들로 처리하고 여기서 각 키 요청은 키 (도 5) 를 갖는다. LUF은 룩업 요청을 처리할 클러스터들의 세트를 선택함으로써 수퍼클러스터로의 요청들을 스케줄링한다.
도 6으로 돌아가면, 선택된 클러스터의 LUE (650) 구성 요소가 룩업 요청을 처리한다. 여기서, TWE (660) 가 (키 요청 내에 포함됨) 키를 사용하여서 이 키와 매칭할 수도 있는 룰들의 세트를 나타내는 트리를 진행 (walking) 한다. TWE (660) 가 트리의 리프 (leaf) 에 도달하면, TWE (660) 는 룰들의 버킷 (또는 간단히 버킷) 으로 지칭되는 룰들의 서브세트를 BWE (670) 에 전달한다. 용어 "트리" 및 "RCDS (rule complied data structure)" 은 본 명세서에서 상호 교환 가능하게 사용된다. BWE (670) 은 룰들의 버킷을 처리하고 이를 RME (680a 내지 680c) 에 전달한다. RME (680a 내지 680c) 은 TWE (660) 에 의해서 식별된 룰들과 키를 서로 비교한다. 이로써, 탐색 프로세서는 호스트에 대한 응답으로서 "매칭 발견됨" 또는 "매칭이 발견되지 않음" 의 응답을 제공한다.
LUE (650) 로의 룩업 요청을 수신하기 이전에, LUF (예를 들어서, 도 4a의 LUF (408a)) 는 호스트 프로세서로부터 룩업 요청을 수신한다. 이 룩업 요청은 패킷 헤더 및 그룹 식별자 (GID) 를 포함한다. GID는 GDT (보편적 규정/서술 테이블) 내의 엔트리를 인덱싱한다. 각 GDT 엔트리는 (a) n 개의 테이블 식별자 (TID), (b) 패킷 헤더 인덱스 (PHIDX) 및 (c) 키 포맷 테이블 인덱스 (KFTIDX) 를 포함한다. 다음으로, 각 TID는 트리 로케이션 테이블 (TLT:tree location table) 내의 엔트리를 인덱싱한다. 각 TLT 엔트리는 하나 이상의 매칭 룰들을 탐색하는 룩업 엔진 또는 프로세서 코어를 식별한다. 이로써, 각 TID는 어느 룩업 엔진 또는 프로세서 코어가 하나 이상의 매칭 룰들을 탐색할지 및 특정의 하나 이상의 매칭 룰들이 어디에 저장될지를 모두 특정하게 된다.
또한, 각 TID는 LUE (650) 에서의 트리 액세스 테이블 (TAT) (665) 내의 엔트리를 인덱싱한다. (예를 들어서, 메모리 내에 저장된) LUE 상의 룰들의 세트 또는 집합이 2 개 이상 존재하기 때문에, TID는 하나 이상의 매칭 룰들을 탐색하기 위해서 이러한 세트 또는 집합들 중 어느 것을 탐색할지를 식별한다. 각 TAT (665) 엔트리는 룰들의 테이블 또는 트리로 지칭되는 룰들 (또는 룰들을 향하는 포인터들) 의 집합을 저장하는 메모리 내에서의 시작 어드레스 (예를 들어서, 루트 노드) 를 제공한다. ("룰들의 테이블", "룰들의 트리" "테이블" 또는 "트리"는 본원 전체에서 상호 교환 가능하게 사용된다.) 결국, TID는 TAT (665) 를 식별하고, TAT (665) 는 하나 이상의 매칭 룰들을 찾을 수 있는 룰들의 세트 또는 집합을 식별한다.
GDT 엔트리의 PHIDX는 패킷 헤더 테이블 (PHT) 내의 엔트리를 인덱싱한다. PHT 내의 각 엔트리는 패킷 헤더로부터 n 개의 키들을 추출하는 방식을 프로세서에게 지시한다. GDT 엔트리의 KFTIDX는 키 포맷 테이블 (KFT) 내의 엔트리를 인덱싱한다. KFT 내의 각 엔트리는 패킷 헤더로부터 추출된 n 개의 키들 각각으로부터 하나 이상의 필드들 (즉, 패킷 헤더의 부분들) 을 추출하도록 하는 인스트럭션들을 제공한다. 예를 들어서, KFT 엔트리 (또는 키 포맷 타입) 는 100 비트 키 중 어느 비트가 IP 패킷 헤더의 소스 IP 어드레스에 대응하는지를 특정한다.
LUF는 도 5에서 예시적으로 도시된 바와 같이 룩업 요청으로부터의 하나 이상의 키 요청을 어셈블리하고 키 요청을 LUE (650) 에 전송한다.
동작 시에, LUE (650) 는 (도 4a의 LUF (408a) 와 같은) LUF로부터 키 요청 (KRQ) 을 수신한다. KRQ는 키 (KEYDATA), 키 포맷 테이블 인덱스 (KFTIDX) 및 테이블 식별자 (TID) 를 포함하고 도 5를 참조하여서 상술된 키 요청들 (560a 내지 560d) 에 의해서 도시된 바와 같은 룩업과 연관된 추가 데이터를 포함할 수 있다.
KFT로부터 제공되는 (및 KFTIDX에 의해서 인덱싱되는) 인스트럭션들에 따라서 키가 파싱된다 (parsed). 이어서, TWE (660) 는 파싱된 키를 사용하여서 이 파싱된 키와 매칭할 수도 있는 룰들의 세트를 나타내는 트리를 워킹한다. TWE (660) 이 워킹하는 트리는 노드 및 리프 (leaf) 를 포함한다. TWE (660) 는 이 트리의 루트 노드에서 워킹을 시작한다. 루트 노드의 위치는 TAT (665) 로부터 제공된다 (그리고 TID에 의해서 인덱싱된다). TWE (660) 는 트리의 리프에 도달할 때까지 트리를 워킹한다. 트리 내의 각 리프는 룰들의 버킷 (또는 간단하게 버킷) 으로 지칭되는 룰들의 서브세트를 나타낸다. TWE (660) 가 리프에 도달하면, 후속 처리를 위해서 이 대응하는 버킷을 BWE (670) 에 전달한다.
BWE (670) 가 하나 이상의 룰을 포함할 수 있는 버킷을 페치 (fetch) 한다. 편리한 실시예에서, 이 버킷은 메모리 내에 저장된 룰들을 향하는 하나 이상의 포인터들 (또는 어드레스들) 을 포함한다. 이 룰들은 온 칩 메모리 (OCM) 내에 저장될 수 있으며, 이 경우에, BWE (670) 은 OCM 으로부터 룰들을 페치하고 이 룰들을 RME (로컬 (local) RME) 에 전달한다. OBS (OCM bank slotter) (695) 는 해당 액세스 포트들 (p0 내지 p3) 이 다수의 TWE (660), BWE (670) 및 RME (680a 내지 680c) 간에서 점유 및 공유되도록 보장함으로써 OCM (690) 으로의 요청들을 스케줄링할 수 있다.
또한, 룰들은 LUE (650) (및 이 LUE을 포함하는 탐색 프로세서) 외부에 위치한 메모리 내에 저장될 수도 있다. 이 경우에, BWE (670) 는 외부 메모리부터 룰들을 페치하여서 이하에서 기술될 "룰 확장"으로 지칭되는 절차에서 상기 룰들을 BPP (bucket post processor) (및 이와 연관된 RME) 에 전송한다.
도 6으로 돌아가면, KTFIDX는 룰 포맷 테이블 (RFT) (667) 내의 엔트리를 인덱싱한다. RFT (667) 내의 각 엔트리는 룰으로부터 하나 이상의 필드를 추출하기 위해서 페치된 룰의 비트를 파싱하기 위한 인스트럭션들을 제공한다. 이 룰은 RTF (667) 로부터 제공되는 (그리고 KTFIDX에 의해서 인덱싱되는) 인스트럭션들에 따라서 파싱된다. 이어서, RME (680a 내지 680c) 는 이 파싱된 룰을 파싱된 키를 서로 비교하여서 매칭 여부를 발견한다. 이로써, RME는 서브-트리 응답 (STRSP) 로 지칭되는 응답으로서 "매칭 발견됨" 또는 "매칭 발견되지 않음" 의 응답을 LUF에 전송한다.
일 실시예에 따라서, 각 수퍼클러스터는 분산된 온 칩 메모리 (OCM) 및 n HW-지원 쓰레드 엔진 (n HW-assist thread engine) 을 포함하며, 여기서 'n'은 각 쓰레드 반복의 레이턴시 (latency) 에 의해서 결정된다 (n = 10 사이클). 각 클러스터의 성능을 최대화시키기 위해서, 최소 쓰레드 반복 레이턴시 = 'n' 사이클이며 각 HW 쓰레드가 단일 사이클 OCM 액세스를 요구하면, 'n' 쓰레드 엔진들은 예를 들어서 매 사이클마다 최대로 파이프라인된 (pipelined) OCM 액세스들을 허용하도록 단일 포트된 (ported) SRAM의 사용을 시분할 멀티플렉싱 (TDM) 할 수 있다.
예시적인 실시예들에서, 각 클러스터의 LUE는 10 개의 트리 워킹 엔진 (TWE), 10 개의 버킷 워킹 엔진 (BWE) 및 3 개의 룰 매칭 엔진 (RME) 을 포함하며, 이들은 입력되는 호스트 룩업/키 요청들을 처리하도록 사용된다. 각 TWE/BWE/RME 엔진은 그 자신의 HW 컨텍스트 상태 (또는 HW 쓰레드) 를 포함하며, 이로써 각 키 요청이 처리될 때에 각 키 요청의 상태를 계속 추적할 수 있다. 각 클러스터의 LUE에서, 10 사이클의 TWE 최소 쓰레드 반복 레이턴스는 10 개에 달하는 활성 TWE 쓰레드들이 간섭 없이 OCM 단일-포트된 SRAM을 시분할 멀티플렉싱할 수 있게 한다 (즉, OCM이 매 사이클마다 최대로 파이프라인된 액세스를 가질 수 있다).
도 6을 참조하면, LUE(650)의 보다 상세한 예시적인 동작에서, 새로운 호스트 요청들 및 키 요청들이 KRQ (key request bust) 를 통해서 LUF로부터 수신된다. 각 LUE (650) 는 16 개에 달하는 계류 중인 KRQ 요청들 (또는 키 또는 호스트 요청들) 을 수신하도록 구성될 수 있다. 호스트 요청 (CSR/Table/OCM에 대한 호스트 R/W 액세스) 은 호스트 요청 (HRF) FIFO에 들어가며 호스트 기록 데이터가 공통 기록 데이터 버퍼 (WDB) 내에 기록된다. 호스트 요청 (R/W) 은 각 LUE (650) 클러스터에 있어서 "순서대로 (in order)" 처리될 수 있다. 호스트 응답들이 HRQ/HRD FIFO로 응답되며 여기서 호스트 응답들은 중앙 리소스 블록 (CRB) 을 통해서 STRSP 버스를 통해서 전달될 것을 대기하며 결국에는 인터레이큰 패킷을 통해서 호스트로 응답된다.
새로운 키 요청이 키 요청 FIFO (KRF) 에 들어가며 이들과 연관된 키 데이터가 공통 기록 데이터 버퍼 (WDB) 내에 기록된다. 이동된 트리 워킹 요청들 (TWMIGs) 은 소스 LUE (650) 클러스터로부터 XBR (412) 버스를 통해서 수신지 LUE 클러스터에 전달된다. 새로운 TWMIG들은 TMQ/TMD로 인큐딩되며 (enqueued) 처리되기 위해서 대기 (pending) TWE (660) 를 기다린다.
새로운 키 요청들 (KRF) 및 이동된 트리 요청들 (TMQ) 은 트리 ID (TID) 를 사용하여서 TIC/TAT (665) 액세스를 위해서 조정한다 (arbitrate). TIC/TAT (665) 구조는 TEW들 (660) 중 할당된 하나에서의 서브-트리 워킹 동안에 사용된 트리 액세스 테이블 정보를 포함한다. 새로운 키 요청에 대해서, 소프트웨어가 로딩한 룰 포맷 테이블 정보를 획득하기 위해서 RIC/RFT (667) 가 또한 액세스된다. 트리 이동 요청은 RIC/RFT 테이블을 재페치 (re-fetch) 하지 않을 수 있지만 대신에 RIC/RFT 정보를 소스 클러스터로부터 이 이동 요청 자체 내에서 반송할 수 있다. 또한, 트리 이동 요청을 위한 키 데이터가 트리 이동 데이터 (TMD) 내에 저장될 수 있다.
일단 TAT (665) 및/또는 RFT (667) 정보가 페치되면, 새로운 키 요청이 하나의 TWE (660) (TWE들 중 하나) 에 할당된다. (HW 병렬성을 구현하여서) 새로운 키 요청 탐색을 신속하게 수행하기 위해서, 이 키 요청은 8 개에 달하는 고유 서브-트리 워크 (walks) 로 (소프트웨어 동작에 의해서) 파티셔닝될 수 있으며, 각 서브-트리 워킹 쓰레드가 개별 TWE (660) 에 할당된다. TW 이동 요청은 언제나 오직 하나의 TWE에 할당될 수 있다.
일단 TWE의 서브-트리 워킹이 리프 노드 (leaf node) 를 검출하였으면, 프로세싱을 위한 콘트롤 (control) 이 버킷 워킹 엔진 (BWE) (670) 풀로 전달된다. BWE들 (670) 은 이 리프 노드로부터의 버킷 정보 서술자 (bucket info descriptor) 를 사용하여서 버킷 엔트리들을 페치한다. 이어서, 버킷 엔트리들 (BEs) 이 룰 워킹 엔진들 (RWEs) (680a 내지 680c) 에 의해서 처리된다. 룰 워킹 엔진들 (RWEs) (680a 내지 680c) 은 룰 천크들 (RulChkPtr) 을 향하는 포인터들을 포함하는 버킷 엔트리들 (BEs) 을 처리한다. 룰 워킹 엔진들 (RWEs) (680a 내지 680c) 은 룰 데이터를 페치하여서 룰 매칭 엔진들 (RMEs) (680a 내지 680c) 의 대기 풀 (pending pool) 에 전달한다. 룰 매칭 엔진들 (RMEs) (680a 내지 680c) 은 이 페치된 OCM 룰 천크 데이터 및 이에 대응하는 (RTF (667) 로부터의) 룰 포맷 데이터를 사용하여서 각 버킷 엔트리 (BE) 에 의해서 특정된 룰들의 천크를 처리한다. 룰 워킹 엔진들 (RWEs) (680a 내지 680c) 은 전체 버킷 내의 모든 버킷 엔트리 (BE) 에 대하여 각 룰 천크에 대한 부분적 RME 매칭 결과들을 수집할 것이다. 일단 매칭 여부에 대한 결과가 획득되면, 룩업 응답 (LURSP) 이 LRQ/LRD로 역으로 전달되며 다시 역으로 STRSP 버스를 통해서 룩업 프론트 엔드 (LUF) 로 전달된다.
룰 매칭 동작 동안의 임의의 시간에, BWE (670) 는 원격 버킷 엔트리 (BE) 요청을 하거나 룰 워킹 엔진들 (RWEs) (680a 내지 680c) 은 원격 출력 큐 (ROQ) 를 통해서 다른 클러스터에 원격 룰 천크 요청을 할 수 있다. OBS (OCM Bank Select) (659) 아비터 (arbiter) 가 모든 트리/버킷 및 룰 데이터 구조들을 포함하는 공통 OCM으로의 모든 액세스들을 책임진다. 원격 클러스터는 XBR (412) 를 통해서 원격 OCM 요청을 함으로써 다른 클러스터의 OCM을 액세스할 수 있으며 이 원격 OCM 요청은 원격 입력 큐 (RIQ) 로 인큐잉된다. TWE 풀, BWE 풀, RIQ 및 HRF 모두는 공통 OCM 내에서 요청을 생성할 수 있으며, 이 공통 OCM은 전체 OCM 레이턴시를 최소화하고 OCM 대역폭을 최대화하여서 (뱅크 충돌 회피를 위하여) 최적의 전체적인 탐색 성능을 얻기 위하여 복잡한 동적 중재 방식을 갖는다.
상술한 바와 같이, 룰들은 온 칩 메모리 (OCM) 상에 상주할 수 있다. 이러한 경우에, BWE (670) 에 의해서 채용되는 (engaged) 룰 매칭 엔진들 (RMEs) (680a 내지 680c) 은 BWE (670) 와 동일한 LUE (650) 의 일부이다. 이로써, BWE (670) 은 "로컬 (local)" 룰 매칭 엔진들 (RMEs) (680a 내지 680c) 을 채용한다고 말할 수 있다. 룰들은 프로세서 외부에 있는, 즉 오프 칩인 메모리 상에 상주할 수도 있다. 이러한 경우는 외부 메모리로 확장된 룰 프로세싱 또는 "룰 확장"으로서 지칭될 수 있는 경우이며, 이 경우에, BWE (670) 은 그의 로컬 (local) 룰 매칭 엔진들 (RMEs) (680a 내지 680c) 을 채용하지 않는다. 대신에, BWE (670) 은 "천크"로 지칭되는 룰들의 버킷의 일부를 판독하도록 하는 요청 메시지를 메모리 제어기에 전송할 수 있다. 또한, BWE (670) 은 "측대역 (sideband)" 메시지를 BPP에게 전송하여서 (소정의 키와 연관된) 천크가 외부 메모리로부터 입력될 것을 예상하라는 바를 BPP에게 알린다.
BPP는 외부 메모리로부터 수신된 룰들의 천크를 처리하기 시작한다. 이 처리의 일부로서, BPP가 매칭을 발견하였으면, BPP은 룩업 응답으로 지칭되는 응답 (또한 서브-트리 응답으로도 지칭됨) 을 LUF에 전송한다. 또한, BPP은 BPP가 천크 처리를 완료하였음을 알리는 메시지를 LUE에게 보내고 이로써 LUE은 자유롭게 다른 요청 상으로 이동할 수 있다.
BPP가 매칭을 발견하지 못하였고 천크 처리가 완료되었으면, BPP는 BPP가 천크 처리를 완료하였으며 처리할 다른 천크를 자신에게 전송하라는 메시지를 LUE에게 보낸다. 이어서, LUE는 MAC 및 MBC를 통해서 룰들의 버킷의 다음 천크를 BPP 등에 전송할 것을 알리는 "측대역" 메시지를 전송하며 이러한 바가 계속된다.
룰들의 버킷의 최종 천크에 대해서, LUE (650) 은 이 천크가 BPP에 의해서 처리될 마지막 천크임을 알리는 "측대역" 메시지를 상기 BPP에 전송한다. LUE는 전체 버킷의 크기를 알고 있기 때문에 그 천크가 마지막 천크임을 알고 있다. 최종 천크의 경우에, BPP가 매칭을 발견하지 못하였으면, BPP는 이 버킷 처리가 완료되었음을 알리는 "매칭 없음" 응답을 LUF에 전송한다. 이어서, LUE (650) 는 이 컨텍스트 (즉, 수행된 작업의 세부 사항들) 로부터 분리되어서 다른 요청으로 진행한다.
다른 실시예들에서, 다수의 클러스터들이 동일한 RCDS (rule complied data structure) 또는 서브-RCDS를 포함하도록 구성될 수 있다. 이러한 구성에서, LUF는 가장 분주하지 않는 클러스터가 이 탐색을 수행하도록 선택함으로서 해당 작업의 부하의 균형을 유지한다.
도 7은 메모리 구조 내로 룰들을 로딩하는 컴파일러의 예시적인 실시예를 나타내는 블록도 (700) 이다. 소프트웨어 컴파일러 (704) 는 룰 세트 (702) 를 수신한다. 소프트웨어 컴파일러 (704) 는 컴파일링된 룰들 (710) 의 바이너리 포맷 (binary format) 을 생성한다. 이 컴파일링된 룰들 (710) 의 바이너리 포맷 (binary format) 은 트리 (712), 버킷들 (714) 및 룰들 (716) 을 포함한다. 트리 (712) 는 노드들 (711a 내지 711d), 리프 노드들 (713s 내지 713b) 및 루트 노드 (732) 를 포함한다. 트리 (712) 의 리프 노드들 (713s 내지 713b) 각각은 버킷들 (714) 의 세트 중 일 버킷을 가리킨다. 각 버킷 내에서, 룰 또는 천크 포인터들 (718) 을 포함하는 버킷 엔트리들이 존재한다. 룰들 (716) 은 룰들의 천크들 (720) 을 포함한다. (룰들의) 천크 (720) 는 룰들의 순차적 그룹 또는 메모리 전체에 걸쳐서 산포되어서 복수의 포인터에 의해서 구성되거나 (예를 들어서, 해시 함수를 사용하여서) 상기 산포된 천크 (720) 를 재조합함으로써 구성되는 룰들의 그룹일 수 있다.
도 8은 탐색 블록 또는 탐색 클러스터 (410) 의 예시적인 실시예를 예시하는 블록도 (500) 이다. 탐색 클러스터 (410) 는 온 칩 메모리 (OCM) (508), 트리 워킹 엔진 (TWE) (504), 버킷 워킹 엔진 (BWE) (514) 및 복수의 룰 매칭 엔진 (RME) (520a 내지 520c) 를 포함한다. OCM (508) 은 트리 데이터 구조, 버킷 저장 데이터 구조, 및 천크 및/또는 룰 데이터 구조를 저장한다.
탐색 클러스터 (410) 는 LUF (408) (도 4a) 로부터 키 (502) 를 TWE (504) 에서 수신한다. TWE (504) 는 OCM (508) 로의 복수의 트리 입출력 (I/O) 액세스를 발행 및 수신할 수 있다. 키 (502) 에 기초하여서, TWE (504) 는 루트 노드에서 가능한 리프 노드까지 트리를 워킹한다. TWE (504) 가 적합한 리프 도드를 발견하지 못하였으면, TWE (504) 는 무매칭 (매칭 없음) (512) 을 발행한다. TWE (504) 가 적합한 리프 도드를 발견하였으면, 이 피드 노드는 버킷을 향하는 포인터 (510) 를 표시한다. TWE (504) 는 이 버킷을 향하는 포인터 (510) 를 BWE (514) 에 제공한다. OCM (508) 으로의 버킷 입출력 액세스 (516) 를 발행함으로써 BWE (514) 는 OCM (508) 를 액세스한다. 버킷 입출력 액세스 (516) 는 BWE (514) 로의 천크를 향하는 적어도 하나의 포인터 (518) 를 검색한다. BWE (514) 는 이 천크를 향하는 포인터 (518) 를 다수의 RME (520a 내지 520c) 중 하나에 제공한다. 다수의 RME (520a 내지 520c) 중 선택된 하나는 이 키 (502) 를 수신한다. 다수의 RME (520a 내지 520c) 각각은 OCM 내의 천크로부터 적합한 룰을 다운로드하여서 키 (502) 를 분석하기 위해서 천크를 향하는 포인터 (518) 를 사용하여서 OCM (508) 로의 룰 및/또는 천크 입출력 액세스 (524) 를 발행하도록 구성된다. 이어서, RME (520a 내지 520c) 는 OCM (508) 으로부터 액세스된 룰들을 사용하여서 키를 분석하고 OCM (508) 내에 저장된 트리 및 버킷에 의해서 표시된 룰 또는 천크와 상기 키가 매칭하는지의 여부에 따라서 매칭이 있다는 응답 또는 매칭이 없다는 응답 (522a 내지 522c) 를 발행한다.
도 9a는 패킷 내의 소정의 키에 대하여 룰들을 로딩하는데 사용된 메모리 구조의 예시적인 실례를 나타내는 블록도 (730) 이다. TEW (예를 들어서, 도 6의 TWE (660)) 가 특정 키에 대한 트리 (712) 를 워킹하기 시작하는데, 이 트리의 루트 노드 (732) 에서 시작하여서 트리 경로 (734) 를 따라서 워킹한다. TWE는 자신이 수신한 각 키에 대하여 트리 경로 (734) 를 워킹하여서 트리 (712) 를 통과한다. 결국, 트리 경로 (734) 는 리프 노드 (736) 에 도달하며, 이 리프 노드는 널 (null) 또는 무매칭 (nonmatch) 을 포함할 수 있으며, 이러한 경우에는, TWE는 무매칭을 응답으로 보낸다. 또한 리프 노드는 버킷 (738) 을 향하는 포인터를 포함할 수 있으며, 이 경우에는 TWE는 버킷 (738) 을 향하는 포인터를 BWE에 전송하며, 이 BWE는 버킷들의 세트 (714) 로부터 특정 버킷을 로딩한다. 이 특정 버킷은 룰들 또는 룰들의 천크를 향하는 적어도 하나의 포인터 (718) 를 포함할 수 있다. BWE는 룰 (746) 를 향하는 포인터 (718) 에 기초하여서 룰들을 OCM으로부터 탐색 클러스터 내의 RME들 중 하나로 로딩한다.
도 9b는 키를 수신하고 메모리 구조로부터 룰들의 세트를 로딩하는 TWE에 의해서 채용되는 메모리 구조의 예시적인 실시예를 나타내는 도면 (740) 이며, 여기서 룰들은 온 칩 메모리 내에 저장되기 보다는 외부 메모리에 저장된다. 다시 한번, TWE는 키를 수신하고 루프 노드 (732) 에서 시작하여서 리프 노드 (736) 에 도달할 때까지 트리 경로 (734) 를 따라서 트리 (712) 를 워킹하며, 상기 리프 노드는 널 값 (null value) 을 가질 수 있는데 이 경우에는 TWE는 무매칭을 응답으로 보내며, 또한 리프 노드는 룰들로의 포인터들 (742) 을 저장할 수 있다. 이 외부 메모리 실시예에서, 리프 노드 (736) 가 외부 메모리 내의 룰들 및/또는 천크들 (746) 을 바로 가리킬 수 있다. 룰들이 OCM 내에 저장된 경우에는, 리프 노드 (736) 는 버킷들을 가리킬 수 있으며 이어서 버킷들이 룰 및/또는 천크를 가리킨다. 그러나, 룰들이 외부 메모리 내에 저장되면, TWE는 룰들을 향하는 포인터 (742) 에 기초하여서 외부 메모리로부터 룰들을 로딩하여서 이 룰들 (746) 을 BPP (bucket post processor) 로 전송한다. BPP가 채용되어서 외부 메모리로부터의 룰들 (746) 을 처리한다. 동일한 트리 구조가 외부 메모리 내의 버킷 또는 룰을 가리킬 수 있다. 예를 들어서, 각 리프 노드 (736) 는 메모리 내의 어드레스 (또는 널) 를 가리킬 수 있다. 시스템은 어드레스가 외부 메모리 내의 룰을 가리키는지 아니면 OCM 내의 버킷을 가리키는지의 여부를 판정할 수 있다. 이러한 판정 결과에 기초하여서, 시스템은 적합한 메모리를 액세스하며 동일한 트리가 외부 메모리 및 OCM 양자에 대해서 일 실시예에서 동시에 사용될 수 있다. 그러나, 탐색 프로세서는 오직 외부 메모리 실시예만을 사용하거나 오직 OCM 실시예만을 사용하도록 구성될 수도 있다.
도 10a는 탐색 프로세서에 의해서 채용되는 예시적인 프로세스를 설명하는 흐름도 (600) 이다. 먼저, 탐색 프로세서는 수신된 패킷의 헤더 구역으로부터 키를 수신한다 (602). 이어서, 탐색 프로세서는 TWE를 사용하여서 트리 데이터 구조를 워킹하여서 트리의 리프 노드 상의 룰 또는 버킷을 향하는 포인터를 찾는다 (604). 루프 노드가 존재하지 않거나 널 상태에 있으면 이 수신된 키에 대해서 무매칭이 자동적으로 생성된다.
이어서, 탐색 프로세서의 탐색 클러스터가 널 상태가 아닌 리프 노드를 탐색함으로써 룰 또는 버킷이 트리 내에 존재하는지의 여부를 판정한다 (606). 가령, 그렇지 않으면, 즉 루프 노드가 존재하지 않거나 널 상태에 있으면 탐색 클러스터는 무매칭을 응답으로 보낸다 (608). 리프 노드가 룰 또는 버킷을 저장하면, 탐색 클러스터는 리프 노드가 룰을 가리키는지 버킷을 가리키는지를 판정한다 (610). 리프 노드가 룰을 바로 가리키면, 탐색 클러스터는 이 룰을 외부 메모리로부터 로딩한다 (612). 이어서, 시스템은 이 룰을 BPP에 제공한다 (614). 시스템은 (i) BPP가 리프 노드로부터의 포인터를 사용하여서 외부 메모리로부터 룰을 가져오거나 (pulling) (ii) 탐색 클러스터 내의 네비게이션 유닛이 요청된 메모리 어드레스를 BPP에 전송하라는 명령을 외부 메모리에 전송함으로써, 룰을 BPP에 제공할 수 있다.
BPP는 룰들의 천크를 처리하고 룰들을 키와 비교하도록 구성된 RME와 유사하지만 BPP는 외부 메모리로부터의 룰들을 처리하도록 더 구성된다. 외부 메모리로부터 룰들을 로딩하는 동작들 (610,612,614) 은 탐색 프로세서 및 이에 대응하는 탐색 클러스터들에 대해서 선택 사양적인 동작이다. 탐색 프로세서는 모든 룰들 및/또는 룰들의 천크를 OCM 상에 저장할 수 있다. 따라서, 트리 데이터 구조는 바로 룰들을 향하는 포인터 대신에 버킷을 향하는 포인터를 저장할 수 있다. 룰들 및/또는 룰들의 천크들이 오직 OCM에만 저장된 실시예들에서도, 리프 노드는 버킷을 사용하지 않고서 OCM 내의 룰들 및/또는 룰들의 천크를 직접적으로 바로 가리킬 수 있다.
동작 (610)에서 리프 노드가 버킷을 가리키면 탐색 프로세서는 버킷 내에 저장된 포인터들을 로딩한다 (616). 이어서, 탐색 프로세서는 버킷으로부터의 포인터들이 가리키고 있는 OCM의 위치에 저장된 룰들을 로딩한다. 이어서, 시스템은 이 룰(들)을 RME들 (620) 에 제공한다.
도 10b는 BPP가 룰들의 세트를 사용하여서 키에 대한 탐색을 수행하기 위한 예시적인 프로세스를 설명하는 흐름도 (800) 이다. 먼저, 패킷 프로세싱 엔진이 BPP에 키 (802) 를 전송한다. BWE들은 외부 메모리 (EM) 으로부터 룰을 수신할 것을 예상하라는 메시지를 BPP에 전송한다 (804). 이어서, BWE는 룰 또는 룰들의 블록을 BPP에 전송한다 (806). 이어서, BPP는 보다 많은 룰들이 처리될 필요가 있는지의 여부를 판정한다 (808). 어떠한 추가 룰도 처리될 필요가 없으면, BPP은 처리된 룰들의 매칭 또는 무매칭을 응답으로 보낸다 (810). 추가 룰들이 처리될 필요가 있다면, 가령, 천크의 오직 일부가 처리되다면, BPP는 규칙들의 다음 블록들을 요청한다 (812). 이어서, BWE는 BPP로 전송될 규칙들의 다음 블록들을 요청한다 (814). 이어서, BWE는 규칙들의 다음 블록을 BPP에 전송한다 (816). 다시 한번, BPP는 보다 많은 룰들이 처리될 필요가 있는지의 여부를 판정한다 (808). 그렇지 않으면, BPP은 처리된 룰들의 매칭 또는 무매칭을 응답으로 보낸다 (810). 그러나, 추가 룰들이 처리될 필요가 있다면, BPP는 규칙들의 다음 블록들을 요청한다 (812).
도 4a 내지 도 4b로 돌아가면, 룩업 프론트 엔드 (LUF) (408) 는 룩업 클러스터 컴플렉스 (LCC) (414) 로의 인터페이스를 제공하며 룩업 요청과 연관된 몇몇 동작들을 수행한다. LUF (408) 은 호스트로부터의 룩업 요청을 수신하고 LCC (414) 로 전송하기 위해서 이 룩업 요청들을 처리하고 LCC (414) 로부터 수신된 응답을 역으로 보낸다 (returned). 또한, LUF (408) 은 호스트로부터 처리된 판독/기록 요청들 (또는 명령들) 수신할 수 있다. 이어서, 응답들이 LUF (408) 로부터 호스트에 전송된다.
자신의 구성 요소인 LUF 입력 프로세서 (LIP) (424) 및 LUF 출력 프로세서 (LOP) (446) 를 포함하는 LUF (408) 의 아키텍처 및 파라미터가 도 11 내지 도 22b를 참조하여서 이하에서 더 상세하게 기술될 것이다. LUF의 일반적인 기능들은 각 클러스터에서 계류 중인 요청들의 개수를 추적하는 바를 포함한다. 이러한 추적 동작은 룩업 클러스터들로의 룩업 요청들의 할당 상태를 알리는 데 사용되는데, 그 이유는 모든 "m" 개의 가능한 클러스터들에 걸쳐서 가장 작의 개수의 계류중인 클러스터 요청을 갖는 클러스터를 선택함으로써 (m 개 중) "가장 덜 차 있는 (least full)" 클러스터 한 개가 결정될 수 있기 때문이다. (추적되는 클러스터 요청들은 KeyReq, HostOCMReq, HostTABReq 및 HostCSRReq을 포함한다.) 또한, LUF (408) 은 동일한 룰 테이블 이미지를 두 (both) 슈퍼클러스터들 (즉, 슈퍼클러스터 리던던시) 상에 로딩함으로써 슈퍼클러스터 부하 밸런싱 (load balancing) 을 사용하는 것을 선택할 수 있다. 이로써, 각 새로운 룩업 요청은 "가장 덜 차 있는" 슈퍼클러스터로 프로그램가능하게 향해질 수 있다.
몇몇 패킷 분류 애플리케이션에서, LUF (408) 은 도 2의 탐색 프로세서 (202) 와 같은 프로세서 또는 프로세서의 일부일 수 있다. 다른 패킷 분류 애플리케이션에서, LUF는 다른 노드들의 네트워크 내의 스위치 또는 라우터와 같은 물리적 네트워크 노드 (또는 장치) 일 수 있다. 또 다른 패킷 분류 애플리케이션에서, LUF는 해당 노드의 구성 요소, 모듈, 블레이드, 또는 카드와 같은 물리적 네트워크 노드 (또는 장치) 의 일부일 수 있다. 또 다른 패킷 분류 애플리케이션에서, LUF (408) 은 소프트웨어 및 하드웨어 구성 요소 또는 블록을 가질 수 있다.
도 11은 예시적인 LUF 입력 프로세서 (LIP) (424) 의 블록도이다. LIP (424) 는 인터레이큰 또는 12C 인터페이스 (485a-d) 로부터 룩업 요청들 (LUREQs) 및 호스트 명령들을 수신한다. LIP (424) 는 이 요청들 및 명령들을 파싱하여서 이들을 룩업 클러스터들, DDR (double data rate) 메모리, BPP 또는 보편적 CSR (control status register) 및 테이블들과 같은 내부 리소스들로 스케줄링한다.
LIP (424) 는 인터레이큰 또는 12C 인터페이스 (485a-d) 로부터 상술한 룩업 요청들 (LUREQs) 및 호스트 명령들을 수신한 하나 이상의 분배자 (460a-b) 를 포함한다. 이 분배자들 (460a-b) 은 각 수퍼클러스터 내에서 또는 수퍼클러스터들 간에 부하 밸런싱을 제공할 수 있다. 이어서, 분배자들 (460a-b) 은 룩업 클러스터 (예를 들어서, 도 4b의 LCC (414)) 로 출력하기 위해서 룩업 요청들을 스케줄러들 (428a-b) 에 포워딩한다.
분배자들 (460a-b) 및 스케줄러들 (428a-b) 은 함께 부하 밸런싱, 클러스터 할당, 키 추출, 키 요청 생성, 키 요청들을 서브-트리 요청들로 스플리팅 (splitting), 및 키 요청들 및 서브-트리 요청들의 룩업 클러스터들로의 출력을 스케줄링하는 기능과 같은 몇몇 기능들을 제공할 수 있다. 이러한 기능들을 실현하고 해당 룩업 클러스터에서 탐색들이 수행되는 방식을 제어하기 위해서, LIP (424) 은 복수의 테이블들을 채용한다. GDT (그룹 규정/서술 테이블) (426) 은 다른 테이블들에 대한 인덱스를 제공한다. PHT (패킷 해더 테이블) (433a-b) 은 패킷을 파싱하는 방식에 대한 인스트럭션들을 제공한다. 트리 로케이션 테이블 (TLT) (430a-b) 은 어느 클러스터가 탐색을 수행해야 하는지의 정보를 제공한다.
트리 로케이션 테이블 (TLT) (430a-b) 은 어느 (n 개 중의) m 개의 가능한 클러스터가 특정 트리 ID (룰들의 세트) 를 따를 (honoring) 수 있는지에 대한 정보를 포함한다. 호스트 룩업 요청이 이 특정 트리 ID에 대한 것이면, LUF의 가장 덜 차 있는 클러스터 하드웨어 로직은 키 요청을 서비스할 (m 개 클러스터들 중) "가장 덜 차 있는" 클러스터 한 개를 선택한다. 이로써, LUF는 가능한 클러스터들 간에 호스트 룩업 요청들을 균등하게 부하 밸런싱하여서 최소의 전체적 룩업 레이턴시를 제공하며 이는 프로세스의 전체 룩업 레이트를 증가시킬 것이다.
스케줄러들 (428a-b) 각각은 키들을 갖는 4 개 까지의 키 요청들 (KRQ) 을 생성하도록 각 룩업 요청 (LUREQ) 을 처리한다. 이러한 키 추출 실례는 도 5를 참조하여서 상술되었으며 또한 이하에서 도 14를 참조하여서 더욱 상세하게 기술될 것이다. (키들을 갖는) 키 요청들은 LCC에 처리되기 위해서 LCC로 스케줄링 및 전송된다. 다른 실시예들에서, 하나 이상의 클러스터에서 트리가 복수의 "서브-트리"로 분할되는 경우에, 키 요청들은 복수의 "서브-트리 요청들"로 "스플리트 (split)" 될 수 있으며, 각 서브-트리 요청은 특정 서브-트리와 연관된다. 이어서, 서브-트리들은 LCC 내에서 상이한 클러스터들과 연관될 수 있거나 공통 클러스터와 연관될 수 있다. 이로써, 일 트리에 의해서 특정된 룰들의 서브세트가 일 서브-트리에 의해서 특정되는 룰들의 보다 작은 서브세트로 더 좁혀질 수 있으며 이로써 탐색 정밀도를 증가시킨다.
키 요청 생성 이후에, 스케줄러 (428a-b) 는 LIP (424) 외부로 KRQ들을 스케줄링한다. 스케줄러 (428a-b) 는 (도 12를 참조하여서 이하에서 기술될) 페이로드 헤더 추출자 (PHE) 및 (도 15를 참조하여서 이하에서 기술될) 스케줄러 출력 관리자를 포함한다.
룰 테이블 이미지를 증분적으로 (incrementally) 업데이트하는데 사용되는 호스트 판독/기록 요청들에 대해 호스트 룩업 요청들을 오더링 (ordering) 하는 것을 지원하기 위해서, 특별화된 HW 메카니즘들이 스케줄러 (428a-b) 에서 사용될 수 있다. 호스트 판독/기록 요청들 (호스트 룩업 요청을 제외함) 은 룩업/키 요청 프로세스 동안에 요구되는 CSR, TABLE, OCM 및 DDR RCDS 이미지 데이터로의 액세스를 포함한다.
모든 호스트 R/W 명령들에 대해서, 호스트 소프트웨어 SW은 제어 헤더 내에 포함된 3 개의 "오더링 플래그"를 사용할 수 있다.
(1) HOST RSP - 설정되었을 때에, 탐색 프로세서는 명령들이 완료될 때에 호스트로 명시적인 명령 응답을 전송할 것이다. 이는 판독 명령에 대해서는 어떠한 영향도 주지 않지만, 호스트 기록 요청 (HOST_RSP=l 플래그 설정) 에 대해서는, 호스트 요청 패킷 내에서 전송되는 바와 동일한 HXID (호스트 트랜잭션 ID) 를 포함할 호스트 기록 응답 패킷이 호스트 CPU로 역으로 전달될 것이다.
(2) LOCAL RSP - 설정되었을 때에, 탐색 프로세서는 호스트 R/W 요청들이 버스 순서 (bus order) 로 실행되는 것을 보장할 것이다. 달리 말하면, 호스트 기록 요청 (트리 업데이트) 이 임의의 후속 호스트 룩업 요청들이 발행되기 이전에 '완료' 또는 실행되도록 강제된다. (RAW 충돌 회피가 요구되는 경우 = 기록 후 룩업 판독 HW 오더링 (Lookup Read after Write HW ordering) 이 유지되어야 하는 경우에 사용된다.)
(3) ATOMIC - 설정될 시에, NSP HW는 모든 이전에 발행된 호스트 룩업 요청들 (동일한 TID = 트리 ID를 가짐) 이 호스트 R/W 요청이 발행되기 이전에 완료되는 것을 보장할 것이다. 이러한 HW는 (동일한 트리 ID에 대한) 증분적 SW 업데이트에 대한 호스트 기록 요청들이 조기의 호스트 룩업 요청들에 대해서 무순서로 (out of order) 실행되지 않는 것을 보장하는데 사용된다. (동일한 TID로의 WAR 충돌 회피가 요구되는 경우 = 룩업 판독 후 기록 HW 오더링이 유지되어야 하는 경우에 사용된다.) 특정 HW가 리트리 큐 (retry queue) 를 검출/배출해야 하며 이어서 동일한 TID (트리 ID) 를 사용하는 모든 이전의 호스트 룩업 요청들이 실행 또는 완료될 때까지 그러한 인스트럭션의 스케줄링을 차단해야 한다. 이로써, 상기 TID에 대한 모든 호스트 룩업 요청들이 배출 (drain) 될 때까지 채널 0에 대해서 임시적 HOL 차단이 이루어질 것이다. 채널 1 명령들 (호스트 판독 및 기록 요청들) 은 이에 의해서 영향을 받지 않는다.
도 12는 도 11을 참조하여서 상술된 LIP (424) 의 스케줄러 (428a-b) 의 구성 요소일 수 있는 예시적인 페이로드 헤더 추출자 (PHE) 의 블록도이다. PHE (470) 은 새로운 큐(들) (472), 트리 로케이션 테이블 (TLT) (433), 페이로드 헤더 테이블 (PHT) (430), TLT 테이블 관리자 (474), PHT 테이블 관리자 (476), 새로운 뷰 페이로드 관리자 (478), PHT 바이트 스와퍼 (swapper) (480), 비트 팩커 (bit packer) (484) 및 페이로드/패킷 헤더 추출자 한정 상태 머신 (finite state machine) (482) 과 같은 블록들 중 하나 이상을 포함하며, 이들 각각은 이하에서 기술된다.
일반적으로 PHE (470) 은 다음의 기능들 중 하나 이상을 수행하도록 구성될 수 있다:
- 새로운 큐로부터 룩업 요청들 (LUREQ) 및 판독/기록 요청들을 수신하는 기능;
- 상기 선택된 엔디언 모드 (endian mode) 에서 필요한 바이트 스와핑을 수행하는 기능;
- 각 LUREQ의 모든 유효 TID들에 대해서 TLT 테이블 룩업을 수행하는 기능;
- 각 LUREQ의 모든 유효 TID들에 대해서 PHT 테이블 룩업을 수행하는 기능;
- 헤더 데이터를 추출 및 처리하여서 LUREQ들 및 판독/기록 요청들을 키 요청들 (KRQ) 로 변환하는 기능; 및
- LOP의 LRT 및 LRT 정보 테이블 내의 데이터들을 초기화하는 기능
개략적으로, 동작 시에, PHE (470) 은 신규 큐의 3 개의 부분들로부터 요청을 끌어 오고 필요하면 바이트 스와핑 및 테이블 룩업을 수행하며, 데이터를 키 요청들 (KRQ) 로 처리하며 테이블 데이터와 함께 KRQ들을 스케줄러 출력 관리자 (도 15를 참조하여서 이하에서 기술될 것임) 를 전송한다.
각 스케줄러 (428a-b) 는 프론트 엔드에서 신규 큐 (472) (또는 "신규 작업 큐") 를 갖는다. 이 신규 큐의 크기가 충분하게 크면, 스케줄러의 단기 오버로딩 (overloading) 은 전체 시스템에서의 HOL (head of line) 블록킹을 유발하지 않으며 스케줄러 백로그 (backlog) 가 이 큐에 의해서 흡수될 것이며, 이로써 새로운 작업이 다른 스케줄러들 (428a-b) 로 흐른다.
신규 큐 (472) 는 패킷 헤더를 수신하기 위해 16 개의 로케이션의 깊이를 가질 수 있다. 패킷 헤더들은 이러한 FIFO의 128 비트 폭의 슬라이스 내에서 버퍼링되며 이 큐가 각 헤더로서 크기와 상관 없이 FIFO의 최소 1 × 128 비트를 차지하도록 룩업 패킷들의 수를 한정할 수 있다. 신규 큐 (472) 는 패킷 플로우로서 이 디바이스 내에 로딩된다. 이 큐는 LUF 분배자 0 (LD0) 로부터의 IL 채널 0 DDR/OCM/테이블 요청들을 및 룩업 요청들을 포함할 것이다. 신규 큐 (472) 는 스케줄러 (428a-b) 에 탄력을 부여하는데 그 이유는 비트 패커 (bit packer) (484) 가 수신된 각 룩업에 대해서 1 개 내지 4 개의 KRQ을 생성할 수 있기 때문이다. 호스트 판독/기록 명령들은 호스트로부터 전송된 것과 동일한 포맷을 갖게 신규 큐 내에 파싱되지 않고 배치된다.
신규 큐는 스케줄러 (428a-b) 가 각 패킷 처리를 효율적으로 관리하도록 3 개의 섹션들 (페이로드, HID 및 TID) 로 분할될 수 있다. LD0은 SOP (Start of Packet) 에서 동시에 모든 3 개의 섹션들을 기록할 수 있다. 신규 큐 (472) 의 HID 섹션 및 TID 섹션은 패킷마다 하나의 엔트리를 가질 수 있다. 패킷 페이로드는 128 비트 엔트리들 내에서 신규 큐 (472) 의 페이로드 섹션 내에 저장된다. FIFO 내의 5 개에 달하는 엔트리들이 단일 패킷에 대해서 요구될 수 있다. LD0은 전체 신규 큐에 걸쳐서 패리티 (parity) 를 계산하고 데이터 정렬을 모니터링할 시에 PHE를 지원하기 위해서 신규 큐의 모든 3 개의 섹션들 내의 공통 엔트리 (NQ_par) 로서 상기 계산 값을 기록한다.
PHE (470) 은 신규 큐 (472) 의 각 세션으로부터 독립적으로 풀링 (pulling) 할 수 있다. 이로써, PHE (470) 는 복수의 클록의 페이로드 데이터를 동시에 풀링하면서 테이블 데이터를 파이프라인 및 사전 처리할 수 있다. 데이터 정렬을 모니터링하기 위해서 NQ_par 엔트리들이 모든 3 개의 섹션들에 걸쳐서 비교되며 이러한 체크가 실패할 경우에 상태 레지스터 내의 에러 표시가 플래깅 (flag) 된다.
PHT 신규 큐 페이로드 관리자 (478) 는 신규 큐 (472) 의 페이로드 섹션으로부터 데이터를 풀링하고 이 데이터를 512 비트까지 긴 단일 데이터 필드로 형성될 페이로드 헤더 추출자 블록들 및 바이트 스와퍼 (byte swapper) (480) 에 제공한다. 이 바이트 스와퍼의 동작은 도 13을 참조하여서 이하에서 더 상세하게 기술된다.
어느 클러스터가 소정의 작업을 처리할 지를 결정하기 위해서 트리 로케이션 테이블 (TLT) (433) 이 사용된다. 트리 식별자 (TID) 는 TLT (433) 에 대한 인덱스로서 사용된다. TLT (433) 은 호스트-로딩가능하며 (host-loadable) 다음의 필드들 중 하나 이상을 포함할 수 있다:
- 키 포맷 인덱스 (KFTIDX) : KEYREQ와 함께 페이로드로서 클러스터들에 전송된다. 클러스터들을 이 인덱스를 사용하여서 클러스터들이 각 키에 대해서 KEYDATA 내의 28 개 (최대) 에 달하는 DIMENSION들을 추출하는 방식을 규정하는 (64 개 중) 하나의 키 포맷을 참조한다. 또한, 이 인덱스는 RFT (룰 포맷 테이블) 을 인덱싱하는데 사용된다. 이 인덱스는 모든 KEYREQ 명령과 함께 전송되며 (KEYDATA와 함께) 각 클러스터의 KDT 테이블에 저장된다.
- TWRSPCNT : 이는 예상되는 응답들의 개수를 말한다. 이는 LRT의 TWRSPCNT 필드에 기록된다. 3'b000 값은 8 개의 응답들이 예상됨을 나타낸다.
- TWCLMSK (TreeWalk Cluster Mask) [8 개 (최대) 에 달하는 서브트리 (ST) 마다 1 개임] : 이는 (수퍼클러스터 내의) 어느 클러스터가 트리워킹 요청 (TreeWalk reqeusts: TWReq) 을 수락할지를 특정한다. LUF0의 경우에, 이는 SC0과 관련되며 LUF1의 경우에, 이는 SC1과 관련된다. 신규 트리워킹 요청을 클러스터 컴플렉스 내로 스케줄링할 때에 "가장 덜 찬 클러스터"를 판정하기 위해서 HW에 의해서 사용된다. SW은 이 마스크 내의 특정된 클러스터들로 이전에 로딩된 트리 (N+L) 이미지를 가질 수 있다.
- TWCLMSK_ALT (Alternate TreeWalk Cluster Mask) [8 개 (최대) 에 달하는 서브트리 (ST) 마다 1 개임] : 이는 상술된 TWCLMSK 동일하지만 대향하는 (opposite) 수퍼클러스터 내의 어느 클러스터들이 트리워킹 요청 (TWReq) 을 수락할 수 있는지를 특정한다. 이는 오직 단일 LUF 모드에서만 유효하다. LUF0의 경우에, 이는 SC1과 관련된다. LUF1의 경우에, 이들은 유효하지 않다. 용도는 다음과 같다:
· 이중 LUF 모드 (LUF0 or LUF1) : 각 TWCL 마스크 = {8'h00, TWCLMSK}
· 단일 LUF 모드 (오직 LUF0) : 각 TWCL 마스크 = {TWCLMSK ALT, BWCLMSK}
- BWCLMSK (버킷 워킹 클러스터 마스크: BucketWalk Cluster Mask) : 이는 어느 클러스터가 버킷 워킹을 책임질지를 특정한다. SW은 LUCTNA.rulclnum 필드에서 사용될 클러스터를 알 것이다. 이 필드는 LUF -> 클러스터 컴플렉스 (KRQ 버스) 로부터 전송된 멀티-캐스트된 KEYDATA 명령 동안에 KEYDATA을 어느 클러스터가 '포획 (capture)' 해야 하는지를 결정하는 것을 돕는다. KEYDATA는 활성 TWE 또는 BWE 쓰레드를 갖는 모든 클러스터들에서 로컬하게 (locally) 가용해야 한다 (리던던시를 가져야 한다). TWE는 트리 워킹 프로세스 동안에 키데이터 KEYDATA를 사용하고 BWE는 RME에 의한 룰 매칭에서 키데이터를 사용한다.
- BWCLMSK ALT (Alternate BucketWalk Cluster Mask: 다른 버킷 워킹 클러스터 마스크) : 이는 위의 BWCLMSK와 동일하지만 대향하는 (opposite) 수퍼클러스터 내의 어느 클러스터가 버킷 워킹을 책임질지를 특정한다. 이는 오직 단일 LUF 모드에서만 유효하다. LUF0의 경우에, 이는 SC1과 관련된다. LUF1의 경우에, 이들은 유효하지 않다. 용도는 다음과 같다:
· 이중 LUF 모드 (LUF0 or LUF1) : 풀 (full) 버킷 마스크 = {8'h00, BWCLMSK}
· 단일 LUF 모드 (오직 LUF0) : 풀 버킷 마스크 = {BWCLMSK ALT, BWCLMSK}
PHE (470) 내의 TLT 테이블 관리자 (474) 는 신규 큐 TID 섹션 내의 각 엔트리에 대하여 트리 로케이션 테이블 (TLT) (433) 내에 4 개에 달하는 룩업들을 생성한다. 이 데이터는 PHE (470) 에서 처리될 수 없지만 대신에 스케줄러 출력 관리자 (이하의 도 15 참조) 로 전송되어서 LFCG (least full cluster generator: 가장 덜 차 있는 클러스터 생성자) 에서 사용될 것이다.
패킷 헤더 테이블 (PHT) (430) 은 512 비ㅌ에 달하는 헤더를 384 비트에 달하는 키로 마스킹 및 멀티플렉싱하는 방식을 특정하기 위한 64 엔트리 테이블로서 구성될 수 있다. 각 HID는 4 개의 PTH 라인들 (또는 엔트리들) 의 그룹을 선택할 수 있다. PHT (430) 내의 각 라인은 다음과 같이 GDT 내의 4 개의 TID 중 하나에 대응할 수 있다:
TIDO에 대한 PHT 인덱스 = HID+0
TID1에 대한 PHT 인덱스 = HID+1
TID2에 대한 PHT 인덱스 = HID+2
TID3에 대한 PHT 인덱스 = HID+3
PHT (430) 의 각 라인은 헤더 데이터를 마스킹 및 멀티플렉싱하는 방식을 특정하는 9 개의 디멘젼 (dimension) 을 포함한다. 이러한 디멘젼들 각각은 다음을 특정한다:
- 소스 필드 개시 비트 위치
- 소스 필드 종료 비트 위치
- 수신지 필드 개시 비트 위치
- 수신지 필드 크기 (비트 단위)
이러한 정보를 사용하여서, PHT (430) 는 헤더로부터의 9 개의 천크들을 비트 분해능으로 해서 키들로 맵핑할 수 있다.
PHT 테이블 관리자 (476) 는 신규 큐 (472) HID 섹션 내의 각 엔트리에 대해서 패킷 헤더 테이블 (PHT) (430) 내로 룩업들을 생성한다. 룩업은 각 키에 대해서 생성된다. 따라서, 단일 신규 큐 HID 엔트리는 4 개에 달하는 룩업들을 생성할 수 있다. 이 데이터는 헤더 페이로드 데이터를 추출하고 결과적인 키 요청 (KRQ) 을 생성하도록 비트 팩커 (bit packer) (484) 에 의해서 사용된다.
호스트 룩업 요청 패킷들의 바이트 엔디안니스 (byte endianness) 를 조절하도록 프로그램 가능한 바이트 스와퍼 (480) 가 제공된다. 호스트 판독/기록 요청 패킷들은 영향을 받지 않는다. PHT 바이트 스와퍼는 각 사용자 패킷에 대해 인터레이큰 제어 워드 후에 전송된 처음의 64 비트인 탐색 프로세서 헤더에 대해서는 동작하지 않는다. PHT 바이트 스와퍼는 룩업 요청 패킷 내의 탐색 프로세서 헤더를 따르는 모든 데이터에 대해서 동작한다. 상이한 바이트 스와핑 모드를 예시하는 도면이 이하에서 도 13을 참조하여서 기술된다.
페이로드/패킷 헤더 추출자 한정 상태 머신 (PHE FSM) (482) 이 바이트 스와퍼 (480) 로부터의 데이터, 비트 팩커 (484) 의 출력, (패킷 헤더로부터 추출된 디멘젼이 팩킹된 키를 포함하는) PHT (430) 데이터 및 (소정의 룩업 요청을 처리할 클러스터의 ID를 포함하는) TLT (433) 데이터를 모은다. 페이로드/패킷 헤더 추출자 한정 상태 머신 (PHE FSM) (482) 는 이러한 입력들을 사용하여서 이후에 스케줄러 출력 관리자 (도 15) 로 전송될 KRQ들을 검색 또는 생성한다.
검색 또는 생성된 각 KRQ에 대해서, 2 비트 SXID가 생성된다. LRT 및 LRT 정보 엔트리들이 자유 풀 (free pool) 로부터 KID를 풀링함으로써 각 키에 대해서 저장된다. KID들은 미리 풀링되고 캐싱 (chche) 될 필요가 있다. 시스템이 KID들 외부에서 실행되면, KID들이 탐색 완료를 통해서 가용하게 될 때까지 스케줄러 HOL은 블록킹한다.
PHE FSM (482) 는 형성할 KRQ의 타입을 결정하기 위해서 페이로드 헤더 데이터로부터의 CMD 필드를 체크한다. 이것이 LUREQ이고 일 대 일 모드에 있지 않다면, PHE는 패킷 팩커 (484) 로부터 KRQ을 검색하고 그렇지 않으면 페이로드 헤더 데이터를 파싱하여서 KRQ 타입을 위하여 필요한 헤더 필드를 추출함으로써 KRQ을 생성한다.
KRQ는 이에 대응하는 TLT (433) 와 함께 스케줄러 출력 관리자 (도 15) 로 전송된다. KRQ는 128 비트 증분으로 전송될 수 있다. TLT (433) 는 KRQ SOP (start of packet) 와 함께 단일 전송으로 전송될 수 있다.
도 13은 PHE (470) 의 스와퍼 (480) 컴포넌트 (component) 에 의해서 선택 가능한 상이한 바이트 스와핑 모드들을 나타내는 패킷 도면이다. 프로그램 가능한 바이트 스와퍼 (480) 는 호스트 룩업 요청 패킷들의 엔디안니스를 조절한다. 호스트 판독/기록 요청 패킷들은 영향을 받지 않을 수 있다. 바이트 스와퍼 (480) 는 가 사용자 패킷에 대하여 인터레이큰 제어 워드 (control word) 후에 전송되는 처음의 64 비트인 탐색 프로세서 헤더에 대해서 동작하지 않는다. PHT 바이트 스와퍼는 룩업 요청 패킷 내의 탐색 프로세서 헤더를 따르는 모든 데이터에 대해서 동작한다.
바이트 스와퍼 (480) 엔디안 (endian) 모드가 본 발명의 편리한 실시예들에 따라서 구성 레지스터 내에서 설정된다. 몇몇 경우에 스와핑 최소 입도는 바이트이며 비터 미러링 (bit mirroring) 은 지원되지 않는다. 상호 배타적인 예시적인 스와핑 모드들이 도 13에서 예시된다:
- 스와핑 없음 : 아무것도 하지 않음
- 64 비트 내의 바이트 스와핑 : 각 64 비트 워드 내의 바이트들을 리버싱함 (reverse)
- 64 비트 내의 32 비트 스와핑 : 각 64 비트 워드 내의 32 비트 워드를 리버싱함
- 32 비트 내의 바이트 스와핑 : 각 32 비트 워드 내의 바이트들을 리버싱함
도 14는 정상적인 키 확장 모드에서 동작하는 PHE (470) 를 나타내는 패킷도이다. 본 예시적인 실시예에서, 키 확장 또는 패킷 헤더 확장으로서 지칭되는 LUE 프로시저에서 LUREQ 및 판독/기록 요청을 키 요청들 (KRQ) 로 변환시키도록 PHE (470) 는 헤더 데이터를 추출 및 처리한다. LUREQ에 대한 키 확장에는 2 가지 모드, 즉 (GID가 0보다 크고 비트 팩커 블록을 사용하는 경우의) 정상적인 키 확장 모드 및 (GID가 제로인 경우의) 일 대일 모드가 존재한다.
정상적인 키 확장 모드에서, 도 5를 참조하여서 상술한 바와 같이, 각 LUREQ은 4 개의 요청들까지 생성할 수 있다 (spawn). 패킷 헤더 테이블 (PHT) 에 저장된 프로그램 가능한 테이블이 LUREQ을 키 요청들로 파싱하는데 사용될 수 있다. 도 5에 도시된 바와 같이, LUREQ은 다음의 필드들을 포함할 수 있다:
- 호스트로부터의 XID (32 비트) ID : 이는 탐색 프로세서에 의해서 사용되지 않고 간단히 응답과 함께 호스트로 돌려보내진다.
- GID (8 비트) (그룹 ID) : 이는 패킷의 클래스가 무엇인지를 식별하며, 패킷이 어떻게 처리될 지를 제어한다.
- 룩업 데이터 (512 비트에 달함) : 키들이 이 데이터로부터 형성된다.
도 14로 돌아가면, PHE의 실례에서, 정상적 키 확장 모드에서, 4 개의 천크들이 패킷 헤더로부터 추출되고 있다. 필드 O SRC_STPOS, SRC_ENDPOS가 도시되면서 천크 0 (CHUNK0) 이 세부적으로 도시된다. 헤더의 디멘젼은 순서대로 될 필요는 없으며 키 (KRQ) 로 패킹될 때에, CHUNK0은 멀리 좌측에 있는 필드일 수 있다. 또한, 비트 오프셋은 멀리 좌측에 있는 비트로부터의 오프셋이다.
PHT (430) (도 12) 을 사용하여서, 4 개에 달하는 키들 (KRQ) 이 각 LUREQ로부터 생성된다. 이어서, 생성된 키들 (KRQ) 이 PHE FSM (482) (도 12) 에 전송되며 이어서 128 비트 증분으로 해서 스케줄러 출력 관리자 (도 15) 로 KRQ로서 전송된다.
반대로, 일대일 모드에서, GID = 0이면, 헤더는 피트 팩커를 건더 뛰고 바로 단일 키로서 사용될 것이다. 인터레이큰 LA 컴팩트 모드에서, 단일 키로서 헤더를 바로 사용하면 384 비트보다 큰 헤더들에 있어서 1 사이클 만큼 레이턴시가 저감된다.
도 15는 LIP (424) 의 스케줄러 (428a-b) 의 컴포넌트일 수 있는 예시적인 스케줄러 출력 관리자 (480) 의 블록도이다. 스케줄러 출력 관리자는 스케줄러 (428a-b) 의 "백-엔드 (back-end)"로서 동작할 수 있다. 스케줄러 출력 관리자는 다음과 같은 블록들 중 하나 이상을 포함한다: 가장 덜 찬 클러스터 생성자 (LFCG) (492), 리트리 큐 (retry queue) (493), 출력 소스 선택자 (494) 및 스케줄러 출력 관리자 한정 상태 머신 (FSM) (495) 중 하나 이상을 포함하며, 이들 각각은 이하에서 기술된다.
스케줄러 출력 관리자 (490) 는 예시적인 실시예들에서 다음의 기능들 중 하나 이상을 수행할 수 있다:
- 스케줄러 PHE 및 LUF 분배자 1 (LD1) 으로부터 KRQ들을 수신함
- 리트리 큐 (493) 상의 KRQ들을 관리함
- 명령 플래그들: 어토믹 (atomic) 및 로컬 (local) 응답을 위해서 요구되는 HOLB (head of line blocking) 을 강제함
- 어느 LUE 클러스터가 각 LUREQ KRQ을 처리할지를 결정하기 위해서 가장 덜 찬 클러스터 생성자 (LFCG) (492) 를 사용함
- 다음의 KRQ 소스 (PHE, LD1, 리트리 큐) 를 선택하기 위해서 우선 순위 방식 및 크레디트 카운터 (credit counter) 를 사용하여서 KRQ들을 스케줄링함
- 스케줄링된 KRQ들을 6 개의 가능한 KRQ 버스들 중 하나 이상으로 향하게 함
스케줄러 출력 관리자 (490) 는 3 개의 가능한 소스, 즉 PHE, LD1, 리트리 큐) 로부터 한번에 하나의 KRQ을 선택한다. 스케줄러 출력 관리자 (490) 는 6 개의 가능한 KRQ 버스들 (SCO, SCI, BPP0, BPP1, MWQ (DDR), 보편적 CSR/테이블) 중 하나 이상로 전송되도록 각 KRQ를 스케줄링한다. 이와 달리, 스케줄러 출력 관리자 (490) 는 LUREQ KRQ들을 PHE로부터 리트리 큐로 이동시키거나 KRQ들을 리트리 큐의 전방으로부터 이의 후방으로 재순환시킬 수 있다. 스케줄러 출력 관리자 (490) 는 각 KRQ 수신지로부터 가용한 크레디트를 주목하고 LUREQ KRQ들에 대하여 가장 덜 찬 클러스터 생성자 (LFCG) 를 실행하여 KRQ CMD에 기초하여서 상기한 결정들을 할 수 있다.
호스트 판독/기록 요청들은 성공적인 룩업 요청들과 순서를 가지면서 KRQ 버스 상으로 스케줄링되도록 룩업 요청들과 직렬로 스케줄러 파이프라인을 통과한다. 스케줄링을 실패하여 리트리 큐로 간 룩업 요청들은 순서대로 되지 않을 것이다. 어토믹 (atomic) 및 로컬 (local) 응답 플래그들을 사용하여서 (이하에서 보다 상세하게 기술되는) 소정의 오더링 조건을 강제할 수 있다.
가장 덜 찬 클러스터 생성자 (LFCG) (492) 블록은 소정의 룩업 요청을 처리할 엔진들을 결정한다. LFCG (492) 는 트리 로케이션 테이블 (TLT) (433) (도 12) 로부터의 데이터를 사용하여서 작업을 수행할 수 있는 클러스터의 위치를 알기 위해서 필요한 정보를 검색한다.
예시적인 실시예들에서, LCC는 2 개의 수퍼클러스터를 포함하며, 각 수퍼클러스터는 8 개의 클러스터를 포함할 수 있다. 각 클러스터 내에서 탐색 엔진들의 활동 레벨이 LFCG (492) 에 의해서 각 클러스터에 대하여 일 크레디트/데빗 (credit/debit) 카운터를 사용하여서 모니터링된다. 단일 LUF 모드에서, 2 개의 스케줄러들은 각각 8 개의 카운터를 유지한다. 각 크레디트는 클러스터 입력 큐 내에서 일 FIFO 로케이션 (location) 을 나타낸다. 일 크레디트/데빗 (credit/debit) 카운터는 FIFO의 깊이로 리셋된다. 카운터들은 작업이 클러스터로 스케줄링될 때에 LFCG에 의해서 감분된다. 카운터들은 클러스터가 FIFO로부터 엔트리를 제거하였음을 표시할 때에 증분된다.
LFCG (492) 는 다음의 필드들을 생성할 수 있다:
- LFTWCLMSK (Least Full Tree Walk Cluster Mask: 가장 덜 차 있는 트리 워킹 클러스터 마스크) : 클러스터당 1 비트가 존재한다. 이 마스크에서 설정된 각 비트는 해당 클러스터들이 작동하기 시작함을 표시한다. 이중 LUF 모드에서, 각 스케줄러부터의 LFTWCLMSK [7:0] 만이 사용된다.
- KCLMSK (Key Cluster Mask: 키 클러스터 마스크) : 클러스터당 1 비트가 존재한다. 이 마스크에서 설정된 각 비트는 해당 클러스터가 KEYREQ를 사용해야하기 때문에 KEYREQ가 브로드캐스트될 때에 해당 클러스터가 KEYREQ을 래치 (latch) 함을 나타낸다. 이중 LUF 모드에서, 각 스케줄러부터의 KCLMSK [7:0] 만이 사용된다.
LFCG 블록은 다음으로 스케줄러에 응답한다:
- SCL
- LFTWCLMKS
- KCLMSK
- ACK/NAK : LFTWCLMSK 생성 성공 = 1 , 실패 = 0.
LFCG (492)는 TLT (433) 로부터 판독한 정보 및 자신의 크레디트에 기초하여서 LFTWCLMKS 를 생성한다. 이 마스크 내의 각 비트는 쓰레드가 작업을 시작하게 한다. 룩업 클러스터 컴플렉스 (LCC) 내의 세부 사항들로 인해서, 이는 LUF가 역으로 수신한 수의 응답과 반드시 일치하지는 않을 수 있다. 따라서, TLT로부터의 TWRSPCNT는 LUF가 예상해야 하는 실제 개수의 응답들을 포함한다.
스케줄링이 단일 키 실패 때문에 시도할 때에, 요청이 리트리 큐 (493) 내로 이동되며 이로써 HOL (head of line) 블록킹이 방지된다. HOL 블록킹은 TWCLMSK과 매칭하는 클러스터들이 그 작업을 수락하기에는 너무 분주할 때에 발생할 것이다.
리트리 큐 (493) 는 8 개에 달하는 KRQ 비트 (beat) 를 유지도록 하는 크기로 된다. 오직 룩업 요청만이 리트리 큐 (493) 로 간다. 호스트 판독/기록 명령은 리트리 큐로 가지 않을 것이며 이러한 명령들이 성공적이지 못하면 HOL 블록킹을 발생시킬 것이다.
리트리 큐 (493) 상에 배치된 룩업 요청은 순서를 갖는 호스트 판독/기록 명령들에 비해서 순서를 가지지 않을 것이다. 이러한 바가 소정의 이용 상황에서 허용되지 않는다면, 리트리 큐 (493) 가 디스에이블 (disable) 되거나 호스트가 제공된 어토믹 명령 (atomic command) 을 사용하여서 개입할 수 있다.
리트리 큐 (493) 엔트리들은 PHE (470) (도 12) 로부터의 인터페이스와 동일한 포맷으로 될 수 있다. 이는 (데이터의 128 비트 증분으로 해서) 완전하게 형성된 KRQ 을 포함하고 그 키에 대한 전체 TLT 데이터도 포함한다. 전체 KRQ 데이터를 저장하기 위해서 3 개에 달하는 FIFO 엔트리들 (3 개의 클록들) 이 요구될 수 있다. 스케줄러 (428a-b) (도 11) 는 PHE (479) 로부터 리트리 큐 (493) 로 데이터를 이동시키는 동안에 IDLE 를 KRQ 버스들에 출력한다.
스케줄러 출력 관리자 (490) 는 리트리 큐 (493) 가 배출되기 이전에 (또는 비기 이전에) 얼마나 많은 호스트 명령들이 신규 큐 (472) 로부터 풀링되는지를 결정하는 프로그램 가능한 RETRY_LOCKOUT_COUNTER 를 포함한다. 이 카운터는 RETRY_ LOCKOUT_CFG 레지스터 내의 값으로 리셋되고 (다수의 KRQ들이 생성되기 이전에) PHE가 신규 큐 페이로드 FIFO로부터 SOP를 판독할 때마다 감분된다. RETRY_ LOCKOUT_CFG는 또한 리트리 큐 (493) 를 디스에이블하도록 설정될 수 있다.
또한, 프로그램 가능한 RETRY_HIGH_WATERMARK는 리트리 큐가 배출되기 이전에 리트리 큐에 대한 최대 채움 (fill) 레벨을 결정한다. RETRY_HIGH_WATERMARK에 대한 최소 세팅 (setting) 은 0×3이다. "N" 의 세팅은 N+1 KRQ 비트들 (beats) 이 리트리 큐에 기록될 때에 리트리 큐가 배출될 것임을 의미한다. RETRY_HIGH_WATERMARK가 RETRY_QUEUE의 크기보다 크게 설정되면, 리트리 큐 (493) 은 메모리의 최대 채움 레벨에 도달할 때까지 배출될 것이다.
또한, 리트리 큐 (493) 는 어토믹 명령을 처리하기 이전에 배출된다. (어토믹 명령은 진행되기 이전에 모든 특정된 TID를 배출한다.) 특정 TID가 리트리 큐 내에 있는 경우를 다루기 위해서 배출이 요구된다.
일단 리트리 큐 (493) 가 배출을 위해서 선택되면, 다시 리트리 큐가 비기 전까지 (즉, 배출되기 전까지) PHE (470) 으로부터의 새로운 큐 데이터는 선택되지 않을 것이다. 이로써, 록아웃 상태 (lockout condition) 를 방지한다. 리트리 큐 (493) 배출 동안에, LFCG (492) 로부터의 성공의 부재로 인해서 스케줄링될 수 없는 임의의 KRQ은 리트리 큐 (493) 의 후방으로 재순환된다. 스케줄러 (428a-b) 가 (3 개에 달하는 클록 사이클 동안) IDLE을 출력하는 한편, KRQ은 큐의 후방으로 재순환되며 새로운 데이터가 리트리 큐의 전방으로 진행한다.
요약하면, 리트리 큐는 RETRY_LOCKOUT_COUNTER, 어토믹 명령 (Atomic Command), 및 RETRY_HIGH_WATERMARK의 3 개의 조건 하에서 완전하게 배출된다 (즉, 요청들을 비운다).
또한, 리트리 큐 (493) 는 액세스될 수 있지만 다른 조건 상에서는 완전하게는 배출되지 않을 수도 있다. 리트리 큐 (493) 가 선택되지는 않지만 PHE (470) 으로부터의 데이터의 흐름에 휴지 사이클 (idle cycle) 이 존재하고 리트리 큐로부터의 LFCG (492) 가 성공할 것이라면, 단일 KRQ가 리트리 큐 (493) 로부터 풀링 (pulling) 및 스케줄링된다. 이러한 휴지 사이클은 빈 신규 큐 (472) 때문에 발생하거나 예를 들어서 512 비트 헤더 (4 사이클) 로부터의 384 비트 키 (3 사이클) 와 같은, 큰 헤더로부터의 작은 키를 형성함으로써 생성되는 경우적 버블 (occasional bubble) 에 의해서 발생할 수 있다. 리트리 큐가 완전하게 배출될 것으로 선택되지 않을 때에도 LFCG (492) 는 리트리 큐의 헤드 상에서의 엔트리에 대해서 일정하게 계산될 수 있으며 이로써 엔트리가 성공적으로 스케줄링될지를 판정하기 위해서 엔트리를 팝핑 (pop) 할 필요가 없다.
모든 채널 0 호스트 판독/기록 요청들은 Atomic, Host-Resp, 및 Local-Resp와 같은 플래그들을 포함할 수 있다. 이러한 플래그들은 채널 1 요청들 또는 룩업 요청들에 대해서는 유효하지 않을 수 있다. 이 플래그들은 이하에서 기술된다.
어토믹 액세스 (atomic access) 는 단일 테이블 식별자 (TID) 에 대한 활동 모두가 완전히 배출될 때까지 시스템 내로의 모든 트래픽을 정지시키는 메카니즘이다. 어토믹 액세스는 테이블 업데이트에 유용할 수 있는데 그 이유는 이러한 테이블을 사용하는 진행 중인 모든 탐색들이 기록이 발생하기 이전에 완료되는 것을 보장하기 때문이다. 어토믹 액세스는 모든 탐색들이 업데이트 동안이 아닌 업데이트 전에 또는 업데이트 후에 어토믹 데이터에 대해서 동작할 수 있게 한다.
어토믹 액세스를 구현하기 위해서, TID당 256 개의 카운터들의 어레이가 각 TID에 대하여 활동 중인 (in-flight) 작업들의 개수를 추적하도록 제공된다. 이러한 카운터들은 LUF가 실제로 키/SXID를 스케줄링할 때에 증분되고, 이 키/SXID에 대한 응답들이 전해질 때에 감분된다. 리트리 큐 상의 키 요청들은 이러한 키들이 실제로 스케줄링될 때까지 이러한 카운터들을 증분시킬 수 없다.
명령이 어토믹 비트 세트를 사용하여서 (with an Atomic bit set) 처리될 때에, 스케줄러 출력 관리자 (490) 는 다음을 수행한다:
- 리트리 큐를 배출함
- 제로로 될 명령 내의 TID 필드와 매칭하는 TID 카운터를 대기하는 동안에 HOL 블록킹을 수행함
- 호스트 판독 또는 호스트 기록 명령을 발행함
Host_Resp 플래그는 탐색 프로세서가 응답을 호스트로 역 전송하도록 한다. Host_Resp 플래그는 오직 호스트 기록에 대해서만 의미를 갖는다 (호스트 판독은 응답을 언제나 전송한다). Host_Resp 플래그는 호스트가 기록이 완료된 때를 판정할 수 있게 한다.
Host_Resp 플래그를 구현하기 위해서, 스케줄러는 다운스트림으로 전송되는 명령의 일부로서 신호를 설정한다. 응답 블록은 응답을 역으로 전하는 바를 다룬다.
Local_Resp 플래그는 탐색 프로세서로 하여금 호스트 판독 또는 호스트 기록 명령을 발행하고 이 명령이 중지 (retire) 될 때까지 모든 트래픽을 HOL-블록킹하게 한다.
스케줄러 출력 관리자 (490) 는 KRQ 버스로의 액세스가 허용되는지의 여부를 결정하도록 다음의 크레디트/데빗 카운터들을 유지한다:
클러스터 크레디트 : 엔진당 1 개의 카운터. SCH0는 단일 LUF 모드에 대해서 16 개의 클러스터들을 필요로 하며 이중 LUF 모드에 대해서 8 개의 클러스터들을 필요로 한다. 각 카운터는 클러스터당 16 개에 달하는 크레디트를 유지한다. 각 크레디트는 하나의 KRQ 비트 (beat) 를 나타낸다. 이는 다음을 위해서 데빗된다 (debited):
- 룩업 요청
- OCMEM RD/WRT
- LCC 테이블 RD/WRT
보편적 (global) 인터페이스 크레디트: SCHO 및 SCH1 모두가 보편적 블록 내의 소형 FIFO 내로 공급되며 또한 이 블록은 채널 1 분배자에 의해서 공급된다. 이러한 3 개의 모든 소스들은 이들이 FIFO를 오버 런닝 (over-run) 하지 않는 것을 보장하도록 크레디트/데빗을 유지하고 최소한 3 개의 크레디트가 남는 것을 보장해야 한다.
DDR 기록 크레디트: SCHI이 DDR 명령들을 획득하지 않기에 오직 SCH0에 의해서만 유지됨. MBC는 16 개의 호스트 기록들을 수락할 수 있다.
DDR 판독 크레디트: 오직 SCHO에 의해서만 유지됨. BPP는 4 개에 달하는 호스트 판독들을 버퍼링할 수 있다. 크레디트/데빗은 BPP가 오버-런닝되지 않도록 보장한다.
BPP 호스트 테이블 크레디트: 오직 SCHO에 의해서만 유지됨. 크레디트/데빗은 오버-런닝되지 않도록 보장한다. 크레디트들은 BPP 판독들과 응답을 갖는 기록 간에 (between BPP reads and write with responses) 공유된다. LOP가 무한정한 수의 응답들을 버퍼링할 수 있기 때문에 크레디트들은 응답들을 가지지 않는 기록들에 대해서 조절되지 않는다.
스케줄러 출력 소스 선택자 (494) 는 SOM FSM (495) 의 출력의 전달을 위해서 접속 출력부들 중의 선택을 제공한다. 스케줄러 출력 관리자 (490) 는 다음의 상태들에 기초하여서 스케줄러 (SCH) (428a-b) 로부터 전송될 후속 KRQ의 소스를 선택하도록 선택자 (494) 를 제어한다:
- PHE 선택 (SCH는 후속 클록 시에 새로운 큐 데이터를 출력함)
- RetryQ 선택 (SCH는 후속 클록 시에 리트리 큐 데이터를 출력함)
- LD1 선택 (SCH는 후속 클록 시에 ILKN 채널 1을 출력함)
- RetryQ 로의 PHE (SCH는 PHE로부터의 새로운 큐 데이터를 리트리 큐 상으로 보내고 후속 클록 시에 휴지 (idle) 를 출력함)
- RetryQ 재순환 (SCH는 리트리 큐 상에서 데이터를 재순환시키고 후속 클록 시에 휴지를 출력함)
소스가 일단 선택되었다면, 전체 KRQ 패킷이 후속 SOP에 대한 소스가 선택되기 이전에 (EOP를 통해서 SOP로) 전송된다.
도 16은 요청들 및 명령들을 파싱하고 이들을 패킷 분류를 위한 내부 리소스들로 스케줄링하는 예시적인 절차의 데이터 흐름도이다. 이 절차는 도 11 내지 도 15를 참조하여서 상술한 바와 같은 프로세스들로부터 도출된다. 이 절차는 LIP (예를 들어서, 도 11의 LIP (424)) 에 의해서 수행될 수 있다. 이 절차는 또한 이하에서 기술되는 예시적인 절차를 표현하는 인스트럭션들을 로딩 및 실행시킴으로써 LIP로 변환되는 컴퓨터 (또는 프로세서) 에 의해서 수행될 수도 있다.
본 발명의 실시예들에 따라서, LUF 입력 프로세서 (LIP) 는 다른 노들의 네트워크 내의, 스위치 또는 라우터와 같은 물리적 네트워크 노드 (또는 디바이스) 일 수 있다. LIP는 이 노드의 구성 요소, 모듈, 블레이드 또는 카드와 같은 물리적 네트워크 노드 (또는 디바이스) 의 일부일 수 있다.
본 발명의 다른 실시예들에 따라서, (도 23을 참조하여서 이하에서 보다 상세하게 기술되는) LIP는 프로세서, 메모리 및 통신 인터페이스 등을 갖는 범용 컴퓨터이다. 이 범용 컴퓨터는 예를 들어서 이 컴퓨터로 하여금 호스트로의 최상의 매칭 및 복귀 응답들을 결정하도록 호스트로부터 수신된 룩업 요청들을 처리하게 하는 인스트럭션들을 프로세서로 로딩함으로써 LUF 및 이의 구성 요소로 변환된다.
도 17은 도 4b를 참조하여서 상술된 바와 같은 룩업 프론트 엔드 (LUF) (408) 의 구성 요소인 예시적인 LUF 출력 프로세서 (LOP) (446) 의 블록도이다. LOP (446) 는 LIP (예를 들어서, 도 11의 LIP (424)) 에 의해서 개시된 내부 칩 리소스들 (예를 들어서, 도 4a의 룩업 클러스터들 (413a-d)) 로부터 응답들을 수신한다. 이러한 응답은 처리되어서 인터레이큰 또는 I2C 모듈을 통해서 호스트 프로세서로 역 전송된다. 응답들은 DDR, 클러스터들, BPP 또는 보편적 테이블들 및 CSR들과 같은 리소스들로부터의 호스트 판독 또는 기록 응답들을 포함한다. 응답들은 또한 호스트 프로세서로 역 전송되기 이전에 최상의 매칭을 위해서 LOP에 의해서 평가되는 룩업 응답들을 포함할 수 있다.
LOP (446) 은 응답 처리 프론트 엔드 블록 (LOP_FE) (750a-b), 응답 처리 백 엔드 블록 (LOP_BE) (760), 및 출력 처리 블록 (LOP_OP) (770) 을 포함한다.
또한, LOP (446) 은 LIP (424) (도 11) 및 룩업 클러스터들에 의해서 초기화되는 2 개의 테이블들을 유지한다. 이 테이블은 진행 중인 탐색들에 대한 컨텍스트를 유지하고 이 클러스터들에 의해서 현재 수행 중인 탐색들을 추적하는 룩업 리소스 테이블 (LRT) (765a-b) 및 클러스터들이 완료한 탐색 결과들을 버퍼링하는 송신 버퍼 (TXBUFF) (755) 를 포함한다. 이하에서 기술될 바와 같이, 선택 사양적으로, 이 결과들은 요청의 순서대로 저장 및 복귀되거나 병합된다.
전반적인 동작 시에, LOP_FE (750a-b) 는 LUE 클러스터들 또는 버킷 패킷 프로세서 (BPP) 로부터 작업을 수신한다. 응답이 수신되면, 이들은 LRT (765a-b) 내에 저장되고 선택 사양적으로 이하에서 상세하게 기술되는 동작에서 동일한 패킷으로부터의 다른 키들과 병합된다. 단일 LOP_FE (750a) 는 단일의 대응하는 수퍼클러스터 (예를 들어서, 도 4a의 수퍼클러스터 (410a)) 와 인터페이싱하도록 구성되거나 다수의 수퍼클러스터와 인터페이싱하거나 다른 LOP_FE (750b) 와 공통 수퍼클러스터를 공유할 수 있다.
LOP_BE (760) 는 LUF_FE (750a-b) 와 인터페이싱한다. LOP_BE (760) 는 응답들을 버퍼링 및 재오더링 (reordering) 할 수 있다. 이러한 응답들에 대한 버퍼링 및 재오더링은 룩업 순서를 보존하고 응답들을 병합 그룹들 (coalescing groups) 로 그룹핑하기 위해서 수행된다. LOP_BE (760) 는 응답을 수집하고 이들을 탐색을 개시하기 이전에 LIP (424) (도 1) 에 의해서 저장된 (reserved) TXBUFF (775) 슬롯 내에 배치한다. 응답들이 송신를 대기할 때에, LOP_BE (760) 는 출력 처리 블록 (LOP_OP) (770) 용의 TX_LIST 레지스터 내로 TXBUFF (775) 의 인덱스들을 배치한다.
LOP_OP (770) 는 TX 인터레이큰 제어기로의 인터페이스를 관리한다. LOP_OP (770) 는 호스트 판독/기록 응답을 위한 출력 큐들 및 TX_LIST에 따라서 TXBUFF로부터 룩업 응답들을 풀링하기 위한 직접 메모리 액세스 (DMA) 엔진 (772) 을 포함한다. LOP_OP (770) 는 내부 큐 데이터를 호스트로 출력되는 패킷들로 포맷한다.
룩업 응답들은 LIP (424) 및 LOP (446) 의 코디네이션된 (coordinated) 동작에 의해서 추적 및 처리된다. 응답 추적은 LIP 분배자가 TXBUFF 내의 필드들을 초기화할 때에 LIP (424) 분배자 (예를 들어서, 도 1의 460a-b) 에 의해서 상술한 바와 같이 시작된다. 이 동작은 LIP 스케줄러들이 LRT 및 LRT_INFO 테이블들을 초기화할 때에 LIP (424) 스케줄러 (예를 들어서, 도 11의 428a-b) 에 의해서 계속된다. LOP_FE (765a-b) 는 이러한 정보를 사용하여서 소정의 KEY/SXID에 대한 모든 트리 워킹의 최상의 응답을 판정하도록 응답들을 처리한다. 이어서, 콘트롤 (control) 이 이제 완료된 KEY/SXID를 처리하도록 LOP_BE (760) 에 전달된다. LRT (765a) 의 병합 비트 (coalesce bit) 에 기초하여서, LOP BE (760) 는 소정의 XID에 대한 모든 SXID들을 단일 응답으로 병합하거나 가능한 한 빨리 (as soon as available) 호스트에게 응답을 전송한다. TXID의 범위에 기초하여서, LOP_BE (760) 는 이러한 응답들을 재오더링하거나 해당 요청이 수신된 순서대로 응답을 역으로 전송한다 (retrun).
LOP의 구성 요소 블록들 및 이들의 동작은 이하에서 도 18 내지 도 22B를 참조하여서 기술될 것이다.
도 18은 예시적인 LUF 응답 처리 프론트 엔드 (LOP_FE) (750) 의 블록도이다. LOP_FE (750) 은 다른 구성 요소들 중에서도, LUF 룰 계산자 (LRC) (752a-c), LUF 룰 계산자 프리프로세서 (preprocessor) (LRCP) (753) 및 LUF 응답 FIFO (LRF) (754) 를 포함하며, 이들은 이하에서 보다 상세하게 기술된다.
동작 시에, LOP_FE (750) 는 서브-트리 응답 (STRSP) 버스 (756) 를 통해서 복귀된 응답들을 클러스터들 및 BPP로부터 수신한다. 클러스터들은 룩업 응답들 및 호스트 판독/기록 명령들에 대한 응답들을 모두 STRSP 버스 (756) 상에서 복귀시킨다. BPP는 오직 룩업 응답만을 STRSP 버스 상에서 복귀시킨다. BPP 호스트 판독/기록 명령들은 다른 버스 상에서 복귀될 수 있다.
STRSP 버스 (756) 가 룩업 응답들을 반송할 때에, 룩업 응답들 각각은 다음을 포함한다:
- RSPTYPE : 룩업 응답, OCM 응답, 테이블 또는 CSR 응답을 표시함
- KID : 키 ID
- DATA : 매칭된 룰을 표시함 (SC Num, DDR/COM 어드레스 및 다른 정보)
- STMIN : 결과의 품질 - LUF는 최소치를 선택함. 등급 (tie) 의 경우에, 처음의 응답이 역으로 선택됨 (back wins)
일반적으로, LOP_FE (750) 는 매 클록마다 새로운 응답을 접수한다. LOP_FE (750) 은 성능에 영향을 주지 않으면서 클러스터들을 백프레셔 (backpressure) 하도록 구성될 수 없다. 복수의 서브-트리들이 백-투-백 클록 식으로 (on back-to-back clocks) 그들의 마지막 응답을 복귀시키는 경우에, RESPONSE_FIFO (754) 는 가득 찰 것이다. 이를 방지하기 위해서, RESPONSE_FIFO (754) 는 프로그램 가능한 워터마크 (watermark) CSR에 기초하여서 스톨 신호 (stall signal) 를 BPP 및 수퍼클러스터 모두에게 전송할 수 있다.
클러스터들로부터의 호스트 판독/기록 응답들은 또한 STRSP 버스 (756) 를 통해서 전송될 수 있다. 이러한 응답들은 상이한 FIFO (미도시) 로 흐를 수 있으며 이 FIFO의 채움 레벨은 수퍼클러스터들에 의해서 관리될 수 있다.
LUF 룰 계산자 (LRC) (752a-c) 는 STRSP 버스 (756) 를 통해서 클러스터들로부터 서브-트리 응답들 (STRSPs) 을 수신한다. LRC들 중 하나 (예를 들어서, 752c) 가 오직 (exclusively) BPP들로부터만 응답들을 수신할 수 있다.
각 서브-트리 응답들 (STRSPs) 은 다음을 포함할 수 있다:
- STMIN : LOP (446) 에 의해서 사용됨 (consumed)
- STDATA : 다음과 같이 LOP (446) 에 의해서 조절되며 이어서 호스트로 복귀됨:
· 응답이 BPP로부터 이면, STDATA [32] 는 DDR 포트 #을 포함하고, STDATA [31:0] 는 16 비트 입도 (granularity) 를 갖는 DDR 어드레스를 포함한다.
· 응답이 LCC로부터 이면, STDATA [23:0] 는 OCMEM ={SCL,CLNUM,CLADR,RULEOFF} 내의 룰 어드레스를 포함한다. 이 경우에, LRC는 언제나 STDATA [32] 를 제로로 설정해야 한다. STDATA [31:24] 는 LCC로부터 제로들로 복귀될 것으로 예상되지만 LRC는 복귀된 모든 비트들을 사용해야 한다 (오직 제로 STDATA [32]).
복귀된 각 STMIN에 대해서, LRC (752a-c) 는 다음을 수행한다:
- LRT[VALID]==0이면, 복귀된 STMIN은 LRT에 기록된다. LRT[VALID]==1이면, 복귀된 STMIN LRT 내의 STMIN과 비교되고, 이 2 개의 값들 중 최저 값이 LRT에 다시 기록된다.
- TWRSPCNT (트리 워킹 응답 카운터) 을 감분한다. TWRSPCNT 가 되면, 이는 이 SXID에 대한 모든 응답들이 수신되었음을 나타낸다. 그렇다면, KID를 응답 FIFO (LRF) 에 기록한다.
- LRT[STDATA] 기록된 STMIN와 연관된 STDATA 필드로 설정한다.
- 응답이 BPP로부터 이면, LRT[OCRF]를 클리어 (clear) 하고, 그렇지 않으면 LRT[OCRF]를 설정한다.
- 응답 내의 에러 비트가 설정되면, LRC는 이 응답을 "선택 (winning)" 응답으로 간주하고 이 응답으로 복귀된 데이터를 유지한다. 임의의 시간 LRT [E] 가 이미 설정되면, 새로운 응답들은 무시될 것이다.
LRC (752a-c) 각각은 동일한 클록 시에 동일한 KID에 대한 응답들을 수신할 수 있다. 이는 LRC (752a-c) 각각이 동일한 클록 시에 동일한 HPMRULE 및 TWRSPCNT을 업데이하고자 한다면 문제가 될 것이다. 이를 피하기 위해서, 프리프로세싱 블록 (753) 은 최소치를 유지시키고 나머지들을 버림으로써 임의의 매칭 키들에 대한 STRSP 응답들을 단일 응답으로 결합시킨다. 상기 "선택 (winning)" 응답은 LRC (752a-c) 로 계속되는 반면에, 나머지 것들은 제거된다. LRC_TWRSPCNT_DEC[1 :0] 신호가 생성되어서 LRCO 로 보내지며, 이는 TWRSPCNT를 통상적인 경우에서와 같이 단지 1 만큼 감분시키기보다는 복귀된 응답의 수만큼 감분시킨다. 매칭하지 않는 KID들에 대한 임의의 응답들은 LRC TWRSPCNT DEC == 1 로해서 수정되지 않은 채로 통과될 수 있다.
OCMEM 및 수퍼클러스터 및 BPP 테이블에 대한 호스트 판독/기록 응답들은 또한 그들의 각각의 클러스터 및 BPP 응답 버스들 (756) 을 통해서 LRCP (753) 으로 전송된다. 이러한 응답들은 전송을 위해서 버퍼링되기 위해서 LUF 출력 처리 블록 (LOP_OP) (도 20의 770) 으로 재디렉션 (redirection) 된다. 이들은 이제 LRC (752a-c) 로 갈 수 있다.
LRCP (753) 은 또한 룩업 클러스터 컴플렉스 (LCC) 가 데이터를 전송하는 것을 가능하게 하도록 요청/애크(ACK:acknowledge) 기능을 제공할 수 있다.
64-엔트리 LUF 응답 FIFO (LRF) (754) 는 해당 키에 대한 모든 응답들을 수신한 Keys/SXIDs에 대한 KID들을 유지하며, 이는 STRSP (서브-트리 응답) 이 결정되었음을 의미한다. 이로써, 키 요청이 (도 11을 참조하여서 상술한 바와 같이) LIP (424) 에 의해서 복수의 서브-트리 요청들로 스플리트 (split) 될 때에, 대응하는 결과들이 LRF (754) 에서 단일 응답으로 다시 병합된다. LOP_OP (770) (도 17 및 도 20) 은 LRF (754) 를 판독하여서 LRT (756a-b) 에서 TXBUFF (775) 로 전달될 준비를 하고 있는 엔트리들을 결정한다.
LRT (754) 는 LRC (752a-c) 와 출력과 연관된 버스들 및 BPP 버스들에 의해서 공급될 수 있다. 예시적인 실시예들에서, 3 개에 달하는 KID들이 각 클록 사이클 각 클록 동안에 LFR (FIFO) 에 기록될 수 있다. 하나의 엔트리가 각 클록 시에 LRF로부터 판독된다. 일반적으로, 복수의 STRSP들이 단일 KID 기록에 대해서 요구되기 때문에, 판독이 기록보다 매우 신속하게 발생할 수 있다.
연속적인 클록 사이클에서 백-투-백으로 마치는 독립적인 키들의 정렬로 인해서, LRF (FIFO) (754) 는 경우에 따라서 가득 차기 시작할 수 있다. 프로그램가능한 워터마크 (임계치) 가 LRF (754) 가 막 차기 시작할 때를 결정할 수 있다. 이 워터마크는 LRCP (753) (LUF 룰 계산자 프리프로세서) 가 STRSP 버스 (756) 상에서 응답들을 접수하는 것을 막게 할 수 있다.
도 19는 예시적인 실시예에서 예시적인 룩업 응답 처리 백 엔드 (LOP_BE) 의 블록도이다. LOP_BE (760) 은 LOP_FE (750) (도 18) 에서의 응답 FIFO (754) 로부터 작업을 풀링한다. LOP_BE (760) 은 액세스되는 TXID의 순서 그룹에 의해서 결정되는 바와 같이, 순서형 (in-order) 응답 및 무순서형 (out-of-order) 응답에 대해서 동작한다. 그룹 0 범위 내의 TXID들은 무순서형이다. 모든 다른 TXID들은 순서형일 수 있다. LOP_BE (760) 은 다음과 같은 순서형 응답들 및 무순서형 응답들을 수용하는 2 개의 모드들 중 하나의 모드로 동작한다:
- 순서형 응답들 (폴링 모드 (polling mode)) : 포인트가 LRT 내의 (해당 순서 그룹 범위 내에서 순환 방식으로 (in a circular fanshion) TXID들 워킹함으로써 결정된) 가장 오래된 (oldest) 요청에 대응하는 TXBUFF 엔트리를 추적한다. 이 XID에 대한 최종 STRSP가 수신되면, 모든 SXID의 것들이 호스트로의 전송을 위해서 인큐잉되고 LRT로부터 제거된다. 이어서, 이 포인터는 다음의 가장 오래된 TXID를 가리키도록 증분된다. 이는 다음의 순서형 응답이 복귀될 때까지 HOL 블록킹을 발생시킨다.
- 무순서형 응답들 (인터럽트 모드 (interrput mode)) : XID에 대한 최종 STRSP가 복귀되면 모든 SXID의 것들이 호스트로의 전송을 위해서 인큐잉되고 LRT로부터 제거된다.
또한, LOP_BE (760) 는 다수의 룩업 응답들 (LURSP) 을 단일 패킷으로 병합하거나 이들을 개별적으로 전송할 수 있다. 모든 순서형 응답들은 병합될 수 있다. 무순서형 (OOO) 응답들은 병합되거나 가능한한 빨리 호스트로 복귀된다. 전술한 동작에 대한 세부 사항들이 이하에서 기술된다.
순서형 처리 및 무순서형 처리 모두에서 초기 단계로서, LOP_BE (760) 은 응답 버퍼가 비어 있지 않게 되면 인터럽트 모드로 동작한다. LOP_BE (760) 은 무순서형 응답들을 완전하게 처리하며 순서형 응답들을 처리하는 초기 단계를 수행한다. 순서형 응답들의 마지막 처리는 이하에서 기술되는 바와 같은 순서형 머신 (in-order machine) 에 의해서 다루어진다.
오더링 및 병합 모든 경우에, 엔트리가 FIFO 판독 블록 (767) 에 의해서 응답 FIFO (754) 로부터 판독된 때에, LOP (760) 는 다음을 수행한다:
- 룩업 응답 테이블 (lookup response table) (LRT) (765) 및 이어서 LRT_INFO (766) 판독
- 룩업 응답 테이블 (LRT) (765) 및 LRT_INFO (766) 이 판독될 때에, 응답은 다음과 같은 가용 정보를 갖는다:
·KID
·TXID_FIRST
·TXID_LAST
·SXID : 어느 SXID가 이 것 (this one) 인지를 나타냄
·SXID_NUM : 얼마나 많은 SXID들이 이 응답 내에 존재하는지를 나타냄
·DONE_CNT : 얼마나 많은 SXID들이 병합되는지를 나타냄
- LRT 데이터를 TXBUFF (775) 로 이동시킴:
· SXIDO 또는 SXID 1 데이터를 LRT에서 TXBUFF로 이동 시킬 때에, TXID_FIRST가 TXBUFF로의 TXID 인덱스로서 사용됨
· SXID2 또는 SXID3 을 이동시킬 때에, TXID_LAST 가 TXID 인덱스로서 사용됨
· SXIDO 또는 SXID2 데이터가 STDATA_EVEN 내로 이동됨
· SXID1 또는 SXID3 데이터가 STDATA_ODD 내로 이동됨
- SXIDO이 아니면, KID를 자유 풀로 복귀시킴. 이하의 표에 의해서 표시된 바와 같이 SXIDO에 대해서 KID를 유지함
- LOP는 표 1에 열거된 다음의 추가 동작들을 수행한다:
표 1: 케이스에 기초한 응답 처리 머신 동작들
Figure 112014020978397-pct00001
Figure 112014020978397-pct00002
Figure 112014020978397-pct00003
순서형 머신 (768a-b) 은 응답들이 처리 완료 순서보다는 요청 순서대로 복귀되도록 응답들을 재오더링한다. 순서형 머신 (768a-b) 은 IN_ORDER_MIN_N 값 내지 IN_ORDER_MAX_CSR 값에 의해서 규정된 영역 내의 처음의 무효한 (non-valid) TXBUFF 위치에서 파킹한다 (parking). LOP_FE가 모든 필요한 정보가 LRT (765) 에서 TXBUFF (775) 로 이동하였음을 알리는 유효한 플래그들을 상기 위치에서 설정하면, 순서형 머신 (768a-b) 은 이 라인의 TXBUFF (775) 을 처리하고 TXBUFF (775) 내의 다음 위치로 증분하며 이 프로세스를 반복할 것을 대기한다. TXBUFF (775) 엔트리들이 이들이 도달함에 따라서 증가하는 순차적 순서로 입력되는 패킷들에 할당되기 때문에, 순서형 머신 (768a-b) 은 TXBUFF (775) 에 도달하는 순서와 상관 없이 엔트리들을 리스트로부터 순서대로 풀링할 것이다. 순서형 머신 (768a-b) 이 단일 병합된 패킷에 대하여 요구되는 모든 TXID들을 핸들링한다고 판단하면, 이들 TXID들을 TXLIST (769) 에 기록한다.
순서형 머신 (768a-b) 은 TXLIST (769) 내에 한번에 2 개에 달하는 TXBUFF 라인들을 입력할 수 있다. 다운스트림 출력 프로세서는 이러한 라인들을 FIFO로부터 백-투-백 방식으로 판독할 수 있다. 이러한 모드에서, 3 개 또는 4 개의 키들인 경우에, 순서형 머신 (768a-b) 은 TXID_FIRST을 TXID_FIRST_REGISTER 내에 저장하고 단일 사이클에서 TXID_FIRST 및 TXID_LAST를 TXLIST (769) 상에 기록할 수 있다. 무순서형 머신과 같이, 순서형 머신은 현재 작업 대상인 SXID를 추적하도록 SXID_COUNTER를 유지한다.
순서형 머신 (768a-b) 동작은 표 2에서 상세하게 기술된다.
표 2: 순서형 및 병합 - 순서형 머신 동작들
Figure 112014020978397-pct00004
Figure 112014020978397-pct00005
TXLIST (769) 는 TXID들의 FIFO이다. TXLIST (769) 는 LOP에 의해서 기록되며 호스트로 역 전송되기 위해 인터레이큰 SHIM로 전달할 TXBUFF를 결정하도록 (도 20을 참조하여서 이하에서 기술될) TX 큐 DMA 엔진에 의해서 사용된다. 순서형 처리에 있어서, 리스트 상의 TXID들의 순서는 일반적으로 호스트로의 전송 순서를 결정한다.
TXLIST (769) 는 클록당 1 개 또는 2 개의 엔트리들을 접수할 수 있다. 각 엔트리는 TXBUFF (775) 내의 라인을 나타내며 이 라인은 (하나 또는 2 개의 SXID를 나타내는) 1 또는 2 개의 HPRULE 엔트리들을 유지한다. 따라서, TXLIST (769) 에 기록된 각 라인은 소정의 XID에 대한 모든 응답들을 나타낼 수 있다.
TXLIST (769) 는 한번에 일 엔트리가 DMA 엔진 (도 20) 에 의해서 판독된다. TXID들이 이 리스트 상에 배치된 순서가 일반적으로 전송 순서를 결정할 수 있다. 예시적인 실시예에서, TXLIST (769) 는 대응하는 엔트리들 내에 하나 이상의 비트로서 저장될 수 있는 다음의 정보를 포함한다:
C : 병합.
- C==l 이면, 4 개에 달하는 키들을 갖는 (with up to 4 keys) 키 응답으로 응답을 형성한다.
- C==0 이면, 단일 키를 갖는 룩업 응답을 복귀시킨다.
SXID_INFO : 규정은 병합에 의존한다:
- C== 1 이면, SXID_INFO 는 병합할 키들의 개수이다. SXID_INFO == 0이면, 4 개의 키들을 병합한다.
- C==0 이면, SXID_INFO is 이 키의 SXID이다. SXID_INFO ==0 이면, 이는 SXIDO이다.
FREE_TXID : 유효 데이터를 갖는 TXID들이 패킷이 형성된 후에 자유롭게 될 수 있음 (release) 을 나타낸다.
자유롭게 될 TXID는 다음과 같이 결정된다:
- C=0이면,
·SXID_INFO가 이것이 SXIDO 또는 SXID1임을 표시하면, TXID_FIRST를 자유롭게 함
·SXID_INFO가 이것이 SXID2 또는 SXID3임을 표시하면, TXID_LAST를 자유롭게 함
- C=1이면,
·SXID_INFO가 라인 상의 1 개 또는 2 개의 유효한 SXID들을 표시하면, TXID_FIRST만를 자유롭게 함
·SXID_INFO가 라인 상의 3 개 또는 4 개의 유효한 SXID들을 표시하면, TXID_FIRST 및 TXID_LAST 모두를 자유롭게 함
TXID_FIRST : SXIDO 및 SXID1를 유지하는 TXID
TXID_LAST : SXID2 및 SXID3를 유지하는 TXID
- C==0이면, TXID_FIRST 또는 TXID_LAST 중 오직 하나만이 SXID_INFO에 의해서 표시된 SXID 값에 따라서 유효한 데이터를 가질 것이다.
- C==l이면, 유효한 데이터는 SXID_INFO에 의해서 표시된 SXID 카운트에 따라서 오직 TXID_FIRST 내에만 있거나 TXID_FIRST 및 TXID_LAST에 있을 수 있다.
도 20은 예시적인 실시예에서 예시적인 LOP 출력 프로세서 (LOP_OP) (770) 의 블록도이다. TXQ DMA 엔진 (772) 는 TX_LIST FIFO로부터 TXID들을 풀링한다. 인터레이큰을 통해서 전송되기 위해서 TX FIFO (778) 내에 배치되기 이전에 TXBUFF (775) 내의 대응하는 위치가 판독되어 응답 패킷들로 형성된다.
LOP_OP (770) 는 2 개의 상이한 모드인 병합 모드 및 비병합 모드로 동작할 수 있다. 병합 모드는 (상술한 바와 같은) TXLIST (769) FIFO에 의해서 결정된다. 패킷이 병합될 경우에, LOP_OP (770) 는 SXID_INFO를 사용하여서 TXLIST (769) 의 한 개 또는 2 개의 라인들이 4 개에 달하는 키들에 대해서 필요한 모든 TXID들로의 포인터들을 얻도록 판독될 필요가 있는지의 여부를 판정한다. 이어서, 이러한 4 개의 키들은 단일 패킷으로 결합 (병합) 될 것이다. 패킷이 병합되지 않는다면, TXLIST (769) 는 라인당 단일 SXID를 가질 것이다. 패킷이 병합되지 않는 경우에, SXID_INFO는 SXID를 특정하며 적합한 TXID가 다음과 같이 위치된다:
- SXID0 : TXBUFF를 인덱싱하기 위해서 오직 TXID_FIRST만을 사용하며, DATA_EVEN 필드가 유효함
- SXID1 : TXBUFF를 인덱싱하기 위해서 오직 TXID_FIRST만을 사용하며, DATA_ODD 필드가 유효함
- SXID2 : TXBUFF를 인덱싱하기 위해서 오직 TXID_LAST만을 사용하며, DATA_EVEN 필드가 유효함
- SXID3 : TXBUFF를 인덱싱하기 위해서 오직 TXID_LAST만을 사용하며, DATA_ODD 필드가 유효함
LOP_OP는 순서형 모드와 무순서형 (out of order: OOO) 모드 간에 차이를 만들지 않는데 그 이유는 TXLIST 내의 엔트리들은 그것이 요구된다면 이미 순서대로 입력되었다고 예상되기 때문이다. LOP_BE (760) 은 패킷이 순서대로 되면 C로 설정될 수 있다.
패킷 포맷터 (779) 는 인터레이큰을 통해서 호스트로 역 전송될 패킷들을 포맷한다. 룩업 응답들은 단일 SXID 또는 복수의 병합된 SXID들일 수 있다. OSI 인터레이큰 코어로의 인터페이스는 128 비트일 수 있으며 따라서 각 사이클은 2 개의 인터레이큰 워드들을 반송할 수 있다. 포맷터 (779) 는 복수의 SXID 응답들을 인터레이큰 코어를 위해 128 비트 패킷으로 팩킹한다.
도 21는 본 발명의 실시예들을 구현하기 위한 예시적인 데이터 구조들의 블록도이다. 구체적으로, LRT (765) 테이블, LRT_INFO (766) 테이블 및 TXBUFF (775) 테이블 내의 엔트리들이 RAM 또는 플롭들 (flops) 의 어레이와 같은 메모리 내에서 구성될 수 있는 바와 같이 도시되어 있다. 이 테이블들 각각에서, 비트들은 요구된 동시적 액세스의 개수만큼 구성될 수 있다. 예를 들어서, LRT (765) 의 TWRSPCNT 비트들은 클록당 3 개까지의 응답을 서비스하고 이와 동시에 스케줄링되는 새로운 키들에 대해서 기록을 서비스하도록 매 클록마다 판독 및 기록 액세스를 수행한다. 편리한 실시예에서, TWRSPCNT 및 유사한 다수의 액세스 필드들이 플롭들의 어레이로 구성될 수 있다.
LRT (765) 테이블 및 LRT_INFO (766) 테이블은 룩업 요청들이 클러스터들로 전송되면 LIP (424) (도 11) 의 스케줄러 (428a-b) 에 의해서 초기화된다. LRT (765) 테이블 및 LRT_INFO (766) 테이블은 각 키에 대한 최소의 가장 높은 우선 순위 룰 (highest-priority rule) (HPPULE) 을 결정하고 이 키에 대한 모든 응답들이 복귀되었는지의 여부를 판정하도록 LUF 응답 프로세서 (LRC) (752a-c) 에 의해서 사용된다. 각 LRT (765) 엔트리는 진행 중인 단일 키 탐색 (단일 SXID) 에 대응한다. LRT (765) 은 키에 의해서 인덱싱/참조되며 이 키는 (이하에서 기술될) 키 자유 풀로부터 분배된다. 스케줄링 후에, LRT (765) 내의 필드들은 LUF 출력 프로세서 프론트 엔드 (LOP_FE) (765a-b) 에 의해서 업데이트된다.
편리한 실시예에 따라서, LRT (765) 는 다음과 같이 구성될 수 있다:
- E : 에러 : 에러 없음, 보정 가능한 에러, 보정 불가능한 에러, 치명적 에러. 이는 스케줄러에 의해서 클리어 또는 설정되고 LOP_FE에 의해서 업데이트된다.
- TWRSPCNT : 트리 워킹 응답 카운트 : LOP_FE는 응답이 수신될 때마다 이를 감분시킨다. 이는 TLT로부터 판독된 개수로 스케줄러에 의해서 초기화된다. 제로일 때에, 이 SXID에 대한 모든 응답들이 복귀된 것이다.
- 유효 (valid) : 유효는 스케줄러에 의해서 생성되고 LOP_FE가 판독하고 그것이 업데이트하는 응답 데이터 필드의 뱅크 (bank) 에 대해서 언제나 1로 설정한다. LOP_FE가 제로를 판독하면, 대응하는 뱅크에 대한 LRT로부터의 응답 데이터 필드가 아직 유효하지 않음을 LOP_FE가 안다.
· 유효 = 3'b1xx : RSP0 뱅크가 유효함
· 유효 = 3'bx1x : RSP1 뱅크가 유효함
· 유효 = 3'bxx1 : BPP 뱅크가 유효함
- 응답 데이터 필드 : 이느 유효 (valid) 로 관리된 이중 포트들의 3 개의 뱅크 또는 플롭들의 어레이에 의해서 구현된다:
· STMIN : 최소치 룰 (Minimum rule) : valid (유효) == 1이면, LOP_FE는 LCC로부터 복귀된 값들을 LRT로부터 판독된 값과 비교하고 2 개 중 최소치를 유지한다.
· PORT (포트) : BPP로부터이면, 이는 BPP 응답으로부터 복귀된 STDATA [32]이다. 이 포트가 LCC로부터이면, 이는 제로이다.
· OCRF: 온 칩 룰 플래그 (on chip rule flag) : 응답이 BPP로부터이면, LOP_FE는 이를 제로로 설정한다. 응답이 LCC로부터이면, LOP_FE는 이를 1로 설정한다.
· STDATA: 응답으로서 호스트에 복귀될 데이터. LCC가 "매칭 없음"을 표시하는 STMIN을 복귀시키면, LOP_FE는 OxFFFFFFFF를 강제할 것이다. 그렇지 않으면, LOP_FE은 최소 STMIN과 연관된 STDATA 값을 사용해야 한다.
- LRTID : LRT_INFO 테이블로의 인덱싱. LRT_INFO은 전체 그룹에 대한 정보를 유지하며, 따라서 각 KID 엔트리에 의해서 포인팅될 수 있다.
- SXID: 이 키에 대한 서브 트랜스퍼 (transfer) ID. 0= SXIDO, 1=SXID1, 2=SXID2, 3=SXID3.
- C : 응답들을 병합. 이 정보는 GDT로부터 판독된다.
- TID : 해당 트랜스퍼에 대한 트리 ID. 해당 SXID에 대한 모든 응답들이 복귀될 때에 (TWRSPCNT==0), 대응하는 TID 카운터를 감분한다.
LRT_INFO (766) 엔트리는 동일한 룩업 요청에 대한 모든 키들에 대응한다 (상술한 바와 같이, 일 룩업 요청은 각각이 다수의 SXID들을 갖는 4 개의 키들까지 생성할 수 있다). LRT_INFO (766) 테이블은 키들의 그룹을 병합하는데 필요한 정보를 포함한다. LRT_INFO (766) 테이블은 (이하에서 기술되는) LRTID 풀로부터 분배되는 LRTID에 의해서 인덱싱/참조된다. 일 실시예에서, LRT_INFO은 LRT와 동일한 깊이를 갖는다.
편리한 실시예에 따라서, LRT_INFO (766) 은 (도 21을 참조하여서) 다음과 같이 구성될 수 있다:
- DONE_COUNT : 여전히 병합될 필요가 있는 해당 그룹에 대한 복수의 키들에 대한 카운터. 이는 스케줄러에 의해서 설정되며, SXID가 모든 응답들을 수신할 때마다 (즉, TWRSPCNT 가 제로로 갈 때마다), 감분된다.
- TXID_FIRST : SXIDO 및 SXID1에 대응하는 TXID로의 포인터. (이는 무순서형 모드 (OOO 모드) 에서 병합의 경우에 단일 클록에서 양 (both) TXID들을 TX LIST로 전달하는데 사용됨).
- TXID_LAST - SXID2 및 SXID3에 대응하는 TXID로의 포인터. (이는 무순서형 모드 (OOO 모드) 에서 병합의 경우에 단일 클록에서 양 (both) TXID들을 TX LIST로 전달하는데 사용됨).
- NUM_OF_SXIDS : 해당 요청에 대한 SXID들의 총 개수. 2'b00은 4 개의 SXID들을 표시함.
TXBUFF (775) 테이블은 요청들이 호스트로부터 도달할 때에 LIP 분배자 (460a-b) (도 11) 에 의해서 초기화된다. TXBUFF (775) 테이블은 선택 사양적으로 응답들이 요청들이 수신된 순서와 동일한 순서로 호스트에 역으로 전송되도록 응답들이 재오더링되게 LOP 출력 프로세서 (LOP_OP) (770) (도 20) 에 의해서 사용된다. TXBUFF (775) 테이블은 또한 룩업 응답들이 클러스터들에 의해서 복귀되는 레이트가 호스트 인터페이스가 이들을 배출할 수 있는 레이트를 초과하는 시간에 대한 버퍼링을 제공한다. TXBUFF (775) 테이블은 (이하에서 보다 상세하게 기술될) TXID 자유 풀로부터 분배되는 TXID에 의해서 인덱싱/참조된다.
GDT 테이블 (426) (도 11) 의 ORDER_GROUP 필드는 응답들이 요청들의 순서로 복귀되는지의 여부 또는 응답들이 무순서로 복귀되는지의 여부, 즉 응답들이 기다리자마자 복귀되는지의 여부를 규정한다.
편리한 실시예에 따라서, TXBUFF (775) 은 (도 7을 참조하여서) 다음과 같이 구성될 수 있다:
- E : 에러 : 에러 없음, 보정 가능한 에러, 보정 불가능한 에러, 치명적 에러
- DATA ODD : SXID1 또는 SXID3 에 대한 최소치 룰
· OCRF (온 칩 룰 플래그 : On chip Rule Flag) : LCC로부터의 결과이면 설정되고 BPP로부터이면 클리어됨
· PORT : BPP로부터의 결과이면 DDR 포트이며 LCC로부터이면 클리어됨
· STDATA : BPP로부터이면 DDR의 어드레스이며 LCC로부터이면 클러스터의 어드레스
- XID : 트랜스퍼 ID
- VALID_EVEN, VALID_ODD : 해당 DATA 엔트리가 유효하면 1로 설정되고 오직 순서형 엔진에 의해서만 사용된다.
- C : 이 응답을 병합함. 이 정보는 GDT로부터 판독된다.
- LAST : 이는 이 TXBUFF 라인이 그룹 내의 최종 SXID를 포함함을 표시한다.
- Need both (둘이 필요함 여부) : 0은 오직 유효한 짝수 데이터만이 필요함을 나타낸다. 1은 짝수 및 홀수가 모두 필요함을 나타낸다.
KID 자유 풀은 KID들을 스케줄러에 분배한다. 각 KID는 룩업 응답 테이블 (LRT) (765) 내의 하나의 라인을 나타낸다. KID들은 임의의 순서로 스케줄러에 분배된다. LRT (765) 데이터가 TXBUFF (775) 이 이동하자마자 KID들은 임의의 순서로 LURSP 엔진에 의해서 자유 풀로 한 번에 하나씩 복귀된다. KID 자유 풀은 FIFO로서 구현될 수 있으며 각 위치 (location) 를 그 자신의 어드레스로 설정함으로써 초기화된다. 예시적인 실시예에서, 수퍼클러스터당 하나의 KID 자유 풀이 존재할 수 있다.
LRTID 자유 풀은 LRTID들을 스케줄러에 분배한다. 각 LRTID는 룩업 응답 정보 테이블 (LRT_INFO) (766) 내의 하나의 라인을 나타낸다. LRTID들은 임의의 순서로 스케줄러에 분배된다. 키들이 병합을 마치면, LRTID들은 임의의 순서로 LURSP 엔진에 의해서 이 자유 풀로 한 번에 하나씩 복귀된다. LRTID 자유 풀은 FIFO로서 구현될 수 있으며 각 위치 (location) 를 그 자신의 어드레스로 설정함으로써 초기화된다. 예시적인 실시예에서, 수퍼클러스터당 하나의 LRTID 자유 풀이 존재할 수 있다.
TXID 자유 풀은 TXID들을 스케줄러 (428a-b) (도 11) 에 분배한다. 각 TXID는 TXBUFF (775) 어레이 내의 하나의 라인을 나타낸다. TXID 자유 풀은 메모리보다 작은 (memory-less) FIFO로부터 구축되며 풀 상태 (full) 로 초기화될 수 있다. TXID 자유 풀은 순서형 동작을 위해서 사용될 수 있으며, 엔트리들은 증가하는 순서로 분배되며 동일한 순서로 복귀된다. 따라서, 증가하는 TXID가 TXBUFF (775) 를 인덱싱하는데 사용되면, 엔트리들은 순서대로 풀링될 것이다.
복귀된 TXID가 테일 포인터 (tail pointer) 와 비교될 수 있다. 에러 출력 (FIFO 에러) 이 이러한 값들이 계속 미스매칭 (mismatching) 하면 설정될 수 있으며, 이는 TXBUFF 내의 몇몇 에러를 나타내며, 테일 포인터는 증분되지 않는다. 헤드 포인터가 테일 포인터에 도달하면, 동작들이 결국 정지될 수 있다. FIFO가 가득 차 있을 때에 푸시 (push) 하려는 시도가 있는 경우에 다른 에러 출력 (오버플로우 에러) 이 설정되며, 이도 역시 TXBUFF (775) 내에 에러가 있음을 나타낸다. 엠프티 신호 (empty signal) 가 해당 사이클에서 로우 (low) 일 때에만 팝 (pop) 출력 인터페이스 상의 TXID 출력들이 유효할 수 있다.
순서형 자유 풀의 최대 값 및 최소 값은 64 로케이션 입도로 해서 CSR를 통해서 호스트 프로그램 가능하다. 이 CSR은 최대 값의 비트 [11:6] 를 설정한다. 최소 값의 비트 [11:6] 은 이전의 그룹의 최대 값에 1을 더함으로써 결정된다. 최대 값의 비트 [5:0] 는 모두 1로 설정되며, 최소 값의 비트 [5:0] 는 모두 0로 설정된다. 이러한 값들을 변경한 후에, TXID_RESET_POINTERS CSR이 변경이 효과를 보기 위해서 1에서 0으로 천이되어야 한다. 예시적인 실시예에서, 2 개의 순서형 자유 풀들이 각각 순서 그룹들 1 및 2에 대해서 구현될 수 있다.
무순서형 TXID 자유 풀들은 TXID들을 스케줄러에 분배한다. 이러한 분배는 순서 그룹 0에 대응한다. 각 TXID는 TXBUFF (775) 어레이 내의 하나의 라인을 나타낸다. 이 어레이는 FIFO일 수 있으며 각 엔트리가 자신의 어드레스를 포함하도록 초기화될 수 있다.
순서형 동작 동안에, 엔트리들은 증가하는 순서로 분배되고 동일한 순서로 복귀될 수 있다. 따라서, 증가하는 TXID가 TXBUFF (775) 를 인덱싱하는데 사용되면, 엔트리들은 순서대로 풀링될 것이다. 이와 대조하여서, 무순서형 (OOO) 동작 동안에, 엔트리들은 임의의 순서로 복귀될 것이며 따라서 리스트는 무순서로 될 것 이다. 순서가 없다고 하여도 단점이 있는 것은 아닌데 그 이유는 순서는 그러한 동작 하에서는 무시되기 때문이다. 예시적인 실시예에서, 단일 무순서형 풀은 순서 그룹 0에 대해서 구현될 수 있다. 이 무순서형 풀로부터의 TXID들의 최대 값은 64 로케이션 입도로 해서 CSR를 통해서 호스트 프로그램 가능하다. 이러한 값들을 변경한 후에, 이러한 변경이 효과를 취하도록 TXID_RESET_POINTERS CSR은 1에서 0으로 천이될 수 있다.
도 22a는 단일 SXID에 속하는 복수의 서브-트리 응답들 중 최고의 우선 순위를 갖는 응답을 선택하기 위한 예시적인 절차의 흐름도이다. 이 프로세스는 "병합(merging)"으로서 지칭된다. 도 22b는 예시적인 실시예에 따라서 내부 리소스들로부터 수신된 응답들을 오더링 및 병합하기 위한 예시적인 절차의 흐름도이다. 이러한 절차는 도 17 내지 도 21을 참조하여서 상술된 바와 같은 프로세스로부터 도출된다. 이 절차는 LOP (예를 들어서, 도 17의 LOP (446)) 에 의해서 수행될 수 있다. 이 절차는 또한 이하에서 기술되는 예시적인 절차를 나타내는 인스트럭션을 로딩 및 실행함으로써 LOP로 변환되는 컴퓨터 (또는 프로세서) 에 의해서 수행될 수도 있다.
본 발명의 실시예들에 따라서, LUF 출력 프로세서 (LOP) 는 다른 노드들의 네트워크 내의, 스위치 또는 라우터와 같은 물리적 네트워크 노드 (또는 디바이스) 일 수 있다. LOP는 이 노드의 구성 요소, 모듈, 블레이드 또는 카드와 같은 물리적 네트워크 노드 (또는 디바이스) 의 일부일 수 있다.
본 발명의 다른 실시예들에 따라서, LOP는 (도 23을 참조하여서 이하에서 보다 상세하게 기술될 바와 같은) 프로세서, 메모리, 통신 인터페이스 등을 갖는 범용 컴퓨터이다. 이 범용 컴퓨터는 예를 들어서 이 컴퓨터로 하여금 최적의 매칭 결과를 판정하고 호스트로 이를 응답으로 보내도록 호스트로부터 수신된 룩업 요청을 처리하게 하는 인스트럭션들을 프로세서 내로 로딩함으로써 LOF 및 그의 구성 요소로 변환된다.
도 23은 본 발명의 다양한 실시예들이 구현될 수 있는 컴퓨터 (500) 의 내부 구조의 블록도이다. 이 컴퓨터 (500) 는 시스템 버스 (579) 를 포함하고, 이 버스는 컴퓨터 또는 프로세싱 시스템의 구성 요소들 간에서의 데이터 전달을 위해서 사용되는 하드웨어 라인들의 세트이다. 버스 (579) 는 본질적으로 컴퓨터 시스템의 상이한 요소들 (예를 들어서, 프로세서, 데이터 저장부, 메모리, 입출력 포트들, 네트워크 포트들 등) 을 상호 접속시켜서 이러한 요소들 간에 정보가 전달될 수 있게 하는 공유형 콘듀트 (conduit) 이다. 이 시스템 버스 (579) 에 다양한 입력 및 출력 장치들 (예를 들어서, 키보드, 마우스, 디스플레이, 프린터, 스피커 등) 을 컴퓨터 (500) 에 연결시키기 위한 입출력 장치 인터페이스 (582) 가 부착된다. 네트워크 인터페이스 (586) 는 컴퓨터 (500) 가 네트워크에 부착된 다양한 다른 장치들에 연결되게 한다. 메모리 (590) 는 (도 8의 절차와 같은) 본 발명의 실시예를 구현하는데 사용되는 컴퓨터 소프트웨어 인스트럭션 (592) 및 데이터 (594) 를 휘발성으로 저장한다. 디스크 저장 장치 (595) 는 본 발명의 실시예를 구현하는데 사용되는 컴퓨터 소프트웨어 인스트럭션 (592) 및 데이터 (594) 를 비휘발성으로 저장한다. 중앙 프로세서 유닛 (CPU) (584) 이 시스템 버스 (579) 에 부착되어서 컴퓨터 인스트럭션들을 실행시킨다.
일 실시예에서, 프로세서 루틴 (592) 및 데이터 (594) 는 본 발명의 실시예들을 위한 소프트웨어 인스트럭션들의 적어도 일부를 제공하는 (예를 들어서, 하나 이상의 DVD-ROM, CD-ROM, 디스켓, 테이프, 등과 같은 분리 가능한 저장 매체와 같은) 컴퓨터 판독 가능한 매체를 포함하는 컴퓨터 프로그램 제품 (일반적으로 참조 부호 (592)) 이다. 컴퓨터 프로그램 제품 (592) 은 본 기술 분야에서 잘 알려진 바와 같은 임의의 적합한 소프트웨어 설치 절차에 의해서 설치될 수 있다. 다른 실시예들에서, 소프트웨어 인스트럭션들의 적어도 일부분은 또한 케이블, 통신 및/또는 무선 접속을 통해서 다운로드될 수 있다.
또한, 본 발명의 실시예들은 다양한 컴퓨터 아키텍처들로 구현될 수 있다. 도 23의 범용 컴퓨터는 본 발명의 임의의 실시예들을 예시적이면서 비한정적으로 설명하기 위한 것이다.
본 발명은 본 발명의 예시적인 실시예들을 참조하여서 특정하게 도시 및 기술되었지만, 형태 및 세부 사항에 있어서 다양한 변경이 첨부된 청구 범위에 의해서 포함되는 본 발명의 범위를 벗어나지 않으면서 이루어질 수 있음을 본 기술 분야의 당업자는 이해할 것이다.
실시예들은 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 또한, 실시예들은 하나 이상의 프로세서에 의해서 판독 및 실행될 수 있는 비일시적 머신 판독 가능한 매체 상에 저장된 인스트럭션들로서 구현될 수 있다. 비일시적 머신 판독 가능한 매체는 머신 (예를 들어서, 컴퓨팅 디바이스) 에 의해서 판독가능한 형태로 정보를 전송 또는 저장하기 위한 임의의 메카니즘을 포함할 수 있다. 예를 들어서, 비일시적 머신 판독 가능한 매체는 ROM, RAM, 자기 디스크 저장 매체, 광학 저장 매체, 플래시 메모리 장치 등을 포함할 수 있다. 또한, 펌웨어, 소프트웨어, 루틴 또는 인스트럭션들이 본 명세서에서 소정의 동작들을 수행하는 것으로서 기술될 수 있다. 그러나, 이러한 설명들은 단지 편이성을 위한 것일 뿐이며 실제로 이러한 동작들은 컴퓨팅 디바이스, 프로세서, 제어기, 또는 펌웨어, 소프트웨어, 루틴, 인스트럭션들 등을 실행하는 다른 장치들로부터 이루어질 수 있다.
블록도 및 흐름도 (예를 들어서, 도 6) 는 보다 많은 또는 많은 적은 수의 요소들을 포함하거나 상이하게 구성되거나 상이하게 표현될 수 있다. 구현이 본 발명의 실시예들의 실행을 예시하는 블록도 및 흐름도 및 이들의 수를 지정할 수 있다.

Claims (28)

  1. 패킷을 처리하기 위한 장치에 의해 수행되는 패킷 처리 방법으로서,
    패킷의 패킷 헤더 및 연관된 그룹 식별자 (GID) 를 포함하는 룩업 요청을 수신하는 단계;
    상기 패킷 헤더의 데이터에 기초하여서 적어도 하나의 키를 생성하는 단계;
    적어도 하나의 테이블 식별자 (TID) 를 결정하도록 상기 GID를 보편적 규정 테이블 (global definition table) 과 비교하는 단계;
    상기 패킷에 대한 룰 매칭 (rule matching) 을 동작시킬 수 있는 프로세싱 클러스터들의 서브세트를 상기 TID에 기초하여서 결정하는 단계;
    가용성 (availability) 에 기초하여서 상기 서브세트의 프로세싱 클러스터들 중 하나를 선택하는 단계; 및
    적어도 하나의 키 요청을 상기 선택된 프로세싱 클러스터에 포워딩하는 단계를 포함하며,
    상기 키 요청은 상기 키를 사용하여 룰 매칭을 개시시키도록 상기 적어도 하나의 키 및 상기 적어도 하나의 TID를 포함하는,
    패킷 처리 방법.
  2. 제 1 항에 있어서,
    패킷 헤더 인덱스 (PHIDX) 를 결정하도록 상기 GID를 보편적 규정 테이블과 비교하는 단계를 더 포함하는,
    패킷 처리 방법.
  3. 제 2 항에 있어서,
    상기 적어도 하나의 키는 상기 PHIDX에 따라서 생성되는,
    패킷 처리 방법.
  4. 제 3 항에 있어서,
    상기 PHIDX는 패킷 헤더 테이블 (PHT) 내의 엔트리를 인덱싱하며,
    상기 엔트리는 상기 적어도 하나의 키를 생성하기 위해서 상기 패킷 헤더로부터 데이터를 추출하기 위한 룰들 (rules) 을 표시하는,
    패킷 처리 방법.
  5. 제 1 항에 있어서,
    키 포맷 테이블 인덱스 (KFTIDX) 를 결정하도록 상기 GID를 보편적 규정 테이블과 비교하는 단계를 더 포함하는,
    패킷 처리 방법.
  6. 제 5 항에 있어서,
    상기 KFTIDX는 키 포맷 테이블 내의 엔트리를 인덱싱하며,
    상기 엔트리는 상기 프로세싱 클러스터에서 상기 키로부터 필드들을 추출하기 위한 인스트럭션들을 표시하는,
    패킷 처리 방법.
  7. 제 5 항에 있어서,
    상기 키 요청은 상기 KFTIDX를 더 포함하는,
    패킷 처리 방법.
  8. 제 1 항에 있어서,
    상기 적어도 하나의 키는 복수의 키들을 포함하며,
    상기 적어도 하나의 키 요청은 복수의 키 요청을 포함하며,
    상기 복수의 키 요청 중 각각의 키 요청은 상기 복수의 키들 중 상이한 키를 포함하는,
    패킷 처리 방법.
  9. 제 8 항에 있어서,
    상기 복수의 키들 중 각각의 키는 상기 복수의 키들 중 다른 키에 포함된 데이터와 구별되는 상기 패킷 헤더의 데이터의 적어도 일부를 포함하는,
    패킷 처리 방법.
  10. 제 1 항에 있어서,
    상기 프로세싱 클러스터는 상기 프로세싱 클러스터의 서브세트 중 각각의 프로세싱 클러스터에서 계류 중인 (pending) 요청들의 개수에 대한 상기 프로세싱 클러스터에서 계류 중인 요청들의 개수에 기초하여서 선택되는,
    패킷 처리 방법.
  11. 제 10 항에 있어서,
    상기 선택된 프로세싱 클러스터에서 계류 중인 요청들의 개수는 상기 프로세싱 클러스터들의 서브세트 중에서 최소인,
    패킷 처리 방법.
  12. 제 10 항에 있어서,
    상기 프로세싱 클러스터들의 서브세트 중 각각의 프로세싱 클러스터에서 계류 중인 요청들의 개수의 카운트를 유지하는 단계를 더 포함하는,
    패킷 처리 방법.
  13. 제 1 항에 있어서,
    선택된 프로세싱 클러스터가 가용될 수 없다고 검출되면, 상기 적어도 하나의 키 요청을 리트리 큐 (retry queue) 로 포워딩하는 단계를 더 포함하는,
    패킷 처리 방법.
  14. 제 13 항에 있어서,
    상기 리트리 큐로부터의 상기 적어도 하나의 요청을 상기 선택된 프로세싱 클러스터로 포워딩하기 위해서 상기 선택된 프로세싱 클러스터에 액세스하는 단계를 더 포함하는,
    패킷 처리 방법.
  15. 제 13 항에 있어서,
    임계치 (threshold) 검출에 응답하여, 상기 리트리 큐가 빌 (empty) 때까지 상기 리트리 큐 내의 엔트리들을 처리하는 단계를 더 포함하는,
    패킷 처리 방법.
  16. 제 15 항에 있어서,
    상기 임계치는 타임아웃 (timeout), 상기 리트리 큐 내의 엔트리들의 개수 및 신규 작업 큐에 의해서 처리된 엔트리들의 개수 중 적어도 하나를 포함하는,
    패킷 처리 방법.
  17. 제 1 항에 있어서,
    상기 프로세싱 클러스터들 중 어느 것이 최대 미사용 용량 (greatest unused capacity) 을 갖는지를 나타내는 표시를 생성하는 단계를 더 포함하며,
    상기 서브세트의 프로세싱 클러스터들 중 하나를 선택하는 단계는 상기 표시에 기초하는,
    패킷 처리 방법.
  18. 제 1 항에 있어서,
    상기 적어도 하나의 키 요청을 복수의 서브-트리 요청들 (sub-tree requests) 로 분할하는 단계를 더 포함하는,
    패킷 처리 방법.
  19. 패킷 처리 장치로서,
    패킷의 패킷 헤더 및 연관된 그룹 식별자 (GID) 를 포함하는 룩업 요청을 수신하도록 구성된 레지스터;
    상기 패킷 헤더의 데이터에 기초하여서 적어도 하나의 키를 생성하도록 구성된 패킷 헤더 추출자 (PHE) ;
    적어도 하나의 테이블 식별자 (TID) 를 결정하도록 상기 GID를 보편적 규정 테이블과 비교하도록 구성된 분배자; 및
    스케줄러 출력 관리자를 포함하며,
    상기 스케줄러 출력 관리자는,
    상기 패킷에 대한 룰 매칭을 동작시킬 수 있는 프로세싱 클러스터들의 서브세트를 상기 TID에 기초하여서 결정하고,
    가용성에 기초하여서 상기 서브세트의 프로세싱 클러스터들 중 하나를 선택하며,
    적어도 하나의 키 요청을 상기 선택된 프로세싱 클러스터에 포워딩하도록 구성되며,
    상기 키 요청은 상기 키를 사용하여 룰 매칭을 개시시키도록 상기 적어도 하나의 키 및 상기 적어도 하나의 TID를 포함하는,
    패킷 처리 장치.
  20. 제 19 항에 있어서,
    상기 분배자는 패킷 헤더 인덱스 (PHIDX) 를 결정하도록 상기 GID를 보편적 규정 테이블과 비교하도록 더 구성되는,
    패킷 처리 장치.
  21. 제 20 항에 있어서,
    상기 적어도 하나의 키는 상기 PHIDX에 따라서 생성되는,
    패킷 처리 장치.
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
KR1020147005800A 2011-08-02 2012-08-02 룩업 프론트 엔드 입력 프로세서 KR101476114B1 (ko)

Applications Claiming Priority (23)

Application Number Priority Date Filing Date Title
US201161514447P 2011-08-02 2011-08-02
US201161514459P 2011-08-02 2011-08-02
US201161514400P 2011-08-02 2011-08-02
US201161514379P 2011-08-02 2011-08-02
US201161514406P 2011-08-02 2011-08-02
US201161514407P 2011-08-02 2011-08-02
US201161514438P 2011-08-02 2011-08-02
US201161514344P 2011-08-02 2011-08-02
US201161514463P 2011-08-02 2011-08-02
US201161514382P 2011-08-02 2011-08-02
US201161514450P 2011-08-02 2011-08-02
US61/514,447 2011-08-02
US61/514,438 2011-08-02
US61/514,400 2011-08-02
US61/514,407 2011-08-02
US61/514,463 2011-08-02
US61/514,379 2011-08-02
US61/514,450 2011-08-02
US61/514,406 2011-08-02
US61/514,459 2011-08-02
US61/514,382 2011-08-02
US61/514,344 2011-08-02
PCT/US2012/049400 WO2013019996A1 (en) 2011-08-02 2012-08-02 Lookup front end input processor

Publications (2)

Publication Number Publication Date
KR20140053272A KR20140053272A (ko) 2014-05-07
KR101476114B1 true KR101476114B1 (ko) 2014-12-23

Family

ID=46642652

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020147005633A KR101476113B1 (ko) 2011-08-02 2012-08-02 룩업 클러스터 컴플렉스
KR1020147005800A KR101476114B1 (ko) 2011-08-02 2012-08-02 룩업 프론트 엔드 입력 프로세서

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020147005633A KR101476113B1 (ko) 2011-08-02 2012-08-02 룩업 클러스터 컴플렉스

Country Status (5)

Country Link
US (27) US8954700B2 (ko)
JP (1) JP5657840B2 (ko)
KR (2) KR101476113B1 (ko)
CN (2) CN103858392B (ko)
WO (5) WO2013019981A1 (ko)

Families Citing this family (163)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8954700B2 (en) 2011-08-02 2015-02-10 Cavium, Inc. Method and apparatus for managing processing thread migration between clusters within a processor
US9183244B2 (en) 2011-08-02 2015-11-10 Cavium, Inc. Rule modification in decision trees
US10229139B2 (en) 2011-08-02 2019-03-12 Cavium, Llc Incremental update heuristics
US8923306B2 (en) 2011-08-02 2014-12-30 Cavium, Inc. Phased bucket pre-fetch in a network processor
US9208438B2 (en) 2011-08-02 2015-12-08 Cavium, Inc. Duplication in decision trees
US9159420B1 (en) * 2011-08-16 2015-10-13 Marvell Israel (M.I.S.L) Ltd. Method and apparatus for content addressable memory parallel lookup
US9767058B2 (en) 2011-11-17 2017-09-19 Futurewei Technologies, Inc. Method and apparatus for scalable low latency solid state drive interface
US20130135816A1 (en) * 2011-11-17 2013-05-30 Futurewei Technologies, Inc. Method and Apparatus for Scalable Low Latency Solid State Drive Interface
US9049200B2 (en) * 2012-07-27 2015-06-02 Cisco Technology, Inc. System and method for improving hardware utilization for a bidirectional access controls list in a low latency high-throughput network
US9143449B2 (en) * 2012-07-31 2015-09-22 Cisco Technology, Inc. Methods and apparatuses for improving database search performance
US9100366B2 (en) * 2012-09-13 2015-08-04 Cisco Technology, Inc. Early policy evaluation of multiphase attributes in high-performance firewalls
US20140089619A1 (en) * 2012-09-27 2014-03-27 Infinera Corporation Object replication framework for a distributed computing environment
US9307059B2 (en) * 2012-11-09 2016-04-05 Sap Se Retry mechanism for data loading from on-premise datasource to cloud
US9185057B2 (en) * 2012-12-05 2015-11-10 The Intellisis Corporation Smart memory
US9536016B2 (en) * 2013-01-16 2017-01-03 Google Inc. On-disk multimap
WO2014117353A1 (en) * 2013-01-31 2014-08-07 Hewlett-Packard Development Company, L.P. Incremental update of a shape graph
US9424366B1 (en) * 2013-02-11 2016-08-23 Marvell International Ltd. Reducing power consumption in ternary content addressable memory (TCAM)
US9578061B2 (en) 2013-03-13 2017-02-21 FireMon, LLC System and method for modeling a networking device policy
US9270704B2 (en) * 2013-03-13 2016-02-23 FireMon, LLC Modeling network devices for behavior analysis
US10083200B2 (en) 2013-03-14 2018-09-25 Cavium, Inc. Batch incremental update
KR101752583B1 (ko) 2013-03-14 2017-07-11 마이크론 테크놀로지, 인크. 트레이닝, 데이터 조직, 및/또는 섀도잉을 포함하는 메모리 시스템들 및 방법들
US9112767B2 (en) 2013-03-15 2015-08-18 Cavium, Inc. Method and an accumulator scoreboard for out-of-order rule response handling
US9195939B1 (en) 2013-03-15 2015-11-24 Cavium, Inc. Scope in decision trees
US9531647B1 (en) 2013-03-15 2016-12-27 Cavium, Inc. Multi-host processing
JP6976682B2 (ja) * 2013-03-15 2021-12-08 ビデリ、インコーポレイテッドVideri Inc. デジタル・アートを表示、配信、鑑賞および制御し、画像形成するためのシステムおよび方法
US9595003B1 (en) 2013-03-15 2017-03-14 Cavium, Inc. Compiler with mask nodes
US9130819B2 (en) 2013-03-15 2015-09-08 Cavium, Inc. Method and apparatus for scheduling rule matching in a processor
US9276846B2 (en) 2013-03-15 2016-03-01 Cavium, Inc. Packet extraction optimization in a network processor
US9430511B2 (en) * 2013-03-15 2016-08-30 Cavium, Inc. Merging independent writes, separating dependent and independent writes, and error roll back
KR20140131781A (ko) * 2013-05-06 2014-11-14 삼성전자주식회사 메모리 제어 장치 및 방법
US10862731B1 (en) * 2013-06-27 2020-12-08 EMC IP Holding Company LLC Utilizing demonstration data based on dynamically determining feature availability
US9286217B2 (en) * 2013-08-26 2016-03-15 Qualcomm Incorporated Systems and methods for memory utilization for object detection
US9356818B2 (en) * 2013-10-30 2016-05-31 Telefonaktiebolaget Lm Ericsson (Publ) Method and computing device for packet classification
US9674086B2 (en) * 2013-11-05 2017-06-06 Cisco Technology, Inc. Work conserving schedular based on ranking
US9620213B2 (en) * 2013-12-27 2017-04-11 Cavium, Inc. Method and system for reconfigurable parallel lookups using multiple shared memories
US9379963B2 (en) 2013-12-30 2016-06-28 Cavium, Inc. Apparatus and method of generating lookups and making decisions for packet modifying and forwarding in a software-defined network engine
US9825884B2 (en) 2013-12-30 2017-11-21 Cavium, Inc. Protocol independent programmable switch (PIPS) software defined data center networks
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
US9544402B2 (en) 2013-12-31 2017-01-10 Cavium, Inc. Multi-rule approach to encoding a group of rules
US9667446B2 (en) 2014-01-08 2017-05-30 Cavium, Inc. Condition code approach for comparing rule and packet data that are provided in portions
CN103763197B (zh) * 2014-01-27 2017-04-12 杭州华三通信技术有限公司 一种流表项冲突检测装置和方法
WO2015165104A1 (zh) 2014-04-30 2015-11-05 华为技术有限公司 查找装置及方法
US9497119B2 (en) * 2014-05-22 2016-11-15 International Business Machines Corporation Supporting access control list rules that apply to TCP segments belonging to ‘established’ connection
US9485257B2 (en) 2014-05-22 2016-11-01 International Business Machines Corporation Atomically updating ternary content addressable memory-based access control lists
US9749328B2 (en) 2014-05-22 2017-08-29 International Business Machines Corporation Access control list-based port mirroring techniques
US9722931B2 (en) 2014-06-05 2017-08-01 International Business Machines Corporation Unified framework for isolating multicast and broadcast frames to a traffic class separate from a traffic class used for unicast frames
US9344373B2 (en) * 2014-06-13 2016-05-17 International Business Machines Corporation Packet I/O support for a logical switch router architecture
KR101535813B1 (ko) * 2014-10-17 2015-07-10 한국과학기술정보연구원 복합 이벤트 처리를 위한 이벤트 구성 규칙의 동적 업데이트를 위한 시스템 및 방법
US11218410B2 (en) 2014-11-10 2022-01-04 Marvell Asia Pte, Ltd. Hybrid wildcard match table
US11943142B2 (en) 2014-11-10 2024-03-26 Marvell Asia Pte, LTD Hybrid wildcard match table
US10116564B2 (en) * 2014-11-10 2018-10-30 Cavium, Inc. Hybrid wildcard match table
US9485179B2 (en) * 2014-11-13 2016-11-01 Cavium, Inc. Apparatus and method for scalable and flexible table search in a network switch
US9692727B2 (en) 2014-12-02 2017-06-27 Nicira, Inc. Context-aware distributed firewall
US9552327B2 (en) 2015-01-29 2017-01-24 Knuedge Incorporated Memory controller for a network on a chip device
US10061531B2 (en) 2015-01-29 2018-08-28 Knuedge Incorporated Uniform system wide addressing for a computing system
KR102328071B1 (ko) * 2015-02-04 2021-11-18 한국전자통신연구원 광전송망의 트래픽을 처리하는 방법 및 장치
JP6598188B2 (ja) * 2015-02-27 2019-10-30 株式会社エヴリカ 情報処理装置、方法およびプログラム
US20170288968A1 (en) * 2015-03-23 2017-10-05 Hewlett Packard Enterprise Development Lp Compiling network policies
JP6767361B2 (ja) * 2015-03-27 2020-10-14 古河電気工業株式会社 電磁シールド管、電磁シールド構造
US20160321285A1 (en) * 2015-05-02 2016-11-03 Mohammad Faraz RASHID Method for organizing and distributing data
US20160335298A1 (en) * 2015-05-12 2016-11-17 Extreme Networks, Inc. Methods, systems, and non-transitory computer readable media for generating a tree structure with nodal comparison fields and cut values for rapid tree traversal and reduced numbers of full comparisons at leaf nodes
US10075998B2 (en) * 2015-05-14 2018-09-11 Intel IP Corporation Wireless device, method, and computer readable media for signaling a resource allocation in a high efficiency wireless local-area network
US10115463B1 (en) * 2015-06-25 2018-10-30 Xilinx, Inc. Verification of a RAM-based TCAM
US20170017567A1 (en) 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Implementing Distributed-Linked Lists For Network Devices
US20170017419A1 (en) 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Enabling High Read Rates To Data Element Lists
US20170017414A1 (en) 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Implementing Hierarchical Distributed-Linked Lists For Network Devices
US20170017420A1 (en) 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Enabling High Read Rates To Data Element Lists
US10423330B2 (en) * 2015-07-29 2019-09-24 International Business Machines Corporation Data collection in a multi-threaded processor
US9984144B2 (en) 2015-08-17 2018-05-29 Mellanox Technologies Tlv Ltd. Efficient lookup of TCAM-like rules in RAM
US10496680B2 (en) 2015-08-17 2019-12-03 Mellanox Technologies Tlv Ltd. High-performance bloom filter array
US10049126B2 (en) 2015-09-06 2018-08-14 Mellanox Technologies Tlv Ltd. Cuckoo hashing with selectable hash
US10451094B2 (en) * 2015-09-28 2019-10-22 Kubota Corporation Hydraulic system of work machine
CN105426352A (zh) * 2015-11-24 2016-03-23 国家电网公司 模板文档自动生成方法
US10554572B1 (en) * 2016-02-19 2020-02-04 Innovium, Inc. Scalable ingress arbitration for merging control and payload
US10027583B2 (en) 2016-03-22 2018-07-17 Knuedge Incorporated Chained packet sequences in a network on a chip architecture
US9892057B2 (en) 2016-03-31 2018-02-13 Mellanox Technologies Tlv Ltd. Single double cuckoo hash
US10346049B2 (en) 2016-04-29 2019-07-09 Friday Harbor Llc Distributed contiguous reads in a network on a chip architecture
CN106209626B (zh) * 2016-07-26 2019-12-06 新华三技术有限公司 自适应下发路由方法以及装置
WO2018025258A1 (en) * 2016-07-31 2018-02-08 Fenror7 Ltd Method and system for detecting movement of malware and other potential threats
US10068034B2 (en) 2016-09-07 2018-09-04 Mellanox Technologies Tlv Ltd. Efficient matching of TCAM rules using hash tables in RAM
US10204060B2 (en) 2016-09-13 2019-02-12 International Business Machines Corporation Determining memory access categories to use to assign tasks to processor cores to execute
US10169248B2 (en) 2016-09-13 2019-01-01 International Business Machines Corporation Determining cores to assign to cache hostile tasks
US10209900B2 (en) 2016-09-19 2019-02-19 Fungible, Inc. Buffer allocation and memory management using mapping table
US10303375B2 (en) 2016-09-19 2019-05-28 Fungible, Inc. Buffer allocation and memory management
US10454786B2 (en) * 2016-09-26 2019-10-22 Amazon Technologies, Inc. Multi-party updates to distributed systems
US10489424B2 (en) 2016-09-26 2019-11-26 Amazon Technologies, Inc. Different hierarchies of resource data objects for managing system resources
US10193862B2 (en) 2016-11-29 2019-01-29 Vmware, Inc. Security policy analysis based on detecting new network port connections
US10404594B2 (en) 2016-12-13 2019-09-03 Oracle International Corporation System and method for providing partitions of classification resources in a network device
US10341242B2 (en) * 2016-12-13 2019-07-02 Oracle International Corporation System and method for providing a programmable packet classification framework for use in a network device
CN106844041B (zh) * 2016-12-29 2020-06-16 华为技术有限公司 内存管理的方法及内存管理系统
US10084855B2 (en) * 2017-01-23 2018-09-25 Akamai Technologies, Inc. Pixel-based load balancing
US10257090B2 (en) * 2017-02-21 2019-04-09 Futurewei Technologies, Inc. Packet classification using multi-dimensional splitting
US10491521B2 (en) 2017-03-26 2019-11-26 Mellanox Technologies Tlv Ltd. Field checking based caching of ACL lookups to ease ACL lookup search
CN110710172A (zh) 2017-03-29 2020-01-17 芬基波尔有限责任公司 在接入节点组内多路复用分组喷射的无阻塞的任意到任意数据中心网络
WO2018183526A1 (en) 2017-03-29 2018-10-04 Fungible, Inc. Non-blocking, full-mesh data center network having optical permutors
WO2018183542A1 (en) 2017-03-29 2018-10-04 Fungible, Inc. Non-blocking any-to-any data center network with packet spraying over multiple alternate data paths
CN117971715A (zh) 2017-04-10 2024-05-03 微软技术许可有限责任公司 多处理器系统中的中继一致存储器管理
US10885118B2 (en) * 2017-05-12 2021-01-05 Futurewei Technologies, Inc. Incremental graph computations for querying large graphs
US10713089B2 (en) * 2017-05-20 2020-07-14 Cavium International Method and apparatus for load balancing of jobs scheduled for processing
US10725825B2 (en) 2017-07-10 2020-07-28 Fungible, Inc. Data processing unit for stream processing
WO2019014265A1 (en) 2017-07-10 2019-01-17 Fungible, Inc. DATA PROCESSING UNIT FOR CALCULATION NODES AND STORAGE NODES
US10476794B2 (en) 2017-07-30 2019-11-12 Mellanox Technologies Tlv Ltd. Efficient caching of TCAM rules in RAM
CN107450495B (zh) * 2017-08-25 2019-10-29 艾普工华科技(武汉)有限公司 一种基于消息规则引擎的柔性在制品管理业务模型系统
CN108632235B (zh) 2017-08-31 2020-07-07 新华三技术有限公司 一种网包分类决策树建立方法及装置
CN107797973A (zh) * 2017-09-27 2018-03-13 西安交通大学 一种面向硬件实现的gbdt分类模型压缩方法
WO2019068013A1 (en) 2017-09-29 2019-04-04 Fungible, Inc. FABRIC CONTROL PROTOCOL FOR DATA CENTER NETWORKS WITH PACKAGING OF PACKETS ON MULTIPLE ALTERNATIVE DATA PATHWAYS
US10965586B2 (en) 2017-09-29 2021-03-30 Fungible, Inc. Resilient network communication using selective multipath packet flow spraying
WO2019104090A1 (en) 2017-11-21 2019-05-31 Fungible, Inc. Work unit stack data structures in multiple core processor system for stream data processing
WO2019152063A1 (en) 2018-02-02 2019-08-08 Fungible, Inc. Efficient work unit processing in a multicore system
US10791092B2 (en) * 2018-02-14 2020-09-29 Nicira, Inc. Firewall rules with expression matching
WO2019178264A1 (en) 2018-03-14 2019-09-19 Fungible, Inc. Flexible processing of network packets
TWI664527B (zh) * 2018-03-20 2019-07-01 慧榮科技股份有限公司 用來於一記憶裝置中進行初始化之方法、記憶裝置及其控制器以及電子裝置
CN108595370A (zh) * 2018-03-30 2018-09-28 新华三信息安全技术有限公司 一种多核处理器及报文处理方法
US11876684B1 (en) * 2018-05-22 2024-01-16 Amazon Technologies, Inc. Controlled cross-cell migration of data in cell-based distributed computing architecture
US11218574B2 (en) 2018-06-08 2022-01-04 Fungible, Inc. Directed graph traversal using content-addressable memory
CN108984618B (zh) * 2018-06-13 2021-02-02 深圳市商汤科技有限公司 数据处理方法和装置、电子设备和计算机可读存储介质
WO2019241926A1 (zh) * 2018-06-20 2019-12-26 华为技术有限公司 访问控制列表的管理方法及装置
US10798200B2 (en) * 2018-06-22 2020-10-06 Vmware, Inc. Payload matching via single pass transformation of HTTP payload
US11483313B2 (en) * 2018-06-28 2022-10-25 Intel Corporation Technologies for updating an access control list table without causing disruption
US10581759B1 (en) 2018-07-12 2020-03-03 Innovium, Inc. Sharing packet processing resources
CN108959636B (zh) * 2018-07-25 2020-11-03 京东数字科技控股有限公司 数据处理方法、装置、系统、计算机可读介质
US11327974B2 (en) 2018-08-02 2022-05-10 Mellanox Technologies, Ltd. Field variability based TCAM splitting
CN109032952B (zh) * 2018-08-09 2021-11-23 中国建设银行股份有限公司 一种基于规则的智能外呼服务模拟方法及系统
US11003715B2 (en) 2018-09-17 2021-05-11 Mellanox Technologies, Ltd. Equipment and method for hash table resizing
FR3086825A1 (fr) * 2018-09-28 2020-04-03 Orange Procedes de protection d'un domaine client contre une attaque informatique, nœud client, serveur et programmes d'ordinateur correspondants.
CN111049746B (zh) * 2018-10-12 2022-04-22 华为技术有限公司 一种路由表项生成方法、字典树生成方法和装置
US10958770B2 (en) 2018-10-15 2021-03-23 Fungible, Inc. Realization of a programmable forwarding pipeline through packet header summaries in a data processing unit
US10708373B2 (en) * 2018-11-09 2020-07-07 Oath Inc. Decentralized method and system for accurately determining a level of activity of a client device
CN109542601B (zh) * 2018-11-20 2020-12-29 杭州迪普科技股份有限公司 策略编译方法、装置、电子设备及计算机存储介质
US10929175B2 (en) 2018-11-21 2021-02-23 Fungible, Inc. Service chaining hardware accelerators within a data stream processing integrated circuit
WO2020107484A1 (zh) * 2018-11-30 2020-06-04 华为技术有限公司 一种acl的规则分类方法、查找方法和装置
CN109766439A (zh) * 2018-12-15 2019-05-17 内蒙航天动力机械测试所 统计查询软件的无限树状分类定义与指派方法
GB2579849B (en) 2018-12-18 2021-08-25 Advanced Risc Mach Ltd Integrity tree for memory integrity checking
EP3703341A1 (en) * 2019-02-28 2020-09-02 Rohde & Schwarz GmbH & Co. KG System for analyzing and interpreting at least one data stream as well as method of automatic configuration of a system
CN109885408B (zh) * 2019-03-13 2022-05-03 四川长虹电器股份有限公司 基于Android系统的轻量级浏览器资源优化方法
US11531915B2 (en) * 2019-03-20 2022-12-20 Oracle International Corporation Method for generating rulesets using tree-based models for black-box machine learning explainability
WO2020197720A1 (en) 2019-03-27 2020-10-01 Fungible, Inc. Low latency packet switch architecture
CN111817978B (zh) * 2019-04-12 2022-10-04 华为技术有限公司 一种流分类方法及装置
US11032371B2 (en) * 2019-05-29 2021-06-08 Red Hat, Inc. Data migration using read function triggers
US10931638B1 (en) * 2019-07-31 2021-02-23 Capital One Services, Llc Automated firewall feedback from network traffic analysis
US10979358B2 (en) * 2019-08-20 2021-04-13 SMART lOPS, INC. Low-latency data packet distributor
US10944675B1 (en) 2019-09-04 2021-03-09 Mellanox Technologies Tlv Ltd. TCAM with multi region lookups and a single logical lookup
US11579802B2 (en) 2019-10-04 2023-02-14 Fungible, Inc. Pipeline using match-action blocks
US11330032B2 (en) * 2019-10-15 2022-05-10 Vmware, Inc. Method and system for content proxying between formats
CN112948103B (zh) * 2019-12-10 2023-10-27 腾讯科技(深圳)有限公司 资源配置方法、装置、存储介质及电子设备
CN110995748A (zh) * 2019-12-17 2020-04-10 杭州安恒信息技术股份有限公司 一种防暴力破解方法、装置、设备、介质
US11128694B2 (en) * 2020-01-09 2021-09-21 Cisco Technology, Inc. Optimized internet access in a multi-site software-defined network fabric
US11539622B2 (en) 2020-05-04 2022-12-27 Mellanox Technologies, Ltd. Dynamically-optimized hash-based packet classifier
US11782895B2 (en) 2020-09-07 2023-10-10 Mellanox Technologies, Ltd. Cuckoo hashing including accessing hash tables using affinity table
CN112311698B (zh) * 2020-09-28 2021-08-24 清华大学无锡应用技术研究院 处理网络数据包的方法、装置及存储介质
KR20220045480A (ko) * 2020-10-05 2022-04-12 삼성전자주식회사 인-메모리 프로세싱을 수행하는 메모리 디바이스
CN112350947B (zh) * 2020-10-23 2022-07-29 杭州迪普信息技术有限公司 一种报文匹配决策树的更新方法及装置
US11593309B2 (en) 2020-11-05 2023-02-28 International Business Machines Corporation Reliable delivery of event notifications from a distributed file system
CN113114584B (zh) * 2021-03-01 2023-02-28 杭州迪普科技股份有限公司 一种网络设备的保护方法及装置
US11734005B2 (en) 2021-07-04 2023-08-22 Mellanox Technologies, Ltd. Processor with split read
CN113709099B (zh) * 2021-07-12 2023-11-07 新华三大数据技术有限公司 混合云防火墙规则下发方法、装置、设备及存储介质
US11677663B2 (en) * 2021-08-12 2023-06-13 Schweitzer Engineering Laboratories, Inc. Software-defined network statistics extension
US11917042B2 (en) 2021-08-15 2024-02-27 Mellanox Technologies, Ltd. Optimizing header-based action selection
CN113741821B (zh) * 2021-11-01 2022-03-01 中科声龙科技发展(北京)有限公司 基于分类的数据存取方法、系统、介质及程序
US11929837B2 (en) 2022-02-23 2024-03-12 Mellanox Technologies, Ltd. Rule compilation schemes for fast packet classification
US11968285B2 (en) 2022-02-24 2024-04-23 Mellanox Technologies, Ltd. Efficient memory utilization for cartesian products of rules
US11847461B2 (en) * 2022-05-19 2023-12-19 Mellanox Technologies, Ltd. Out-of-order input / output write
US11882002B2 (en) 2022-06-22 2024-01-23 Schweitzer Engineering Laboratories, Inc. Offline test mode SDN validation

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7277425B1 (en) 2002-10-21 2007-10-02 Force10 Networks, Inc. High-speed router switching architecture

Family Cites Families (246)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US441022A (en) 1890-11-18 Method of baling cotton
US4965825A (en) 1981-11-03 1990-10-23 The Personalized Mass Media Corporation Signal processing apparatus and methods
JPS6289149A (ja) * 1985-10-15 1987-04-23 Agency Of Ind Science & Technol 多ポ−トメモリシステム
CA2066724C (en) 1989-09-01 2000-12-05 Helge Knudsen Operating system and data base
WO1991003791A1 (en) 1989-09-01 1991-03-21 Amdahl Corporation Operating system and data base
AT392555B (de) 1989-10-24 1991-04-25 Alcatel Austria Ag Verfahren zum uebertragen von binaerinformationen in einem optischen uebertragungsnetzwerk sowie optisches uebertragungsnetzwerk
US5214653A (en) 1990-10-22 1993-05-25 Harris Corporation Fault finder expert system
WO1994001828A1 (en) 1992-07-02 1994-01-20 Wellfleet Communications Data packet processing method and apparatus
US5634025A (en) * 1993-12-09 1997-05-27 International Business Machines Corporation Method and system for efficiently fetching variable-width instructions in a data processing system having multiple prefetch units
US5742843A (en) 1994-07-20 1998-04-21 Fujitsu Limited Control system for access between processing elements in a parallel computer
US5727167A (en) 1995-04-14 1998-03-10 International Business Machines Corporation Thresholding support in performance monitoring
US5995511A (en) 1996-04-05 1999-11-30 Fore Systems, Inc. Digital network including mechanism for grouping virtual message transfer paths having similar transfer service rates to facilitate efficient scheduling of transfers thereover
US5893911A (en) * 1996-04-17 1999-04-13 Neon Software, Inc. Method for defining and applying rules for message distribution for transaction processing in a distributed application
US7613926B2 (en) 1997-11-06 2009-11-03 Finjan Software, Ltd Method and system for protecting a computer and a network from hostile downloadables
US5893142A (en) 1996-11-14 1999-04-06 Motorola Inc. Data processing system having a cache and method therefor
US6233575B1 (en) 1997-06-24 2001-05-15 International Business Machines Corporation Multilevel taxonomy based on features derived from training documents classification using fisher values as discrimination values
JP3436871B2 (ja) * 1997-10-23 2003-08-18 株式会社東芝 通信資源管理方法及びノード装置
JP3027845B2 (ja) 1997-11-21 2000-04-04 オムロン株式会社 プログラム制御装置および方法
US6549519B1 (en) 1998-01-23 2003-04-15 Alcatel Internetworking (Pe), Inc. Network switching device with pipelined search engines
US6341130B1 (en) 1998-02-09 2002-01-22 Lucent Technologies, Inc. Packet classification method and apparatus employing two fields
US6658002B1 (en) 1998-06-30 2003-12-02 Cisco Technology, Inc. Logical operation unit for packet processing
US6212184B1 (en) * 1998-07-15 2001-04-03 Washington University Fast scaleable methods and devices for layer four switching
US6519636B2 (en) 1998-10-28 2003-02-11 International Business Machines Corporation Efficient classification, manipulation, and control of network transmissions by associating network flows with rule based functions
US6567408B1 (en) 1999-02-01 2003-05-20 Redback Networks Inc. Methods and apparatus for packet classification with multi-level data structure
US6297768B1 (en) * 1999-02-25 2001-10-02 Lunareye, Inc. Triggerable remote controller
JP3692820B2 (ja) 1999-03-10 2005-09-07 株式会社デンソー 自動車用制御装置
US6510509B1 (en) * 1999-03-29 2003-01-21 Pmc-Sierra Us, Inc. Method and apparatus for high-speed network rule processing
US6701432B1 (en) 1999-04-01 2004-03-02 Netscreen Technologies, Inc. Firewall including local bus
US6298340B1 (en) 1999-05-14 2001-10-02 International Business Machines Corporation System and method and computer program for filtering using tree structure
US6587466B1 (en) 1999-05-27 2003-07-01 International Business Machines Corporation Search tree for policy based packet classification in communication networks
GB2355084B (en) 1999-07-21 2004-04-28 Element 14 Ltd Setting condition values in a computer
US6636480B1 (en) * 1999-09-08 2003-10-21 Riverstone Networks, Inc. Method and system for controlling data flow through a multiport switch
US7110407B1 (en) 1999-09-23 2006-09-19 Netlogic Microsystems, Inc. Method and apparatus for performing priority encoding in a segmented classification system using enable signals
US6775281B1 (en) 1999-09-30 2004-08-10 Mosaid Technologies, Inc. Method and apparatus for a four-way hash table
US6467019B1 (en) 1999-11-08 2002-10-15 Juniper Networks, Inc. Method for memory management in ternary content addressable memories (CAMs)
US6778530B1 (en) * 1999-11-08 2004-08-17 Juniper Networks, Inc. Method and apparatus for multiple field matching in network device
GB9930849D0 (en) * 1999-12-24 2000-02-16 Koninkl Philips Electronics Nv Data communications
US6539394B1 (en) 2000-01-04 2003-03-25 International Business Machines Corporation Method and system for performing interval-based testing of filter rules
US7039641B2 (en) 2000-02-24 2006-05-02 Lucent Technologies Inc. Modular packet classification
US6473763B1 (en) 2000-03-31 2002-10-29 International Business Machines Corporation System, method and computer program for filtering multi-action rule set
US7215637B1 (en) 2000-04-17 2007-05-08 Juniper Networks, Inc. Systems and methods for processing packets
US7032031B2 (en) 2000-06-23 2006-04-18 Cloudshield Technologies, Inc. Edge adapter apparatus and method
US20070192863A1 (en) 2005-07-01 2007-08-16 Harsh Kapoor Systems and methods for processing data flows
US9800608B2 (en) * 2000-09-25 2017-10-24 Symantec Corporation Processing data flows with a data flow processor
US20110238855A1 (en) 2000-09-25 2011-09-29 Yevgeny Korsunsky Processing data flows with a data flow processor
US8010469B2 (en) 2000-09-25 2011-08-30 Crossbeam Systems, Inc. Systems and methods for processing data flows
KR100699470B1 (ko) * 2000-09-27 2007-03-26 삼성전자주식회사 멀티레이어 패킷 처리 장치
EP1344355B8 (en) * 2000-11-21 2009-04-22 TR Technology Foundation LLC Methods and apparatus for switching atm, tdm, and packet data through a single communications switch
CA2326851A1 (en) 2000-11-24 2002-05-24 Redback Networks Systems Canada Inc. Policy change characterization method and apparatus
US6868414B2 (en) 2001-01-03 2005-03-15 International Business Machines Corporation Technique for serializing data structure updates and retrievals without requiring searchers to use locks
JP2004524617A (ja) * 2001-02-14 2004-08-12 クリアスピード・テクノロジー・リミテッド クロック分配システム
US6754626B2 (en) * 2001-03-01 2004-06-22 International Business Machines Corporation Creating a hierarchical tree of language models for a dialog system based on prompt and dialog context
JP2002290447A (ja) * 2001-03-27 2002-10-04 Mitsubishi Electric Corp アドレス検索方法、アドレス検索回路、およびアドレス検索プログラム
US6735600B1 (en) * 2001-03-30 2004-05-11 Lsi Logic Corporation Editing protocol for flexible search engines
US6904057B2 (en) 2001-05-04 2005-06-07 Slt Logic Llc Method and apparatus for providing multi-protocol, multi-stage, real-time frame classification
US6757768B1 (en) * 2001-05-17 2004-06-29 Cisco Technology, Inc. Apparatus and technique for maintaining order among requests issued over an external bus of an intermediate network node
US7133409B1 (en) 2001-07-19 2006-11-07 Richard Willardson Programmable packet filtering in a prioritized chain
US7027988B1 (en) 2001-07-20 2006-04-11 At&T Corp. System and method of ε removal of weighted automata and transducers
US7116663B2 (en) 2001-07-20 2006-10-03 Pmc-Sierra Ltd. Multi-field classification using enhanced masked matching
US7209962B2 (en) 2001-07-30 2007-04-24 International Business Machines Corporation System and method for IP packet filtering based on non-IP packet traffic attributes
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
EP1320006A1 (en) 2001-12-12 2003-06-18 Canal+ Technologies Société Anonyme Processing data
US7403999B2 (en) 2001-12-28 2008-07-22 International Business Machines Corporation Classification support system and method for fragmented IP packets
US7225188B1 (en) 2002-02-13 2007-05-29 Cisco Technology, Inc. System and method for performing regular expression matching with high parallelism
US7719980B2 (en) 2002-02-19 2010-05-18 Broadcom Corporation Method and apparatus for flexible frame processing and classification engine
US8135772B2 (en) * 2002-05-01 2012-03-13 Oracle International Corporation Single servlets for B2B message routing
US7251698B2 (en) 2002-05-28 2007-07-31 Newisys, Inc. Address space management in systems having multiple multi-processor clusters
US7327727B2 (en) 2002-06-04 2008-02-05 Lucent Technologies Inc. Atomic lookup rule set transition
US7079542B2 (en) 2002-07-02 2006-07-18 Samsung Electronics Co., Ltd. Internet protocol address look-up method
AU2003256391A1 (en) 2002-07-03 2004-01-23 University Of Florida Dynamic ip router tables using highest-priority matching
WO2004013777A1 (en) 2002-08-05 2004-02-12 Fish Robert System and method of parallel pattern matching
GB0226289D0 (en) 2002-11-11 2002-12-18 Orange Personal Comm Serv Ltd Telecommunications
GB2395395B (en) * 2002-11-15 2004-11-10 3Com Corp Classification search scheme and rules engine for network unit
US7536476B1 (en) 2002-12-20 2009-05-19 Cisco Technology, Inc. Method for performing tree based ACL lookups
US7546234B1 (en) 2003-01-08 2009-06-09 Xambala, Inc. Semantic processing engine
WO2004072797A2 (en) 2003-02-07 2004-08-26 Safenet, Inc. System and method for determining the start of a match of a regular expression
CA2521576A1 (en) 2003-02-28 2004-09-16 Lockheed Martin Corporation Hardware accelerator state table compiler
SE0300894D0 (sv) * 2003-03-28 2003-03-28 Saab Ab Metod att fastställa regler för en anordning som är avsedd att kunna användas för att generera beslutstöd
US7571156B1 (en) 2003-03-28 2009-08-04 Netlogic Microsystems, Inc. Network device, storage medium and methods for incrementally updating a forwarding database
US7466687B2 (en) 2003-04-28 2008-12-16 International Business Machines Corporation Packet classification using modified range labels
US7093231B2 (en) 2003-05-06 2006-08-15 David H. Alderson Grammer for regular expressions
US7415472B2 (en) 2003-05-13 2008-08-19 Cisco Technology, Inc. Comparison tree data structures of particular use in performing lookup operations
WO2004107404A2 (en) 2003-05-23 2004-12-09 Sensory Networks, Inc. Apparatus and method for large hardware finite state machine with embedded equivalence classes
US7685254B2 (en) * 2003-06-10 2010-03-23 Pandya Ashish A Runtime adaptable search processor
US7382777B2 (en) 2003-06-17 2008-06-03 International Business Machines Corporation Method for implementing actions based on packet classification and lookup results
US7386626B2 (en) 2003-06-23 2008-06-10 Newisys, Inc. Bandwidth, framing and error detection in communications between multi-processor clusters of multi-cluster computer systems
US7388840B2 (en) * 2003-06-30 2008-06-17 Intel Corporation Methods and apparatuses for route management on a networking control plane
US7548944B2 (en) * 2003-07-15 2009-06-16 Intel Corporation Statistics collection framework for a network processor
US7299227B2 (en) 2003-09-09 2007-11-20 Stmicroelectronics, Inc. Method and system for providing cascaded trie-based network packet search engines
US7870161B2 (en) 2003-11-07 2011-01-11 Qiang Wang Fast signature scan
US7873992B1 (en) 2003-12-04 2011-01-18 Avaya Inc. Dynamic system of autonomous parsers for interpreting arbitrary telecommunication equipment streams
US20060026138A1 (en) 2004-01-09 2006-02-02 Gavin Robertson Real-time indexes
US7706353B2 (en) 2004-01-21 2010-04-27 Alcatel-Lucent Usa Inc. Congestion control in connection-oriented packet-switching networks
US7392349B1 (en) * 2004-01-27 2008-06-24 Netlogic Microsystems, Inc. Table management within a policy-based routing system
US7370361B2 (en) 2004-02-06 2008-05-06 Trend Micro Incorporated System and method for securing computers against computer virus
US7441022B1 (en) 2004-03-12 2008-10-21 Sun Microsystems, Inc. Resolving conflicts between network service rule sets for network data traffic in a system where rule patterns with longer prefixes match before rule patterns with shorter prefixes
US7586851B2 (en) 2004-04-26 2009-09-08 Cisco Technology, Inc. Programmable packet parsing processor
US7366728B2 (en) 2004-04-27 2008-04-29 International Business Machines Corporation System for compressing a search tree structure used in rule classification
US7685637B2 (en) 2004-06-14 2010-03-23 Lionic Corporation System security approaches using sub-expression automata
JP4392294B2 (ja) 2004-06-15 2009-12-24 株式会社日立製作所 通信統計収集装置
JP4855655B2 (ja) * 2004-06-15 2012-01-18 株式会社ソニー・コンピュータエンタテインメント 処理管理装置、コンピュータ・システム、分散処理方法及びコンピュータプログラム
US7760719B2 (en) * 2004-06-30 2010-07-20 Conexant Systems, Inc. Combined pipelined classification and address search method and apparatus for switching environments
EP1766929B1 (en) * 2004-07-09 2011-04-20 Panasonic Corporation Network mobility management method and corresponding apparatusses
US7478426B2 (en) * 2004-07-20 2009-01-13 International Busines Machines Corporation Multi-field classification dynamic rule updates
US7711893B1 (en) 2004-07-22 2010-05-04 Netlogic Microsystems, Inc. Range code compression method and apparatus for ternary content addressable memory (CAM) devices
US7464218B2 (en) 2004-08-31 2008-12-09 Seagate Technology Llc Method for improving data throughput for a data storage device
US8301788B2 (en) 2004-09-10 2012-10-30 Cavium, Inc. Deterministic finite automata (DFA) instruction
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
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
WO2006029508A1 (en) 2004-09-13 2006-03-23 Solace Systems Inc. Highly scalable subscription matching for a content routing network
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
US7478424B2 (en) 2004-11-30 2009-01-13 Cymtec Systems, Inc. Propagation protection within a network
JP4535130B2 (ja) 2004-12-09 2010-09-01 三菱電機株式会社 文字列照合装置および文字列照合プログラム
JP4140910B2 (ja) * 2004-12-28 2008-08-27 インターナショナル・ビジネス・マシーンズ・コーポレーション データ処理装置、データ管理装置、データ処理方法、データ管理方法、データ処理プログラム、データ管理プログラム、及び情報システム
US20060155915A1 (en) 2004-12-30 2006-07-13 Pereira Jose P Database query processor
US7350040B2 (en) 2005-03-03 2008-03-25 Microsoft Corporation Method and system for securing metadata to detect unauthorized access
US7710988B1 (en) 2005-03-11 2010-05-04 Xambala Corporation Method and system for non-deterministic finite automaton filtering
US7653903B2 (en) * 2005-03-25 2010-01-26 Sony Corporation Modular imaging download system
US7668160B2 (en) 2005-03-31 2010-02-23 Intel Corporation Methods for performing packet classification
JP2006285808A (ja) * 2005-04-04 2006-10-19 Hitachi Ltd ストレージシステム
US20060288024A1 (en) 2005-04-28 2006-12-21 Freescale Semiconductor Incorporated Compressed representations of tries
US7958507B2 (en) * 2005-06-16 2011-06-07 Hewlett-Packard Development Company, L.P. Job scheduling system and method
US7784094B2 (en) 2005-06-30 2010-08-24 Intel Corporation Stateful packet content matching mechanisms
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
US7869411B2 (en) * 2005-11-21 2011-01-11 Broadcom Corporation Compact packet operation device and method
US7702629B2 (en) 2005-12-02 2010-04-20 Exegy Incorporated Method and device for high performance regular expression pattern matching
US20070168377A1 (en) 2005-12-29 2007-07-19 Arabella Software Ltd. Method and apparatus for classifying Internet Protocol data packets
US20070168548A1 (en) * 2006-01-19 2007-07-19 International Business Machines Corporation Method and system for performing multi-cluster application-specific routing
US8978154B2 (en) 2006-02-15 2015-03-10 Samsung Electronics Co., Ltd. Method and apparatus for importing content having plurality of parts
US20070226362A1 (en) 2006-03-21 2007-09-27 At&T Corp. Monitoring regular expressions on out-of-order streams
US7844422B2 (en) * 2006-05-30 2010-11-30 International Business Machines Corporation Method and system for changing a description for a state transition function of a state machine engine
US20080097959A1 (en) 2006-06-14 2008-04-24 Nec Laboratories America, Inc. Scalable xml filtering with bottom up path matching and encoded path joins
US20080071783A1 (en) 2006-07-03 2008-03-20 Benjamin Langmead System, Apparatus, And Methods For Pattern Matching
US7522581B2 (en) 2006-08-01 2009-04-21 International Business Machines Corporation Overload protection for SIP servers
EP2074767A2 (en) 2006-08-02 2009-07-01 University Of Florida Research Foundation, Inc. Succinct representation of static packet classifiers
US20080034427A1 (en) 2006-08-02 2008-02-07 Nec Laboratories America, Inc. Fast and scalable process for regular expression search
GB2441351B (en) 2006-09-01 2010-12-08 3Com Corp Positionally dependent pattern checking in character strings using deterministic finite automata
US7932349B2 (en) 2006-09-18 2011-04-26 Hercules Incorporated Membrane separation process for removing residuals polyamine-epihalohydrin resins
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
GB2443240B (en) 2006-10-27 2009-05-06 3Com Corp Signature checking using deterministic finite state machines
SE531947C2 (sv) 2006-11-03 2009-09-15 Oricane Ab Förfarande, anordning och system för flerfältsklassificering i ett datakommunikationsnätverk
US7657497B2 (en) 2006-11-07 2010-02-02 Ebay Inc. Online fraud prevention using genetic algorithm solution
US7899977B2 (en) 2006-12-08 2011-03-01 Pandya Ashish A Programmable intelligent search memory
WO2008073824A1 (en) 2006-12-08 2008-06-19 Pandya Ashish A Dynamic programmable intelligent search memory
US8156507B2 (en) 2006-12-08 2012-04-10 Microsoft Corporation User mode file system serialization and reliability
US7860849B1 (en) 2007-01-18 2010-12-28 Netlogic Microsystems, Inc. Optimizing search trees by increasing success size parameter
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
FR2914081A1 (fr) 2007-03-23 2008-09-26 Advestigo Sa Procede de protection de documents numeriques contre des utilisations non autorisees.
WO2008129635A1 (ja) 2007-04-12 2008-10-30 Fujitsu Limited 性能障害要因分析プログラムおよび性能障害要因分析装置
US7961489B2 (en) 2007-04-23 2011-06-14 Marvell Israel (MISL)Ltd. Comparing data representations to stored patterns
US7854002B2 (en) 2007-04-30 2010-12-14 Microsoft Corporation Pattern matching for spyware detection
US7788206B2 (en) 2007-04-30 2010-08-31 Lsi Corporation State machine compression using multi-character state transition instructions
US20080291916A1 (en) 2007-05-22 2008-11-27 Bo Xiong Systems and methods for dynamic quality of service
US7852756B2 (en) * 2007-06-13 2010-12-14 02Micro International Limited Network interface system with filtering function
US8341723B2 (en) 2007-06-28 2012-12-25 Microsoft Corporation Filtering kernel-mode network communications
US8219508B2 (en) 2007-07-06 2012-07-10 Lsi Corporation Systems and methods for compressing state machine instructions using a two access indexing scheme
JP4967876B2 (ja) * 2007-07-18 2012-07-04 日本電気株式会社 ネットワーク、ネットワーク装置及びそれらに用いる伝送経路冗長化方法
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
US8520978B2 (en) 2007-10-31 2013-08-27 Mckesson Technologies Inc. Methods, computer program products, apparatuses, and systems for facilitating viewing and manipulation of an image on a client device
US8819217B2 (en) 2007-11-01 2014-08-26 Cavium, Inc. Intelligent graph walking
US8086609B2 (en) 2007-11-01 2011-12-27 Cavium, Inc. Graph caching
US20090125470A1 (en) 2007-11-09 2009-05-14 Juniper Networks, Inc. System and Method for Managing Access Control Lists
KR100920518B1 (ko) 2007-11-27 2009-10-09 한국전자통신연구원 패킷 분류 장치 및 방법
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
TWI363532B (en) 2008-01-21 2012-05-01 Univ Nat Taiwan Method and system for packet classificiation with reduced memory space and enhanced access speed
US7904942B2 (en) * 2008-02-22 2011-03-08 Inventec Corporation Method of updating intrusion detection rules through link data packet
US8474043B2 (en) * 2008-04-17 2013-06-25 Sourcefire, Inc. Speed and memory optimization of intrusion detection system (IDS) and intrusion prevention system (IPS) rule processing
SE532426C2 (sv) 2008-05-26 2010-01-19 Oricane Ab Metod för datapaketklassificering i ett datakommunikationsnät
US8051085B1 (en) 2008-07-18 2011-11-01 Netlogic Microsystems, Inc. Determining regular expression match lengths
US8554800B2 (en) 2008-07-30 2013-10-08 Portool Ltd. System, methods and applications for structured document indexing
US20100037056A1 (en) 2008-08-07 2010-02-11 Follis Benjamin D Method to support privacy preserving secure data management in archival systems
US8352391B1 (en) 2008-08-20 2013-01-08 Juniper Networks, Inc. Fast update filter
US8218493B2 (en) 2008-09-08 2012-07-10 Wisconsin Alumni Research Foundation System and method for interference mitigation in wireless networks
US8176085B2 (en) 2008-09-30 2012-05-08 Microsoft Corporation Modular forest automata
US8447120B2 (en) 2008-10-04 2013-05-21 Microsoft Corporation Incremental feature indexing for scalable location recognition
US7872993B2 (en) * 2008-10-30 2011-01-18 Alcatel Lucent Method and system for classifying data packets
US8473523B2 (en) 2008-10-31 2013-06-25 Cavium, Inc. Deterministic finite automata graph traversal with nodal bit mapping
US8683590B2 (en) 2008-10-31 2014-03-25 Alcatel Lucent Method and apparatus for pattern matching for intrusion detection/prevention systems
US9154380B2 (en) 2008-12-11 2015-10-06 International Business Machines Corporation Rules based fetching of operating platform status
TWI482083B (zh) 2008-12-15 2015-04-21 Univ Nat Taiwan 二階段式正規表示式比對處理方法及系統
TWI383618B (zh) 2008-12-22 2013-01-21 Univ Nat Taiwan 管線架構型正規表示式樣式比對處理電路
US8111697B1 (en) 2008-12-31 2012-02-07 Juniper Networks, Inc. Methods and apparatus for packet classification based on multiple conditions
US8171539B2 (en) 2009-01-07 2012-05-01 Symbol Technologies, Inc. Methods and apparatus for implementing a search tree
US20100192225A1 (en) 2009-01-28 2010-07-29 Juniper Networks, Inc. Efficient application identification with network devices
WO2010094593A1 (de) * 2009-02-18 2010-08-26 OCé PRINTING SYSTEMS GMBH Verfahren zum automatischen steuern der reihenfolge von bearbeitungsaufträgen zur bearbeitung von materialgebinden
US8218553B2 (en) 2009-02-25 2012-07-10 Juniper Networks, Inc. Load balancing network traffic on a label switched path using resource reservation protocol with traffic engineering
KR101034389B1 (ko) 2009-04-22 2011-05-16 (주) 시스메이트 패킷 내 시그니처 위치에 따른 시그니처 검색 방법
US7990893B1 (en) 2009-05-19 2011-08-02 Juniper Networks, Inc. Fast prefix-based network route filtering
US8259726B2 (en) 2009-05-28 2012-09-04 Force10 Networks, Inc. Method and apparatus for forwarding table reduction
US20110016154A1 (en) 2009-07-17 2011-01-20 Rajan Goyal Profile-based and dictionary based graph caching
JP2012133405A (ja) 2009-07-24 2012-07-12 Hitachi Ltd ストレージ装置及びそのデータ転送制御方法
US8462786B2 (en) 2009-08-17 2013-06-11 Board Of Trustees Of Michigan State University Efficient TCAM-based packet classification using multiple lookups and classifier semantics
US8276142B2 (en) 2009-10-09 2012-09-25 Intel Corporation Hardware support for thread scheduling on multi-core processors
US8566344B2 (en) 2009-10-17 2013-10-22 Polytechnic Institute Of New York University Determining whether an input string matches at least one regular expression using lookahead finite automata based regular expression detection
US8631043B2 (en) 2009-12-09 2014-01-14 Alcatel Lucent Method and apparatus for generating a shape graph from a binary trie
EP2517420B1 (en) 2009-12-22 2014-03-19 Cuneyt F. Bazlamacci Systolic array architecture for fast ip lookup
US8291258B2 (en) 2010-01-08 2012-10-16 Juniper Networks, Inc. High availability for network security devices
US9031895B2 (en) 2010-01-13 2015-05-12 Ab Initio Technology Llc Matching metadata sources using rules for characterizing matches
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
US8477611B2 (en) 2010-03-03 2013-07-02 Ewha University Industry Collaboration Foundation Method and apparatus for packet classification using bloom filter
CN101794271B (zh) * 2010-03-31 2012-05-23 华为技术有限公司 多核内存一致性的实现方法和装置
WO2011130604A1 (en) 2010-04-16 2011-10-20 Massachusetts Institute Of Technology Execution migration
CN101853301A (zh) 2010-05-25 2010-10-06 华为技术有限公司 正则表达式匹配的方法和系统
US20130070753A1 (en) 2010-05-26 2013-03-21 University Of Florida Research Foundation, Inc. Consistent updates for packet classification devices
JP5319626B2 (ja) * 2010-08-18 2013-10-16 日本電信電話株式会社 ノード、パケット転送方法および通信ネットワーク
US8543528B2 (en) 2010-09-23 2013-09-24 International Business Machines Corporation Exploitation of transition rule sharing based on short state tags to improve the storage efficiency
CN102075511B (zh) 2010-11-01 2014-05-14 北京神州绿盟信息安全科技股份有限公司 一种数据匹配设备和方法以及网络入侵检测设备和方法
US8799188B2 (en) 2011-02-08 2014-08-05 International Business Machines Corporation Algorithm engine for use in a pattern matching accelerator
US8856203B1 (en) 2011-02-08 2014-10-07 Pmc-Sierra Us, Inc. System and method for algorithmic TCAM packet classification
US9471532B2 (en) 2011-02-11 2016-10-18 Microsoft Technology Licensing, Llc Remote core operations in a multi-core computer
EP2490134A1 (en) 2011-02-18 2012-08-22 Amadeus S.A.S. Method, system and computer program to provide fares detection from rules attributes
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
US8869087B2 (en) 2011-05-06 2014-10-21 Xcelemor, Inc. Computing system with data and control planes and method of operation thereof
US9858051B2 (en) 2011-06-24 2018-01-02 Cavium, Inc. Regex compiler
US8990259B2 (en) 2011-06-24 2015-03-24 Cavium, Inc. Anchored patterns
US8800021B1 (en) 2011-06-29 2014-08-05 Juniper Networks, Inc. Hardware implementation of complex firewalls using chaining technique
US8516241B2 (en) * 2011-07-12 2013-08-20 Cisco Technology, Inc. Zone-based firewall policy model for a virtualized data center
US9183244B2 (en) 2011-08-02 2015-11-10 Cavium, Inc. Rule modification in decision trees
US8923306B2 (en) 2011-08-02 2014-12-30 Cavium, Inc. Phased bucket pre-fetch in a network processor
US9208438B2 (en) 2011-08-02 2015-12-08 Cavium, Inc. Duplication in decision trees
US8954700B2 (en) 2011-08-02 2015-02-10 Cavium, Inc. Method and apparatus for managing processing thread migration between clusters within a processor
US10229139B2 (en) 2011-08-02 2019-03-12 Cavium, Llc Incremental update heuristics
US9203805B2 (en) 2011-11-23 2015-12-01 Cavium, Inc. Reverse NFA generation and processing
US9307009B2 (en) 2012-02-15 2016-04-05 Mobilespan Inc. Presenting execution of a remote application in a mobile device native format
US9575806B2 (en) * 2012-06-29 2017-02-21 Intel Corporation Monitoring accesses of a thread to multiple memory controllers and selecting a thread processor for the thread based on the monitoring
US9712510B2 (en) 2012-07-06 2017-07-18 Box, Inc. Systems and methods for securely submitting comments among users via external messaging applications in a cloud-based platform
US9065780B2 (en) 2012-09-18 2015-06-23 Cisco Technology, Inc. Low latency networking device using header prediction
US9177253B2 (en) 2013-01-31 2015-11-03 Intel Corporation System and method for DFA-NFA splitting
US20140229386A1 (en) 2013-02-13 2014-08-14 Mistral Mobile Secure mobile payments
US10083200B2 (en) 2013-03-14 2018-09-25 Cavium, Inc. Batch incremental update
US9430511B2 (en) 2013-03-15 2016-08-30 Cavium, Inc. Merging independent writes, separating dependent and independent writes, and error roll back
US9276846B2 (en) 2013-03-15 2016-03-01 Cavium, Inc. Packet extraction optimization in a network processor
US9537771B2 (en) 2013-04-04 2017-01-03 Marvell Israel (M.I.S.L) Ltd. Exact match hash lookup databases in network switch devices
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
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
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
US9602532B2 (en) 2014-01-31 2017-03-21 Cavium, Inc. Method and apparatus for optimizing finite automata processing

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7277425B1 (en) 2002-10-21 2007-10-02 Force10 Networks, Inc. High-speed router switching architecture

Also Published As

Publication number Publication date
WO2013019981A1 (en) 2013-02-07
US20130036285A1 (en) 2013-02-07
US20150195200A1 (en) 2015-07-09
US8966152B2 (en) 2015-02-24
US8606959B2 (en) 2013-12-10
US9031075B2 (en) 2015-05-12
US9614762B2 (en) 2017-04-04
US20130036152A1 (en) 2013-02-07
KR101476113B1 (ko) 2014-12-23
US20150117461A1 (en) 2015-04-30
US20150143060A1 (en) 2015-05-21
US20140119378A1 (en) 2014-05-01
US9344366B2 (en) 2016-05-17
US9596222B2 (en) 2017-03-14
US9525630B2 (en) 2016-12-20
WO2013020002A1 (en) 2013-02-07
US20130036284A1 (en) 2013-02-07
US20130039366A1 (en) 2013-02-14
US8719331B2 (en) 2014-05-06
US20130058332A1 (en) 2013-03-07
US20130036151A1 (en) 2013-02-07
US9137340B2 (en) 2015-09-15
US20130034100A1 (en) 2013-02-07
US20130036274A1 (en) 2013-02-07
US20140215478A1 (en) 2014-07-31
KR20140053272A (ko) 2014-05-07
JP5657840B2 (ja) 2015-01-21
US9729527B2 (en) 2017-08-08
US20130036471A1 (en) 2013-02-07
US9065860B2 (en) 2015-06-23
KR20140053266A (ko) 2014-05-07
US20130036185A1 (en) 2013-02-07
US20130085978A1 (en) 2013-04-04
US20130250948A1 (en) 2013-09-26
US9866540B2 (en) 2018-01-09
CN103858392B (zh) 2018-12-14
US10277510B2 (en) 2019-04-30
WO2013020001A9 (en) 2013-03-28
US8937954B2 (en) 2015-01-20
JP2014524688A (ja) 2014-09-22
US20130036288A1 (en) 2013-02-07
US8472452B2 (en) 2013-06-25
US8995449B2 (en) 2015-03-31
WO2013019996A1 (en) 2013-02-07
US9531690B2 (en) 2016-12-27
US20160248739A1 (en) 2016-08-25
US8937952B2 (en) 2015-01-20
US20130036102A1 (en) 2013-02-07
WO2013020001A1 (en) 2013-02-07
US20130036477A1 (en) 2013-02-07
US20130036083A1 (en) 2013-02-07
US8954700B2 (en) 2015-02-10
US20130067173A1 (en) 2013-03-14
US9391892B2 (en) 2016-07-12
US20150121395A1 (en) 2015-04-30
US20130034106A1 (en) 2013-02-07
US8934488B2 (en) 2015-01-13
CN103858386B (zh) 2017-08-25
WO2013020003A1 (en) 2013-02-07
US20130060727A1 (en) 2013-03-07
US8711861B2 (en) 2014-04-29
US9319316B2 (en) 2016-04-19
US9225643B2 (en) 2015-12-29
US9497117B2 (en) 2016-11-15
CN103858386A (zh) 2014-06-11
US20140188973A1 (en) 2014-07-03
US9191321B2 (en) 2015-11-17
CN103858392A (zh) 2014-06-11

Similar Documents

Publication Publication Date Title
KR101476114B1 (ko) 룩업 프론트 엔드 입력 프로세서
US9276846B2 (en) Packet extraction optimization in a network processor
US9531647B1 (en) Multi-host processing
US9531723B2 (en) Phased bucket pre-fetch in a network processor
US9430511B2 (en) Merging independent writes, separating dependent and independent writes, and error roll back
US20140279806A1 (en) Method and an accumulator scoreboard for out-of-order rule response handling

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
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: 20171117

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20181115

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20191218

Year of fee payment: 6