KR102003089B1 - 효율적인 작업 큐잉을 갖는 프로세서 - Google Patents

효율적인 작업 큐잉을 갖는 프로세서 Download PDF

Info

Publication number
KR102003089B1
KR102003089B1 KR1020147013222A KR20147013222A KR102003089B1 KR 102003089 B1 KR102003089 B1 KR 102003089B1 KR 1020147013222 A KR1020147013222 A KR 1020147013222A KR 20147013222 A KR20147013222 A KR 20147013222A KR 102003089 B1 KR102003089 B1 KR 102003089B1
Authority
KR
South Korea
Prior art keywords
network service
service processor
processor
memory connection
task
Prior art date
Application number
KR1020147013222A
Other languages
English (en)
Other versions
KR20140078756A (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 KR20140078756A publication Critical patent/KR20140078756A/ko
Application granted granted Critical
Publication of KR102003089B1 publication Critical patent/KR102003089B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/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
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Multi Processors (AREA)

Abstract

코프로세서에 제출된 작업은, 다양한 서비스 품질 레벨들을 제공하기 위해 사용되는, 다수의 입력 큐들 중 하나를 통해 들어간다. 인메모리 연결 리스트들은 네트워크 서비스 프로세서에서의 프로세싱 리소스들의 부족에 응답하여 네트워크 서비스 프로세서에 의해 수행될 작업을 저장한다. 네트워크 서비스 프로세서에서의 프로세싱 리소스들의 이용 가능성에 응답하여 작업은 인메모리 연결 리스트들로부터 네트워크 서비스 프로세서로 다시 이동된다.

Description

효율적인 작업 큐잉을 갖는 프로세서{PROCESSOR WITH EFFICIENT WORK QUEUING}
관련 출원들
본 출원은 2011년 10월 17일에 출원된 미국 출원 13/274,767호의 계속 출원이다.
상기 출원(들) 의 전체 내용들은 참조에 의해 여기에 포함된다.
대부분의 운영 시스템들에서, 입력 큐 (queue) 는 프로세싱 리소스들을 스케줄링하고 분배하는 운영 시스템에서 사용된다. 입력 큐는 일반적으로 수행될 작업의 수집을 포함하고, 큐의 헤드 엔드 (head end) 로부터 아웃고잉 (outgoing) 작업을 제거하고 큐의 테일 끝으로 임의의 인커밍 (incoming) 작업을 추가함으로써 종종 프로세싱된다. 운영 시스템에 따라, 다양한 기술들이 입력 큐에 저장된 작업을 프로세싱하기 위해 사용될 수 있다. 예를 들어, 선도착선처리 (First-Come-First-Serve), 라운드 로빈 (Round-robin) 스케줄링, 우선순위 및 커스텀 스케줄링 (priority and custom scheduling) 등과 같은 기술들이 사용될 수 있다. 운영 시스템에 의해 사용되는 큐잉 및 스케줄링 기술에도 불구하고, 수행될 작업이 큐에서 실행을 기다리는 동안 큐잉 지연이 발생할 수 있다.
특정 실시예들에 따라, 네트워크 서비스 프로세서는 복수의 인메모리 연결 리스트 (in-memory linked-list) 들 및 패킷 프로세싱 동작들을 포함하는 작업을 수행하는 복수의 네트워크 서비스 프로세서 엘리먼트들을 포함한다. 각각의 별개의 패킷 프로세싱 동작은 하나의 작업을 정의할 수 있다. 인메모리 연결 리스트는 네트워크 서비스 프로세서 엘리먼트들에서의 프로세싱 리소스들의 부족에 응답하여 네트워크 서비스 프로세서 엘리먼트들에 의해 수행될 작업을 저장한다. 그 작업은 네트워크 서비스 프로세서 엘리먼트들에서의 프로세싱 리소스들의 이용 가능성에 응답하여 인메모리 연결 리스트들로부터 네트워크 서비스 프로세서 엘리먼트들로 다시 이동된다.
일부 실시예들에서, 인메모리 연결 리스트들은 수행될 작업을 기술하고 프로세싱하는 부분들과 독립적인 네트워크 서비스 프로세서 메모리의 일부분에 형성될 수 있다. 인메모리 연결 리스트는 동적 랜덤 액세스 메모리 (dynamic random access memory) 를 포함할 수 있다. 수행될 작업은 인메모리 연결 리스트의 입력 큐에 저장될 수 있다. 네트워크 서비스 프로세서는 인메모리 연결 리스트들에서 복수의 이용 가능한 저장 위치로의 복수의 지시자 (pointer) 들을 유지할 수 있다. 수행될 작업은 지시자에 의해 표시되는 이용 가능한 저장 위치에 저장될 수 있다. 네트워크 서비스 프로세서는 이용 가능한 저장 위치의 입력 큐의 끝에서 수행될 작업을 저장할 수 있다. 네트워크 서비스 프로세서는 지시자로 입력 큐의 끝을 지시하는 제2 지시자를 업데이트할 수 있다.
특정 실시예들에서, 네트워크 서비스 프로세서는 네트워크 서비스 프로세서에서의 프로세싱 리소스의 이용 가능성에 응답하여 이용 가능한 저장 위치로부터 수행될 작업을 검색할 수 있다. 네트워크 서비스 프로세서는 이용 가능한 네트워크 저장 위치의 입력 큐의 헤드로부터 수행될 작업을 검색할 수 있다. 네트워크 서비스 프로세서는 수행될 작업을 검색할 때 지시자를 해제 (free) 할 수 있다. 네트워크 서비스 프로세서는 검색된 작업으로부터 획득한 새로운 지시자로 입력 큐의 헤드를 지시하는 제2 지시자를 업데이트할 수 있다.
일부 실시예들에서, 네트워크 서비스 프로세서는 프리 풀 (free pool) 할당기에서 인메모리 연결 리스트들에서 이용 가능한 저장 위치로의 복수의 지시자들을 유지할 수 있다. 프리 풀 할당기는 동적 랜덤 액세스 메모리에서 유지될 수 있다. 네트워크 서비스 프로세서는 네트워크 서비스 프로세서에서의 프로세싱 리소스들의 부족에 응답하여 프리 풀 할당기로부터 인메모리 연결 리스트들에서의 이용 가능한 저장 위치로의 지시자를 획득할 수 있다.
특정 실시예들에서, 네트워크 서비스 프로세서에 의해 수행될 작업은 인메모리 연결 리스트에 저장되기 전에 미리 결정된 크기의 버퍼로 패킹될 수 있다. 네트워크 서비스 프로세서에 의해 수행될 작업은 인메모리 연결 리스트들로부터 네트워크 서비스 프로세서로 다시 이동될 때 별개의 패킷들로 언패킹될 수 있다.
일부 실시예들에서, 네트워크 서비스 프로세서는 각각의 작업에 대한 작업 큐 엔트리를 유지할 수 있다. 네트워크 서비스 프로세서는 인메모리 연결 리스트들에서 이용 가능한 저장 공간으로의 미리 결정된 수의 지시자들을 유지할 수 있다. 미리 결정된 수의 지시자들은 네트워크 서비스 프로세서에 의해 유지되는 전체 수의 작업 큐 엔트리들의 서브세트일 수 있다.
전술한 내용은, 유사한 참조 문자들은 상이한 도면들에 걸쳐 동일한 부분들을 가리키는 첨부한 도면들에서 도시된 것과 같은, 이하의 본 발명의 예시적인 실시예들의 보다 특정한 설명으로부터 명확하게 될 것이다. 도면들은 반드시 비례적인 것이 아니고, 대신에 본 발명의 실시예들을 설명하는 것에 중점을 둔다.
도 1은 네트워크 서비스 프로세서의 블록도이다.
도 2a는 스케줄/싱크 및 오더 (Schedule/Sync and Order, SSO) 모듈의 도면이다.
도 2b는 스케줄/싱크 및 오더 (SSO) 모듈의 내부 아키텍처의 도면이다.
도 3은 작업 큐 지시자에 대한 포맷 요건들을 도시한다.
도 4는 본 발명으로 사용될 수 있는 작업 큐 엔트리 버퍼들의 도면이다.
도 5는 본 발명의 실시예의 고레벨 도면이다.
예시적인 실시예들의 설명이 이어진다.
본 발명의 예시적인 실시예들을 상세히 설명하기 전에, 실시예들이 구현될 수 있는 예시적인 네트워크 보안 프로세서는 읽은 이가 본 발명의 발명적 특징들을 이해하는 것을 돕기 위해 바로 아래에서 설명된다.
도 1은 네트워크 서비스 프로세서 (100) 의 블록도이다. 네트워크 서비스 프로세서 (100) 는 적어도 하나의 프로세서 코어 (120) 를 사용하여 높은 애플리케이션 성능을 제공한다. 이하에서 설명되는 네트워크 서비스 프로세서 (100) 의 다양한 엘리먼트들은 이하에서 총괄하여 "네트워크 서비스 프로세서 엘리먼트들" 또는 프로세서 엘리먼트들"로서 지칭된다.
네트워크 서비스 프로세서 (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) 로 패킷들을 전달하도록 할 수 있다. 와이어-스피드 (wire-speed) 는 데이터가 전송되고 수신되는 네트워크의 데이터 전송의 속도 (rate) 이다. 와이어-스피드로 패킷들을 전달하기 위해 프로토콜들을 프로세싱함으로써, 네트워크 서비스 프로세서는 네트워크 데이터 전송 속도를 줄이지 않는다.
패킷은 복수의 인터페이스 유닛들 (122) 에 의해 프로세싱을 위해 수신된다. 패킷은 또한 PCIe 인터페이스 (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) 로부터 프로세싱의 일부를 오프로드 (offload) 하고, 이에 의해 네트워크 서비스 프로세서가 대량 패킷 프로세싱을 달성하는 것을 가능하게 한다. 예를 들어, 수신된 패킷들의 압축 및 압축해제를 수행하는 것을 전용으로 하는 압축/압축해제 코프로세서 (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) 또는 PCIe 인터페이스 (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) 는 레벨 -2 캐시 메모리 (130) 의 사용 없이 HFA 유닛이 메모리로부터 직접 판독되도록 하고, 이것은 HFA 동작들에 대한 효율을 향상시킬 수 있다.
도 2a는 스케줄/싱크 및 오더 (SSO) 모듈 (148) 의 도면이다. 스케줄/싱크 및 오더 (SSO) 모듈 (148) 은 작업 큐잉, 작업 스케줄링/스케줄제거 (de-scheduling), 및 작업의 오더링 (ordering) 및 동기화와 같은 중요한 기능들을 제공하는 코프로세서로서 기능한다.
각각의 작업은 하드웨어 유닛들 (즉, 도 1에 도시된 네트워크 서비스 프로세서(100) 의 온-칩 유닛들) 또는 코어 소프트웨어 (즉, 온-칩 유닛들에 의해 실행되는 명령어들) 중 어느 하나에 의해 생성될 수 있는 관련 작업 큐 엔트리에 의해 기술된다. 예를 들어, 일부 실시예들에서, 집중적 패킷 입력 하드웨어는 작업 큐 엔트리를 생성하고, 각각의 패킷 도달에 대해 작업을 제출한다. 또한, 코어 소프트웨어는 작업 큐 엔트리들을 생성할 수 있고, 원하는 작업을 제출할 수 있다.
서로 다른 레벨들의 서비스 품질 (quality of service, QOS) 은 (도 1을 참조하여 이전에 설명된) 코프로세서들에 의해 제공될 수 있다. 특히, 다수의 입력 작업 큐들이 사용될 수 있고, 인커밍 패킷들은 디폴트 값들 및 우선순위들을 사용하여 다수의 입력 작업 큐들 중 하나로 분류될 수 있다. 또한, 원하는 서비스 품질을 제공하기 위해, 특정 입력 패킷들은 코어로 버퍼링되고 제시되기 전에 폐기될 수 있다. 예를 들어, 랜덤 조기 폐기 (random early discard, RED) 알고리즘 또는 임계치 알고리즘은 입력 패킷을 폐기하는 때 또는 폐기 여부를 결정하기 위해 사용될 수 있다. 이러한 폐기 메커니즘은 상이한 서비스 품질 레벨에 대해 다르게 구성될 수 있다.
각각의 작업은 작업 큐 엔트리를 큐에 추가함으로써 대기 행렬에 넣어진다. 큐에 저장된 작업은, 원하는 서비스 품질에 따라, 상이한 우선순위 레벨들을 사용하여 출력될 수 있다. 예를 들어, 정적 우선순위 및 가중된 라운드 로빈과 같은 큐잉 스킴 (scheme)들이 사용될 수 있다.
각각의 작업은 종종 도 2a에 도시된 상태들 (210, 220, 230) 을 통해 진행된다. 특히, 각각의 작업은 먼저 입력 큐들에 있고 (210), 인플라이트(in-flight) 로 들어가고 (220), 마지막으로 스케줄에서 없어지거나 완료된다 (230). 임의의 주어진 시간에서, 하나의 작업만이 특정 프로세서 코어 (120) 로 스케줄링될 수 있기 때문에, 스케줄링되는 아이템들의 수는 프로세서 코어들의 수로 제한된다. 스케줄에 없는 작업을 실행하고 있거나 그것의 스케줄링된 작업을 완료하고 새로운 작업을 요청 받지 않은 프로세스 코어가 스케줄이 없는 코어로 고려된다. 스케줄링된 작업은 SSO 인플라이트 작업 (220) 의 서브세트이다. 임의의 코어는 임의의 지점에서 스케줄링된 아이템을 스케줄제거할 수 있다 (225). 임의의 스케줄제거된 작업은 인플라이트로 남고 이후에 다시 스케줄링된다.
비록 SSO 유닛 (148) 크기가 제한되지만, L2/DRAM (인메모리) 연결 리스트들을 유지하고 요구될 때 L2/DRAM으로 오버플로우 (overflow) 함으로써, SSO 유닛 (148) 은 무한한 입력 작업 큐의 모습을 유지한다. 특히, 프로세싱 공간이 없을 때, SSO 유닛 (148) 은 입력 큐 엔트리들을 네트워크 서비스 프로세서 (100) 에 의해 유지되는 L2/DRAM 리스트에 추가한다. 작업이 추가될 때 공간이 SSO 유닛 (148) 에서 이용 가능한 경우, SSO 유닛 (148) 은 즉시 내부에서 작업을 버퍼링하고 메모리 리스트의 오버헤드를 방지한다. SSO 유닛 (148) 이 메모리 리스트에 작업을 넣는 경우, 그것은 이후에 공간이 이용 가능하게 되자마자, 작업이 원래 추가되었던 순서로, 작업을 L2/DRAM으로부터 SSO 유닛 (148) 으로 자동으로 이동시킨다.
상술한 것처럼, SSO 유닛 (148) 은 작업 큐 엔트리를 큐에 추가함으로써 각각의 작업을 대기 행렬에 넣는다. 이러한 L2/DRAM에서의 작업 큐 엔트리는 각각의 작업을 기술하는 주 디스크립터 (descriptor) 이다. SSO 유닛 (148) 은, 작업 큐 엔트리들을 큐에 추가하는 경우 또는 작업을 메모리 입력 큐 (210) 로부터 SSO 유닛 (148) 의 SSO 엔트리로 이동시키는 경우, 작업 큐 엔트리를 포함하는 L2/DRAM 위치들에게 판독하고 기입할 수 있다.
일반적으로 SSO 유닛 (148) 은 작업 큐 엔트리로의 (이후에 도 2b 및 도 3에 도시된) 작업 큐 지시자 (WQP) (300) 를 오직 유지할 필요가 있다. 작업 큐 지시자는 적법한 작업 큐 엔트리를 지시하는 L2/DRAM으로의 64 비트 할당된 지시자일 수 있다. SSO 유닛 (148) 은 WQP를 저장하고, 코어가 새로운 작업을 프로세싱하는데 이용 가능할 경우 이러한 지시자를 사용한다. 특히, 네트워크 서비스 프로세서 (100) 의 프로세서 엘리먼트가 기존의 작업 큐 구조에 대하여 입력 큐 엔트리들 (210) (도 2a에 도시된 ADDWQ 명령어) 을 추가하는 경우, SSO 유닛 (148) 은 지시된 작업 큐 엔트리를 포함하는 L2/DRAM 위치들을 판독한다.
도 2b는 스케줄/싱크 및 오더 (SSO) 유닛 (148) 의 내부 아키텍처의 도면이다. 설명의 목적으로, 5개의 가상 코어들이 도시되지만, 본 발명의 예시적인 실시예들은 다양한 수의 코어들을 이용할 수 있다.
상술한 것처럼, SSO 유닛 (148) 엔트리들은 입력 큐들에 있을 수 있거나 (210), 인플라이트일 수 있거나 (220), 스케줄에 없는 상태에 있는 코어에 첨부될 수 있거나 (221), 또는 프리 리스트 (free list) 에 있을 수 있다 (222). SSO 유닛 (148) 에 대한 각각의 엔트리는 적어도 다음의 정보를 포함한다:
· L2/DRAM 에서의 작업 큐 엔트리로의 지시자 (WQP) (300)
· 현재 태그(301) 및 태그 타입
· (이후에 도 3에서 도시되는) 현재 그룹
· 엔트리를 다양한 리스트들에 연결하기 위한 지시자들 (209)
도 2b에서 도시된 예시에서, SSO 유닛 (148) 아키텍처는 다수의 입력 큐들 (210) 을 포함한다. 각각의 입력 큐는 메모리 리스트 및 인유닛 (in-unit) 리스트를 포함한다. SSO 유닛 (148) 이 새로운 작업을 유닛에 추가할 때, 그것은 내부 SSO 유닛 엔트리 (233) 을 할당하고, 필요한 정보로 그 엔트리 (233) 를 채운다. 일단 내부 SSO 엔트리 (233) 가 하나의 작업에 할당되면, 그 작업이 완료되거나 스케줄에 없을 때까지 그 작업이 입력 큐에 있거나 (210) 인플라이트인 (220) 동안 그 작업은 SSO 유닛 (148) 에 남아 있는다. SSO 엔트리 (233) 는 그 시점 이후에 L2/DRAM으로 오버플로우할 수 없다. 코어 동작들은 오직 그 SSO 엔트리 (233) 로 하여금 특정 코어들에/로부터 첨부/분리되도록 하고 리스트들 사이를 이동하도록 한다.
일단 SSO 유닛 (148) 이 하나의 작업을 로딩하면, 그것은 더 이상 L2/DRAM의 작업 큐 엔트리 위치들을 판독하거나 기입하지 않는다. L2/DRAM의 작업 큐 엔트리는, 작업이 입력 큐 (210) 에 있는 동안에만 사용되고, 작업이 SSO 유닛 (18) 에 있는 동안에는 사용되지 않는다. SSO 유닛 (148) 은, 작업 큐 엔트리 지시자가 수행될 필요가 있는 실제 작업을 간접적으로 기술하기 때문에, 그것이 SSO 유닛 (148) 내부에 있을 때 모든 지점들을 따라 작업 큐 지시자를 전달한다.
인플라이트 엔트리들 (220) 은 선입선출 (FIFO) 순서 리스트로 조직되고 (244), 하나의 FIFO 엔트리는 각각의 고유한 인플라이트 태그 및 태그 타입 값 결합과 관련된다. 작업은, SSO 하드웨어가 입력 큐 (210) 로부터 작업을 스케줄링하거나 스케줄에 없는 (221) 코어 상태로부터 전환하는 경우, FOFI 리스트 (244) 에 들어간다.
SSO 유닛 (148) 의 코어는 인플라이트 엔트리들 (220) 을 프로세싱하거나, 첨부된 SSO 엔트리 (233) 로 스케줄에 없는 상태 (221) 에 있거나, 또는 해제 (free) 상태 (222) 에 있도록 스케줄링될 수 있다.
도 3은 작업 큐 지시자 (300) 에 대한 포맷 요건을 도시한다. "QOS", "Grp", "TT" 및 "태그"로 표시된 필드들은 각각 각각의 작업에 대응하는 서비스 품질, 그룹, 태그 타입, 및 태그를 표시한다. SSO 하드웨어는 오직 QOS, Grp, TT 필드를 판독하고, 이와 같은, 이러한 필드들은 하드웨어 ADDWQ 경우들에 대해 SSO 소프트웨어에 의해 적절히 설정된다. 위에서 주목된 것처럼, SSO 하드웨어는 작업 큐 지시자 (300) 를 저장하고, 코어가 프로세싱 작업에 대해 이용 가능할 때 지시자 (300) 를 작업으로 전달한다.
도 4는 본 발명과 함께 사용될 수 있는 작업 큐 엔트리 버퍼들의 도면이다. 상술한 것처럼, 코프로세서에 제출된 작업은 입력 큐 (210) (도 2a에 도시됨) 를 통해 들어가고, 관련 작업 큐 엔트리 (WQE) 에 의해 기술된다. 입력 작업 큐들은 임의적으로 클 수 있다.
일부 실시예들에서, 네트워크 서비스 프로세서는, 비어있는 L2 캐시 라인들을 지시하는, 지시자들의 프리 리스트로 초기화된다. 캐시 라인들은 미리 결정된 크기들을 갖는 번들들로 배열될 수 있다. 예를 들어, 일 실시예에서, 소프트웨어는 8+48+라운드업 (N/26) 프리 지시자들로 하드웨어를 초기화하고, 여기서 N 개만큼의 작업 큐 엔트리들이 애플리케이션들에 의해 사용될 수 있다.
이러한 프리 지시자들의 일부는 온-칩 레지스터들로서 저장될 수 있고 인메모리 연결 리스트들의 헤드 (head) 및 테일 (tail) 지시자들로서 기능할 수 있다. 다른 지시자들은 L2/DRAM의 프리 페이지 할당기 풀 (free page allocator pool) (도 1에 도시된 FPA (128)) 에 저장될 수 있다.
초기화할 때, 주어진 입력 큐에 대한 인메모리 연결 리스트는 비어있고, 각각의 입력 큐에 대한 헤드 및 테일 지시자들은 동일하다. 온-칩 공간이 이용 가능한 경우, 하드웨어는 즉시 내부에서 작업을 버퍼링하고, 인메모리 연결 리스트의 오버헤드를 방지한다. 어떠한 공간도 칩 상에서 이용 가능하지 않은 경우, SSO 유닛 (148) 은 작업을 인메모리 연결 리스트로 유도한다. 특히, 공간이 칩 상에서 이용 가능하지 않은 경우, L2/DRAM 캐시 라인에서 저장하기 위한 비트 패킹된 번들을 형성하기 위해 충분한 수의 작업 큐 엔트리들이 있을 때까지, 큐 엔트리들 (예를 들어, WQE 0, WQE 1, …) 로서 연속적인 인커밍 작업들을 동시에 패킹 (압축) 하는 동안, SSO 유닛(148) 은 프리 지시자를 FPA (128) (도 1) 로부터 프리페치 (pre-fetch) 하고, 작업 큐 엔트리 (예를 들어, WQE 0, WQE 1, …) 를 내부 버퍼로 삽입한다. SSO 유닛 (148) 은 입력 큐 연결 리스트의 테일에서 L2/DRAM으로 비트 패킹된 번들 (410, 420, 430) 을 (프리 지시자와 함께) 저장한다. 더 빠른 검색을 위해, SSO 유닛 (148) 은 오직 L2로 비트 패킹된 번들 (410, 420, 430) 을 저장하는 것을 선택할 수 있다. 일단 비트 패킹된 번들 (410, 420, 430) 이 저장되면, 번들 (410, 420, 430) 의 테일 지시자 (440) 는 프리 지시자로 업데이트된다. 외부 입력 큐들에서 고정된 엔트리들은 작업 큐 엔트리 번들들 (410, 420, 430) 의 연결 리스트들을 형성한다. 특정 실시예들에서, 적어도 하나의 외부 입력 큐는 각각의 서비스 품질 레벨에 대해 포함될 수 있다. (도 4에 도시된) 일 실시예에서, 각각의 작업 큐 엔트리 번들은 256-바이트 블록의 메모리로 비트 패킹된 26개의 작업 큐 엔트리들을 포함할 수 있다.
일단 프로세싱 공간이 칩상에서 이용 가능하면, 하드웨어는, 작업이 원래 추가되었던 순서로 프로세싱을 위해 다시 L2/DRAM으로부터 작업을 자동으로 이동시킨다. 특히, 하드웨어는 L2/DRAM 에서 입력 큐 연결 리스트의 헤드 지시자 (450) 로부터 비트 패킹된 번들 (410, 420, 430) 을 판독하고, 동시에 번들 (410, 420, 430) 을 언패킹하고 압축을 해제한다. 일단 번들이 언패킹되면, SSO 유닛 (148) 은 (도 1에 도시된) FPA (128) 로 다시 헤드 지시자 (450) 를 해제하고, 언패킹된 번들 (410, 420, 430) 로부터 검색된 다음 지시자로 헤드 지시자 (450) 를 업데이트한다.
도 5는 본 발명의 실시예의 고레벨 도면이다. 도 5에 도시된 것처럼, 네트워크 서비스 프로세서 (100) 는 패킷 프로세싱 동작을 포함하는 작업을 수행하는 복수의 독립적 프로세서 코어들 (120) 및 프로세서 코어에서의 프로세싱 리소스들의 부족에 응답하여 프로세서 코어 (120) 에 의해 수행될 작업을 저장하도록 배열되는 복수의 인메모리 연결 리스트들 (501) 을 포함한다. 작업은 프로세서 코어에서의 프로세싱 리소스들의 이용 가능성에 응답하여 인메모리 연결 리스트들 (501) 로부터 프로세서 코어 (120) 로 다시 이동된다. 인메모리 연결 리스트들 (501) 은 수행될 작업을 기술하고 프로세싱하는 부분들과는 관련 없는 프로세서 코어 메모리 (120) 의 부분에서 형성될 수 있다.
수행될 작업은 인메모리 연결 리스트 (501) 의 입력 큐 (도시 안됨) 에 저장된다. 인메모리 연결 리스트들 (501) 은 동적 랜덤 액세스 메모리 (DRAM) (108) 또는 L2 캐시 (130) 에 저장될 수 있다.
앞서 설명된 것처럼, 네트워크 서비스 프로세서 (100) 는, 인메모리 연결 리스트들 (501) 에서 복수의 이용 가능한 저장 위치들을 지시하는, 프리 풀 할당기 유닛 (128) 에 의해 할당되는 복수의 지시자들을 유지한다. 프로세싱 공간이 이용 가능하지 않은 경우, 프로세서 (100) 는 프리 지시자를 FPA (128) 로부터 프리페치 (pre-fetch) 하고, 작업 큐 엔트리를 내부 버퍼 (도시 안됨) 로 삽입한다. 프로세서 (100) 는 미리 결정된 크기의 작업 큐 엔트리들의 패킹된 번들에 대한 충분한 작업 큐 엔트리들이 있을 때까지 연속적인 작업 큐 엔트리들을 동시에 패킹한다. 일단 형성되면, 패킹된 번들은 L2 캐시 (130) (또는 DRAM(108)) 에서 인메모리 연결 리스트 (501) 의 테일에 저장된다. 패킹된 번들이 저장된 후, 번들의 테일 지시자는 프리 지시자로 업데이트된다.
프로세싱 리소스들이 이용 가능하게 되면, 네트워크 서비스 프로세서 (100) 는 수행될 작업을 인메모리 연결 리스트들 (501) 의 헤드로부터 검색하고, 검색된 작업을 지시하는 지시자를 해제 (free) 한다. 인메모리 연결 리스트들 (501) 의 헤드를 지시하는 지시자는 또한 검색된 작업으로부터 획득된 새로운 지시자로 업데이트된다.
본 발명은 예시적인 실시예들을 참조하여 특히 나타나고 설명되었지만, 형식 및 상세한 내용에서의 다양한 변화들이 첨부된 청구항들에 의해 포함되는 본 발명의 범위를 벗어나지 않고 이루어질 수 있다는 것이 해당 분야의 통상의 기술자에 의해 이해될 것이다.

Claims (40)

  1. 패킷 프로세싱 동작들을 포함하는 작업을 수행하는 복수의 네트워크 서비스 프로세서 엘리먼트들;
    상기 복수의 네트워크 서비스 프로세서 엘리먼트들에 의해 수행될 작업을 지시하는 엔트리들을 저장하도록 배열되는 복수의 인메모리 연결 리스트들; 및
    상기 복수의 네트워크 서비스 프로세서 엘리먼트들에 대한 상기 작업을 스케줄링하도록 구성된 스케줄링 프로세서로서, 상기 스케줄링 프로세서는 1) 상기 작업을 수행할 프로세서의 이용 가능성 (availability) 을 검출하고, 2) 상기 복수의 네트워크 서비스 프로세서 엘리먼트들에서의 상기 작업을 수행할 이용 가능한 프로세서의 부족 (lack) 을 검출하는 것에 응답하여 상기 인메모리 연결 리스트들에 상기 엔트리들을 저장하도록 구성되고, 상기 스케줄링 프로세서는 상기 복수의 네트워크 서비스 프로세서 엘리먼트들에서의 상기 저장된 작업을 수행할 프로세서의 이용 가능성을 검출한 것에 응답하여 상기 인메모리 연결 리스트들로부터 주어진 네트워크 서비스 프로세서 엘리먼트들에 다시 상기 엔트리들을 이동시키는, 상기 스케줄링 프로세서를 포함하고,
    네트워크 서비스 프로세서에 의해 수행되는 상기 작업은 상기 인메모리 연결 리스트들로부터 상기 네트워크 서비스 프로세서로 다시 이동되는 것에 따라 언패킹되는, 네트워크 서비스 프로세서.
  2. 제1 항에 있어서,
    상기 인메모리 연결 리스트들은 수행될 상기 작업을 기술하고 프로세싱하는 부분들과 독립적인 네트워크 서비스 프로세서 메모리의 일부분에 형성되는, 네트워크 서비스 프로세서.
  3. 제1 항에 있어서,
    수행될 상기 작업은 인메모리 연결 리스트의 입력 큐에 저장되는, 네트워크 서비스 프로세서.
  4. 제1 항에 있어서,
    상기 인메모리 연결 리스트들은 동적 랜덤 액세스 메모리 (dynamic random access memory) 를 포함하는, 네트워크 서비스 프로세서.
  5. 제1 항에 있어서,
    상기 네트워크 서비스 프로세서는 인메모리 연결 리스트들에서 복수의 이용 가능한 저장 위치들로의 복수의 지시자 (pointer) 들을 유지하는, 네트워크 서비스 프로세서.
  6. 제5 항에 있어서,
    상기 네트워크 서비스 프로세서는 지시자에 의해 표시되는 이용 가능한 저장 위치에 수행될 상기 작업을 저장하는, 네트워크 서비스 프로세서.
  7. 제6 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 이용 가능한 저장 위치의 입력 큐의 테일 (tail) 에 수행될 상기 작업을 저장하는, 네트워크 서비스 프로세서.
  8. 제7 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 지시자로 상기 입력 큐의 테일을 지시하는 제2 지시자를 업데이트하는, 네트워크 서비스 프로세서.
  9. 제5 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 복수의 네트워크 서비스 프로세서 엘리먼트들에서의 상기 저장된 작업을 수행할 프로세서의 이용 가능성에 응답하여 상기 이용 가능한 저장 위치로부터 수행될 상기 작업을 검색하는, 네트워크 서비스 프로세서.
  10. 제9 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 이용 가능한 저장 위치의 입력 큐의 헤드로부터 수행될 상기 작업을 검색하는, 네트워크 서비스 프로세서.
  11. 제10 항에 있어서,
    상기 네트워크 서비스 프로세서는 수행될 상기 작업을 검색할 때 상기 지시자를 해제 (free) 하는, 네트워크 서비스 프로세서.
  12. 제10 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 검색된 작업으로부터 획득한 새로운 지시자로 상기 입력 큐의 헤드를 지시하는 제2 지시자를 업데이트하는, 네트워크 서비스 프로세서.
  13. 제1 항에 있어서,
    상기 네트워크 서비스 프로세서는 프리 풀 (free pool) 할당기에서 상기 인메모리 연결 리스트들에서 이용 가능한 저장 위치로의 복수의 지시자들을 유지하는, 네트워크 서비스 프로세서.
  14. 제13 항에 있어서,
    상기 프리 풀 할당기는 동적 랜덤 액세스 메모리에서 유지되는, 네트워크 서비스 프로세서.
  15. 제13 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 네트워크 서비스 프로세서에서의 프로세서의 부족에 응답하여 상기 프리 풀 할당기로부터 상기 인메모리 연결 리스트들에서의 이용 가능한 저장 위치로의 지시자를 획득하는, 네트워크 서비스 프로세서.
  16. 제1 항에 있어서,
    상기 네트워크 서비스 프로세서에 의해 수행될 상기 작업은 인메모리 연결 리스트에 저장되기 전에 미리 결정된 크기의 버퍼로 패킹되는 (packed), 네트워크 서비스 프로세서.
  17. 제1 항에 있어서,
    상기 네트워크 서비스 프로세서에 의해 수행될 상기 작업은 상기 인메모리 연결 리스트들로부터 상기 네트워크 서비스 프로세서로 다시 이동될 때 별개의 패킷들로 언패킹되는 (unpacked), 네트워크 서비스 프로세서.
  18. 제1 항에 있어서,
    각각의 별개의 패킷 프로세싱 동작은 하나의 작업을 정의하는, 네트워크 서비스 프로세서.
  19. 제18 항에 있어서,
    상기 네트워크 서비스 프로세서는 각각의 작업에 대한 작업 큐 엔트리를 유지하는, 네트워크 서비스 프로세서.
  20. 제19 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 인메모리 연결 리스트들에서 이용 가능한 저장 공간으로의 미리 결정된 수의 지시자들을 유지하고, 상기 미리 결정된 수의 지시자들은 상기 네트워크 서비스 프로세서에 의해 유지되는 전체 수의 작업 큐 엔트리들의 서브세트인, 네트워크 서비스 프로세서.
  21. 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법에 있어서,
    복수의 네트워크 서비스 프로세서 엘리먼트들에 대한 작업을 스케줄링하는 단계;
    상기 복수의 네트워크 서비스 프로세서 엘리먼트들에 의해 수행될 작업을 지시하는 엔트리들을 저장하도록 배열된 복수의 인메모리 연결 리스트들을 유지하는 단계;
    상기 작업을 수행할 프로세서의 이용 가능성을 검출하는 단계;
    상기 복수의 네트워크 서비스 프로세서 엘리먼트들에서의 상기 저장된 작업을 수행할 이용 가능한 프로세서의 부족을 검출하는 것에 응답하여, 상기 복수의 인메모리 연결 리스트들에 상기 엔트리들을 저장하는 단계;
    상기 복수의 네트워크 서비스 프로세서 엘리먼트들에서의 상기 저장된 작업을 수행하는 프로세서의 이용 가능성에 응답하여 상기 인메모리 연결 리스트들로부터 다시 상기 복수의 네트워크 서비스 프로세서 엘리먼트들 중 주어진 하나로 상기 네트워크 서비스 프로세서에 의해 수행될 상기 작업을 검색하는 단계; 및
    상기 인메모리 연결 리스트들로부터 네트워크 서비스 프로세서로 다시 이동될 때 상기 네트워크 서비스 프로세서에 의해 수행되는 상기 작업을 언패킹하는 단계를 포함하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  22. 제21 항에 있어서,
    상기 인메모리 연결 리스트들은 수행될 상기 작업을 기술하고 프로세싱하는 부분들과 독립적인 네트워크 서비스 프로세서 메모리의 일부분에 형성되는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  23. 제21 항에 있어서,
    수행될 상기 작업은 상기 인메모리 연결 리스트의 입력 큐에 저장되는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  24. 제21 항에 있어서,
    상기 인메모리 연결 리스트들은 동적 랜덤 액세스 메모리를 포함하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  25. 제21 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 인메모리 연결 리스트들에서 복수의 이용 가능한 저장 위치들로의 복수의 지시자들을 유지하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  26. 제25 항에 있어서,
    상기 네트워크 서비스 프로세서는 지시자에 의해 표시되는 이용 가능한 저장 위치에 수행될 상기 작업을 저장하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  27. 제26 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 이용 가능한 저장 위치의 입력 큐의 테일에 수행될 상기 작업을 저장하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  28. 제27 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 지시자로 상기 입력 큐의 테일을 지시하는 제2 지시자를 업데이트하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  29. 제25 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 복수의 네트워크 서비스 프로세서 엘리먼트들에서의 상기 저장된 작업을 수행할 프로세서의 이용 가능성에 응답하여 상기 이용 가능한 저장 위치로부터 수행될 상기 작업을 검색하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  30. 제29 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 이용 가능한 저장 위치의 입력 큐의 헤드로부터 수행될 상기 작업을 검색하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  31. 제30 항에 있어서,
    상기 네트워크 서비스 프로세서는 수행될 상기 작업을 검색할 때 상기 지시자를 해제 (free) 하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  32. 제30 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 검색된 작업으로부터 획득한 새로운 지시자로 상기 입력 큐의 헤드를 지시하는 제2 지시자를 업데이트하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  33. 제21 항에 있어서,
    상기 네트워크 서비스 프로세서는 프리 풀 (free pool) 할당기에서 상기 인메모리 연결 리스트들에서 이용 가능한 저장 위치로의 복수의 지시자들을 유지하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  34. 제33 항에 있어서,
    상기 프리 풀 할당기는 동적 랜덤 액세스 메모리에서 유지되는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  35. 제33 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 네트워크 서비스 프로세서에서의 프로세서의 부족에 응답하여 상기 프리 풀 할당기로부터 상기 인메모리 연결 리스트들에서의 이용 가능한 저장 위치로의 지시자를 획득하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  36. 제21 항에 있어서,
    수행될 상기 작업은 상기 인메모리 연결 리스트에 저장되기 전에 미리 결정된 크기의 버퍼로 패킹되는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  37. 제21 항에 있어서,
    수행될 상기 작업은 상기 인메모리 연결 리스트들로부터 상기 네트워크 서비스 프로세서로 다시 이동될 때 별개의 패킷들로 언패킹되는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  38. 제21 항에 있어서,
    각각의 별개의 패킷 프로세싱 동작은 하나의 작업을 정의하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  39. 제38 항에 있어서,
    상기 네트워크 서비스 프로세서는 각각의 작업에 대한 작업 큐 엔트리를 유지하는, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
  40. 제39 항에 있어서,
    상기 네트워크 서비스 프로세서는 상기 인메모리 연결 리스트들에서 이용 가능한 저장 공간으로의 미리 결정된 수의 지시자들을 유지하고,
    상기 미리 결정된 수의 지시자들은 상기 네트워크 서비스 프로세서에 의해 유지되는 전체 수의 작업 큐 엔트리들의 서브세트인, 네트워크 서비스 프로세서에서 프로세싱 리소스들을 스케줄링하고 분배하기 위한 방법.
KR1020147013222A 2011-10-17 2012-09-19 효율적인 작업 큐잉을 갖는 프로세서 KR102003089B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/274,767 US9465662B2 (en) 2011-10-17 2011-10-17 Processor with efficient work queuing
US13/274,767 2011-10-17
PCT/US2012/056059 WO2013058925A1 (en) 2011-10-17 2012-09-19 Processor with efficient work queuing

Publications (2)

Publication Number Publication Date
KR20140078756A KR20140078756A (ko) 2014-06-25
KR102003089B1 true KR102003089B1 (ko) 2019-07-23

Family

ID=47018495

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147013222A KR102003089B1 (ko) 2011-10-17 2012-09-19 효율적인 작업 큐잉을 갖는 프로세서

Country Status (4)

Country Link
US (1) US9465662B2 (ko)
KR (1) KR102003089B1 (ko)
CN (1) CN103946803B (ko)
WO (1) WO2013058925A1 (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8392408B1 (en) 2011-05-04 2013-03-05 Google Inc. Coordinating successive search queries using a query cursor
US8826284B1 (en) * 2011-10-31 2014-09-02 Google Inc. Scalable task scheduling
US9110933B1 (en) 2011-11-04 2015-08-18 Google Inc. Processing data triggers in an untrusted environment based on information stored in a trusted environment
US9203805B2 (en) 2011-11-23 2015-12-01 Cavium, Inc. Reverse NFA generation and processing
US9064013B1 (en) 2011-11-30 2015-06-23 Google Inc. Application of resource limits to request processing
US8856415B2 (en) * 2012-02-01 2014-10-07 National Instruments Corporation Bus arbitration for a real-time computer system
US9235607B1 (en) 2012-03-29 2016-01-12 Google Inc. Specifying a predetermined degree of inconsistency for test data
US20140160954A1 (en) * 2012-12-12 2014-06-12 International Business Machines Corporation Host ethernet adapter frame forwarding
US9507563B2 (en) * 2013-08-30 2016-11-29 Cavium, Inc. System and method to traverse a non-deterministic finite automata (NFA) graph generated for regular expression patterns with advanced features
US9904630B2 (en) 2014-01-31 2018-02-27 Cavium, Inc. Finite automata processing based on a top of stack (TOS) memory
US9529532B2 (en) 2014-03-07 2016-12-27 Cavium, Inc. Method and apparatus for memory allocation in a multi-node system
US9372800B2 (en) 2014-03-07 2016-06-21 Cavium, Inc. Inter-chip interconnect protocol for a multi-chip system
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
US10002326B2 (en) 2014-04-14 2018-06-19 Cavium, Inc. Compilation of finite automata based on memory hierarchy
US10110558B2 (en) 2014-04-14 2018-10-23 Cavium, Inc. Processing of finite automata based on memory hierarchy
US20150378782A1 (en) * 2014-06-25 2015-12-31 Unisys Corporation Scheduling of tasks on idle processors without context switching
CN105991588B (zh) * 2015-02-13 2019-05-28 华为技术有限公司 一种防御消息攻击的方法及装置
CN106126121A (zh) * 2016-06-22 2016-11-16 广东睿江云计算股份有限公司 一种基于qos的云主机磁盘资源保障方法及系统
CN111698160A (zh) * 2019-12-27 2020-09-22 国网上海市电力公司 一种环网系统、网络系统中节点的数据处理方法及装置
CN116521606B (zh) * 2023-06-27 2023-09-05 太初(无锡)电子科技有限公司 一种任务处理方法、装置、计算设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050100042A1 (en) 2003-11-12 2005-05-12 Illikkal Rameshkumar G. Method and system to pre-fetch a protocol control block for network packet processing
US7320037B1 (en) 2002-05-10 2008-01-15 Altera Corporation Method and apparatus for packet segmentation, enqueuing and queue servicing for multiple network processor architecture
JP2008512950A (ja) * 2004-09-10 2008-04-24 カビウム・ネットワークス パケットのキューイング、スケジューリングおよび順序づけ

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5809526A (en) * 1996-10-28 1998-09-15 International Business Machines Corporation Data processing system and method for selective invalidation of outdated lines in a second level memory in response to a memory request initiated by a store operation
US6513057B1 (en) * 1996-10-28 2003-01-28 Unisys Corporation Heterogeneous symmetric multi-processing system
US6460120B1 (en) * 1999-08-27 2002-10-01 International Business Machines Corporation Network processor, memory organization and methods
US7284074B2 (en) 2002-10-31 2007-10-16 Force10 Networks, Inc. Pipelined network processing with FIFO queues
US7877566B2 (en) * 2005-01-25 2011-01-25 Atmel Corporation Simultaneous pipelined read with multiple level cache for improved system performance using flash technology
US7535907B2 (en) 2005-04-08 2009-05-19 Oavium Networks, Inc. TCP engine
CN100542139C (zh) * 2006-12-31 2009-09-16 华为技术有限公司 一种基于任务分组的资源分配方法和装置
US8320373B2 (en) * 2007-08-23 2012-11-27 Qualcomm Incorporated Packet-based processing system

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7320037B1 (en) 2002-05-10 2008-01-15 Altera Corporation Method and apparatus for packet segmentation, enqueuing and queue servicing for multiple network processor architecture
US20050100042A1 (en) 2003-11-12 2005-05-12 Illikkal Rameshkumar G. Method and system to pre-fetch a protocol control block for network packet processing
JP2008512950A (ja) * 2004-09-10 2008-04-24 カビウム・ネットワークス パケットのキューイング、スケジューリングおよび順序づけ

Also Published As

Publication number Publication date
WO2013058925A1 (en) 2013-04-25
US9465662B2 (en) 2016-10-11
KR20140078756A (ko) 2014-06-25
CN103946803B (zh) 2017-09-29
US20130097608A1 (en) 2013-04-18
CN103946803A (zh) 2014-07-23

Similar Documents

Publication Publication Date Title
KR102003089B1 (ko) 효율적인 작업 큐잉을 갖는 프로세서
US9569366B2 (en) System and method to provide non-coherent access to a coherent memory system
JP6676027B2 (ja) ネットワークプロセッサにおけるマルチコア相互接続
US9935899B2 (en) Server switch integration in a virtualized system
US8935483B2 (en) Concurrent, coherent cache access for multiple threads in a multi-core, multi-thread network processor
US8505013B2 (en) Reducing data read latency 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
US8537832B2 (en) Exception detection and thread rescheduling in a multi-core, multi-thread network processor
US8514874B2 (en) Thread synchronization in a multi-thread network communications processor architecture
US9529640B2 (en) Work request processor
US8949838B2 (en) Multi-threaded processing with hardware accelerators
US8910171B2 (en) Thread synchronization in a multi-thread network communications processor architecture
US8943507B2 (en) Packet assembly module for multi-core, multi-thread network processors
US8868889B2 (en) Instruction breakpoints in a multi-core, multi-thread network communications processor architecture
US9195464B2 (en) Tracking written addresses of a shared memory of a multi-core processor
US20060161647A1 (en) Method and apparatus providing measurement of packet latency in a processor

Legal Events

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