KR20170009961A - 패킷 처리를 위한 다중 테이블 해시 기반 룩업 - Google Patents
패킷 처리를 위한 다중 테이블 해시 기반 룩업 Download PDFInfo
- Publication number
- KR20170009961A KR20170009961A KR1020167035848A KR20167035848A KR20170009961A KR 20170009961 A KR20170009961 A KR 20170009961A KR 1020167035848 A KR1020167035848 A KR 1020167035848A KR 20167035848 A KR20167035848 A KR 20167035848A KR 20170009961 A KR20170009961 A KR 20170009961A
- Authority
- KR
- South Korea
- Prior art keywords
- slot
- packet
- block
- hash value
- key
- Prior art date
Links
- 238000012545 processing Methods 0.000 title claims abstract description 126
- 238000000034 method Methods 0.000 claims description 59
- 230000006870 function Effects 0.000 claims description 29
- 230000008569 process Effects 0.000 claims description 6
- 230000005540 biological transmission Effects 0.000 claims description 5
- 230000004044 response Effects 0.000 claims description 4
- 238000003672 processing method Methods 0.000 claims description 3
- 230000003068 static effect Effects 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 7
- 238000012423 maintenance Methods 0.000 description 7
- 238000012795 verification Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/7453—Address table lookup; Address filtering using hashing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/40—Bus networks
- H04L12/407—Bus networks with decentralised control
- H04L12/413—Bus networks with decentralised control with random access, e.g. carrier-sense multiple-access with collision detection [CSMA-CD]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/742—Route cache; Operation thereof
-
- H04L45/7457—
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/74591—Address table lookup; Address filtering using content-addressable memories [CAM]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Storage Device Security (AREA)
Abstract
제 1 및 제 2 해시 값들은 패킷과 연관된 정보로부터 구성된 키를 이용하여 발생된다. 블록 번호 (block number) 가 제 1 테이블에 있는 슬롯 내 셀로부터 판독되고, 제 1 테이블에 있는 슬롯은 제 1 해시 값에 의해 인덱싱되고 셀은 제 2 해시 값에 의해 인덱싱된다. 제 2 테이블에 있는 슬롯 내 블록을 향한 메모리 액세스 동작이 블록으로부터 패킷을 위한 패킷 처리 정보를 포함하는 데이터를 판독하기 위해 수행된다. 제 2 테이블에 있는 슬롯은 제 1 해시 값에 의해 인덱싱되고 블록은 블록 번호에 의해 인덱싱된다. 패킷은 패킷 처리 정보에 따라 처리된다.
Description
본 실시형태들은 일반적으로 패킷 처리에 관한 것이고, 특히 패킷 처리에서의 룩업에 사용되는 해시 테이블들에 관한 것이다.
패킷 처리 칩에서, 패킷 정보 (예를 들어, 패킷 헤더로부터의 메타데이터) 는 룩업 테이블에서 패킷 처리 정보를 룩업하기 위한 키로서 사용될 수도 있다. 패킷 처리 정보는 패킷 포워딩 및/또는 분류에 사용된다. 예를 들어, 키는 포워딩 테이블에 있는 포워딩 정보를 룩업하는데 사용된다. 룩업 테이블 (예를 들어, 포워딩 테이블) 은 다수의 슬롯들로 분할된다. 각각의 슬롯은, 각각의 충돌 엘리먼트들을 저장하기 위한 다수의 셀들을 가질 수도 있다. 각각의 충돌 엘리먼트는 키 자체뿐만 아니라 각각의 키를 위한 패킷 처리 정보를 저장한다. 슬롯들은 해시 함수 h(k) 를 이용하여 인덱싱되고, 여기서 k 는 키이다. 다수의 충돌 엘리먼트들이 각각의 슬롯에 포함되는데, 해시 함수는 다수의 키들을 동일한 슬롯으로 맵핑하기 때문이다. 특정 키 k 를 위한 패킷 처리 정보를 검색하기 위하여, 인덱스 h(k) 를 갖는 슬롯 내 충돌 엘리먼트들이 판독될 수도 있고 충돌 엘리먼트들에 저장된 키 값들이 k 와 비교된다. 매치는 매칭 충돌 엘리먼트가 k 를 위한 패킷 처리 정보를 저장한다는 것을 표시한다.
룩업 테이블 (예를 들어, 포워딩 테이블) 을 위한 이용율 (usage rate) 은 셀들의 수 그리고, 따라서 슬롯당 충돌 엘리먼트들의 수를 증가시킴으로써 증가될 수도 있다: 성공적인 룩업의 가능성은 슬롯당 충돌 엘리먼트들의 수가 증가함에 따라 증가된다. 하지만, 슬롯당 셀들의 수를 증가시키는 것은 룩업을 수행할 때 슬롯으로부터 판독되야 하는 데이터의 양을 증가시키고, 이는 패킷을 처리하기 위한 레이턴시를 증가시킨다. 증가된 레이턴시의 결과로 성능이 감소된다.
따라서, 메모리 액세스를 제한하지만 높은 이용율을 제공하는 패킷 처리 룩업 기법들이 요망된다.
일부 실시형태들에서, 패킷 처리 방법은 패킷과 연관된 정보로부터 구성되었던 키를 이용하여 제 1 및 제 2 해시 값들을 발생시키는 단계를 포함한다. 블록 번호 (block number) 가 제 1 테이블에 있는 슬롯 내 셀로부터 판독되고, 제 1 테이블에 있는 슬롯은 제 1 해시 값에 의해 인덱싱되고 셀은 제 2 해시 값에 의해 인덱싱된다. 제 2 테이블에 있는 슬롯 내 블록을 향한 메모리 액세스 동작이 블록으로부터 패킷을 위한 패킷 처리 정보를 포함하는 데이터를 판독하기 위해 수행된다. 제 2 테이블에 있는 슬롯은 제 1 해시 값에 의해 인덱싱되고 블록은 블록 번호에 의해 인덱싱된다. 패킷은 패킷 처리 정보에 따라 처리된다.
일부 실시형태들에서, 패킷 처리에 사용되는 룩업 테이블을 유지하는 방법은, 제 1 복수의 슬롯들로 분할되는 제 1 테이블을 생성하고 제 2 복수의 슬롯들로 분할되는 제 2 테이블을 생성하는 단계를 포함한다. 제 1 복수의 슬롯들의 각각의 슬롯은 복수의 셀들로 분할된다. 제 2 복수의 슬롯들의 각각의 슬롯은 복수의 블록들로 분할된다. 제 1 및 제 2 해시 값들이 키를 이용하여 발생된다. 키 및 그 키와 연관된 패킷 처리 정보가 제 2 테이블에 있는 각각의 슬롯 내 각각의 블록에 저장되고, 제 2 테이블에 있는 각각의 슬롯은 제 1 해시 값에 의해 인덱싱되고 각각의 블록은 블록 번호에 의해 인덱싱된다. 블록 번호가 제 1 테이블에 있는 각각의 슬롯 내 각각의 셀에 저장되고, 제 1 테이블에 있는 각각의 슬롯은 제 1 해시 값에 의해 인덱싱되고 제 1 테이블에 있는 각각의 슬롯 내 각각의 셀은 제 2 해시 값에 의해 인덱싱된다.
일부 실시형태들에서, 패킷 처리 시스템은 패킷과 연관된 정보로부터 구성된 키를 이용하여 제 1 및 제 2 해시 값들을 생성하기 위한 해싱 모듈을 포함한다. 패킷 처리 시스템은 또한, 제 1 테이블에 있는 슬롯 내 셀로부터 블록 번호를 판독하고 제 2 테이블에 있는 슬롯 내 블록을 향한 메모리 액세스를 수행하여, 블록으로부터 패킷 처리 정보를 포함하는 데이터를 판독하기 위한 테이블 액세스 모듈을 포함한다. 제 1 테이블에 있는 슬롯은 제 1 해시 값에 의해 인덱싱되고 셀은 제 2 해시 값에 의해 인덱싱된다. 제 2 테이블에 있는 슬롯은 제 1 해시 값에 의해 인덱싱되고 블록은 블록 번호에 의해 인덱싱된다. 패킷 처리 시스템은 또한, 블록으로부터 판독되는 패킷 처리 정보에 따라 패킷을 처리하기 위한 패킷 처리 모듈을 포함한다.
본 실시형태들은 예로써 예시되고 첨부 도면들의 도면들에 의해 한정되지 않도록 의도된다.
도 1은 일부 실시형태들에 따른 패킷들을 처리하기 위한 시스템의 블록도이다.
도 2a는 일부 실시형태들에 따른 해시 테이블 (hash table) 및 대응하는 스터브 테이블 (stub table) 의 블록도이다.
도 2b는 일부 실시형태들에 따른 도 2a 의 해시 테이블에서 블록을 도시한다.
도 3은 일부 실시형태들에 따른 2개의 해시 테이블들과 2개의 대응하는 스터브 테이블들을 도시하는 블록도이다.
도 4a 및 도 4b 는 일부 실시형태들에 따른 패킷들을 처리하는 방법의 플로우차트를 도시한다.
도 5a 및 도 5b 는 일부 실시형태들에 따른 룩업 테이블을 유지하는 방법의 플로우차트를 도시한다.
같은 참조 부호들은 도면들 및 명세서 전체에 걸쳐 대응하는 부분들을 나타낸다.
도 1은 일부 실시형태들에 따른 패킷들을 처리하기 위한 시스템의 블록도이다.
도 2a는 일부 실시형태들에 따른 해시 테이블 (hash table) 및 대응하는 스터브 테이블 (stub table) 의 블록도이다.
도 2b는 일부 실시형태들에 따른 도 2a 의 해시 테이블에서 블록을 도시한다.
도 3은 일부 실시형태들에 따른 2개의 해시 테이블들과 2개의 대응하는 스터브 테이블들을 도시하는 블록도이다.
도 4a 및 도 4b 는 일부 실시형태들에 따른 패킷들을 처리하는 방법의 플로우차트를 도시한다.
도 5a 및 도 5b 는 일부 실시형태들에 따른 룩업 테이블을 유지하는 방법의 플로우차트를 도시한다.
같은 참조 부호들은 도면들 및 명세서 전체에 걸쳐 대응하는 부분들을 나타낸다.
상세한 설명
다음의 설명에서, 본 개시의 철저한 이해를 제공하기 위하여 특정 컴포넌트들, 회로들 및 프로세스들의 예들과 같은 많은 특정 상세들이 제시된다. 또한, 다음의 상세한 설명에서 그리고 설명의 목적을 위해, 특정 명명법이 본 실시형태들의 철저한 이해를 제공하기 위하여 제시된다. 하지만, 이들 특정 상세들은 본 실시형태들을 실시하기 위하여 필요하지 않을 수도 있다는 것은 당업자에게 분명할 것이다. 다른 사례들에서, 널리 알려진 회로 및 디바이스는 본 개시를 모호하게 하는 것을 피하기 위하여 블록도 형태로 보여진다. 본원에서 사용된 용어 "커플링된" 은 직접 또는 하나 이상의 개재 컴포넌트들 또는 회로들을 통해 연결되는 것을 의미한다. 본원에 기재된 다양한 버스들을 통해 제공되는 신호들 중 임의의 신호는 다른 신호들과 시간 다중화될 수도 있고 하나 이상의 공통 버스들을 통해 제공될 수도 있다. 추가적으로, 회로 엘리먼트들 또는 소프트웨어 블록들 사이의 상호접속은 단일 신호 라인들로서 또는 버스들로서 도시될 수도 있다. 버스들의 각각은 대안적으로 단일 신호 라인일 수도 있고, 단일 신호 라인들의 각각은 대안적으로 버스들일 수도 있고, 단일 라인 또는 버스는 컴포넌트들간의 통신을 위한 무수히 많은 물리 또는 논리 메카니즘들 중 임의의 하나 이상을 나타낼 수도 있다. 본 실시형태들은, 본원에 기재된 특정 예들에 한정되는 것으로 해석되는 것이 아니라, 오히려 그들의 범위내에, 첨부된 청구항들에 의해 정의된 모든 실시형태들을 포함하는 것으로 해석되야 한다.
도 1은 일부 실시형태들에 따른 패킷들을 처리하기 위한 시스템 (100) 의 블록도이다. 일부 실시형태들에서, 시스템 (100) 은 네트워크 스위치 또는 라우터의 일부이다. 시스템 (100) 은 패킷들을 수신 및 송신하는 복수의 포트들 (102) 을 포함한다. 포트들 (102) 은, 처리 회로 (104) 에 커플링되고, 이 처리 회로는 메모리 (120) 및 메모리 (124) 에 커플링된다. 처리 회로 (104) 는 메모리 (120) 및/또는 메모리 (124) 에 메모리 제어기 (단순화를 위해 미도시) 를 통해 커플링될 수도 있다.
메모리 (120) 는 하나 이상의 해시 테이블들 (122) 을 저장하고, 이 해시 테이블은 각각의 패킷들을 처리하는 법을 지정하는 패킷 처리 정보를 저장한다. 하나 이상의 해시 테이블들 (122) 은 각각 슬롯들로 분할되고, 이 슬롯들은 또한, 버킷 (bucket) 들로 지칭될 수도 있다. 슬롯들은 블록들로 분할되고, 이 블록들은 셀들로 분할된다. 셀들은 또한, 빈들로 지칭될 수도 있다. 각각의 셀은 충돌 엘리먼트를 저장하고; 각각의 충돌 엘리먼트는 각각의 키 그리고 키 자체를 위한 패킷 처리 정보를 저장한다. 메모리 (124) 는 하나 이상의 스터브 테이블들 (126) 을 저장한다. 하나 이상의 스터브 테이블들 (126) 은 각각 슬롯들로 분할되고, 이 슬롯들은 각각 셀들로 분할된다. 하나 이상의 스터브 테이블들 (126) 에서 셀들은 일부 실시형태들에 따라 하나 이상의 해시 테이블들 (122) 에서의 블록들에 대한 포인터들을 저장한다. (본원에서 사용된 용어 "셀" 은 슬롯의 일부를 지칭한다. 해시 테이블 (122) 에서, 셀은 충돌 엘리먼트를 저장한다. 스터브 테이블 (126) 에서, 셀은, 대응하는 해시 테이블 (122) 에서의 블록을 가리키는 블록 번호를 저장한다. 그러므로, 본원에서 사용된 용어 "셀" 은 "메모리 셀" 과 같은 것이 아니다. 반대로, 슬롯 내 각각의 셀은 다수의 메모리 셀들을 포함할 것이다.) 하나 이상의 해시 테이블들 (122) 및 하나 이상의 스터브 테이블들 (126) 의 예들이 도 2a, 도 2b 및 도 3 을 참조하여 아래에서 설명된다.
처리 회로 (104) 는 키 구성 모듈 (106), 해싱 모듈 (108), 테이블 액세스 모듈 (110), 패킷 처리 모듈 (116), 및 테이블 유지 모듈 (119) 을 포함한다. 키 구성 모듈 (106) 은 하나 이상의 해시 테이블들 (122) 에 저장된 패킷 처리 정보를 룩업하는데 사용되는 키들을 구성한다. 키들은, 키 구성 규칙에 따라, 패킷들과 연관되는 (예를 들어, 이들로부터 추출되는) 정보를 이용하여 구성된다. 예를 들어, 키들은 패킷 헤더들로부터 추출된 메타데이터를 이용하여 구성될 수도 있다. 일 예에서, 패킷 헤더들의 목적지 어드레스들이 추출되고 키로서 사용된다. 다른 예에서, 패킷들의 전체 패킷 헤더들 (예를 들어, 인터넷 프로토콜 (IP) 헤더들) 이 추출되고 키로서 사용된다.
키 구성 모듈 (106) 에 의해 구성된 키들이 해싱 모듈 (108) 에 제공되고, 이 해싱 모듈은 키들을 해싱하여 해시 값들을 발생시킨다. 해싱 모듈 (108) 은 각각의 키를 위해 다수의 해시 값들을 발생시킬 수도 있다. 일부 실시형태들에서, 해싱 모듈 (108) 은 다수의 해시 함수들을 구현한다. 예를 들어, 해싱 모듈 (108) 은 제 1 해시 함수 h1 를 키 k 에 적용하여 제 1 해시 값 h1(k) 을 발생시키고 제 2 해시 함수 h2 를 키 k 에 적용하여 제 2 해시 값 h2(k) 을 발생시킬 수도 있다. 해싱 모듈 (108) 은 또한, 제 3 해시 함수 h3 를 키 k 에 적용하여 제 3 해시 값 h3(k) 을 발생시키고 제 4 해시 함수 h4 를 키 k 에 적용하여 제 4 해시 값 h4(k) 을 발생시킬 수도 있다. 별개의 해싱 함수들의 사용은 해시 값들 h1(k), h2(k), h3(k), 및/또는 h4(k) 를 발생시키는 것의 일 예일 뿐이고; 다른 예들도 가능하다.
해싱 모듈 (108) 에 의해 발생되는 해시 값들이 키 구성 모듈 (106) 에 의해 구성되는 키와 함께 테이블 액세스 모듈 (110) 에 제공된다. 테이블 액세스 모듈 (110) 은 해시 값들을 이용하여 하나 이상의 스터브 테이블들 (126) 및 하나 이상의 해시 테이블들 (122) 에 액세스한다. 해시 값들을 이용하여 이들 테이블들에 액세스하는 것의 예들은 도 2a 및 도 3을 참조하여 아래에서 제공되고, 또한 도 4a 내지 도 4b 의 방법 (400) 및 도 5a 내지 도 5b 의 방법 (500) 에 제공된다. 일부 실시형태들에서, 테이블 액세스 모듈 (110) 은, 키 구성 모듈 (106) 에 의해 제공되는 해시 테이블 (122) 에서 충돌 엘리먼트들로부터 판독되는 키들을 비교하기 위한 비교 로직 (112) 을 포함한다. 일부 실시형태들에서, 테이블 액세스 모듈 (110) 은 스터브 테이블 (126) 에 있는 셀로부터 판독된 블록 번호가 유효한 블록 포인터인지 여부를 결정하기 위한 검증 로직 (114) 을 포함한다.
테이블 액세스 모듈 (110) 에 의해 해시 테이블 (122) 로부터 취출된 패킷 처리 정보는 패킷 처리 모듈 (116) 에 제공되고, 이 패킷 처리 모듈은 패킷 처리 정보에 따라 패킷들을 처리한다. 일부 실시형태들에서, 패킷 처리 모듈 (116) 은, 송신을 위해 패킷 처리 정보에 의해 지정되는 출력 포트들 (102) 로 패킷들을 라우팅하는 패킷 포워딩 엔진 (118) 을 포함한다.
테이블 유지 모듈 (119) 은 하나 이상의 해시 테이블들 (122) 및 하나 이상의 스터브 테이블들 (126) 을 구축 및 업데이트한다. 예를 들어, 테이블 유지 모듈 (119) 은 키들 및 대응하는 패킷 처리 정보를 하나 이상의 해시 테이블들 (122) 에 저장하고 대응하는 블록 번호들을 하나 이상의 스터브 테이블들 (126) 에 저장한다.
일부 실시형태들에서, 메모리 (120) 는 처리 회로 (104) 의 외부에 있다. 예를 들어, 처리 회로 (104) 는 패킷 처리 칩에서 구현되는 한편, 메모리 (120) 는 하나 이상의 외부 메모리 칩들에서 구현된다. 메모리 (124) 는 처리 회로 (104) 와 (예를 들어, 캐시 메모리와) 같은 집적 회로 (즉, 같은 칩) 에 임베딩될 수도 있다. 대안적으로, 메모리 (124) 는, 처리 회로 (104) 를 포함하는 집적 회로 (예를 들어, 패킷 처리 칩) 의 외부에 있는 하나 이상의 메모리 칩들에서 구현될 수도 있다. 일부 실시형태들에서, 메모리 (120) 는 동적 랜덤 액세스 메모리 (DRAM) 이고, 메모리 (124) 는 정적 랜덤 액세스 메모리 (SRAM) 이다. 일부 실시형태들에서, 메모리 (120) 는 이중 데이터 레이트 (DDR) 메모리 (예를 들어, DDR DRAM) 이다.
도 2a는 일부 실시형태들에 따른 해시 테이블 (202) 및 대응하는 스터브 테이블 (210) 의 블록도이다. 해시 테이블 (202) 은 메모리 (120) 에 있는 해시 테이블 (122) 의 예이고, 스터브 테이블 (210) 은 메모리 (124) 에 있는 스터브 테이블 (126) 의 예이다 (도 1). 해시 테이블 (202) 은 m 개 슬롯들 (즉, 버킷들) (204) 로 분할되고, 여기서 m 은 1 보다 큰 정수이고, 그 결과 해시 테이블 (202) 은 슬롯들 (204-0 내지 204-(m-1)) 를 포함한다. 슬롯들 (204-0 내지 204-(m-1)) 는 제 1 세트의 해시 값들 h1(k) 을 이용하여 (예를 들어, 제 1 해시 함수 h1(k) 를 이용하여) 인덱싱되고, 여기서 h1(k) 의 값들은 0 과 (m-1) 사이의 범위이다. 특정 키 k 에 적용되는 h1(k) 의 값은, 따라서, 해시 테이블 (202) 에서 슬롯 (204) 의 인덱스를 준다.
해시 테이블 (202) 에서의 각각의 슬롯 (204) 은 p 개 블록들 (206) 로 분할되고, 여기서 p 는 1 보다 큰 정수이고, 그 결과 각각의 슬롯 (204) 은 블록들 (206-0 내지 206-(p-1)) 를 포함한다. 도 2b 는 일부 실시형태들에 따른 블록 (206) 을 도시한다. 블록 (206) 은 q 개 각각의 충돌 엘리먼트들 (220) 을 저장하는 q 개 셀들로 분할되고, 여기서 q 는 1 보다 큰 정수이고, 그 결과 블록은 충돌 엘리먼트들 (220-0 내지 220-(q-1)) 를 포함한다. 각각의 충돌 엘리먼트 (220) 는 키 (222) 및 패킷 처리 정보 (224) 를 포함한다. 각각의 블록 (206) 은 동일한 슬롯 내 다른 블록들 (206) 에 상관 없이 액세스될 수도 있다. 일부 실시형태들에서, 블록 (206) 은, 단일 메모리 트랜스액션 (예를 들어, 메모리 (120) 를 처리 회로 (104) 에 커플링하는 데이터 버스를 위한 단일 버스 요청 트랜스액션) 에서 메모리 (120) 로부터 그것이 판독될 수 있게 하는 사이즈 x (예를 들어, 바이트 단위) 를 갖는다. 많은 인자들은 시스템 효율 (예를 들어, 데이터 버스트 사이즈, 캐시 라인 사이즈) 를 향상시키기 위한 x 의 값의 선택에 영향을 미칠 수도 있다. 예를 들어 (예를 들어, 메모리 (120) 가 DDR 일 때), 버스 요청 트랜스액션 (bus-request transaction) 은 메모리 (120) 로부터 판독되는 데이터의 단일 버스트를 나타낼 수도 있고, 그 결과 블록 (206) 은 메모리 (120) 를 위한 데이터 버스트 당 바이트들의 수와 동일한 사이즈 x 를 갖는다. 일 예에서, 메모리 (120) 는 데이터 버스트 당 128 바이트들 (즉, 128B) 를 갖는 DRAM 이고, 블록 (206) 은 128B (즉, x=128B) 이다. 각각의 충돌 엘리먼트 (220), 및 따라서 각각의 셀은 y 바이트이고, 그 결과 q= ceiling(x/y, 1) (즉, x 나누기 y, 가장 가까운 정수로 반올림됨) 이다. 각각의 슬롯 (204) 은 n개 충돌 엘리먼트들을 갖고, 따라서, n개 셀들을 갖는다. 따라서, 각각의 슬롯 (204) 은 p 개 블록들 (206) 로 분할되고, 여기서 p = ceiling(n/q, 1) 이다.
스터브 테이블 (210) 은 m 개 슬롯들 (212) 로 분할되고, 그 결과 스터브 테이블은 슬롯들 (212-0 내지 212-(m-1)) 를 포함한다. 해시 테이블 (202) 에서 슬롯들 (204-0 내지 204-(m-1)) 과 같은, 슬롯들 (212-0 내지 212-(m-1)) 은 제 1 세트의 해시 값들 h1(k) 을 이용하여 (예를 들어, 제 1 해시 함수 h1(k) 를 이용하여) 인덱싱된다. 각각의 슬롯 (212) 은 b 개 셀들 (214) 로 분할되고, 여기서 b 는 p 이상이고, 그 결과 각각의 슬롯은 셀들 (214-0 내지 214-(b-1)) 를 포함한다. 일 예에서, b 는 n 과 같다. 각각의 셀 (214) 의 사이즈는 ceiling(log2(p), 1) 이다 (즉, 해시 테이블 (202) 의 각각의 슬롯 (204) 에 있는 블록들 (206) 의 수의 베이스-2 대수 (base-2 logarithm), 가장 가까운 정수로 반올림됨). 비트들 단위의 스터브 테이블 (210) 의 사이즈는 ceiling(log2(p), 1)*m*b 이다.
셀들 (214-0 내지 214-(b-1)) 는 제 2 세트의 해시 값들 h2(k) 을 이용하여 (예를 들어, 제 2 해시 함수 h2(k) 를 이용하여) 인덱싱되고, 여기서 h2(k) 의 값들은 0 과 b-1 사이의 범위이다. 특정 키 k 에 적용되는 h2(k) 의 값은, 따라서, 스터브 테이블 (210) 에서 셀 (214) 의 인덱스를 준다. 슬롯 (212) 에서 셀 (214-0 내지 214-(b-1)) 는 해시 테이블 (202) 에서 대응하는 슬롯 (204) 에 있는 블록들 (206) 의 블록 번호들을 저장한다. 도 2a 의 예에서, 슬롯 (212-(m-1)) 에 있는 셀 (214-1) 은 ‘0’ 을 저장하고, 이것은 해시 테이블 (202) 의 슬롯 (204-(m-1)) 에서 블록 (206-0) 의 블록 번호이다. 슬롯 (212-(m-1)) 에서의 셀 (214-2) 은 값 ‘p-1’ 을 저장하고, 이것은 해시 테이블 (202) 의 슬롯 (204-(m-1)) 에서 블록 (206-(p-1)) 의 블록 번호이다. 따라서, 슬롯 (212-(m-1)) 에서 셀 (214-1) 은 슬롯 (204-(m-1)) 에 블록 (206-0) 에 대한 포인터를 저장하고, 따라서 슬롯 (212-(m-1)) 에 있는 셀 (214-2) 은 슬롯 (204-(m-1)) 에서의 블록 (206-(p-1)) 에 대한 포인터를 저장한다. 일부 실시형태들에서, 각각의 셀 (214) 은 동일한 슬롯 (212) 에 있는 다른 셀들 (214) 에 상관 없이 액세스될 수도 있다.
따라서, 키 k 를 위한 충돌 엘리먼트 (220) 는, 해시 테이블 (202) 에서, 스터브 테이블 (210) 에서의 대응하는 셀 (214) 에 저장된 블록 번호에 의해 지정되는 블록 (206) 에 저장된다. 대응하는 셀 (214) 은 h2(k) 에 의해 인덱싱되고 h1(k) 에 의해 인덱싱되는 슬롯 (212) 에 있는 한편, 충돌 엘리먼트 (220) 는 h1(k) 에 의해 인덱싱되는 슬롯 (204) 에 있다.
일 예에서, m=8k, n=16, x=128B, y=32B, 및 b=16 으로, 해시 테이블 (202) 은 DRAM 에서 구현되고 스터브 테이블 (210) 은 SRAM 에서 구현된다. 따라서, p=4 및 q=4 이다. 해시 테이블 (202) 의 사이즈는 따라서 8k*16*32B = 4 메가바이트 (MB) 이고, 스터브 테이블 (219) 의 사이즈는 따라서 2*8k*16 비트 = 256 킬로비트 = 32 킬로바이트 (KB) 이다. 4MB DRAM 해시 테이블 (202) 은 일부 애플리케이션들에 따라 높은 이용율을 제공하는 한편, 블록 번호들을 저장하는 32KB SRAM 스터브 테이블 (210) 의 추가는 DRAM 액세스들의 사이즈를 제한하여, 낮은 레이턴시를 초래한다.
해시 테이블 (202) 이 룩업에서 사용되는 키를 위한 충돌 엘리먼트를 포함하지 않는 경우, 룩업은 실패할 것이다. 룩업이 실패할 가능성은 시스템 (100) 의 부하율 (load factor) 을 증가시킴으로써 감소될 수도 있다. 부하율은 엔트리들의 수 나누기 버킷들 (즉, 슬롯들) 의 수로서 정의되고, 여기서 엔트리들의 수는 테이블에 성공적으로 삽입된 엔트리들의 수를 나타낸다. 시스템 (100) 은 낮은 충돌율을 겸한 높은 부하율을 갖는 것이 바람직하다. 낮은 충돌율을 달성하면서 부하율을 향상시키기 위하여, 제 2 해시 테이블 (122) 및 대응하는 스터브 테이블 (126) 이 시스템 (100) 에 포함될 수도 있다.
도 3은 일부 실시형태들에 따른 해시 테이블 (202) 및 스터브 테이블 (210) (도 2a) 과 함께 사용될 수도 잇는 제 2 해시 테이블 (302) 및 제 2 스터브 테이블 (310) 을 보여주는 블록도이다. 해시 테이블 (302) 은 메모리 (120) 에 있는 해시 테이블 (122) 의 예이고 (도 1), 스터브 테이블 (310) 은 메모리 (124) 에 있는 스터브 테이블 (126) 의 예이다 (도 1). 해시 테이블 (302) 및 스터브 테이블 (310) 은, 해시 테이블 (202) 이 특정 키를 위한 충돌 엘리먼트를 저장하지 않는다는 결정에 응답하여 액세스될 수도 있다.
해시 테이블 (302) 은 c 개 슬롯들 (즉, 버킷들) (304) 로 분할되고, 여기서 c 은 1 보다 큰 정수이고, 그 결과 해시 테이블 (302) 은 슬롯들 (304-0 내지 304-(c-1)) 을 포함한다. 슬롯들 (304-0 내지 304-(c-1)) 은 제 3 세트의 해시 값들 h3(k) 을 이용하여 (예를 들어, 제 3 해시 함수 h3(k) 를 이용하여) 인덱싱되고, 여기서 h3(k) 의 값들은 0 과 (c-1) 사이의 범위이다. 각각의 슬롯 (304) 은 p 개 블록들 (206) 로 분할되고, 그 결과 각각의 슬롯 (304) 은 블록들 (206-0 내지 206-(p-1)) 를 포함한다. 각각의 슬롯 (206) 은, 해시 테이블 (202) 에서의 블록들 (206) 에 대해 설명된 바처럼, 같은 슬롯 (304) 에 있는 다른 블록들 (206) 에 상관 없이 액세스될 수도 있다. 스터브 테이블 (310) 은 c 개 슬롯들 (312) 로 분할되고, 그 결과 스터브 테이블 (310) 은 슬롯들 (312-0 내지 312-(c-1)) 를 포함한다. 슬롯들 (304-0 내지 304-(c-1)) 과 같은, 슬롯들 (312-0 내지 312-(c-1)) 은 제 3 세트의 해시 값들 h3(k) 을 이용하여 (예를 들어, 제 3 해시 함수 h3(k) 를 이용하여) 인덱싱된다. 각각의 슬롯 (312) 은 b 개 셀들 (214) 로 분할되고, 그 결과 각각의 슬롯 (312) 은 셀들 (214-0 내지 214-(b-1)) 을 포함한다. 셀들 (214-0 내지 214-(b-1)) 은 제 4 세트의 해시 값들 h4(k) 을 이용하여 (예를 들어, 제 4 해시 함수 h4(k) 를 이용하여) 인덱싱되고, 여기서 h4(k) 의 값들은 0 과 (b-1) 사이의 범위이다. 스터브 테이블 (310) 에서 각각의 슬롯 (312) 에 있는 셀들 (214-0 내지 214-(b-1)) 은 해시 테이블 (302) 에서 대응하는 슬롯 (304) 에 있는 블록들 (206) 을 가리키는 블록 번호들을 저장한다. 일부 실시형태들에서, 각각의 셀 (214) 은 동일한 슬롯 (312) 에 있는 다른 셀들 (214) 에 상관 없이 액세스될 수도 있다.
키들 k 을 위한 충돌 엘리먼트들 (220) 은, 해시 테이블 (302) 에서, 스터브 테이블 (310) 에 있는 대응하는 셀들 (214) 에 저장된 블록 번호들에 의해 지정되는 블록들 (206) 에 저장된다. 대응하는 셀들 (214) 은 h4(k) 에 의해 인덱싱되고 h3(k) 에 의해 인덱싱되는 슬롯들 (312) 에 있는 한편, 충돌 엘리먼트들 (220) 은 h3(k) 에 의해 인덱싱되는 슬롯들 (304) 에 있다.
도 3의 예에서, 해시 테이블 (202) 의 각각의 슬롯 (204) 에 있는 블록들 (206) 의 수는 해시 테이블 (302) 의 각각의 슬롯 (304) 에 있는 블록들 (206) 의 수와 동일한 것으로 도시되어 있다. 하지만, 이들 수들은 상이할 수도 있다. 유사하게는, 스터브 테이블 (210) 의 각각의 슬롯 (212) 에 있는 셀들 (214) 의 수는 스터브 테이블 (310) 의 각각의 슬롯 (312) 에 있는 셀들 (214) 의 수와 동일한 것으로 도시되어 있다. 하지만, 이들 수들은 상이할 수도 있다.
도 4a 및 도 4b 는 일부 실시형태들에 따른 패킷들을 처리하는 방법 (400) 의 플로우차트를 도시한다. 방법 (400) 은, 예를 들어, 시스템 (100) 에서 수행된다 (도 1).
방법 (400) 에서, 제 1 패킷이 수신된다. 제 1 키 k1 가 제 1 패킷과 연관된 정보로부터 (예를 들어, 패킷 헤더에 있는 메타데이터로부터) 구성된다 (402, 도 4a). 제 1 키는 예를 들어, 키 구성 모듈 (106) (도 1) 에 의해 구성된다.
해시 값들 h1(k1) 및 h2(k1) 이 제 1 키를 이용하여 발생된다 (404, 406). 예를 들어, 제 1 해시 함수가 제 1 키에 적용되어 해시 값 h1(k1) 을 결정하고 제 2 해시 함수가 제 1 키에 적용되어 해시 값 h2(k1) 을 결정한다. 해싱 동작들 (404 및 406) 은, 예를 들어, 해싱 모듈 (108) (도 1) 에 의해 수행된다.
제 1 블록 번호가 제 1 테이블에 있는 슬롯 내 셀로부터 (예를 들어, 스터브 테이블 (210) 에서 슬롯 (212) 에 있는 셀 (214) 로부터, 도 2a) (예를 들어, 테이블 액세스 모듈 (110) 에 의해, 도 1) 판독된다 (408). 슬롯은 해시 값 h1(k1) 에 의해 인덱싱되고 셀은 해시 값 h2(k1) 에 의해 인덱싱된다. 일부 실시형태들에서, 셀은, 슬롯에서 다른 셀들을 판독함이 없이 판독된다. 일부 실시형태들에서, 제 1 블록 번호가 단일 트랜스액션 (예를들어, 단일 메모리 액세스) 에서 제 1 테이블을 저장하는 메모리로부터 (예를 들어, 메모리 (124) 에서, 도 1) 판독된다. 일부 실시형태들에서, 제 1 테이블을 저장하는 메모리는 SRAM 이다.
일부 실시형태들에서, 제 1 블록 번호가 제 2 테이블을 위한 유효한 블록 번호라는 것이 (예를 들어, 검증 로직 (114) 에 의해, 도 1) 결정된다 (410).
제 2 테이블에 있는 슬롯 내 (예를 들어, 해시 테이블 (202) 에 있는 슬롯 (204) 내, 도 2a) 블록 (예를 들어, 블록 (206), 도 2b) 를 향한 메모리 액세스가, 제 1 패킷을 위한 패킷 처리 정보 (예를 들어, 패킷 처리 정보 (224), 도 2b) 를 포함하는 데이터를 판독하기 위해 수행된다 (412). 메모리 액세스가, 예를 들어, 테이블 액세스 모듈 (110) (도 1) 에 의해 수행된다. 슬롯은 해시 값 h1(k1) 에 의해 인덱싱되고 블록은 제 1 블록 번호에 의해 인덱싱된다. 메모리 액세스에서, 블록은, 슬롯에서 다른 블록들을 판독함이 없이 판독된다. 일부 실시형태들에서, 패킷 처리 정보는 (예를 들어, 출력 포트 (102) 를 지정하는, 도 1) 패킷 포워딩 정보를 포함한다. 일부 실시형태들에서, 블록은, 단일 메모리 트랜스액션 (예를 들어, 단일 버스 요청 트랜스액션, 그의 예는 단일 버스트이다) 에서 제 2 테이블을 저장하는 메모리로부터 (예를 들어, 메모리 (120) 에서, 도 1) 판독된다 (414). 일부 실시형태들에서, 제 2 테이블을 저장하는 메모리는 DRAM 이다.
블록은 제 1 블록 번호가 제 2 테이블을 위한 유효한 블록 번호라는 것을 결정하는 것 (410) 에 응답하여 판독될 수도 있다. 대안적으로, 결정 동작 (410) 은 생략될 수도 있다.
일부 실시형태들에서, 복수의 충돌 엘리먼트들 (220-0 내지 220-(q-1)) (도 2b) 이 블록으로부터 판독된다 (416). 각각의 충돌 엘리먼트 (220) 는 각각의 키 (222) 및 그 각각의 키 (222) 와 연관된 각각의 패킷 처리 정보 (224) 를 저장한다. 충돌 엘리먼트들 (220-0 내지 220-(q-1)) 중 하나의 충돌 엘리먼트의 각각의 키 (222) 가 제 1 키에 매칭된다는 것이 (예를 들어, 비교 로직 (112) 을 이용하여, 도 1) 결정된다. 그 충돌 엘리먼트 (220) 의 각각의 패킷 처리 정보 (224) 는 제 1 패킷을 위한 패킷 처리 정보로서 식별된다.
일부 실시형태들에서, 복수의 충돌 엘리먼트들 (220-0 내지 220-(q-1)) 을 판독하기 위하여, 제 2 테이블을 저장하는 메모리에서의 (예를 들어, 메모리 (120) 에서의) 메모리 오프셋이 다음 수식을 이용하여 결정된다:
(h1(k1)*n + q*(제 1 블록 번호))*y
(1)
식중, h1(k1) 는 동작 (404) 에서 발생된 해시 값이고, n 은 제 2 테이블의 각각의 슬롯에서 (예를 들어, 해시 테이블 (202) 의 각각의 슬롯 (204) 에서, 도 2a) 충돌 엘리먼트들 (220) 의 수이고, q 는 복수의 충돌 엘리먼트들 (220-0 내지 220-(q-1)) 에서 충돌 엘리먼트들 (220) 의 수이고, y 는 각각의 충돌 엘리먼트 (220) 의 사이즈이다. 다음으로, 복수의 충돌 엘리먼트들 (220-0 내지 220-(q-1)) 은 (예를 들어, 메모리 (120) 에서 해시 테이블 (202) 의 시작 장소에 관하여) 메모리 오프셋을 갖는 메모리 장소로부터 판독된다.
제 1 패킷이 제 1 패킷을 위한 패킷 처리 정보에 따라 처리된다 (418). 일부 실시형태들에서, 제 1 패킷이 송신을 위한 패킷 처리 정보에 의해 지정되는 출력 포트에 제공된다 (420). 예를 들어, 패킷 포워딩 엔진 (118) 은 지정된 포트 (102) 로 제 1 패킷을 라우팅한다 (도 1).
일부 실시형태들에서, 제 2 패킷이 수신된다 (422, 도 4b). 제 2 키 k2 가 제 2 패킷과 연관된 정보로부터 (예를 들어, 패킷 헤더에 있는 메타데이터로부터) 구성된다 (422). 제 2 키는 예를 들어, 키 구성 모듈 (106) (도 1) 에 의해 구성된다.
해시 값들 h1(k2) 및 h2(k2) 이 제 2 키를 이용하여 발생된다 (424, 426). 예를 들어, 제 1 해시 함수가 제 2 키에 적용되어 해시 값 h1(k2) 을 결정하고 제 2 해시 함수가 제 2 키에 적용되어 해시 값 h2(k2) 을 결정한다. 해싱 동작들 (424 및 426) 은, 예를 들어, 해싱 모듈 (108) (도 1) 에 의해 수행된다.
해시 값들 h1(k2) 및 h2(k2) 을 이용하여, 제 2 테이블 (예를 들어, 해시 테이블 (202), 도 2a) 은 제 2 패킷을 위한 패킷 처리 정보를 저장하지 않는다고 결정된다 (428). 예를 들어, 제 1 테이블에 있는 h1(k2) 에 의해 인덱싱되는 슬롯 내 h2(k2) 에 의해 인덱싱된 셀 (예를 들어, 스터브 테이블 (210) 에서 슬롯 (212) 에 있는 셀 (214), 도 2a) 이 판독되고, 셀로부터 판독된 값이, 제 2 테이블이 제 2 패킷을 위한 패킷 처리 정보를 저장하지 않는 것을 표시한다는 결정이 내려진다. 예를 들어, 검증 로직 (114) (도 1) 은, 셀로부터 판독된 값이 유효한 블록 번호가 아니라고 결정한다.
해시 값들 h3(k2) 및 h4(k2) 이 제 2 키를 이용하여 발생된다 (430, 432). 예를 들어, 제 3 해시 함수가 제 2 키에 적용되어 해시 값 h3(k2) 을 결정하고 제 4 해시 함수가 제 2 키에 적용되어 해시 값 h4(k2) 을 결정한다. 해싱 동작들 (430 및 432) 은, 예를 들어, 해싱 모듈 (108) (도 1) 에 의해 수행된다.
제 2 블록 번호가 제 3 테이블에 있는 슬롯 내 셀 (예를 들어, 스터브 테이블 (310) 에서 슬롯 (312) 에 있는 셀 (214), 도 3) 로부터 판독된다 (434). 슬롯은 해시 값 h3(k2) 에 의해 인덱싱되고 셀은 해시 값 h4(k2) 에 의해 인덱싱된다. 일부 실시형태들에서, 셀은, 슬롯에서 다른 셀들을 판독함이 없이 판독된다. 일부 실시형태들에서, 제 2 블록 번호가 단일 트랜스액션 (예를들어, 단일 메모리 액세스) 에서 제 3 테이블을 저장하는 메모리로부터 (예를 들어, 메모리 (124) 에서, 도 1) 판독된다. 일부 실시형태들에서, 제 3 테이블을 저장하는 메모리는 SRAM 이다.
제 4 테이블에 있는 슬롯 내 (예를 들어, 해시 테이블 (302) 에서 슬롯 (304) 에 있는, 도 3) 블록 (예를 들어, 블록 (206) 을 향한 (도 2b)) 메모리 액세스가, 제 2 패킷을 위한 패킷 처리 정보 (예를 들어, 패킷 처리 정보 (224), 도 2b) 를 포함하는 데이터를 판독하기 위해 수행된다 (436). 슬롯은 해시 값 h3(k2) 에 의해 인덱싱되고 블록은 제 2 블록 번호에 의해 인덱싱된다. 메모리 액세스에서, 블록은, 슬롯에서 다른 블록들을 판독함이 없이 판독된다. 일부 실시형태들에서, 블록은 단일 메모리 트랜스액션 (예를 들어, 단일 버스 요청 트랜스액션, 그의 예는 단일 버스트이다) 에서 제 4 테이블을 저장하는 메모리로부터 (예를 들어, 메모리 (120) 에서, 도 1) 판독된다 (438). 일부 실시형태들에서, 제 4 테이블을 저장하는 메모리는 DRAM 이다.
동작 (436) 에서, 복수의 충돌 엘리먼트들 (220-0 내지 220-(q-1)) (도 2b) 이 블록으로부터 판독될 수도 있다 (440). 각각의 충돌 엘리먼트 (220) 는 각각의 키 (222) 및 그 각각의 키 (222) 와 연관된 각각의 패킷 처리 정보 (224) 를 저장한다. 충돌 엘리먼트들 (220-0 내지 220-(q-1)) 중 하나의 충돌 엘리먼트의 각각의 키 (222) 가 제 2 키에 매칭된다는 것이 (예를 들어, 비교 로직 (112) 을 이용하여, 도 1) 결정된다. 그 충돌 엘리먼트 (220) 에서의 각각의 패킷 처리 정보 (224) 는 제 2 패킷을 위한 패킷 처리 정보로서 식별된다.
일부 실시형태들에서, 동작 (440) 에서 복수의 충돌 엘리먼트들 (220-0 내지 220-(q-1)) 를 판독하기 위하여, 제 4 테이블을 저장하는 메모리에서의 (예를 들어, 메모리 (120) 에서의) 메모리 오프셋이 다음 수식을 이용하여 결정된다:
(h3(k2)*n + q*(제 2 블록 번호))*y
(2)
식중, h3(k2) 는 동작 (430) 에서 발생된 해시 값이고, n 은 제 4 테이블의 각각의 슬롯 내 (예를 들어, 해시 테이블 (302) 의 각각의 슬롯 (304) 에 있는, 도 3) 충돌 엘리먼트들 (220) 의 수이고, q 는 복수의 충돌 엘리먼트들 (220-0 내지 220-(q-1)) 에서 충돌 엘리먼트들 (220) 의 수이고, y 는 각각의 충돌 엘리먼트 (220) 의 사이즈이다. 다음으로, 복수의 충돌 엘리먼트들 (220-0 내지 220-(q-1)) 는 (예를 들어, 메모리 (120) 에서 해시 테이블 (302) 의 시작에 관하여) 메모리 오프셋을 갖는 메모리 장소로부터 판독된다.
판독 동작들 (434 및 436) 은, 예를 들어, 테이블 액세스 모듈 (110) 에 의해 수행된다 (도 1).
제 2 패킷이 제 2 패킷을 위한 패킷 처리 정보에 따라 처리된다 (442). 일부 실시형태들에서, 제 2 패킷이 송신을 위한 패킷 처리 정보에 의해 지정되는 출력 포트에 제공된다. 예를 들어, 패킷 포워딩 엔진 (118) 은 지정된 포트 (102) 로 제 2 패킷을 라우팅한다 (도 1).
방법 (400) 은 전체 슬롯과 반대로, 슬롯 내의 블록에 제 2 및/또는 제 4 테이블들을 위한 메모리 액세스들의 사이즈를 제한하는 것에 의해 낮은 레이턴시 테이블 룩업 (low-latency table lookup) 들을 제공한다. 방법 (400) 은 또한, 전체 슬롯과 반대로, 슬롯 내의 셀에 제 1 및/또는 제 3 테이블들을 위한 메모리 액세스들의 사이즈를 제한할 수도 있다. 제 1 및/또는 제 3 테이블들에 블록 번호들을 저장하는 것은 레이턴시를 증가시키지 않고서 제 2 및/또는 제 4 테이블들의 각각의 슬롯 내 충돌 엘리먼트들의 수가 증가될 수 있게 한다. 그에 의해, 낮은 충돌율 및 낮은 레이턴시를 겸한 높은 이용율 및 높은 부하율을 갖는 큰 룩업 테이블이 달성될 수 있다.
방법 (400) 은 특정 순서로 일어나는 것으로 보이는 다수의 동작들을 포함하지만, 방법 (400) 은 더 많거나 또는 더 적은 수의 동작들을 포함할 수 있고 그 동작들의 일부가 직렬로 또는 벙렬로 실행될 수 있다는 것이 분명하다. 2개 이상의 동작들의 순서는 변경될 수도 있고, 2개 이상의 동작들의 수행은 오버랩될 수도 있고, 2개 이상의 동작들은 단일 동작으로 결합될 수도 있다.
도 5a 및 도 5b 는 일부 실시형태들에 따른 룩업 테이블을 유지하는 방법 (500) 의 플로우차트를 도시한다. 방법 (500) 은, 예를 들어, 시스템 (100) (도 1) 에서 수행되고, 방법 (400) (도 4a-도 4b) 과 함께 수행될 수도 있다.
방법 (500) 에서, 제 1 테이블 (예를 들어, 스터브 테이블 (210), 도 2a) 가 생성되고 (502, 도 5a) 이 제 1 테이블은 제 1 복수의 슬롯들 (예를 들어, 슬롯들 (212-0 내지 212-(m-1)) 로 분할되어 있으며, 각각의 슬롯은 제 1 복수의 셀들 (예를 들어, 셀들 (214-0 내지 214-(b-1)) 로 분할되어 있다. 예를 들어, 제 1 테이블은 일부 실시형태들에서 SRAM 인 메모리 (124)(도 1) 에 저장된다. 일부 실시형태들에서, 각각의 셀은 메모리 (124) 에서 (예를 들어, 단일 각각의 메모리 트랜스액션에서) 독립적으로 액세스가능하다.
제 2 테이블 (예를 들어, 해시 테이블 (202), 도 2a) 가 생성되고 (504) 이 제 2 테이블은 제 2 복수의 슬롯들 (예를 들어, 슬롯들 (204-0 내지 204-(m-1)) 로 분할되어 있으며, 각각의 슬롯은 제 1 복수의 블록들 (예를 들어, 블록들 (206-0 내지 206-(p-1)) 로 분할되어 있다. 예를 들어, 제 2 테이블은 일부 실시형태들에서 DRAM 인 메모리 (120)(도 1) 에 저장된다. 일부 실시형태들에서, 각각의 블록은 다수의 충돌 엘리먼트들 (예를 들어, 충돌 엘리먼트들 (220-0 내지 220-(q-1)), 도 2b) 을 포함한다 (506). 일부 실시형태들에서, 각각의 블록은 메모리 (120) 에 (예를 들어, 일 예가 버스트인 단일 버스 요청 트랜스액션에서) 독립적으로 액세스가능하다. 예를 들어, 각각의 블록의 사이즈는 메모리 (120) 를 위한 데이터 버스트 당 바이트들의 수와 동일할 수도 있다.
해시 값들 h1(k1) 및 h2(k1) 이 제 1 키 k 1 를 이용하여 발생된다 (508, 510). 예를 들어, 제 1 해시 함수가 제 1 키에 적용되어 해시 값 h1(k1) 을 결정하고 제 2 해시 함수가 제 1 키에 적용되어 해시 값 h2(k1) 을 결정한다. 해싱 동작들 (508 및 510) 은, 예를 들어, 해싱 모듈 (108, 도 1) 에 의해 수행된다.
제 1 키 및 그 제 1 키와 연관된 패킷 처리 정보는 제 2 테이블에 있는 각각의 슬롯 내 각각의 블록에 저장된다 (512). 각각의 슬롯은 해시 값 h1(k1) 에 의해 인덱싱된다. 각각의 블록은 제 1 블록 번호를 갖는다. 일부 실시형태들에서, 제 1 키 및 그 제 1 키와 연관된 패킷 처리 정보는 각각의 블록에서의 충돌 엘리먼트 (220) 에 저장된다 (514).
제 1 블록 번호는 제 1 테이블에 있는 각각의 슬롯 내 각각의 셀에 저장된다 (516). 각각의 슬롯은 해시 값 h1(k1) 에 의해 인덱싱된다. 각각의 셀은 해시 값 h2(k1) 에 의해 인덱싱된다.
(예를 들어, 동작 (514) 을 포함한) 저장 동작들 (512 및 516)) 은 일부 실시형태들에 따라 테이블 유지 모듈 (119) (도 1) 에 의해 수행된다.
일부 실시형태들에서, 제 3 테이블 (예를 들어, 스터브 테이블 (312), 도 3) 가 생성되고 (518, 도 5b) 이 제 3 테이블은 제 3 복수의 슬롯들 (예를 들어, 슬롯들 (312-0 내지 312-(c-1)) 로 분할되어 있으며, 각각의 슬롯은 제 2 복수의 셀들 (예를 들어, 셀들 (214-0 내지 214-(b-1)) 로 분할되어 있다. 일부 실시형태들에서, 각각의 셀은 메모리 (124) 에서 (예를 들어, 단일 각각의 메모리 트랜스액션에서) 독립적으로 액세스가능하다. 또한, 제 4 테이블 (예를 들어, 해시 테이블 (302), 도 3) 이 생성되고 (520) 이 제 4 테이블은 제 4 복수의 슬롯들 (예를 들어, 슬롯들 (304-0 내지 304-(c-1)) 로 분할되어 있으며, 각각의 슬롯은 제 2 복수의 블록들 (예를 들어, 블록들 (206-0 내지 206-(p-1)) 로 분할되어 있다. 일부 실시형태들에서, 각각의 블록은 메모리 (120) 에 (예를 들어, 일 예가 버스트인 단일 버스 요청 트랜스액션에서) 독립적으로 액세스가능하다. 일부 실시형태들에서, 각각의 블록은 다수의 충돌 엘리먼트들 (예를 들어, 충돌 엘리먼트들 (220-0 내지 220-(q-1)), 도 2b) 을 포함한다 (522).
해시 값들 h3(k2) 및 h4(k2) 이 제 2 키 k2 를 이용하여 발생된다 (524, 526). 예를 들어, 제 3 해시 함수가 제 2 키에 적용되어 해시 값 h3(k2) 을 결정하고 제 4 해시 함수가 제 2 키에 적용되어 해시 값 h4(k2) 을 결정한다. 해싱 동작들 (524 및 526) 은, 예를 들어, 해싱 모듈 (108, 도 1) 에 의해 수행된다.
제 2 키 및 그 제 2 키와 연관된 패킷 처리 정보는 제 4 테이블에 있는 각각의 슬롯 내 각각의 블록에 저장된다 (528). 각각의 슬롯은 해시 값 h3(k2) 에 의해 인덱싱된다. 각각의 블록은 제 2 블록 번호를 갖는다. 일부 실시형태들에서, 제 2 키 및 그 제 2 키와 연관된 패킷 처리 정보는 제 4 테이블에 있는 각각의 슬롯 내 각각의 블록에서의 충돌 엘리먼트 (220) 에 저장된다 (530).
제 2 블록 번호는 제 3 테이블에 있는 각각의 슬롯 내 각각의 셀에 저장된다 (532). 각각의 슬롯은 해시 값 h3(k2) 에 의해 인덱싱된다. 각각의 셀은 해시 값 h4(k2) 에 의해 인덱싱된다.
(예를 들어, 동작 (540) 을 포함한) 저장 동작들 (528 및 532)) 은 일부 실시형태들에 따라 테이블 유지 모듈 (119) (도 1) 에 의해 수행된다. 일부 실시형태들에서, 저장 동작들 (528 및 532) 은, (슬롯이 가득찼기 때문에) 제 2 테이블에서 h1(k2) 에 의해 인덱싱되는 슬롯이 제 2 키 및 그의 연관된 패킷 처리 정보를 저장할 수 없다고 결정하는 것에 응답하여 수행된다.
방법 (500) 은, 높은 사용율, 높은 부하율, 낮은 충돌율, 및 낮은 레이턴시를 갖는 룩업 테이블을 제공한다. 방법 (500) 은 특정 순서로 일어나는 것으로 보이는 다수의 동작들을 포함하지만, 방법 (500) 은 더 많거나 또는 더 적은 수의 동작들을 포함할 수 있고 그 동작들의 일부가 직렬로 또는 벙렬로 실행될 수 있다는 것이 분명하다. 2개 이상의 동작들의 순서는 변경될 수도 있고, 2개 이상의 동작들의 수행은 오버랩될 수도 있고, 2개 이상의 동작들은 단일 동작으로 결합될 수도 있다.
일부 실시형태들에서, 방법들 (400 및/또는 500) 은 하드웨어에서 수행된다. 예를 들어, 방법들 (400 및/또는 500) 은, 키 구성 모듈 (106), 해싱 모듈 (108), 테이블 액세스 모듈 (110), 패킷 처리 모듈 (116), 및/또는 테이블 유지 모듈 (119) 에 대응하는 처리 회로 (104) 에서 하나 이상의 상태 머신들을 이용하여 수행된다. 대안적으로, 방법들 (400 및/또는 500) 은 소프트웨어에서 구현될 수도 있다. 예를 들어, 처리 회로 (104) 는 프로세서를 포함할 수도 있고, 프로세서에 의한 실행을 위해 구성되는 하나 이상의 프로그램들을 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서 작용하는 비휘발성 메모리에 커플링될 수도 있다. 하나 이상의 프로그램들은, 프로세서에 의해 실행될 때, 시스템 (100) 으로 하여금 방법들 (400 및/또는 500) 을 수행하게 하는 명령들을 포함할 수도 있다. 따라서, 하나 이상의 프로그램들은, 프로세서에 의해 실행될 때, 키 구성 모듈 (106), 해싱 모듈 (108), 테이블 액세스 모듈 (110), 패킷 처리 모듈 (116), 및/또는 테이블 유지 모듈 (119) 의 기능을 달성하는 명령들을 포함할 수도 있다.
전술한 명세서에서, 본 실시형태들은 특정 예시적 실시형태들을 참조하여 설명되었다. 하지만, 그에 대해, 첨부된 청구항들에 제시된 본 개시의 보다 넓은 사상 및 범위로부터 벗어남이 없이 다양한 변경 및 변화들이 이루어질 수도 있다는 것이 분명할 것이다. 따라서, 명세서 및 도면들은 제한적인 의미가 아닌 예시적인 의미로 고려되야 한다.
Claims (30)
- 패킷 처리 방법으로서,
제 1 패킷과 연관된 정보로부터 구성된 제 1 키를 이용하여 제 1 해시 값 및 제 2 해시 값을 발생시키는 단계;
제 1 테이블에 있는 슬롯 내 셀로부터 제 1 블록 번호를 판독하는 단계로서, 상기 제 1 테이블에 있는 상기 슬롯은 상기 제 1 해시 값에 의해 인덱싱되고 상기 셀은 상기 제 2 해시 값에 의해 인덱싱되는, 상기 제 1 블록 번호를 판독하는 단계;
제 2 테이블에 있는 슬롯 내 블록을 향한 메모리 액세스를 수행하여 상기 블록으로부터 상기 제 1 패킷을 위한 패킷 처리 정보를 포함하는 데이터를 판독하는 단계로서, 상기 제 2 테이블에 있는 상기 슬롯은 상기 제 1 해시 값에 의해 인덱싱되고, 상기 블록은 상기 제 1 블록 번호에 의해 인덱싱되는, 상기 제 1 패킷을 위한 패킷 처리 정보를 포함하는 데이터를 판독하는 단계; 및
상기 제 1 패킷을 위한 상기 패킷 처리 정보에 따라 상기 제 1 패킷을 처리하는 단계
를 포함하는, 패킷 처리 방법. - 제 1 항에 있어서,
상기 제 1 해시 값을 발생시키는 단계는 상기 제 1 키에 제 1 해시 함수를 적용하는 단계를 포함하고; 그리고
상기 제 2 해시 값을 발생시키는 단계는 상기 제 1 키에 제 2 해시 함수를 적용하는 단계를 포함하는, 패킷 처리 방법. - 제 1 항에 있어서,
상기 블록을 향한 상기 메모리 액세스를 수행하는 것은 버스트에서 상기 제 2 테이블을 저장하는 메모리로부터 상기 블록을 판독하는 것을 포함하는, 패킷 처리 방법. - 제 1 항에 있어서,
상기 블록은 복수의 충돌 엘리먼트들을 저장하고;
상기 복수의 충돌 엘리먼트들의 각각의 충돌 엘리먼트는 각각의 키 및 상기 각각의 키와 연관된 각각의 패킷 처리 정보를 저장하고; 그리고
상기 블록을 향한 상기 메모리 액세스를 수행하는 것은 상기 복수의 충돌 엘리먼트들을 판독하는 것을 포함하는, 패킷 처리 방법. - 제 4 항에 있어서,
상기 복수의 충돌 엘리먼트들의 충돌 엘리먼트의 각각의 키가 상기 제 1 키에 매칭된다고 결정하는 단계를 더 포함하고;
상기 제 1 패킷을 처리하는 단계는 상기 제 1 키에 매칭되는 상기 각각의 키를 갖는 상기 충돌 엘리먼트에서 상기 각각의 패킷 처리 정보에 따라 상기 제 1 패킷을 처리하는 단계를 포함하는, 패킷 처리 방법. - 제 4 항에 있어서,
상기 복수의 충돌 엘리먼트들을 판독하는 것은 상기 제 2 테이블을 저장하는 메모리에서 메모리 오프셋을 결정하는 것 및 상기 메모리 오프셋을 갖는 상기 메모리에서의 장소를 판독하는 것을 포함하고;
상기 메모리 오프셋을 결정하는 것은 수식 (h1(k)*n + q*(제 1 블록 번호))*y 을 계산하는 단계를 포함하고, 식중, h1(k) 는 상기 제 1 해시 값이고, n 은 상기 제 2 테이블에 있는 각각의 슬롯 내 충돌 엘리먼트들의 수이고, q 는 상기 복수의 충돌 엘리먼트들에서 충돌 엘리먼트들의 수이고, y 는 각각의 충돌 엘리먼트의 사이즈인, 패킷 처리 방법. - 제 1 항에 있어서,
상기 제 1 테이블은 정적 랜덤 액세스 메모리 (SRAM) 에 저장되고; 그리고
상기 2 테이블은 동적 랜덤 액세스 메모리 (DRAM) 에 저장되는, 패킷 처리 방법. - 제 1 항에 있어서,
상기 제 1 블록 번호가 상기 제 2 테이블을 위한 유효한 블록 번호라고 결정하는 단계를 더 포함하고;
상기 블록을 향한 상기 메모리 액세스는 상기 제 1 블록 번호가 상기 제 2 테이블을 위한 유효한 블록 번호라는 것을 결정하는 것에 응답하여 수행되는, 패킷 처리 방법. - 제 1 항에 있어서,
상기 제 1 패킷을 위한 상기 패킷 처리 정보는 출력 포트를 지정하고; 그리고
상기 제 1 패킷을 위한 상기 패킷 처리 정보에 따라 상기 제 1 패킷을 처리하는 단계는 송신을 위해 상기 출력 포트에 상기 제 1 패킷을 제공하는 단계를 포함하는, 패킷 처리 방법. - 제 1 항에 있어서,
상기 제 2 테이블이 제 2 패킷을 위한 패킷 처리 정보를 저장하지 않는다고 결정하는 단계;
상기 제 2 패킷과 연관된 정보로부터 구성된 제 2 키를 이용하여 제 3 해시 값 및 제 4 해시 값을 발생시키는 단계;
제 3 테이블에 있는 슬롯 내 셀로부터 제 2 블록 번호를 판독하는 단계로서, 상기 제 3 테이블에 있는 상기 슬롯은 상기 제 3 해시 값에 의해 인덱싱되고 상기 제 3 테이블에 있는 상기 슬롯 내 상기 셀은 상기 제 4 해시 값에 의해 인덱싱되는, 상기 제 2 블록 번호를 판독하는 단계;
제 4 테이블에 있는 슬롯 내 블록을 향한 메모리 액세스를 수행하여 상기 블록으로부터 상기 제 2 패킷을 위한 패킷 처리 정보를 포함하는 데이터를 판독하는 단계로서, 상기 제 4 테이블에 있는 상기 슬롯은 상기 제 3 해시 값에 의해 인덱싱되고, 상기 제 4 테이블에 있는 상기 슬롯 내 상기 블록은 상기 제 2 블록 번호에 의해 인덱싱되는, 상기 제 2 패킷을 위한 패킷 처리 정보를 포함하는 데이터를 판독하는 단계; 및
상기 제 2 패킷을 위한 상기 패킷 처리 정보에 따라 상기 제 2 패킷을 처리하는 단계를 더 포함하는, 패킷 처리 방법. - 제 10 항에 있어서,
상기 제 3 해시 값을 발생시키는 단계는 상기 제 2 키에 제 3 해시 함수를 적용하는 단계를 포함하고; 그리고
상기 제 4 해시 값을 발생시키는 단계는 상기 제 2 키에 제 4 해시 함수를 적용하는 단계를 포함하는, 패킷 처리 방법. - 제 10 항에 있어서,
상기 제 2 테이블이 상기 제 2 패킷을 위한 패킷 처리 정보를 저장하지 않는다고 결정하는 단계는
상기 제 2 키를 이용하여 제 5 해시 값 및 제 6 해시 값을 발생시키는 단계;
상기 제 1 테이블에서, 상기 제 5 해시 값에 의해 인덱싱되는 슬롯 내 상기 제 6 해시 값에 의해 인덱싱되는 셀을 판독하는 단계; 및
상기 제 5 해시 값에 의해 인덱싱되는 상기 슬롯 내 상기 제 6 해시 값에 의해 인덱싱되는 상기 셀로부터 판독되는 값이 상기 제 2 테이블이 상기 제 2 패킷을 위한 패킷 처리 정보를 저장하지 않는 것을 표시한다고 결정하는 단계를 포함하는, 패킷 처리 방법. - 제 10 항에 있어서,
상기 제 4 테이블에 있는 상기 슬롯 내 상기 블록은 복수의 충돌 엘리먼트들을 저장하고;
상기 복수의 충돌 엘리먼트들의 각각의 충돌 엘리먼트는 각각의 키 및 상기 각각의 키와 연관된 각각의 패킷 처리 정보를 저장하고; 그리고
상기 제 4 테이블에 있는 상기 슬롯 내 상기 블록을 향한 상기 메모리 액세스를 수행하는 것은 상기 복수의 충돌 엘리먼트들을 판독하는 것을 포함하는, 패킷 처리 방법. - 제 13 항에 있어서,
상기 복수의 충돌 엘리먼트들의 충돌 엘리먼트의 각각의 키가 상기 제 2 키에 매칭된다고 결정하는 단계를 더 포함하고;
상기 제 2 패킷을 처리하는 단계는 상기 제 2 키에 매칭되는 상기 각각의 키를 갖는 상기 충돌 엘리먼트에서 상기 각각의 패킷 처리 정보에 따라 상기 제 2 패킷을 처리하는 단계를 포함하는, 패킷 처리 방법. - 제 13 항에 있어서,
상기 복수의 충돌 엘리먼트들을 판독하는 것은 상기 제 4 테이블을 저장하는 메모리에서 메모리 오프셋을 결정하는 것 및 상기 메모리 오프셋을 갖는 상기 메모리에서의 장소를 판독하는 것을 포함하고;
상기 메모리 오프셋을 결정하는 것은 수식 (h3(k)*n + q*(제 2 블록 번호))*y 을 계산하는 것을 포함하고, 식중 h3(k) 는 상기 제 3 해시 값이고, n 은 상기 제 4 테이블의 각각의 슬롯 내 충돌 엘리먼트들의 수이고, q 는 상기 복수의 충돌 엘리먼트들에서 충돌 엘리먼트들의 수이고, y 는 각각의 충돌 엘리먼트의 사이즈인, 패킷 처리 방법. - 제 10 항에 있어서,
상기 제 3 테이블은 SRAM 에 저장되고; 그리고
상기 제 4 테이블은 DRAM 에 저장되는, 패킷 처리 방법. - 제 10 항에 있어서,
상기 제 4 테이블에 있는 상기 슬롯 내 상기 블록을 향한 상기 메모리 액세스를 수행하는 것은 버스트에서 상기 제 4 테이블을 저장하는 메모리로부터 상기 제 4 테이블에 있는 상기 슬롯 내 상기 블록을 판독하는 것을 포함하는, 패킷 처리 방법. - 패킷 처리에 사용되는 룩업 테이블을 유지하는 방법으로서,
제 1 복수의 슬롯들로 분할되는 제 1 테이블을 생성하는 단계로서, 상기 제 1 복수의 슬롯들의 각각의 슬롯은 제 1 복수의 셀들로 분할되는, 상기 제 1 테이블을 생성하는 단계;
제 2 복수의 슬롯들로 분할되는 제 2 테이블을 생성하는 단계로서, 상기 제 2 복수의 슬롯들의 각각의 슬롯은 제 1 복수의 블록들로 분할되는, 상기 제 2 테이블을 생성하는 단계;
제 1 키를 이용하여 제 1 해시 값 및 제 2 해시 값을 발생시키는 단계;
상기 제 2 테이블에 있는 각각의 슬롯 내 각각의 블록에 상기 제 1 키 및 상기 제 1 키와 연관된 패킷 처리 정보를 저장하는 단계로서, 상기 제 2 테이블에 있는 상기 각각의 슬롯은 상기 제 1 해시 값에 의해 인덱싱되고, 상기 각각의 블록은 제 1 블록 번호를 갖는, 상기 제 1 키 및 상기 제 1 키와 연관된 패킷 처리 정보를 저장하는 단계; 및
상기 제 1 테이블에 있는 각각의 슬롯 내 각각의 셀에 상기 제 1 블록 번호를 저장하는 단계로서, 상기 제 1 테이블에 있는 상기 각각의 슬롯은 상기 제 1 해시 값에 의해 인덱싱되고, 상기 제 1 테이블에 있는 상기 각각의 슬롯 내 상기 각각의 셀은 제 2 해시 값에 의해 인덱싱되는, 상기 제 1 블록 번호를 저장하는 단계
를 포함하는, 룩업 테이블을 유지하는 방법. - 제 18 항에 있어서,
상기 제 1 복수의 블록들의 각각의 블록은 다수의 충돌 엘리먼트들을 포함하고; 그리고
상기 제 1 키 및 상기 제 1 키와 연관된 상기 패킷 처리 정보를 저장하는 단계는 상기 제 2 테이블에 있는 상기 각각의 슬롯 내 상기 각각의 블록에서의 충돌 엘리먼트에 상기 제 1 키 및 상기 제 1 키와 연관된 상기 패킷 처리 정보를 저장하는 단계를 포함하는, 룩업 테이블을 유지하는 방법. - 제 18 항에 있어서,
상기 제 1 테이블을 생성하는 단계는 제 1 메모리에 상기 제 1 테이블을 저장하는 단계를 포함하고;
상기 제 2 테이블을 생성하는 단계는 제 2 메모리에 상기 제 2 테이블을 저장하는 단계를 포함하고; 그리고
상기 방법은 상기 제 1 복수의 블록들의 각각의 블록들을 상기 제 1 복수의 블록들의 다른 블록들에 상관 없이 액세스하는 단계를 더 포함하는, 룩업 테이블을 유지하는 방법. - 제 20 항에 있어서,
상기 제 1 복수의 셀들의 각각의 셀들을 상기 제 1 복수의 셀들의 다른 셀들에 상관 없이 액세스하는 단계를 더 포함하는, 룩업 테이블을 유지하는 방법. - 제 18 항에 있어서,
제 3 복수의 슬롯들로 분할되는 제 3 테이블을 생성하는 단계로서, 상기 제 3 복수의 슬롯들의 각각의 슬롯은 제 2 복수의 셀들로 분할되는, 상기 제 3 테이블을 생성하는 단계;
제 4 복수의 슬롯들로 분할되는 제 4 테이블을 생성하는 단계로서, 상기 제 4 복수의 슬롯들의 각각의 슬롯은 제 2 복수의 블록들로 분할되는, 상기 제 4 테이블을 생성하는 단계;
제 2 키를 이용하여 제 3 해시 값 및 제 4 해시 값을 발생시키는 단계;
상기 제 4 테이블에 있는 각각의 슬롯 내 각각의 블록에 상기 제 2 키 및 상기 제 2 키와 연관된 패킷 처리 정보를 저장하는 단계로서, 상기 제 4 테이블에 있는 상기 각각의 슬롯은 상기 제 3 해시 값에 의해 인덱싱되고, 상기 각각의 블록은 제 2 블록 번호를 갖는, 상기 제 2 키 및 상기 제 2 키와 연관된 패킷 처리 정보를 저장하는 단계; 및
상기 제 3 테이블에 있는 각각의 슬롯 내 각각의 셀에 상기 제 2 블록 번호를 저장하는 단계로서, 상기 제 3 테이블에 있는 상기 각각의 슬롯은 상기 제 3 해시 값에 의해 인덱싱되고, 상기 제 3 테이블에 있는 상기 각각의 슬롯 내 상기 각각의 셀은 상기 제 4 해시 값에 의해 인덱싱되는, 상기 제 2 블록 번호를 저장하는 단계를 더 포함하는, 룩업 테이블을 유지하는 방법. - 패킷 처리 시스템으로서,
제 1 패킷과 연관된 정보로부터 구성된 제 1 키를 이용하여 제 1 해시 값 및 제 2 해시 값을 발생시키도록 구성된 해싱 모듈;
테이블 액세스 모듈로서,
제 1 테이블에 있는 슬롯 내 셀로부터 제 1 블록 번호를 판독하는 것으로서, 상기 제 1 테이블에 있는 상기 슬롯은 상기 제 1 해시 값에 의해 인덱싱되고 상기 셀은 상기 제 2 해시 값에 의해 인덱싱되는, 상기 제 1 블록 번호를 판독하고; 그리고
제 2 테이블에 있는 슬롯 내 블록을 향한 메모리 액세스를 수행하여 상기 블록으로부터 패킷 처리 정보를 포함하는 데이터를 판독하는 것으로서, 상기 제 2 테이블에 있는 상기 슬롯은 상기 제 1 해시 값에 의해 인덱싱되고, 상기 블록은 상기 제 1 블록 번호에 의해 인덱싱되는, 상기 패킷 처리 정보를 포함하는 데이터를 판독하기 위한, 상기 테이블 액세스 모듈; 및
상기 블록으로부터 판독되는 패킷 처리 정보에 따라 상기 제 1 패킷을 처리하기 위한 패킷 처리 모듈
을 포함하는, 패킷 처리 시스템. - 제 23 항에 있어서,
상기 테이블 액세스 모듈은 상기 블록으로부터 복수의 충돌 엘리먼트들을 판독할 것이고, 상기 복수의 충돌 엘리먼트들의 각각의 충돌 엘리먼트는 각각의 키들 및 상기 각각의 키들과 연관된 각각의 패킷 처리 정보를 저장하고; 그리고
상기 테이블 액세스 모듈은 상기 복수의 충돌 엘리먼트들의 충돌 엘리먼트의 각각의 키가 상기 제 1 키에 매칭된다고 결정하기 위한 비교 로직을 포함하고;
상기 패킷 처리 모듈은 상기 제 1 키에 매칭되는 상기 각각의 키를 갖는 상기 충돌 엘리먼트에서 상기 각각의 패킷 처리 정보에 따라 상기 제 1 패킷을 처리할 것인, 패킷 처리 시스템. - 제 23 항에 있어서,
상기 제 1 테이블을 저장하기 위한 정적 랜덤 액세스 메모리 (SRAM); 및
상기 제 2 테이블을 저장하기 위한 동적 랜덤 액세스 메모리 (DRAM) 를 더 포함하는, 패킷 처리 시스템. - 제 23 항에 있어서,
상기 테이블 액세스 모듈은 또한, 상기 제 1 블록 번호가 상기 제 2 테이블을 위한 유효한 블록 번호인지 여부를 결정할 것이고, 상기 제 1 블록 번호가 상기 제 2 테이블을 위한 유효 블록 번호라는 것을 결정하는 것에 응답하여 상기 제 2 테이블에 있는 상기 슬롯 내 상기 블록을 향한 상기 메모리 액세스를 수행할 것인, 패킷 처리 시스템. - 제 23 항에 있어서,
패킷들을 수신 및 송신하기 위한 복수의 포트들을 더 포함하고,
상기 패킷 처리 모듈은, 상기 블록으로부터 판독된 패킷 처리 정보를 이용하여, 송신을 위해 상기 복수의 포트들 중 각각의 포트에 상기 제 1 패킷을 라우팅할 것인, 패킷 처리 시스템. - 제 23 항에 있어서,
상기 테이블 액세스 모듈은 또한, 상기 제 2 테이블이 제 2 패킷을 위한 패킷 처리 정보를 저장하지 않는다고 결정할 것이고;
상기 해싱 모듈은 또한, 상기 제 2 패킷과 연관된 정보로부터 구성된 제 2 키를 이용하여 제 3 해시 값 및 제 4 해시 값을 발생시킬 것이고;
상기 테이블 액세스 모듈은 또한
제 3 테이블에 있는 슬롯 내 셀로부터 제 2 블록 번호를 판독하는 것으로서, 상기 제 3 테이블에 있는 상기 슬롯은 상기 제 3 해시 값에 의해 인덱싱되고 상기 제 3 테이블에 있는 상기 슬롯 내 상기 셀은 상기 제 4 해시 값에 의해 인덱싱되는, 상기 제 2 블록 번호를 판독하고; 그리고
제 4 테이블에 있는 슬롯 내 블록을 향한 메모리 액세스를 수행하여 패킷 처리 정보를 포함하는 데이터를 판독하는 것으로서, 상기 제 4 테이블에 있는 상기 슬롯은 상기 제 3 해시 값에 의해 인덱싱되고, 상기 제 4 테이블에 있는 상기 슬롯 내 상기 블록은 상기 제 2 블록 번호에 의해 인덱싱되는, 상기 패킷 처리 정보를 포함하는 데이터를 판독할 것이고; 그리고
상기 패킷 처리 모듈은 또한, 상기 제 4 테이블에 있는 상기 슬롯 내 상기 블록으로부터 판독되는 패킷 처리 정보에 따라 상기 제 2 패킷을 처리할 것인, 패킷 처리 시스템. - 패킷 처리 시스템으로서,
제 1 패킷과 연관된 정보로부터 구성된 제 1 키를 이용하여 제 1 해시 값 및 제 2 해시 값을 발생시키는 수단을 포함하는, 해싱 수단;
테이블 판독 수단으로서,
제 1 테이블에 있는 슬롯 내 셀로부터 제 1 블록 번호를 판독하는 수단으로서, 상기 제 1 테이블에 있는 상기 슬롯은 상기 제 1 해시 값에 의해 인덱싱되고 상기 셀은 상기 제 2 해시 값에 의해 인덱싱되는, 상기 제 1 블록 번호를 판독하는 수단;
제 2 테이블에 있는 슬롯 내 블록을 향한 메모리 액세스를 수행하는 수단으로서, 상기 제 2 테이블에 있는 상기 슬롯은 상기 제 1 해시 값에 의해 인덱싱되고, 상기 블록은 상기 제 1 블록 번호에 의해 인덱싱되는, 상기 메모리 액세스를 수행하는 수단을 포함하는, 상기 테이블 판독 수단; 및
상기 블록으로부터 판독되는 패킷 처리 정보에 따라 상기 제 1 패킷을 처리하는 수단을 포함하는, 패킷 처리 수단
을 포함하는, 패킷 처리 시스템. - 제 29 항에 있어서,
상기 테이블 판독 수단은 또한, 상기 제 2 테이블이 제 2 패킷을 위한 패킷 처리 정보를 저장하지 않는다고 결정하는 수단을 포함하고;
상기 해싱 수단은 또한, 상기 제 2 패킷과 연관된 정보로부터 구성된 제 2 키를 이용하여 제 3 해시 값 및 제 4 해시 값을 발생시키는 수단을 포함하고;
상기 테이블 판독 수단은 추가적으로
제 3 테이블에 있는 슬롯 내 셀로부터 제 2 블록 번호를 판독하는 수단으로서, 상기 제 3 테이블에 있는 상기 슬롯은 상기 제 3 해시 값에 의해 인덱싱되고 상기 제 3 테이블에 있는 상기 슬롯 내 상기 셀은 상기 제 4 해시 값에 의해 인덱싱되는, 상기 제 2 블록 번호를 판독하는 수단; 및
제 4 테이블에 있는 슬롯 내 블록을 향한 메모리 액세스를 수행하는 수단으로서, 상기 제 4 테이블에 있는 상기 슬롯은 상기 제 3 해시 값에 의해 인덱싱되고, 상기 제 4 테이블에 있는 상기 슬롯 내 상기 블록은 상기 제 2 블록 번호에 의해 인덱싱되는, 상기 메모리 액세스를 수행하는 수단을 포함하고; 및
상기 패킷 처리 모듈은 또한, 상기 제 4 테이블에 있는 상기 슬롯 내 상기 블록으로부터 판독되는 패킷 처리 정보에 따라 상기 제 2 패킷을 처리하는 수단을 포함하는, 패킷 처리 시스템.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2014/078907 WO2015180125A1 (en) | 2014-05-30 | 2014-05-30 | Multi-table hash-based lookups for packet processing |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20170009961A true KR20170009961A (ko) | 2017-01-25 |
Family
ID=54697902
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020167035848A KR20170009961A (ko) | 2014-05-30 | 2014-05-30 | 패킷 처리를 위한 다중 테이블 해시 기반 룩업 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20170078200A1 (ko) |
EP (1) | EP3149903A4 (ko) |
JP (1) | JP2017519433A (ko) |
KR (1) | KR20170009961A (ko) |
CN (1) | CN106416151A (ko) |
WO (1) | WO2015180125A1 (ko) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102050828B1 (ko) * | 2018-10-26 | 2020-01-08 | 한국과학기술원 | 병렬 연산을 이용한 오픈 가상 스위치의 가속화 방법 및 이를 이용한 오픈 가상 스위치 |
KR102229554B1 (ko) * | 2019-12-20 | 2021-03-18 | 한국과학기술원 | 해시 키 생성 방법 및 그 장치 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
SG11201811423SA (en) * | 2016-09-22 | 2019-01-30 | Visa Int Service Ass | Techniques for in-memory data searching |
US11163910B2 (en) * | 2017-06-29 | 2021-11-02 | Salesforce.Com, Inc. | Methods and systems for data migration |
CN108196662B (zh) * | 2017-12-28 | 2021-03-30 | 中国科学院计算技术研究所 | 哈希分区加速器 |
CN108182084B (zh) * | 2017-12-28 | 2021-05-11 | 中国科学院计算技术研究所 | 哈希混合加速系统及应用其进行哈希连接的方法 |
CN111915306B (zh) * | 2019-05-08 | 2023-12-19 | 华控清交信息科技(北京)有限公司 | 业务数据的验证方法和验证平台 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH021052A (ja) * | 1988-06-08 | 1990-01-05 | Nec Corp | 多段構成ハッシュ表によるシンボル登録・検索方式 |
JPH04101272A (ja) * | 1990-08-21 | 1992-04-02 | Tokyo Electric Co Ltd | データエレメント検索方法 |
US6754662B1 (en) * | 2000-08-01 | 2004-06-22 | Nortel Networks Limited | Method and apparatus for fast and consistent packet classification via efficient hash-caching |
CN1390009A (zh) * | 2001-06-01 | 2003-01-08 | 普邦科技股份有限公司 | 网络地址预查方法 |
JP2005045442A (ja) * | 2003-07-25 | 2005-02-17 | Hitachi Cable Ltd | 宛先判定回路 |
US7966658B2 (en) * | 2004-04-08 | 2011-06-21 | The Regents Of The University Of California | Detecting public network attacks using signatures and fast content analysis |
US8345685B2 (en) * | 2006-06-09 | 2013-01-01 | Ethernety Networks Ltd | Method and device for processing data packets |
CN101540723B (zh) * | 2009-04-20 | 2011-07-06 | 杭州华三通信技术有限公司 | 一种流表查找方法和装置 |
US8484439B1 (en) * | 2009-10-27 | 2013-07-09 | Juniper Networks, Inc. | Scalable hash tables |
CN102930011B (zh) * | 2012-10-31 | 2016-08-03 | 杭州华三通信技术有限公司 | 流转发表项的处理方法及装置 |
US9537771B2 (en) * | 2013-04-04 | 2017-01-03 | Marvell Israel (M.I.S.L) Ltd. | Exact match hash lookup databases in network switch devices |
-
2014
- 2014-05-30 EP EP14893666.9A patent/EP3149903A4/en not_active Withdrawn
- 2014-05-30 CN CN201480079304.XA patent/CN106416151A/zh active Pending
- 2014-05-30 JP JP2016569683A patent/JP2017519433A/ja active Pending
- 2014-05-30 US US15/308,036 patent/US20170078200A1/en not_active Abandoned
- 2014-05-30 KR KR1020167035848A patent/KR20170009961A/ko not_active Application Discontinuation
- 2014-05-30 WO PCT/CN2014/078907 patent/WO2015180125A1/en active Application Filing
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102050828B1 (ko) * | 2018-10-26 | 2020-01-08 | 한국과학기술원 | 병렬 연산을 이용한 오픈 가상 스위치의 가속화 방법 및 이를 이용한 오픈 가상 스위치 |
KR102229554B1 (ko) * | 2019-12-20 | 2021-03-18 | 한국과학기술원 | 해시 키 생성 방법 및 그 장치 |
Also Published As
Publication number | Publication date |
---|---|
WO2015180125A1 (en) | 2015-12-03 |
CN106416151A (zh) | 2017-02-15 |
JP2017519433A (ja) | 2017-07-13 |
EP3149903A4 (en) | 2017-11-22 |
EP3149903A1 (en) | 2017-04-05 |
US20170078200A1 (en) | 2017-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9871728B2 (en) | Exact match hash lookup databases in network switch devices | |
KR20170009961A (ko) | 패킷 처리를 위한 다중 테이블 해시 기반 룩업 | |
US11102120B2 (en) | Storing keys with variable sizes in a multi-bank database | |
US10389633B2 (en) | Hash-based address matching | |
US7373514B2 (en) | High-performance hashing system | |
US7606236B2 (en) | Forwarding information base lookup method | |
KR102036769B1 (ko) | 데이터 캐싱 방법, 캐시 및 컴퓨터 시스템 | |
EP2643762B1 (en) | Method and apparatus for high performance, updatable, and deterministic hash table for network equipment | |
US6725216B2 (en) | Partitioning search key thereby distributing table across multiple non-contiguous memory segments, memory banks or memory modules | |
US20120173844A1 (en) | Apparatus and method for determining a cache line in an n-way set associative cache | |
CN102035727B (zh) | 一种路由的处理方法和设备 | |
US20190182160A1 (en) | Packet classification using fingerprint hash table | |
US20040001492A1 (en) | Method and system for maintaining a MAC address filtering table | |
WO2019042372A1 (zh) | 报文转发 | |
CN101620623A (zh) | 内容可寻址存储器表项管理方法和装置 | |
CN109981464B (zh) | 一种在fpga中实现的tcam电路结构及其匹配方法 | |
US11449270B2 (en) | Address translation method and system for KV storage device | |
WO2020026155A1 (en) | Patent application | |
US20060294126A1 (en) | Method and system for homogeneous hashing | |
US20200226099A1 (en) | Method and apparatus for improving hash searching throughput in the event of hash collisions | |
CN106294191A (zh) | 处理表的方法、访问表的方法和装置 | |
US20230367720A1 (en) | Data search method and apparatus, and integrated circuit | |
US8645620B2 (en) | Apparatus and method for accessing a memory device | |
CN107888521B (zh) | 多协议共享表项资源池的方法和装置 | |
Li et al. | Deterministic and efficient hash table lookup using discriminated vectors |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
WITN | Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid |