KR20190137948A - 네트워크 프로세서에서의 멀티-코어 상호접속 - Google Patents

네트워크 프로세서에서의 멀티-코어 상호접속 Download PDF

Info

Publication number
KR20190137948A
KR20190137948A KR1020197035633A KR20197035633A KR20190137948A KR 20190137948 A KR20190137948 A KR 20190137948A KR 1020197035633 A KR1020197035633 A KR 1020197035633A KR 20197035633 A KR20197035633 A KR 20197035633A KR 20190137948 A KR20190137948 A KR 20190137948A
Authority
KR
South Korea
Prior art keywords
requests
cache
processor cores
banks
data
Prior art date
Application number
KR1020197035633A
Other languages
English (en)
Other versions
KR102409024B1 (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 KR20190137948A publication Critical patent/KR20190137948A/ko
Application granted granted Critical
Publication of KR102409024B1 publication Critical patent/KR102409024B1/ko

Links

Images

Classifications

    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • 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
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0808Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
    • 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/0864Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
    • 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/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • 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/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • 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/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4027Coupling between buses using bus bridges

Abstract

네트워크 프로세서는 패킷 데이터를 프로세싱하기 위한 다수의 프로세서 코어들을 포함한다. 메모리 서브시스템에 대한 액세스를 프로세서 코어들에 제공하기 위해, 상호접속 회로는 프로세서 코어들과 L2 캐시와 다른 메모리 디바이스들 사이의 통신들을 지시한다. 프로세서 코어들은 여러 그룹들로 분할되며, 각 그룹은 개별적인 버스를 공유하며, L2 캐시는 다수의 뱅크들로 분할되며, 각 뱅크는 별개의 버스에 대해 액세스를 갖는다. 상호접속 회로는 다수의 버스들에 걸쳐 프로세서 코어들로부터 데이터를 저장하고 검색하기 위한 요청들을 프로세싱하며, 캐시 뱅크들로부터 데이터를 리턴하기 위한 응답들을 프로세싱한다. 결과적으로, 네트워크 프로세서는 다수의 프로세서 코어들에 대한 고대역폭 메모리 액세스를 제공한다.

Description

네트워크 프로세서에서의 멀티-코어 상호접속{MULTI-CORE INTERCONNECT IN A NETWORK PROCESSOR}
본 출원은 2011년 10월 31일에 출원된, 미국 출원 제 13/285,629 호의 계속 출원이며 그에 대한 우선권을 주장하며, 그 전체 교시들은 본원에 인용에 의해 포함된다.
전형적인 네트워크 프로세서들은 상위 레벨 네트워크 프로토콜들을 위한 패킷 프로세싱 동작들과 같은 작업을 스케줄링하고 큐잉하며, 접속된 디바이스들에 패킷들을 포워딩(forwarding)하기 전에 수신된 패킷들에서 상위 레벨 네트워크 프로토콜들(예를 들어, 전송 및 애플리케이션 계층들)에 관한 프로세싱을 허용한다. 네트워크 프로세서들에 의해 전형적으로 수행되는 기능들은 패킷 필터링, 큐우 관리 및 우선순위, 서비스 보강의 품질, 및 액세스 제어를 포함한다. 패킷 데이터를 프로세싱하는데 특정 특징들을 사용함으로써, 네트워크 프로세서들은 네트워킹된 디바이스의 인터페이스를 최적화할 수 있다.
본 발명의 실시예들은 네트워크 프로세서에서의 프로세싱 및 데이터 전송을 제어하기 위한 시스템을 제공한다. 상호접속 회로는 캐시 및 복수의 프로세서 코어들의 그룹 사이의 통신을 지시한다. 복수의 메모리 버스들 각각은 상호접속 회로에 복수의 프로세서 코어들의 각 그룹을 접속한다. 캐시는 복수의 뱅크들로 분할되며, 각 뱅크가 개별 버스를 통해 상호접속 회로에 접속된다. 상호접속 회로는 캐시 뱅크들 중의 복수의 프로세서 코어들로부터 수신되는 요청들을 분배하는 것을 제공한다.
추가적인 실시예들에서, 상호접속 회로는 요청들의 어드레스 컴포넌트를 수정함으로써 요청들을 변환할 수 있다. 이러한 변환은 복수의 뱅크들 중 요청들의 의사-랜덤 분배를 제공하는, 요청들의 각각 상에 해시 함수(hash function)를 수행하는 것을 포함할 수 있다. 상호접속 회로 또는 캐시 뱅크들은 복수의 프로세서 코어들에 커플링되는 L1 캐시의 상태를 표시하는 태그들을 유지하도록 더 구성될 수 있다. 상호접속 회로는 복수의 채널들에 수신된 요청들에서의 태그들을 지시할 수 있으며, 그에 의해 다수의 태그들을 동시에 프로세싱한다.
또 추가적인 실시예들에서, 상호접속 회로는 다수의 데이터 출력 버퍼들을 포함할 수 있다. 데이터 출력 버퍼들의 각각은 복수의 뱅크들의 각각으로부터 데이터를 수신할 수 있으며, 메모리 버스들 중 각 하나를 통해 데이터를 출력할 수 있다. 상호접속 회로는 또한 다수의 요청 버퍼들을 포함할 수 있으며, 요청 버퍼들의 각각은 프로세서들의 각 그룹으로부터 요청들을 수신하며 뱅크들의 각각의 하나에 요청을 출력한다.
추가적인 실시예들에서, 하나 또는 그 초과의 브리지 회로들은 메모리 버스들에 커플링될 수 있다. 브리지 회로들은 하나 또는 그 초과의 온-칩 코-프로세서에 프로세서 코어들을 접속할 수 있다. 또한, 메모리 간섭(coherency)을 유지하기 위해, 캐시 뱅크들은 복수의 프로세서 코어들에 커미트(commit) 신호를 전송하는 것을 지연시킬 수 있다. 캐시 뱅크들은 그 후에 무효인 신호들이 복수의 프로세서 코어들의 전체에 전송되었다는 표시를 수신하는데 응답하여 커미트 신호를 전송할 수 있다. 상호접속 회로 및 복수의 메모리 버스들은 복수의 뱅크들 중 하나에 도달하기 위해 커미트에 대해 요구되는 시간보다 적은 시간에 L1 캐시에 도달하기 위한 무효들 및 무효를 수신하는 복수의 프로세서 코어들 중 하나에 도달하기 위한 후속적인 신호를 제어하도록 구성될 수 있다.
전술한 내용은, 유사한 도면 부호들이 다른 도면들 전반에 동일한 부분들을 가리키는 첨부한 도면들에서 도시된 것과 같은, 이하의 본 발명의 예시적인 실시예들의 보다 특정한 설명으로부터 명백해질 것이다. 도면들은 반드시 비례적인 것이 아니고, 대신에 본 발명의 실시예들을 설명하는 것에 중점을 둔다.
도 1은 본 발명의 실시예들이 구현될 수 있는 네트워크 서비스들 프로세서를 도시하는 블록도이다.
도 2는 일 실시예에서의 코히런트(coherent) 메모리 상호접속(CMI) 회로 및 관련된 컴포넌트들의 블록도이다.
도 3은 일 실시예에서의 캐시 뱅크들에 대한 요청들의 프로세싱을 도시하는 블록도이다.
도 4는 캐시 뱅크들에 대한 스토어(store) 요청들에 구현되는 버퍼들을 도시하는 블록도이다.
도 5는 캐시 뱅크들로부터의 데이터 출력에 구현되는 버퍼들을 도시하는 블록도이다.
도 6은 일 실시예에서의 캐시 뱅크의 블록도이다.
본 발명의 예시적인 실시예들을 상세히 설명하기 전에, 실시예들이 구현될 수 있는 예시적인 네트워크 보안 프로세서는 읽은 이가 본 발명의 발명적 특징들을 이해하는 것을 돕기 위해 바로 아래에서 설명된다.
도 1은 네트워크 서비스 프로세서(100)의 블록도이다. 네트워크 서비스 프로세서(100)는 적어도 하나의 프로세서 코어(120)를 사용하여 높은 애플리케이션 성능을 제공한다.
네트워크 서비스 프로세서(100)는 수신된 패킷들에 포함된 개방형 시스템간 상호 접속(Open System Interconnection) 네트워크 L2-L7 계층 프로토콜들을 처리한다. 해당 분야의 기술자에게 공지된 것처럼, 개방형 시스템 상호 접속(OSI) 기준 모델은 7개의 네트워크 프로토콜 계층들(L1 내지 L7)을 정의한다. 물리적 계층(L1)은 디바이스를 전송 매체에 연결하는 전기적 그리고 물리적 실제 인터페이스를 나타낸다. 데이터 링크 계층(L2)은 데이터 프레이밍(data framing)을 수행한다. 네트워크 계층(L3)은 데이터를 패킷들로 포맷한다. 전송 계층(L4)은 단대단(end to end) 전송을 처리한다. 세션 계층(L5)은, 예를 들어 통신이 반 이중(half-duplex)이건 전 양?(full-duplex)이건 간에 디바이스들 사이에서의 통신을 관리한다. 표현 계층(L6)은 데이터 포맷팅 및 표현, 예를 들어 신택스(syntax), 제어 코드들, 특수 그래픽 및 문자 세트들을 관리한다. 응용 계층(L7)은 사용자들 사이의 통신, 예를 들어 파일 전송 및 전자 메일을 가능하게 한다.
네트워크 서비스 프로세서(100)는 상위 레벨 네트워크 프로토콜들, 예를 들어 L4 내지 L7에 대해 작업(패킷 처리 동작들)을 스케줄링하고 대기(queue)하며, 수신된 패킷들에서의 상위 레벨 네트워크 프로토콜들의 처리가 수행되어 와이어-스피드(wire-speed)로 패킷들을 전달하도록 할 수 있다. 와이어-스피드는 데이터가 전송되고 수신되는 네트워크의 데이터 전송의 속도(rate)이다. 와이어-스피드로 패킷들을 전달하기 위해 프로토콜들을 처리함으로써, 네트워크 서비스 프로세서는 네트워크 데이터 전송 속도를 줄이지 않는다.
패킷은 복수의 인터페이스 유닛들(122)에 의해 처리를 위해 수신된다. 패킷은 또한 PCI 인터페이스(124)에 의해 수신될 수 있다. 인터페이스 유닛(122)은, 수신된 패킷에 포함된 L2 네트워크 프로토콜 헤더의 다양한 필드들을 조사함으로써 수신된 패킷의 전처리를 수행하고, 패킷을 패킷 입력 유닛(126)으로 전달한다. 적어도 하나의 인터페이스 유닛(122a)은 복수의 X 첨부 유닛 인터페이스들(XAUI), 감소 X 첨부 유닛 인터페이스들(RXAUI), 또는 직렬 기가비트 매체 독립형 인터페이스들(SGMII)로부터 패킷들을 수신할 수 있다. 적어도 하나의 인터페이스 유닛(122b)은 인터라켄 인터페이스(ILK)로부터 연결들을 수신할 수 있다.
패킷 입력 유닛(126)은 수신된 패킷에 포함된 네트워크 프로토콜 헤더들(예를 들어 L3 및 L4 헤더들)의 추가적인 전처리를 수행한다. 전처리는 TCP/사용자 데이터그램 프로토콜(UDP)(L3 네트워크 프로토콜들)에 대한 검사 합계 조사들(checksum checks)을 포함한다.
프리-풀(free-pool) 할당기(128)는 레벨-2 캐시 메모리(130) 및 외부 DRAM(108)에서 가용 메모리(free memory)에 대한 지시자(pointer)들의 풀(pool)들을 유지한다. 패킷 입력 유닛(126)은 지시자들의 풀들 중 하나를 사용하여 레벨-2 캐시 메모리(130) 또는 외부 DRAM(108)에 수신된 패킷 데이터를 저장하고, 지시자들의 풀들 중 다른 것을 이용하여 프로세서 코어들(120)에 대해 작업 큐(queue) 엔트리들을 할당한다.
그리고 나서 패킷 입력 유닛(126)은 레벨-2 캐시 메모리(130) 또는 외부 DRAM(108)에서 패킷 데이터를 버퍼들에 기입한다. 바람직하게는, 패킷 데이터는 프로세서 코어들(120) 중 적어도 하나에서 실행되는 더 높은 계층의 소프트웨어에 편리한 형식으로 버퍼들에 기입된다. 따라서, 더 높은 레벨의 네트워크 프로토콜들의 추가 처리가 용이하게 된다.
네트워크 서비스 프로세서(100)는 또한 하나 이상의 애플리케이션 특정 코-프로세서들을 포함할 수 있다. 이러한 코-프로세서들은, 포함되는 경우, 코어들(120)로부터 처리의 일부를 떠넘기고, 이에 의해 네트워크 서비스 프로세서가 대량 패킷 처리를 달성하는 것을 가능하게 한다. 예를 들어, 수신된 패킷들의 압축 및 압축해제를 수행하는 것을 전용으로 하는 압축/압축해제 코-프로세서(132)가 제공된다. 코-프로세싱(co-processing) 유닛들의 다른 실시예들은, 디스크 저장 애플리케이션들을 위한 데이터 스트라이핑(data striping) 및 데이터 복제 처리를 가속화하는 레이드/디덥(RAID/De-Dup) 유닛(162)을 포함한다.
다른 코-프로세서는, 안티바이러스, 명령어 검출 시스템들 및 다른 컨텐츠 처리 애플리케이션들에 대해 필요한 패턴 및/또는 서명 매칭을 가속화하도록 구성되는 전용 HFA(Hyper Finite Automata) 검사 엔진들을 포함하는 HFA 유닛(160)이다. HFA 유닛(160)을 사용하여, 패턴 및/또는 서명 매칭이 가속화되어, 예를 들어 수십배의 기가비트/초 이상의 속도로 수행된다. 일부 실시예들에서, HFA 유닛(160)은 DFA (Deterministic Finite Automata), NFA(Non-deterministic Finite Automata), 또는 HFA 검사 엔진 중 임의의 것을 포함할 수 있다.
I/O 인터페이스(136)는 전체 프로토콜 및 아비트레이션(arbitration)을 관리하고, 코히런트 I/O 파티셔닝(partitioning)을 제공한다. I/O 인터페이스(136)는 I/O 브릿지(138) 및 페치 및 추가(fetch-and-add) 유닛(140)을 포함한다. I/O 브릿지는 2개의 브릿지들 즉, I/O 패킷 브릿지(IOBP)(138a) 및 I/O 버스 브릿지(IOBN)(138b)를 포함한다. I/O 패킷 브릿지(138a)는 전체 프로토콜 및 아비트레이션을 관리하고 코히런트 I/O 포셔닝(portioning)에 주요 패킷 입력 및 출력을 제공하도록 구성된다. I/O 버스 브릿지(138b)는 전체 프로토콜 및 아비트레이션을 관리하고 코히런트 I/O 포셔닝에 주요 I/O 버스를 제공하도록 구성된다. 페치 및 추가 유닛(140)의 레지스터들은 패킷 출력 유닛(146)을 통해 처리된 패킷들을 전달하기 위해 사용되는 출력 큐(queue)들의 길이들을 유지하기 위해 사용된다. I/O 브릿지(138)는 코히런트 메모리 인터커넥트(CMI)(144), I/O 버스(142), 패킷 입력 유닛(126), 및 패킷 출력 유닛(146) 사이에 전달될 정보를 저장하기 위한 버퍼 큐들을 포함한다.
기타 I/O 인터페이스(miscellaneous I/O interface, MIO)(116)는 범용 I/O (GPIO), 플래시, IEEE 802 2선식 관리 인터페이스(two-wire Management Interface, MDIO), 직렬 관리 인터럽트(Serial Management Interrupt, SMI), UART들(Universal Asynchronous Receiver-Transmitter), 감소 기가비트 미디어 독립형 인터페이스(Reduced Gigabit Media Independent Interface, RGMII), 미디어 독립형 인터페이스(MII), 2선식 직렬 인터페이스(two wire serial interface, TWSI) 및 다른 직렬 인터페이스들과 같은 보조 인터페이스들을 포함할 수 있다.
네트워크 서비스 프로세서(100)는 또한 MIPS EJTAG 표준을 지원하는 연합 검사 수행 그룹(Joint Test Action Group, JTAG) 인터페이스(123)를 포함할 수 있다. JTAG 및 MIPS EJTAG 표준들에 따라, 네트워크 서비스 프로세서(100) 내의 복수의 코어들은 각각 내부 검사 액세스 포트(Test Access Port, TAP) 컨트롤러를 가질 것이다. 이것은 네트워크 서비스 프로세서(100)의 멀티-코어 디버그 지원을 허용한다.
스케줄/싱크 및 오더(Schedule/Sync and Order, SSO) 모듈(148)은 프로세서 코어들(120)에 대한 작업을 대기(queue)시키고 스케줄링한다. 작업은 작업 큐 엔트리를 큐에 추가함으로써 대기하게 된다. 예를 들어, 작업 큐 엔트리는 각각의 패킷 도달에 대해 패킷 입력 유닛(126)에 의해 추가된다. 타이머 유닛(150)은 프로세서 코어들(120)에 대해 작업을 스케줄링하기 위해 사용된다.
프로세서 코어들(120)은 SSO 모듈(148)로부터 작업을 요청한다. SSO 모듈(148)은 프로세서 코어들(120) 중 하나에 대해 작업을 선택하고(즉 스케줄링하고), 프로세서 코어(120)로 작업을 기술하는 작업 큐 엔트리에 대한 지시자를 회신한다.
결국, 프로세서 코어(120)는 명령어 캐시(152), 레벨-1 데이터 캐시(154), 및 암호 가속(156)을 포함한다. 일 실시예에서, 네트워크 서비스 프로세서(100)는 32개의 수퍼스칼라(superscalar) 감소 명령어 세트 컴퓨터(Reduced Instruction Set Computer, RISC)-타입 프로세서 코어들(120)을 포함한다. 일부 실시예들에서, 수퍼스칼라 RISC-타입 프로세서 코어들(120)의 각각은 MIPS64 버전 3 프로세서 코어의 확장(extension)을 포함한다. 일 실시예에서, 수퍼스칼라 RISC-타입 프로세서 코어들(120)의 각각은 cnMIPS II 프로세서 코어를 포함한다.
레벨-2 캐시 메모리(130) 및 외부 DRAM(108)은 프로세서 코어들(120) 및 I/O 프로세서 디바이스들의 모두에 의해 공유된다. 각각의 프로세서 코어(120)는 CMI(144)에 의해 레벨-2 캐시 메모리(130)에 연결된다. CMI(144)는 프로세서 코어들(120), I/O 인터페이스(136) 및 레벨-2 캐시 메모리(130) 및 컨트롤러 사이의 모든 메모리 및 I/O 처리에 대한 통신 채널이다. 일 실시예에서, CMI(144)는 32개의 프로세서 코어들(120)로 크기조정이 가능하여, 기입-스루(write-through)로 완전한 코히런트 레벨-1 데이터 캐시들(154)을 지원한다. 바람직하게는, CMI(144)는 I/O를 우선적으로 처리할 능력으로 많이 버퍼링된다. CMI(144)는 버스 요청들을 수집하도록 구성되는 트레이스 제어 유닛(164)에 연결되어, 소프트웨어는 이후에 그 요청들을 판독할 수 있고 CMI 상에서 이벤트들의 시퀀스의 트레이스(trace)를 생성할 수 있다.
레벨-2 캐시 메모리 컨트롤러(131)는 메모리 기준 간섭(coherence)을 유지한다. 그것은, 매번의 채움(fill) 요청에 대한 메모리 블록이 레벨-2 캐시 메모리(130)에 저장되든지, 외부 DRAM(108)에 저장되든지 또는 "인-플라이트(in-flight)"이든지 간에, 그 메모리 블록의 최근 사본(copy)을 회신한다. 그것은 또한 각각의 프로세서 코어(120)에서 데이터 캐시(154)에 대한 태그들의 복제된 사본(duplicate copy)을 저장한다. 그것은 데이터-캐시 태그들에 대하여 캐시-블록-저장 요청들의 어드레스들을 비교하고, 저장 명령어가 I/O 인터페이스(136)를 통해 다른 프로세서 코어 또는 I/O 구성요소로부터 온 경우에는 언제든지 프로세서 코어(120)에 대한 데이터 캐시 태그를 (양쪽 사본들 모두를) 무효화한다.
일부 실시예들에서, 복수의 DRAM 컨트롤러들(133)은 128 기가바이트의 DRAM까지 지원한다. 일 실시예에서, 복수의 DRAM 컨트롤러들은 4개의 DRAM 컨트롤러들을 포함하고, 그 DRAM 컨트롤러들(133)의 각각은 32 기가바이트의 DRAM을 지원한다. 바람직하게는, 각각의 DRAM 컨트롤러(133)는 64비트 인터페이스를 DRAM(108)에 지원한다. 또한, DRAM 컨트롤러(133)는 DDR-III 프로토콜과 같은 바람직한 프로토콜들을 지원할 수 있다.
패킷이 프로세서 코어들(120)에 의해 처리된 후, 패킷 출력 유닛(146)은 레벨-2 캐시 메모리(130, 108)로부터 패킷 데이터를 판독하고, L4 네트워크 프로토콜 후처리를 수행하고(예를 들어, TCP/UDP 검사합계를 생성하고), 인터페이스 유닛들(122) 또는 PCI 인터페이스(124)를 통해 패킷을 전달하고, 패킷에 의해 사용된 레벨-2 캐시 메모리(130)/DRAM(108)을 해제한다.
DRAM 컨트롤러들(133)은 DRAM(108)로의/로부터의 인-플라이트(in-flight) 처리들(로딩/저장)을 관리한다. 일부 실시예들에서, DRAM 컨트롤러들(133)은 4개의 DRAM 컨트롤러들을 포함하고, DRAM(108)은 4개의 DRAM 메모리들을 포함하고, 각각의 DRAM 컨트롤러는 DRAM 메모리에 연결된다. DFA 유닛(160)은 바이패스-캐시 접속 경로(135) 상에서 DRAM 컨트롤러들(1330)에 직접 연결된다. 바이패스-캐시 접속 경로(135)는 HFA 유닛이 레벨-2 캐시 메모리(130)를 사용하지 않고 메모리로부터 직접 판독하도록 하고, 이것은 HFA 동작들에 대한 효율을 향상시킬 수 있다.
본 발명의 실시예들은 도 1에 도시되는 네트워크 서비스들 프로세서(100)에서 구현될 수 있으며, 인터페이스 유닛들(122)뿐 아니라, 더 구체적으로 패킷 출력 유닛(PKO)(126)에 관련할 수 있다. 예시적인 실시예들은 도 2-4를 참조하여 이하에 더 상세하게 설명된다.
도 2는 일 실시예에서 코히런트 메모리 상호접속(CMI) 회로(244) 및 관련된 컴포넌트들의 블록도이다. CMI(244)는 프로세서 코어들(220A-D), I/O 브리지들(238A-B) 및 레벨-2 캐시 메모리 뱅크들(230A-D)의 그룹들 사이의 메모리 및 I/O 트랜잭션들을 지시하기 위한 제어 회로 및 통신 채널이다. CMI(244)는 CMI(144)로서 네트워크 프로세서(100)에 구현될 수 있으며, 프로세서 코어들(220A-D)은 프로세서 코어들(120)로서 구현되며, I/O 브리지들(238A-B)은 I/O 브리지들(138a-b)로서 구현되며, 레벨-2 캐시 메모리 뱅크들(230A-D)은 레벨-2 캐시(130)로서 구현된다.
네트워크 프로세서에 구현되는 프로세서 코어들의 수가 증가함에 따라, 그와 같은 많은 수의 소스들에 대한 메모리 서브시스템에 제어된 액세스를 제공하는 것은 문제가 있게 된다. 많은 수의 프로세서 코어들(예를 들어, 32)을 갖는 네트워크 프로세서에 제시되는 제 1 도전과제는 코어들로부터 메모리 시스템에 요청들을 전송하는 방법이다. 이전의 설계들은 링 버스를 이용하였으며, 이는 더 높은(그리고 가변적인) 지연시간들을 생성할 수 있다. 다중 코어 칩을 설계하는데 제 2 도전과제는 많은 수의 코어들에 의해 발생되는 많은 양의 요청들을 서비싱하는 것이다. 3번째로, 유사한 도전과제는 룩업을 위해 그리고 가능하게는 DUT를 업데이트하기 위해 각 요청의 요건을 수용해야 하는 프로세서 코어의 L1 태그들(이하에 복제 태그들, 또는 DUT로 지칭됨)의 구조와 관련한다. 4번째로, 응답 데이터는 캐시로부터 FILL 버스로 되돌려 전송되어야 한다. 각 캐시 뱅크는 한번에 하나의 버스 요청만을 서비스하는 능력을 가지며 각 요청은 최대 4개 사이클들을 요청하면, FILL 버스들은 완전히 활용되지 못할 수 있다. 제 5 도전과제는 요청 소스로부터 요청을 서비스할 캐시 뱅크에 전송되어야 하는 버스 스토어 요청들과 관련되는 데이터에 관한 것이다. 이러한 쟁점은 (응답 데이터와 관련하는) 제 4 과제와 비슷하지만, 소스 및 목적지가 역전된다. 6번째로, 프로세서 코어들은 I/O 브리지들의 다른 측상의 디바이스들에 대한 액세스를 요구한다. 최종적으로, 제 7 도전과제는 메모리 서브시스템 전반에 메모리 간섭을 유지하는 것과 관련한다.
본 발명의 실시예들은 코히런트 메모리 버스들(CMBs)(225A-D)의 4개의 세트들을 통해 다수의 프로세서 코어들과 L2 캐시와 메모리 서브시스템 사이의 트랜잭션들을 프로세싱하는 것을 제공한다. 각 CMB(225A-D)는 개별 ADD/STORE/COMMIT/FILL 버스들을 포함한다. 4개의 CMB들(225A-D) 및 I/O 브리지 버스들 IOC/IOR의 전체 그룹핑은 코히런트 메모리 상호접속(CMI)(244)을 통해 함께 접속된다. 유사하게, 4개의 추가적인 CMB들(235A-D)은 개별의 ADD/STORE/COMMIT/FILL 버스들을 포함하며, CMI(244)에 캐시 뱅크들(230A-D)을 접속한다.
CMB들(225A-D)은 각각 프로세서 코어들(220A-D)의 각 그룹을 각각 지원할 수 있다. 본 예시적인 실시예들에서, 프로세서 코어들(220A-D)의 각 그룹은 8개의 프로세서 코어들을 포함하지만, 추가적인 또는 더 적은 코어들을 포함하도록 수정될 수 있다. 네트워크 프로세서의 I/O 부분에 대한 메모리 액세스를 제공하기 위해, 버스들(225A-B) 중 2개는 첨부된 IO 브리지(IOB)(238A-B)를 가진다. IOB0(238A)은 전용된 I/O 커맨드(IOC) 및 IO 응답(IOR) 버스들을 통해 NCB-측 I/O 디바이스들에 대한 액세스를 프로세서 코어들(220A-D)에 제공하기 위해 이용될 수 있다. 양쪽 IOB0(238A) 및 IOB1(238B)은 프로세서 코어들(220A-b)과 각각 CMB 버스들(225A-B)을 공유함으로써 L2 캐시 및 메모리 서브시스템에 대한 액세스를 가질 수 있다.
캐시 뱅크들(230A-D)의 각각은 시스템의 공유된 메모리 간섭 모델을 유지하면서 CMB들(224A-D)과 캐시 뱅크들(230A-D) 사이의 응답들 및 커맨드들의 전송을 제어하는 레벨 2 캐시 컨트롤러(L2C)를 포함할 수 있다. L2C는 도 6을 참조하여 이하에 더 상세하게 설명된다.
프로세서 코어들(220A-D) 및 I/O 브리지들(238A-B)을 각각 단일 CMB(225A-D)에 의해 서비스되는 4개의 그룹들로 분할함으로써, 더 낮은 지연시간 아비트레이션(arbitration) 로직이 이용될 수 있다. 로컬 아비트레이션 판단들은 훨씬 더 작은 물리적 영역을 커버하는 소스들인, 단지 그룹의 프로세서 코어들(220A-D)(및 첨부된 IO 브리지를 갖는 CMB의 경우에, I/O 브리지(238A-B)) 사이에 이루어진다. 아비트레이션 요청들 및 그들 요청들의 허가는 네트워크 프로세서의 I/O 브리지들과 모든 프로세서 코어들 사이를 아비트레이트하려 시도하는 경우에 달성불가능한 레이트인, 단일 사이클에서 이루어질 수 있다. 추가로, 모든 CMB들(225A-D)은 동일한 낮은, 고정된 지연시간을 갖는 상호접속 회로에서의 요청 버퍼들에 대한 직접 접속들을 가질 수 있다. 결과적으로, 코어들로부터 메모리 시스템으로의 요청들은 낮은 지연시간에서 전송된다.
많은 수의 프로세서 코어들에 의해 발생되는 많은 양의 요청들을 서비스하기 위해, L2 캐시는 4개의 개별 캐시 뱅크들(230A-D)로 분할된다. 결과적으로, 서비스될 수 있는 요청들의 대역폭은 4배가 된다. 각 요청의 물리적 어드레스는 모든 공통 어드레스 스트라이드들에 대한 4개의 캐시 뱅크들에 걸친 캐시 블록들의 근처-랜덤 분배를 생성하도록 구성되는 배타적-OR(XOR) 함수를 이용하여 해시(hash)될 수 있다. 이것은 CMB 요청들의 공간 로컬성을 4개의 캐시 뱅크들(230A-D)에 걸친 근처-랜덤 분배로 변환하며, 이는 사이클 당 4개의 태그 룩업들의 더 양호한 활용을 허용한다. 역으로, L2 캐시는 대신에 하나의 균일한 구조인 경우에, 단지 하나의 태그 룩업이 사이클 당 발생할 수 있어, L2 캐시 대역폭을 심각하게 제한한다. 결과적으로, 네트워크 프로세서는 많은 수의 코어들에 의해 발생되는 많은 양의 요청들을 서비스할 수 있다. 요청 프로세싱 및 지시의 예시적인 구성은 도 3을 참조하여 이하에 설명된다.
데이터 요청을 프로세싱하는데 있어서, CMI(244)는 DUT를 룩업해야 하며 가능하게는 업데이트해야 한다. 4개의 버스들 피딩(feeding) 요청들을 갖는다면, 이러한 프로세스는 사이클 당 최대 4개의 DUT 룩업들을 요구한다. DUT 룩업들을 수용하기 위해, DUT는 8개의 세트들(또한 "채널들"로 지칭됨)로 분할될 수 있으며, 그 각각은 사이클 당 하나의 룩업을 수행할 수 있다. 서로 다른 세트들을 이용해야 하는 경우에, 상호접속 회로(244)는 DUT에 사이클 당 최대 4개의 CMB 요청들을 슬롯팅(slotting)할 수 있다. 이러한 구성은 자원 대 요청의 2:1 비를 제공하며, 이는 다수의 요청들이 동일한 사이클에서 서비싱될 수 있는 홀수들을 증가시킨다. 결과적으로, 네트워크 프로세서 코어의 L1 태그들은 DUT를 룩업하고 업데이트하기 위해 각 요청의 요건을 수용할 수 있다. DUT들을 업데이팅하는 프로세스는 도 3을 참조하여 이하에 더 상세하게 설명된다.
데이터를 저장하거나 검색하기 위한 요청은 그 요청을 서비스할 캐시 뱅크(230A-D)에, 각각의 버스(225A-D) 및 CMI(244)를 통해, 프로세서 코어들(220A-D)의 그룹의 코어로부터 전송된다. 다수의 프로세서 코어들로부터 여러 요청들을 서비스하기 위해, 스토어 소스(I/O 브리지(238A-B) 또는 프로세서 코어(220A-D))로부터 스토어 데이터를 판독하는 프로세스는 기록의 프로세스로부터 캐시 뱅크(230A-D) 스토어 버퍼에 디커플링될 수 있다. 이는 4개의 2 판독/2 기록 포트 커스톰(custom) 데이터 버퍼들을 이용하여 달성될 수 있다. 각 버퍼는 2개의 CMB(225A-D) 버스들로부터 데이터를 수신할 수 있으며, 데이터를 2개의 캐시 뱅크들(230A-D)에 송신한다. 이러한 구성은 데이터를 제공하거나 수신해야 하는 특정 CMB(225A-D) 또는 캐시 뱅크(230A-D)에 무관하게, 각 CMB(225A-D) STORE 버스가 각 사이클 동안 정해진 양(예를 들어, 128 바이트들)의 스토어 데이터를 제공하게 허용하며, 각 캐시 뱅크가 사이클 당 동일한 양(예를 들어, 128 바이트들)의 스토어 데이터를 수신하게 허용한다. 이러한 구성은 CMB 스토어 데이터 요청들에 대한 아비트레이션 및 캐시 뱅크(230A-D) 버퍼들을 기록하기 위한 아비트레이션을 간략화하며, 그에 의해 이용가능한 버스 리소스들의 완전한 활용을 허용한다. 결과적으로, 캐시 뱅크들에 대한 데이터 입력 용량이 완전히 활용된다. 데이터 버퍼들의 구성은 도 4를 참조하여 이하에 설명된다.
요청에 대한 응답은 캐시 뱅크에 의해 제공되며, 캐시 뱅크로부터 CMB(235A-D) FILL 버스들로 되돌려 전송되어야 한다. 각 캐시 뱅크(230A-D)는 단지 한번에 하나의 CMB 요청을 서비싱할 수 있으며, 각 요청은 최대 4개의 사이클들을 요구한다. CMB(235A-D) FILL 버스들을 완전히 활용되게 유지하기 위해, 캐시 뱅크(230A-D) FILL 버퍼 판독 포트는 CMB(235A-D) FILL 버스로부터 디커플링될 수 있으며, 3-기록 포트 바이패스가능한 버퍼는 CMB(235A-D) FILL 버스에 대해 정해지는 데이터를 프리페치(prefetch)하기 위해 상호접속 회로(244)에서 구현될 수 있다. 이는 최대 3개의 캐시 뱅크들이 응답 데이터를 판독하는 것 그리고 동일한 버스에 송신하기 위해 그 응답 데이터를 큐잉하는 것을 허용한다. 버퍼들은 활용을 최대화하기 위해 CMB(235A-D) FILL 버스들 및 캐시 뱅크(230A-D) FILL 포트들을 조정하는 것을 제공한다. 결과적으로, 캐시 뱅크들로부터의 데이터 출력 용량은 완전히 활용된다. FILL 버퍼들의 이러한 구성은 도 5를 참조하여 이하에 더 설명된다.
캐시 뱅크들(230A-D)에 더하여, 프로세서 코어들(220A-D)은 IOB들(238A-B)의 다른 측 상의 디바이스들(예를 들어, 도 1의 네트워크 프로세서(100)의 I/O 버스(142) 상의 다른 디바이스들 및 인터페이스 유닛들(122a-b))에 대한 액세스를 요구한다. 이러한 액세스는 전용된 I/O 커맨드(IOC) 버스를 통해 IOB0(238A)에 제공된다. CMB(235A) ADD/STORE 버스들은 프로세서 코어들(220A-D)로부터의 요청들을 제공하며 상호접속 회로(244)는 IOC 버스에 대해 필요한 형태로 그들 요청들을 변환할 수 있다. 추가로, 상호접속 회로(244)는 단일 IOC 버스를 위한 아비트레이션을 처리해야 한다. I/O 브리지(238A)가 응답 데이터를 제공할 때, 그 응답 데이터를 I/O 응답(IOR) 버스 상에 배치한다. 그 후에 상호접속 회로(244)는 이러한 데이터를 수신하고, 적절하게 포맷하며, CMB(235A-D) FILL 버스를 통해 요청 코어에 데이터를 리턴한다. 결과적으로, 프로세서 코어들(220A-D)은 IOB들(238A-B)에 걸쳐 디바이스들에 대한 액세스를 제공받는다.
메모리 서브시스템 간섭을 유지하기 위해, 스토어 요청들에 의해 발생되는 커미트들 및 무효들은 다중 버스 구조의 관점에서 고려된다. (I/O 브리지(238A-B)를 통해) I/O 디바이스 또는 프로세서 코어(220A-D)가 스토어 동작을 요청할 때, 다른 코어 또는 I/O 디바이스들이 이제 그 스토어로부터 데이터를 볼 수 있음을 통지하기 위해 각각의 캐시 뱅크(230A-D)의 L2C로부터 커미트를 수신한다. 그 자신의 스토어들을 위한 모든 두드러진 커미트들을 대기함으로써, 소스는 그 더 이른 스토어가 후속하는 스토어 이전에 보일 수 있을 것으로 결정할 수 있다. 이것은 진행할 수 있는 다른 코어들 또는 디바이스들을 시그널링하기 위한 메커니즘을 제공한다. 코어들은 스토어를 발생시킨 코어/디바이스와 서로 다른 버스들 상에 있을 수 있기 때문에, 커미트와 그 관련된 L1 무효들 사이에 중요한 순서화 관계가 존재한다. 무효를 수신하기 전에 시그널링된 코어가 신호를 수신하는 경우에 그 코어는 구 데이터를 볼 수 있으며, 이는 메모리 시스템에서의 간섭의 손실을 야기한다. 이러한 간섭의 손실은 모든 버스들에 대한 무효들이 모든 버스들(225A-D)에 걸쳐 프로세서 코어들(220A-D)에 송신되었음이 먼저 확인될 때까지 커미트를 전송하는 것을 삼가함으로써 캐시 뱅크(230A-D)의 L2C에 의해 방지될 수 있다. 일부 실시예들에서, 회로는 무효들이 스토어 소스에 도달하기 위해 커미트에 대해 요구되는 시간보다 적은 시간에서 L1에 도달하는 것과 후속하는 신호가 무효를 수신하는 코어에 도달하는 것을 보장하도록 구성될 수 있다. 결과적으로, 메모리 간섭이 유지된다.
도 3은 일 실시예에서의 캐시 뱅크들에 대한 요청들의 프로세싱을 도시하는 블록도이다. 도 2를 참조하여 상술한 바와 같이, 코어-측 CMB들(225A-D) 및 캐시-측 CMB들(235A-D) 둘 다는 메모리 트랜잭션들을 개시하는 어드레스 및 제어 정보를 운반하는 ADD 버스들을 포함한다. 트랜잭션들의 소스는 프로세서 코어들(220A-B) 및 IOB들(238A-B)일 수 있다. CMI 상호접속 회로(244)는 도 3에 도시된 바와 같이, 코어-측 CMB들(225A-D)로부터 캐시-측 CMB(235A-D)에 어드레스들을 프로세싱하고 포워딩하는 것을 제공한다. 여기서, 도 2를 참조하면, (또한 "TAD들"(TAD0-TAD1)로 지칭되는) 캐시 뱅크들(230A-D)의 FIFO 버퍼들 중 임의의 것에 대해 CMB들(225A-D)의 각각의 ADD 버스들(AD0-ADD3)에서 수신된다. 4개의 ADD 버스들 중 임의의 버스는 임의의 캐시 뱅크(230A-D)에 트랜잭션을 지시할 수 있다. 요청의 어드레스는 트랜잭션이 어느 ADD 버스로부터 개시되었는지에 관계없이, 트랜잭션을 프로세싱하는 캐시 뱅크(230A-D)를 선택한다. 각 요청의 물리적 어드레스는 모든 공통 어드레스 스트라이드들에 대해 4개의 캐시 뱅크들(230A-D)(TAD0-TAD3)에 걸쳐 캐시 블록들의 근처-랜덤 분배를 생성하도록 구성되는 배타적-OR(XOR) 함수를 이용하여 해시될 수 있다. 이것은 CMB 요청들의 공간 로컬성을 4개의 캐시 뱅크들(230A-D)(TAD0-TAD3)에 걸친 근처-랜덤 분배로 변환하여, 사이클 당 4개의 태그 룩업들의 더 양호한 활용을 허용한다.
ADD 버스 상에 도달하는 트랜잭션은 목적지 캐시 뱅크에 대한 FIFO들 중 하나에 먼저 진입한다. 각 FIFO는 사이클마다 최대 4개의 ADD 버스 트랜잭션들을 버퍼링할 수 있다. 알고리즘은 어드레스들이 더 프로세싱되는 순서를 결정한다.
CMI 상호접속 회로(244)에서의 스케줄러는 어느 트랜잭션들이 FIFO들을 탈출할 수 있는지를 결정할 수 있다. (4개의 TAD들의 각각으로부터 가능한 하나인) 최대 4개의 트랜잭션들이 회로(244)에서의 L1D 태그 파이프들에 대한 각 사이클을 경쟁한다. (파이프들(0-7)로 도시되는) L1D 태그 파이프들은 L1 데이터-캐시 태그들의 사본을 갖는다(즉, 그들은 복제 태그들 또는 DUT들이다). L1D 태그 파이프들은 트랜잭션이 L1 데이터 캐시에서 블록의 사본을 무효화하는지 여부를 결정한다. 그렇다면, 그 후에 상호접속 회로(244)는 트랜잭션을 위한 COMMIT 및 FILL 버스들 상에 L1D 캐시 무효 커맨드를 지속적으로 송신할 것이다.
요청을 수신할 때, 상호접속 회로(244)는 각 트랜잭션에 의해 어느 L1D 태그 파이프가 이용되는지를 선택하기 위해 요청의 어드레스(또는 어드레스 비트들 <9:7>과 같은 어드레스의 일부)를 분석할 수 있다. 모두 제시된 최대 4개의 트랜잭션들의 각각이 어드레스 비트들 <9:7>에서 서로 다른 경우에, 그 후에 크로스바는 사이클 동안 모든 트랜잭션들을 스케줄링한다. 구현은 DUT를 L1D 태그 파이프들(0-3)을 포함하는 DUT(0-3)로, 그리고 L1D 태그 파이프들(4-7)을 포함하는 DUT(4-7)로 분리한다.
상호접속 회로(244)는 캐시 뱅크 FIFO로부터 트랜잭션을 스케줄링할 때, 트랜잭션은 (ADD 버스를 통해) 상호접속 회로(244) 및 캐시 뱅크 각각에서 L1D 태그 파이프 및 L2 태그 파이프 둘 다에 동시에 진입한다. DUT의 상태는 L1 태그들의 상태를 매칭하기 위해 업데이트된다. 캐시 뱅크 인-플라이트 버퍼는 이들 태그 파이프들로부터의 결과들을 이용하여 결국 트랜잭션을 완료한다. 바이패스들(도시되지 않음)은 DUT 및 캐시 뱅크 리소스들에 대한 경합이 존재하지 않을 때 임의의 추가 FIFO 지연시간을 회피할 수 있다.
각 요청은 캐시 뱅크의 L2 태그들의 룩업뿐 아니라, 모든 프로세서 코어들의 L1 태그들의 상태를 요구할 수 있다. 이러한 상태는 L2에서의 L1 태그들의 사본인, DUT로서 유지된다. 해시 함수를 위해 요구되는 비트들이 시간으로 이용가능하지 않을 수 있음에 따라, 캐시 뱅크들에 걸쳐 고르게 요청들을 분배하는 어드레스 해싱 함수는 L1에 대해 이용되지 않을 수 있기 때문에, DUT에서 사이클 당 4개의 룩업들을 수행하기 위해 충분한 대역폭을 제공하기 위해, DUT는 각 어드레스가 하나의 채널로 맵핑하는 8개의 별개 세트들("채널들")로 분리될 수 있다. 단지 4개의 어드레스들이 사이클 당 선택되며 8개의 DUT 채널들이 존재하기 때문에, (4의 최대치까지) 1개보다 많은 요청이 정규 어드레스 분배에 기초하여 선택되는 경향이 있다.
도 4는 캐시 뱅크들에 대한 요청들에서 구현되는 버퍼들을 도시하는 블록도이다. 도 2를 참조하여 상술된 바와 같이, 캐시-측 CMB들(235A-D)은 메모리 트랜잭션들 동안 캐시 뱅크들(230A-D)에 저장되는 데이터를 운반하는 STORE 버스들을 포함한다. 데이터를 저장하거나 검색하기 위한 요청은 요청을 서비스할 캐시 뱅크(230A-D)에, 각각의 버스(225A-D) 및 CMI(244)를 통해, 프로세서 코어들(220A-D)의 그룹의 코어로부터 전송된다. 다수의 프로세서 코어들로부터 여러 요청들을 서비스하기 위해, 4개의 2 판독/2 기록 포트 데이터 버퍼들(422A-D)은 STORE 버스들(STORE0-STORE1)로부터 데이터를 수신한다. 각 버퍼(422A-D)는 2개의 CMB(225A-D) STORE 버스들로부터 데이터를 수신할 수 있으며, 2개의 캐시 뱅크들(230A-D)에 데이터를 송신할 수 있다. 이러한 구성은 데이터를 제공하거나 수신해야 하는 특정 CMB(225A-D) 또는 캐시 뱅크(230A-D)에 무관하게, 각 CMB(225A-D) STORE 버스가 각 사이클 동안 정해진 양(예를 들어, 128 바이트들)의 스토어 데이터를 제공하게 허용하며, 각 캐시 뱅크가 사이클 당 동일한 양(예를 들어, 128 바이트들)의 스토어 데이터를 수신하게 허용한다.
도 5는 캐시 뱅크들로부터의 데이터 출력에 구현되는 버퍼들을 도시하는 블록도이다. 도 2를 참조하여 상기에 설명된 바와 같이, 요청에 대한 응답은 캐시 뱅크에 의해 제공되며, 캐시 뱅크로부터 (TAD0 FILL...TAD1 FILL로서 도 5에 도시되는) CMB(235A-D) FILL 버스들로 되돌려 전송되어야 한다. 각 캐시 뱅크(230A-D)는 한번에 하나의 CMB 요청만을 서비싱할 수 있으며, 각 요청은 최대 4개의 사이클들을 요구한다. CMB(235A-D) FILL 버스들을 완전히 활용되게 유지하기 위해, FILL 버퍼들(532A-D)은 CMB(235A-D) FILL 버스로부터 캐시 뱅크(230A-D) 판독 포트를 디커플링하기 위해 구현될 수 있다. FILL 버퍼들(532A-D)은 CMB(235A-D) FILL 버스에 대해 정해지는 데이터를 프리페치하기 위해 상호접속 회로(244)에 구현될 수 있는 3-기록 포트 바이패스가능 버퍼들일 수 있다. 이는 최대 3개의 캐시 뱅크들이 응답 데이터를 판독하는 것 그리고 동일한 버스에 송신하기 위해 응답 데이터를 큐잉하는 것을 허용한다. 버퍼들(532A-D)은 CMB(235A-D) FILL 버스들의 각각의 활용을 최대화하기 위해 CMB(235A-D) FILL 버스들 및 캐시 뱅크(230A-D) FILL 포트들을 조정하는 것을 제공한다.
도 6은 도 2를 참조하여 상술한 캐시 뱅크들(230A-D)의 각각에 존재하는 L2C 제어 회로의 블록도이다. 캐시 뱅크는 L2 캐시의 부분들에 대한 캐시 태그들 및 데이터 둘 다를 포함한다. 4개의 쿼드들(Quads)은 데이터를 포함한다. 각 쿼드는 L2 캐시의 256KB를 갖는다. 캐시 뱅크는 또한 어드베스 및 데이터 버퍼들을 포함한다. 어드레스 버퍼들은 모든 수신된 L2 판독 및 기록 동작들을 트래킹하는 인플라이트 어드레스 버퍼(LFB), 및 (LMC를 통해) DRAM에 기록되는 모든 블록들을 트래킹하는 희생 어드레스 버퍼(VAB)를 포함한다. L2C는 그 LFB에서의 최대 16개의 동시적 L2/DRAM 트랜잭션들을 유지하고 프로세싱하며, 또한 VAB/VBF에서의 동작들을 통해 최대 16개의 인-플라이트 L2 캐시 희생들/기록을 관리한다.
데이터 버퍼들은 L2 캐시 또는 DRAM으로부터 데이터가 판독될 때마다 이용되는 충전 버퍼들(FBF), 모든 STORE 트랜잭션들에 대해 이용되는 스토어 버퍼들(SBF) 및 DRAM에 데이터를 기록하기 위해 이용되는 희생 데이터 버퍼들(VDB)을 포함한다. L2/DRAM 충전 트랜잭션들을 위해, L2C는 LFB 엔트리와 관련되는 FBF 엔트리를 통해 L2 캐시 또는 메모리로부터 데이터를 리턴한다. L2/DRAM 스토어 트랜잭션들을 위해, L2C는 먼저 LFB 엔트리와 관련되는 SBF 엔트리에 STORE 버스 데이터를 두며, 그 후에 캐시를 업데이트하거나 DRAM에 직접 풀 캐시 블록 스토어를 기록한다. 캐시 블록에서의 모든 바이트들에 대한 스토어 동작들을 제외하고, L2 캐시에서 소실하는 모든 L2/DRAM 트랜잭션들은 DRAM 충전 동작을 요구한다. 부분적 캐시 블록 스토어 동작들은 저장되지 않는 바이트들을 획득하기 위해 DRAM 충전 동작을 필요로 한다. L2C는 DRAM 충전 데이터를 FBF에 두며, 그 후에 필요하다면 그 데이터를 L2 캐시에 기록하며, 필요하다면 그 데이터를 FILL 버스 상에 포워딩한다.
본 발명은 예시적인 실시예들을 참조하여 특히 나타나고 설명되었지만, 형식 및 상세한 내용에서의 다양한 변화들이 첨부된 청구항들에 의해 포함되는 본 발명의 범위를 벗어나지 않고 이루어질 수 있다는 것이 해당 분야의 통상의 기술자에 의해 이해될 것이다.

Claims (18)

  1. 컴퓨터 칩 상의 컴퓨터 시스템에 있어서,
    상호접속 회로;
    복수의 메모리 버스들로서, 각 버스는 상기 상호접속 회로에 복수의 프로세서 코어들의 각 그룹을 접속하는, 상기 복수의 메모리 버스들; 및
    복수의 뱅크들로 분할되는 캐시로서, 각 뱅크는 개별 버스를 통해 상기 상호접속 회로에 접속되는, 상기 캐시를 포함하며;
    상기 상호접속 회로는 상기 복수의 뱅크들 간에 상기 복수의 프로세서 코어들로부터 수신되는 복수의 요청들을 분배하도록 구성되고,
    상기 상호접속 회로는 상기 요청들의 어드레스 컴포넌트를 수정함으로써 상기 요청들을 변환하는, 컴퓨터 칩 상의 컴퓨터 시스템.
  2. 제 1 항에 있어서,
    상기 상호접속 회로는 상기 요청들 각각에 대해 해시 함수를 수행하며, 상기 해시 함수는 상기 복수의 뱅크들 간에 상기 요청들의 의사-랜덤 분배를 제공하는, 컴퓨터 칩 상의 컴퓨터 시스템.
  3. 제 1 항에 있어서,
    상기 상호접속 회로는 상기 복수의 프로세서 코어들 중 하나에 커플링되는 L1 캐시의 상태를 표시하는 태그들을 유지하도록 구성되며, 상기 상호접속 회로는 상기 태그들 각각을 동시에 프로세싱하게 상기 복수의 요청들에서의 태그들을 복수의 채널들로 향하게 하도록 더 구성되는, 컴퓨터 칩 상의 컴퓨터 시스템.
  4. 제 1 항에 있어서,
    상기 상호접속 회로는 복수의 데이터 출력 버퍼들을 더 포함하며, 상기 데이터 출력 버퍼들 각각은 상기 복수의 뱅크들 각각으로부터 데이터를 수신하도록 그리고 상기 복수의 메모리 버스들 각각의 메모리 버스를 통해 데이터를 출력하도록 구성되는, 컴퓨터 칩 상의 컴퓨터 시스템.
  5. 제 1 항에 있어서,
    상기 상호접속 회로는 복수의 요청 버퍼들을 더 포함하며, 상기 요청 버퍼들의 각각은 복수의 프로세서들의 각 그룹으로부터의 요청들을 수신하도록 그리고 상기 복수의 뱅크들 각각의 뱅크로 상기 요청들을 출력하도록 구성되는, 컴퓨터 칩 상의 컴퓨터 시스템.
  6. 제 1 항에 있어서,
    상기 메모리 버스들 중 적어도 하나에 커플링되는 적어도 하나의 브리지 회로를 더 포함하며, 상기 적어도 하나의 브리지 회로는 적어도 하나의 온-칩 코-프로세서(on-chip co-processor)에 상기 복수의 프로세서 코어들을 접속하는, 컴퓨터 칩 상의 컴퓨터 시스템.
  7. 제 1 항에 있어서,
    상기 뱅크들은 상기 복수의 프로세서 코어들로 커미트 신호를 전송하는 것을 지연시키도록 구성되며, 상기 뱅크들은 무효 신호들이 상기 복수의 프로세서 코어들 전체로 전송되었다는 표시를 수신하는데 응답하여 상기 커미트 신호를 전송하는, 컴퓨터 칩 상의 컴퓨터 시스템.
  8. 제 1 항에 있어서,
    상기 상호접속 회로 및 복수의 메모리 버스들은 커미트가 상기 복수의 뱅크들 중 하나에 도달하는데 요구되는 시간보다 적은 시간 내에 L1 캐시에 도달하도록 무효들을 제어하고 상기 무효를 수신하는 상기 복수의 프로세서 코어들 중 하나에 도달하도록 후속하는 신호를 제어하도록 구성되는, 컴퓨터 칩 상의 컴퓨터 시스템.
  9. 제 1 항에 있어서,
    상기 요청들의 상기 어드레스 컴포넌트를 수정하는 것은 상기 복수의 뱅크들 중 하나와 관련된 어드레스에 대응하도록 수행되는, 컴퓨터 칩 상의 컴퓨터 시스템.
  10. 복수의 프로세서 코어들로부터의 복수의 요청들을 복수의 메모리 버스들을 통해 상호접속 회로로 포워딩하는 단계로서, 버스 각각은 복수의 프로세서 코어들의 각각의 그룹을 상기 상호접속 회로에 접속하는, 상기 복수의 요청들을 포워딩하는 단계;
    상기 요청들의 어드레스 컴포넌트를 수정함으로써 상기 상호접속 회로에서 상기 요청들을 변환하는 단계; 및
    상기 상호접속 회로를 통해, 상기 복수의 프로세서 코어들로부터 수신된 상기 복수의 요청들을 캐시의 복수의 뱅크들 간에 분배하는 단계로서, 뱅크 각각은 개별 버스를 통해 상기 상호접속 회로에 접속되는, 상기 복수의 요청들을 분배하는 단계를 포함하는, 방법.
  11. 제 10 항에 있어서,
    상기 요청들 각각에 대해 해시 함수를 수행하는 단계를 더 포함하고, 상기 해시 함수는 상기 복수의 뱅크들 간에 상기 요청들의 의사-랜덤 분배를 제공하는, 방법.
  12. 제 10 항에 있어서,
    상기 복수의 프로세서 코어들 중 하나에 커플링된 L1 캐시의 상태를 표시하는 태그들을 유지하는 단계, 및 상기 태그들 각각을 동시에 프로세싱하게 상기 복수의 요청들에서의 태그들을 복수의 채널들로 향하게 하는 단계를 더 포함하는, 방법.
  13. 제 10 항에 있어서,
    복수의 데이터 출력 버퍼들에서 상기 복수의 뱅크들 각각의 뱅크로부터의 데이터를 수신하고 상기 복수의 메모리 버스들의 각각의 버스를 통해 데이터를 출력하는 단계를 더 포함하는, 방법.
  14. 제 10 항에 있어서,
    복수의 요청 버퍼들에서, 복수의 프로세서들의 그룹 각각으로부터의 요청들을 수신하는 단계 및 상기 복수의 뱅크들 각각의 뱅크로 상기 요청을 출력하는 단계를 더 포함하는, 방법.
  15. 제 10 항에 있어서,
    적어도 하나의 브리지 회로를 통해, 상기 복수의 프로세서 코어들을 적어도 하나의 온-칩 코-프로세서에 접속하는 단계를 더 포함하는, 방법.
  16. 제 10 항에 있어서,
    무효 신호들이 상기 복수의 프로세서 코어들 전체로 전송되었다는 표시를 수신하는 것에 응답하여 상기 복수의 프로세서 코어들로 커미트 신호를 전송하는 것을 지연시키는 단계를 더 포함하는, 방법.
  17. 제 10 항에 있어서,
    커미트가 상기 복수의 뱅크들 중 하나에 도달하는데 요구되는 시간보다 적은 시간 내에 L1 캐시에 도달하도록 무효들을 제어하고 상기 무효를 수신하는 상기 복수의 프로세서 코어들 중 하나에 도달하도록 후속하는 신호를 제어하는 단계를 더 포함하는, 방법.
  18. 제 10 항에 있어서,
    상기 요청들의 상기 어드레스 컴포넌트를 수정하는 것은 상기 복수의 뱅크들 중 하나와 관련된 어드레스에 대응하도록 수행되는, 방법.
KR1020197035633A 2011-10-31 2012-10-29 네트워크 프로세서에서의 멀티-코어 상호접속 KR102409024B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US13/285,629 US9330002B2 (en) 2011-10-31 2011-10-31 Multi-core interconnect in a network processor
US13/285,629 2011-10-31
KR1020147012490A KR20140084155A (ko) 2011-10-31 2012-10-29 네트워크 프로세서에서의 멀티-코어 상호접속
PCT/US2012/062378 WO2013066798A1 (en) 2011-10-31 2012-10-29 Multi-core interconnect in a network processor

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020147012490A Division KR20140084155A (ko) 2011-10-31 2012-10-29 네트워크 프로세서에서의 멀티-코어 상호접속

Publications (2)

Publication Number Publication Date
KR20190137948A true KR20190137948A (ko) 2019-12-11
KR102409024B1 KR102409024B1 (ko) 2022-06-14

Family

ID=47144154

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020197035633A KR102409024B1 (ko) 2011-10-31 2012-10-29 네트워크 프로세서에서의 멀티-코어 상호접속
KR1020147012490A KR20140084155A (ko) 2011-10-31 2012-10-29 네트워크 프로세서에서의 멀티-코어 상호접속

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020147012490A KR20140084155A (ko) 2011-10-31 2012-10-29 네트워크 프로세서에서의 멀티-코어 상호접속

Country Status (6)

Country Link
US (1) US9330002B2 (ko)
JP (2) JP2014534529A (ko)
KR (2) KR102409024B1 (ko)
CN (1) CN103959261B (ko)
DE (1) DE112012004551T5 (ko)
WO (1) WO2013066798A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9892063B2 (en) * 2012-11-27 2018-02-13 Advanced Micro Devices, Inc. Contention blocking buffer
US9652396B2 (en) 2013-12-27 2017-05-16 Samsung Electronics Co., Ltd. Cache element processing for energy use reduction
US9811467B2 (en) * 2014-02-03 2017-11-07 Cavium, Inc. Method and an apparatus for pre-fetching and processing work for procesor cores in a network processor
US9432288B2 (en) 2014-02-28 2016-08-30 Cavium, Inc. System on chip link layer protocol
US9411644B2 (en) 2014-03-07 2016-08-09 Cavium, Inc. Method and system for work scheduling in a multi-chip system
US10592459B2 (en) 2014-03-07 2020-03-17 Cavium, Llc Method and system for ordering I/O access in a multi-node environment
US9372800B2 (en) 2014-03-07 2016-06-21 Cavium, Inc. Inter-chip interconnect protocol for a multi-chip system
US9529532B2 (en) * 2014-03-07 2016-12-27 Cavium, Inc. Method and apparatus for memory allocation in a multi-node system
US9436972B2 (en) * 2014-03-27 2016-09-06 Intel Corporation System coherency in a distributed graphics processor hierarchy
US10235203B1 (en) * 2014-03-31 2019-03-19 EMC IP Holding Company LLC Techniques for increasing storage system performance in processor-bound workloads with large working sets and poor spatial locality
US10740236B2 (en) * 2017-05-12 2020-08-11 Samsung Electronics Co., Ltd Non-uniform bus (NUB) interconnect protocol for tiled last level caches
US10592452B1 (en) 2018-09-12 2020-03-17 Cavium, Llc Low latency interconnect protocol for coherent multi-chip communication

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4977498A (en) * 1988-04-01 1990-12-11 Digital Equipment Corporation Data processing system having a data memory interlock coherency scheme
JP2002149353A (ja) * 2000-11-08 2002-05-24 Nec Corp ディスクアレイ制御装置及びディスクアレイ制御方法
WO2005020079A2 (en) * 2003-08-19 2005-03-03 Sun Microsystems, Inc. Cache crossbar arbitration
US20060059316A1 (en) * 2004-09-10 2006-03-16 Cavium Networks Method and apparatus for managing write back cache
US7290116B1 (en) * 2004-06-30 2007-10-30 Sun Microsystems, Inc. Level 2 cache index hashing to avoid hot spots

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58220287A (ja) * 1982-06-15 1983-12-21 Nec Corp メモリアクセス制御装置
JP4240610B2 (ja) * 1998-11-27 2009-03-18 株式会社日立製作所 計算機システム
US7248585B2 (en) * 2001-10-22 2007-07-24 Sun Microsystems, Inc. Method and apparatus for a packet classifier
US7873785B2 (en) * 2003-08-19 2011-01-18 Oracle America, Inc. Multi-core multi-thread processor
US7606998B2 (en) * 2004-09-10 2009-10-20 Cavium Networks, Inc. Store instruction ordering for multi-core processor
US20060112226A1 (en) * 2004-11-19 2006-05-25 Hady Frank T Heterogeneous processors sharing a common cache
US7477641B2 (en) * 2004-12-30 2009-01-13 Intel Corporation Providing access to data shared by packet processing threads
US7661006B2 (en) * 2007-01-09 2010-02-09 International Business Machines Corporation Method and apparatus for self-healing symmetric multi-processor system interconnects
US7793038B2 (en) * 2007-06-26 2010-09-07 International Business Machines Corporation System and method for programmable bank selection for banked memory subsystems
US20090274157A1 (en) * 2008-05-01 2009-11-05 Vaidya Aniruddha S Method and apparatus for hierarchical routing in multiprocessor mesh-based systems
US8131944B2 (en) * 2008-05-30 2012-03-06 Intel Corporation Using criticality information to route cache coherency communications
US8195883B2 (en) * 2010-01-27 2012-06-05 Oracle America, Inc. Resource sharing to reduce implementation costs in a multicore processor

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4977498A (en) * 1988-04-01 1990-12-11 Digital Equipment Corporation Data processing system having a data memory interlock coherency scheme
JP2002149353A (ja) * 2000-11-08 2002-05-24 Nec Corp ディスクアレイ制御装置及びディスクアレイ制御方法
WO2005020079A2 (en) * 2003-08-19 2005-03-03 Sun Microsystems, Inc. Cache crossbar arbitration
US7290116B1 (en) * 2004-06-30 2007-10-30 Sun Microsystems, Inc. Level 2 cache index hashing to avoid hot spots
US20060059316A1 (en) * 2004-09-10 2006-03-16 Cavium Networks Method and apparatus for managing write back cache

Also Published As

Publication number Publication date
US20130111141A1 (en) 2013-05-02
JP6676027B2 (ja) 2020-04-08
JP2014534529A (ja) 2014-12-18
CN103959261B (zh) 2019-06-21
CN103959261A (zh) 2014-07-30
KR102409024B1 (ko) 2022-06-14
US9330002B2 (en) 2016-05-03
KR20140084155A (ko) 2014-07-04
JP2018045700A (ja) 2018-03-22
DE112012004551T5 (de) 2014-08-14
WO2013066798A1 (en) 2013-05-10

Similar Documents

Publication Publication Date Title
JP6676027B2 (ja) ネットワークプロセッサにおけるマルチコア相互接続
US9141548B2 (en) Method and apparatus for managing write back cache
US9569366B2 (en) System and method to provide non-coherent access to a coherent memory system
US9218290B2 (en) Data caching in a network communications processor architecture
US9183145B2 (en) Data caching in a network communications processor architecture
US9444757B2 (en) Dynamic configuration of processing modules in a network communications processor architecture
US8321385B2 (en) Hash processing in a network communications processor architecture
US8539199B2 (en) Hash processing in a network communications processor architecture
US8850101B2 (en) System and method to reduce memory access latencies using selective replication across multiple memory ports
KR102003089B1 (ko) 효율적인 작업 큐잉을 갖는 프로세서
US8683221B2 (en) Configurable memory encryption with constant pipeline delay in a multi-core processor
US8595401B2 (en) Input output bridging
US8677075B2 (en) Memory manager for a network communications processor architecture
US11093405B1 (en) Shared mid-level data cache
US9195464B2 (en) Tracking written addresses of a shared memory of a multi-core processor
US11036643B1 (en) Mid-level instruction cache
US11327890B1 (en) Partitioning in a processor cache
US11874783B2 (en) Coherent block read fulfillment
Mao et al. Hardware acceleration of key-value stores

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
N231 Notification of change of applicant
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant