KR20220033055A - 패킷 처리 방법 및 장치 그리고 칩 - Google Patents

패킷 처리 방법 및 장치 그리고 칩 Download PDF

Info

Publication number
KR20220033055A
KR20220033055A KR1020227005436A KR20227005436A KR20220033055A KR 20220033055 A KR20220033055 A KR 20220033055A KR 1020227005436 A KR1020227005436 A KR 1020227005436A KR 20227005436 A KR20227005436 A KR 20227005436A KR 20220033055 A KR20220033055 A KR 20220033055A
Authority
KR
South Korea
Prior art keywords
packet
fec
encoding
target
original
Prior art date
Application number
KR1020227005436A
Other languages
English (en)
Inventor
칭 천
지위안 시
졔 천
Original Assignee
후아웨이 테크놀러지 컴퍼니 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from CN201911205835.XA external-priority patent/CN112564855A/zh
Application filed by 후아웨이 테크놀러지 컴퍼니 리미티드 filed Critical 후아웨이 테크놀러지 컴퍼니 리미티드
Publication of KR20220033055A publication Critical patent/KR20220033055A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0041Arrangements at the transmitter end
    • H04L1/0043Realisations of complexity reduction techniques, e.g. use of look-up tables
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/373Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with erasure correction and erasure determination, e.g. for packet loss recovery or setting of erasures for the decoding of Reed-Solomon codes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0041Arrangements at the transmitter end
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0045Arrangements at the receiver end
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0045Arrangements at the receiver end
    • H04L1/0052Realisations of complexity reduction techniques, e.g. pipelining or use of look-up tables
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/625Queue scheduling characterised by scheduling criteria for service slots or service orders
    • H04L47/6275Queue scheduling characterised by scheduling criteria for service slots or service orders based on priority
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/55Prevention, detection or correction of errors
    • H04L49/557Error correction, e.g. fault recovery or fault tolerance
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/12Protocol engines

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Detection And Prevention Of Errors In Transmission (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

본 출원은 패킷 처리 방법 및 장치, 칩을 개시하며, 데이터 인코딩 기술 분야에 관한 것이다. 이 방법에서, FEC 인코딩이 CPU에서가 아닌 네트워크 디바이스의 타깃 하드웨어 엔진에서 제1 데이터 스트림의 M개의 원본 패킷에 대해 직접 수행된다. 따라서, CPU 오버헤드를 줄일 수 있으며 네트워크 디바이스의 인코딩 효율성을 높일 수 있다. 이러한 방식으로 네트워크 디바이스는 패킷 전송 프로세스에서 큰 처리량의 요건을 쉽게 충족할 수 있다.

Description

패킷 처리 방법 및 장치 그리고 칩
본 출원은 2019년 11월 29일에 중국 특허청에 출원되고 발명의 명칭이 "패킷 처리 방법 및 장치 그리고 칩"인 중국 특허 출원 번호 제201911205835.X호에 대한 우선권을 주장하고, 2019년 9월 10일에 중국 특허청에 출원되고 발명의 명칭이 " FEC 가속 방법, 장치 및 시스템 그리고 FEC 하드웨어 가속기"인 중국 특허 출원 번호 제201910854367.2호에 대한 우선권을 주장하는 바이며, 상기 문헌의 내용은 그 전체로서 원용에 의해 본 명세서에 포함된다.
본 출원은 데이터 인코딩 기술 분야에 관한 것으로, 특히 패킷 처리 방법 및 장치 그리고 칩에 관한 것이다.
두 네트워크 디바이스 간에 데이터 스트림을 송신할 때 패킷 손실이 자주 발생한다. 현재, 데이터 스트림 전송 프로세스에서 패킷 손실 문제를 해결하기 위해 순방향 오류 정정(forward error correction, FEC) 인코딩 및 디코딩 기술이 사용될 수 있다.
구체적으로, 제1 레벨 네트워크 디바이스가 데이터 스트림의 원본 패킷에 대해 FEC 인코딩을 수행하여, 원본 패킷의 중복 패킷을 획득한다. 제1 레벨 네트워크 디바이스는 FEC 패킷 헤더를 각각의 원본 패킷과 각각의 중복 패킷에 추가하고, FEC 패킷 헤더를 운반하는 원본 패킷과 FEC 패킷 헤더를 운반하는 중복 패킷을 제2 레벨 네트워크 디바이스에 송신한다. 원본 패킷이 전송 프로세스에서 손실될 때, 제2 레벨 네트워크 디바이스는 중복 패킷과 손실되지 않은 원본 패킷에 기반하여 손실된 원본 패킷을 복구하고, 손실되지 않은 원본 패킷과 복구된 원본 패킷을 원본 데이터 스트림으로 조합하고, 데이터 스트림을 출력한다. 이것은 데이터 스트림 전송 프로세스에서 패킷 손실을 방지한다.
상기 전술한 패킷 전송 프로세스에서 FEC 인코딩 프로세스와 원본 패킷 복구 프로세스는 모두 많은 계산(computation)을 요구하며, 계산은 네트워크 디바이스의 중앙 처리 유닛(Central Processing Unit, CPU)에 의해 완료된다. 그러나, CPU의 계산 능력과 계산 레이트(rate)에는 한계가 있다. 빠른 인코딩 및 디코딩의 요건(requirement)을 충족하려면, 패킷 전송 프로세스에서 큰 처리량(throughput)의 요건을 충족하기 어렵다.
본 출원은 네트워크 디바이스가 패킷 전송 프로세스에서 큰 처리량의 요건을 만족시키면서 패킷 인코딩 및 디코딩 처리를 신속하게 수행할 수 있도록, 패킷 처리 방법 및 장치, 그리고 칩을 제공한다.
제1 측면에 따르면, 패킷 처리 방법이 제공되며, 상기 패킷 처리 방법은 프로세서 및 타깃 하드웨어 엔진을 포함하는 네트워크 디바이스에 적용된다. 상기 패킷 처리 방법은: 상기 프로세서가 처리될 제1 데이터 스트림에서 M개의 원본 패킷에 기반하여 제1 인코딩 태스크를 생성하는 것 - M은 양의 정수이고, 상기 제1 인코딩 태스크는 상기 M개의 원본 패킷을 인코딩하도록 지시하는 데 사용됨 - 을 포함한다. 상기 타깃 하드웨어 엔진은 상기 제1 인코딩 태스크에 기반하여 상기 M개의 원본 패킷에 대해 순방향 오류 정정(forward error correction, FEC) 인코딩을 수행하여 R개의 중복 패킷을 획득하고, 여기서 R은 양의 정수이다.
이 방법에서, FEC 인코딩은 프로세서가 아닌 네트워크 디바이스의 타깃 하드웨어 엔진에서 제1 데이터 스트림의 M개의 원본 패킷에 대해 직접 수행된다. 따라서, CPU 오버헤드를 줄일 수 있고 네트워크 디바이스의 인코딩 효율성을 높일 수 있다. 이러한 방식으로 네트워크 디바이스는 패킷 전송 프로세스에서 큰 처리량의 요건을 쉽게 충족할 수 있다.
가능한 구현에서, 상기 프로세서가, 처리될 제1 데이터 스트림에서 M개의 원본 패킷에 기반하여 제1 인코딩 태스크를 생성하는 것 이후에, 상기 패킷 처리 방법은, 상기 프로세서가, 상기 제1 인코딩 태스크를 제1 타깃 송신 큐에 저장하는 것을 더 포함하며, 상기 제1 타깃 송신 큐는 상기 네트워크 디바이스의 처리될 데이터 스트림의 인코딩 태스크를 저장하는 데 사용되고, 상기 네트워크 디바이스의 처리될 데이터 스트림은 상기 제1 데이터 스트림을 포함한다. 상기 타깃 하드웨어 엔진은, 상기 제1 타깃 송신 큐로부터 상기 제1 인코딩 태스크를 읽는다.
가능한 구현에서, 상기 프로세서가, 상기 제1 인코딩 태스크를 제1 타깃 송신 큐에 저장하는 것은, 상기 프로세서가, 상기 제1 데이터 스트림의 우선순위에 기반하여 상기 제1 인코딩 태스크를 상기 제1 타깃 송신 큐에 추가하는 것을 포함하며, 상기 제1 타깃 송신 큐의 우선순위는 상기 제1 데이터 스트림의 우선순위와 같다.
가능한 구현에서, 상기 타깃 하드웨어 엔진이, 상기 제1 타깃 송신 큐로부터 상기 제1 인코딩 태스크를 읽는 것은, 상기 타깃 하드웨어 엔진이, 송신 큐의 우선순위 시퀀스에 기반하여 상기 송신 큐 각각에 인코딩 태스크가 있는지를 순차적으로 질의하는 것을 포함하며, 상기 송신 큐 각각은 하나의 우선순위에 대응한다. 상기 타깃 하드웨어 엔진이, 상기 송신 큐에서 상기 제1 타깃 송신 큐의 우선순위보다 높은 우선순위를 가지는 큐에 인코딩 태스크가 없을 때 상기 제1 타깃 송신 큐로부터 상기 제1 인코딩 태스크를 읽는다.
가능한 구현에서, 상기 제1 타깃 송신 큐가 상기 네트워크 디바이스의 메모리, 상기 프로세서 및 상기 타깃 하드웨어 엔진 중 어느 하나에 위치된다.
가능한 구현에서, 상기 프로세서가, 처리될 제1 데이터 스트림에서 저장된 M개의 원본 패킷에 기반하여 제1 인코딩 태스크를 생성하는 것 이전에, 상기 패킷 처리 방법은, 상기 네트워크 디바이스가, 상기 제1 데이터 스트림의 수신된 원본 패킷을 상기 네트워크 디바이스의 메모리에 저장하는 것을 더 포함한다. 상기 네트워크 디바이스의 메모리에서 상기 제1 데이터 스트림의 인코딩되지 않은 원본 패킷의 수량이 M보다 크거나 같으면, 상기 프로세서는 상기 제1 데이터 스트림의 인코딩되지 않은 원본 패킷으로부터 상기 M개의 원본 패킷을 획득한다.
가능한 구현에서, 상기 제1 인코딩 태스크는 상기 M개의 원본 패킷의 저장 주소(storage address)를 포함하고; 또는 상기 제1 인코딩 태스크는 상기 M개의 원본 패킷의 저장 주소 및 상기 제1 데이터 스트림의 우선순위를 포함하며; 또는 상기 제1 인코딩 태스크는 상기 M개의 원본 패킷을 포함하고; 또는 상기 제1 인코딩 태스크는 상기 M개의 원본 패킷 및 상기 제1 데이터 스트림의 우선순위를 포함한다.
제2 측면에 따르면, 패킷 처리 방법이 제공되며, 상기 패킷 처리 방법은 프로세서 및 타깃 하드웨어 엔진을 포함하는 네트워크 디바이스에 적용된다. 상기 패킷 처리 방법은, 상기 프로세서가, 수신된 제1 데이터 스트림으로부터 제1 FEC 패킷 그룹을 획득하는 것을 포함하며, 상기 제1 FEC 패킷 그룹에서 모든 FEC 패킷은 동일한 FEC 패킷 헤더를 갖고, 상기 FEC 패킷 헤더는 FEC-인코딩 원본 패킷 수량 M을 포함한다. 상기 제1 FEC 패킷 그룹의 원본 패킷의 수량이 상기 원본 패킷 수량 M보다 적을 때, 상기 프로세서는 상기 제1 FEC 패킷 그룹에 기반하여 제1 디코딩 태스크를 생성하며, 상기 제1 디코딩 태스크는 상기 제1 FEC 패킷 그룹을 디코딩하도록 지시하는 데 사용된다. 상기 타깃 하드웨어 엔진은 상기 제1 디코딩 태스크에 기반하여 상기 제1 FEC 패킷 그룹의 원본 패킷 및 상기 원본 패킷의 중복 패킷에 대해 FEC 디코딩을 수행하여, 상기 제1 FEC 패킷 그룹에서 손실된 원본 패킷을 획득한다.
이 방법에서, FEC 디코딩은 CPU에서가 아닌 네트워크 디바이스의 타깃 하드웨어 엔진에서 제1 FEC 패킷 그룹에서 손실되지 않은 FEC 패킷에 대해 직접 수행된다. 따라서, CPU 오버헤드를 줄일 수 있고, 네트워크 디바이스의 디코딩 효율성을 향상시킬 수 있다. 이러한 방식으로 네트워크 디바이스는 패킷 전송 프로세스에서 큰 처리량의 요건을 쉽게 충족할 수 있다.
가능한 구현에서, 상기 프로세서가, 상기 제1 FEC 패킷 그룹에 기반하여 제1 디코딩 태스크를 생성하는 것 이후에, 상기 패킷 처리 방법은, 상기 프로세서가, 상기 제1 디코딩 태스크를 제2 타깃 송신 큐에 저장하는 것을 더 포함하며, 상기 제2 타깃 송신 큐는 상기 네트워크 디바이스의 처리될 데이터 스트림의 디코딩 태스크를 저장하는 데 사용되고, 상기 네트워크 디바이스의 처리될 데이터 스트림은 상기 제1 데이터 스트림을 포함한다. 상기 타깃 하드웨어 엔진은 상기 제2 타깃 송신 큐로부터 상기 제1 디코딩 태스크를 읽는다.
가능한 구현에서, 상기 프로세서가, 상기 제1 디코딩 태스크를 제2 타깃 송신 큐에 저장하는 것은, 상기 프로세서가 상기 제1 데이터 스트림의 우선순위에 기반하여 상기 제1 디코딩 태스크를 상기 제2 타깃 송신 큐에 추가하는 것을 포함하며, 상기 제2 타깃 송신 큐의 우선순위는 상기 제1 데이터 스트림의 우선순위와 같다.
가능한 구현에서, 상기 타깃 하드웨어 엔진이, 상기 제2 타깃 송신 큐로부터 상기 제1 디코딩 태스크를 읽는 것은, 상기 타깃 하드웨어 엔진이, 송신 큐의 우선순위 시퀀스에 기반하여 상기 송신 큐 각각에 디코딩 태스크가 있는지를 순차적으로 질의하는 것을 포함하며, 상기 송신 큐 각각은 하나의 우선순위에 대응한다. 상기 타깃 하드웨어 엔진은, 상기 송신 큐에서 상기 제2 타깃 송신 큐의 우선순위보다 높은 우선순위를 가지는 큐에 다른 디코딩 태스크가 없을 때 상기 제2 타깃 송신 큐로부터 상기 제1 디코딩 태스크를 읽는다.
가능한 구현에서, 상기 제2 타깃 송신 큐가 상기 네트워크 디바이스의 메모리, 상기 프로세서 및 상기 타깃 하드웨어 엔진 중 어느 하나에 위치된다.
가능한 구현에서, 상기 제1 디코딩 태스크는 상기 제1 FEC 패킷 그룹의 저장 주소를 포함하고; 또는 상기 제1 디코딩 태스크는 상기 제1 FEC 패킷 그룹의 저장 주소 및 상기 제1 데이터 스트림의 우선순위를 포함하며; 또는 상기 제1 디코딩 태스크는 상기 제1 FEC 패킷 그룹을 포함하고; 또는 상기 제1 디코딩 태스크는 상기 제1 FEC 패킷 그룹 및 상기 제1 데이터 스트림의 우선순위를 포함한다.
제3 측면에 따르면, 패킷 처리 장치가 제공되며, 상기 패킷 처리 장치는 전술한 패킷 처리 방법을 수행하도록 구성된다. 구체적으로, 상기 패킷 처리 장치는 제1 측면 또는 제1 측면의 임의의 선택적 방식에서 제공되는 패킷 처리 방법을 수행하도록 구성된 기능 모듈을 포함한다.
제4 측면에 따르면, 패킷 처리 장치가 제공되며, 상기 패킷 처리 장치는 전술한 패킷 처리 방법을 수행하도록 구성된다. 구체적으로, 상기 패킷 처리 장치는 제2 측면 또는 제2 측면의 임의의 선택적 방식에서 제공되는 패킷 처리 방법을 수행하도록 구성된 기능 모듈을 포함한다.
제5 측면에 따르면, 칩이 제공되고, 상기 칩은 프로세서 및 타깃 하드웨어 엔진을 포함한다. 상기 프로세서는 제1 측면 또는 제1 측면의 임의의 선택적 방식에서 제공되는 패킷 처리 방법을 구현하도록 구성된 프로세서이고, 상기 타깃 하드웨어 엔진은 제1 측면 또는 제1 측면의 임의의 선택적 방식에서 제공되는 패킷 처리 방법을 구현하도록 구성된 타깃 하드웨어 엔진이다.
제6 측면에 따르면, 칩이 제공되고, 상기 칩은 프로세서 및 타깃 하드웨어 엔진을 포함한다. 상기 프로세서는 제2 측면 또는 제2 측면의 임의의 선택적 방식에서 제공되는 패킷 처리 방법을 구현하도록 구성된 프로세서이고, 상기 타깃 하드웨어 엔진은 제2 측면 또는 제2 측면의 임의의 선택적 방식에서 제공되는 패킷 처리 방법을 구현하도록 구성된 타깃 하드웨어 엔진이다.
본 출원의 실시예에서의 기술적 솔루션을 보다 명확하게 설명하기 위해, 이하에서는 실시예를 설명하기 위한 첨부 도면에 대해 간략하게 설명한다. 다음 설명에서 첨부된 도면은 단지 본 출원의 일부 실시예를 도시한 것이며, 당업자는 창의적인 노력 없이 이들 첨부된 도면으로부터 다른 첨부된 도면을 추가로 도출할 수 있음이 명백하다.
도 1은 본 출원의 실시예에 따른 FEC 인코딩 계산 프로세스의 개략도이다.
도 2는 본 출원의 실시예에 따른 FEC 디코딩 계산 프로세스의 개략도이다.
도 3은 본 출원의 실시예에 따른 패킷 전송 시스템의 개략도이다.
도 4는 본 출원의 실시예에 따른 패킷 처리 장치의 구조의 개략도이다.
도 5는 본 출원의 실시예에 따른 패킷 처리 장치의 구조의 개략도이다.
도 6은 본 출원의 실시예에 따른 타깃 하드웨어 엔진의 개략도이다.
도 7은 본 출원의 실시예에 따른 패킷 처리 방법의 흐름도이다.
도 8a 및 도 8b는 본 출원의 실시예에 따른 패킷 처리 방법의 흐름도이다.
도 9는 본 출원의 실시예에 따른 네트워크 디바이스에서 내부 상호작용 절차의 개략도이다.
도 10은 본 출원의 실시예에 따른 FEC 패킷의 개략도이다.
도 11은 본 출원의 실시예에 따른 FEC 인코딩의 흐름도이다.
도 12a 및 도 12b는 본 출원의 실시예에 따른 패킷 처리 방법의 흐름도이다.
도 13은 본 출원의 실시예에 따른 FEC 디코딩의 흐름도이다.
본 출원의 목적, 기술적 솔루션 및 이점을 보다 명확하게 하기 위해, 이하에서는 첨부된 도면을 참조하여 본 출원의 구현을 상세히 설명한다.
본 출원의 구현 프로세스를 쉽게 이해할 수 있도록, 도 1에 도시된 본 출원의 실시예에 따른 FEC 인코딩 계산 프로세스의 개략도를 참조하며, FEC 인코딩은 다음과 같이 설명된다. FEC 인코딩 프로세스에서 사용되는 파라미터는 인코딩 파라미터이다. 인코딩 파라미터는 원본 패킷 수량 M, 중복 패킷 수량 R 및 타깃 크기 L을 포함하며, 여기서 M과 R은 모두 양의 정수이고, L은 0보다 큰 값이며, 원본 패킷 수량 M은 인코딩될(to-be-encoded) 원본 패킷의 수량이고, 중복 패킷 수량 R은 M개의 원본 패킷에 대해 FEC 인코딩이 수행된 후 획득된 중복 패킷의 수량이다. M개의 원본 패킷의 크기가 상이하기 때문에, M개의 원본 패킷을 인코딩하여 중복 패킷을 생성하는 프로세스에서, 제1 네트워크 디바이스는 먼저 M개의 원본 패킷에 기반하여 패딩(padding) 처리를 수행하여, M개의 동일 길이 패킷(equal-length packet)을 획득하며, 동일 길이 패킷 각각은 하나의 원본 패킷이 패딩된 후 획득된 패킷이다. 동일 길이 패킷 각각의 크기와 중복 패킷 각각의 크기는 모두 타깃 크기 L이며, 타깃 크기 L은 M개의 원본 패킷 중 가장 큰 원본 패킷의 크기일 수 있다. 이 경우, M개의 원본 패킷 중 가장 큰 패킷은 패딩될 필요가 없으며, 동일 길이 패킷으로 간주될 수 있다. 그런 다음, 제1 네트워크 디바이스는 먼저 M개의 동일 길이 패킷을 사용하여 M×L 인코딩될 행렬을 형성할 수 있으며, 여기서 인코딩될 행렬의 각 행은 하나의 동일 길이 패킷이다. 예를 들어, M=4이고, 4개의 동일 길이 패킷, 즉 M0 내지 M3이 도 1에 도시되어 있다. 이 경우, 인코딩될 행렬은 동일 길이 패킷 M0 내지 동일 길이 패킷 M3에 의해 형성된다. 제1 네트워크 디바이스는 (M+R)×M 생성 행렬(generator matrix)을 구성하며, 여기서 생성 행렬은 제1 부분행렬(submatrix)과 제2 부분행렬을 포함하고, 제1 부분행렬은 M×M 단위 행렬(identity matrix)이고, 제2 부분행렬은 R×M 코시(Cauchy) 행렬이다.
제2 부분행렬의 i번째 행과 j번째 열의 엘리먼트는
Figure pct00001
이다.
Figure pct00002
Figure pct00003
는 갈루아 필드(galois field, GF)(2w)의 엘리먼트이며, 여기서
Figure pct00004
Figure pct00005
는 0보다 크거나 같은 정수이고, w는 8일 수 있다. 예를 들어, 생성 행렬이 도 1에 도시되어 있다. 네트워크 디바이스는 생성 행렬 및 인코딩될 행렬에 대해 곱셈 계산을 수행하여 (M+R)×L 인코딩 행렬을 획득하며, 여기서 인코딩 행렬은 인코딩될 행렬 및 R×L 체크(check) 행렬을 포함하고, 체크 행렬의 각 행은 하나의 중복 패킷이다. 예를 들어, 도 1에서, R = 2일 때, 중복 패킷은 R0 및 R1이다.
R개의 중복 패킷을 획득한 후, 제1 네트워크 디바이스는 동일한 FEC 패킷 헤더를 M개의 원본 패킷과 R개의 중복 패킷에 추가하여, M개의 원본 패킷과 R개의 중복 패킷을 FEC 패킷 그룹으로 캡슐화하고, FEC 패킷 그룹을 제2 네트워크 디바이스에 송신한다. 인코딩 행렬의 FEC 패킷 그룹의 임의의 동일 길이 패킷이 전송 프로세스에서 손실될 때, 제2 네트워크 디바이스는 추가로, 디코딩 프로세스를 사용하여 손실된 동일 길이 패킷을 복구할 수 있다. 도 2에 도시된 본 출원의 실시예에 따른 FEC 디코딩 계산 프로세스의 개략도를 참조하여, FEC 디코딩을 설명하면 다음과 같다. 인코딩 행렬에서 동일 길이 패킷 M2 및 M3가 손실될 때, 제2 네트워크 디바이스는 손실되지 않은 동일 길이 패킷 M0 및 M1과 중복 패킷 R0 및 R1을 사용하여 복구 행렬(recovery matrix)을 형성할 수 있다. 그런 다음, 제2 네트워크 디바이스는 타깃 체크 행렬을 구성하며, 타깃 체크 행렬은 제3 부분행렬 및 제2 부분행렬을 포함한다. 2개의 동일 길이 패킷이 손실되기 때문에, 제3 부분행렬은 2×M 단위 행렬이다. 제2 네트워크 디바이스는 타깃 체크 행렬의 역행렬에 복구 행렬을 곱하여 인코딩될 행렬을 획득하고, 인코딩될 행렬로부터 손실된 동일 길이 패킷 M2 및 M3을 획득할 수 있다.
도 3은 본 출원의 실시예에 따른 패킷 전송 시스템의 개략도이다. 도 3을 참조한다. 패킷 전송 시스템은 제1 단말(301), 제1 네트워크 디바이스(302), 제2 네트워크 디바이스(303) 및 제2 단말(304)을 포함한다. 제1 단말(301)은 데이터 스트림을 생성하고, 데이터 스트림을 제1 네트워크 디바이스(302)에 송신하도록 구성된다. 제1 네트워크 디바이스(302)는 데이터 스트림 내의 패킷에 대해 FEC 인코딩을 수행하고, FEC 패킷을 포함하는 인코딩 스트림을 제2 네트워크 디바이스(303)에 송신할 수 있다. 제2 네트워크 디바이스(303)는 인코딩 스트림에서 손실되지 않은 FEC 패킷을 디코딩하여 손실된 원본 패킷을 복구하고, 복구된 원본 패킷과 손실되지 않은 원본 패킷을 사용하여 원본 데이터 스트림을 형성하며, 데이터 스트림을 제2 단말(304)에 송신한다. 제1 단말(301) 및 제2 단말(302)은 각각 모바일폰, 노트북 컴퓨터 등일 수 있고; 제1 네트워크 디바이스(302) 및 제2 네트워크 디바이스(303)는 각각 컴퓨터 디바이스, 예를 들어 라우터 또는 스위치일 수 있으며; 데이터 스트림은 비디오 스트림일 수 있거나, 또는 텍스트 데이터를 포함하는 텍스트 스트림일 수 있다. 데이터 스트림의 유형은 본 출원의 이 실시예에서 특별히 제한되지 않는다.
예를 들어 비디오 스트림을 사용하는 개략도에서, 제1 단말(301)이 복수의 제2 단말(302)과 비디오 세션을 수행할 때, 제1 단말(301)은 비디오 스트림(즉, 데이터 스트림)을 형성하기 위해, 비디오를 구성하는 데 사용되는 원본 패킷을 제1 네트워크 디바이스(302)에 송신한다. 제1 네트워크 디바이스(302)는 비디오 스트림의 원본 패킷에 대해 FEC 인코딩을 수행하여 중복 패킷을 획득하고, 원본 패킷 및 중복 패킷을 FEC 패킷으로 캡슐화하여 인코딩 스트림을 획득하며, 인코딩 스트림을 제2 네트워크 디바이스(303)에 송신한다. 인코딩 스트림에서 각각의 FEC 패킷 그룹을 획득한 후, 제2 네트워크 디바이스(303)는 각 FEC 패킷 그룹의 FEC 패킷 헤더에 기반하여 각 FEC 패킷 그룹에서 원본 패킷이 손실되었는지를 판정한다. 원본 패킷이 손실되면, 제2 네트워크 디바이스(303)는 원본 패킷이 손실된 FEC 패킷 그룹을 디코딩하여 손실된 원본 패킷을 복구하고, 복구된 원본 패킷과 손실되지 않은 원본 패킷을 사용하여 비디오 스트림을 형성하며, 비디오 스트림을 복수의 제2 단말(304)에 송신한다. 비디오 스트림을 수신한 후, 제2 단말(304) 각각은 비디오를 재생하며, 이에 따라 복수의 단말 간의 비디오 세션을 구현한다.
일부 가능한 구현에서, 제1 단말(301)은 제1 네트워크 디바이스의 기능을 더 가질 수 있다. 도 4는 본 출원의 실시예에 따른 패킷 처리 장치의 구조의 개략도이다. 장치(400)는: 처리될 제1 데이터 스트림에서 M개의 원본 패킷에 기반하여 제1 인코딩 태스크를 생성하도록 구성된 프로세서(401) - 여기서 M은 양의 정수이고, 제1 인코딩 태스크는 M개의 원본 패킷을 인코딩하도록 지시하는 데 사용됨 -; 및 제1 인코딩 태스크에 기반하여 M개의 원본 패킷에 대해 순방향 오류 정정(forward error correction, FEC) 인코딩을 수행하여 R개의 중복 패킷을 획득하도록 구성된 타깃 하드웨어 엔진(402) - 여기서, R은 양의 정수임 -을 포함한다.
선택적으로, 프로세서(401)는 추가로, 제1 인코딩 태스크를 제1 타깃 송신 큐에 저장하도록 구성되며, 여기서 제1 타깃 송신 큐는 장치의 처리될 데이터 스트림의 인코딩 태스크를 저장하는 데 사용되고, 장치의 처리될 데이터 스트림은 제1 데이터 스트림을 포함한다.
타깃 하드웨어 엔진은 추가로, 제1 타깃 송신 큐로부터 제1 인코딩 태스크를 읽도록 구성된다.
선택적으로, 프로세서(401)는 제1 데이터 스트림의 우선순위에 기반하여 제1 제1 인코딩 태스크를 타깃 송신 큐에 추가하도록 구성되며, 여기서 제1 타깃 송신 큐의 우선순위는 제1 데이터 스트림의 우선순위와 같다.
선택적으로, 타깃 하드웨어 엔진(402)은: 송신 큐의 우선순위 시퀀스에 기반하여, 송신 큐 각각에 인코딩 태스크가 있는지를 순차적으로 질의하고 - 여기서 송신 큐 각각은 하나의 우선순위에 대응함 -; 그리고 송신 큐에서 제1 타깃 송신 큐의 우선순위보다 높은 우선순위를 가지는 큐에 인코딩 태스크가 없을 때 제1 타깃 송신 큐로부터 제1 인코딩 태스크를 읽도록 구성된다.
선택적으로, 장치(400)는 메모리(403)를 더 포함하고, 제1 타깃 송신 큐는 네트워크 디바이스의 메모리, 프로세서 및 타깃 하드웨어 엔진 중 어느 하나에 위치된다.
선택적으로, 장치(400)는 메모리(403)를 더 포함한다.
메모리(403)는 제1 데이터 스트림의 수신된 원본 패킷을 저장하도록 구성된다.
프로세서(401)는 추가로: 메모리에서 제1 데이터 스트림의 인코딩되지 않은 원본 패킷의 수량이 M보다 크거나 같으면, 제1 데이터 스트림의 인코딩되지 않은 원본 패킷으로부터 M개의 원본 패킷을 획득하고, 처리될 제1 데이터 스트림의 저장된 M개의 원본 패킷에 기반하여 인코딩 태스크를 생성하는 단계를 수행하도록 구성된다.
프로세서(401)는 범용 프로세서, 예를 들면, CPU, 네트워크 프로세서(network processor, NP), 또는 CPU와 NP의 조합일 수 있다. 프로세서는 하드웨어 칩을 더 포함할 수 있다. 하드웨어 칩은 애플리케이션 특정 통합 회로(application-specific integrated circuit, ASIC), 프로그램 가능 로직 디바이스(programmable logic device, PLD), 또는 이들의 조합일 수 있다. PLD는 복합 프로그램 가능 로직 디바이스(complex programmable logic device, CPLD), 필드 프로그램 가능 게이트 어레이(field-programmable gate array, FPGA), 일반 어레이 로직(generic array logic, GAL), 또는 이들의 임의의 조합일 수 있다.
메모리(403)는 휘발성 메모리(volatile memory), 예를 들면, 랜덤 액세스 메모리(random-access memory, RAM)를 포함할 수 있다. 메모리는 다르게는 비휘발성 메모리(non-volatile memory), 예를 들어 플래시 메모리(flash memory), 하드 디스크 드라이브(hard disk drive, HDD) 및 솔리드 스테이트 드라이브(solid-state drive, SSD)를 포함할 수 있다. 메모리는 다르게는 전술한 유형의 메모리의 임의의 조합을 포함할 수 있다.
선택적으로, 제1 인코딩 태스크는 M개의 원본 패킷의 저장 주소를 포함하고; 또는 제1 인코딩 태스크는 M개의 원본 패킷의 저장 주소 및 제1 데이터 스트림의 우선순위를 포함하며; 또는 제1 인코딩 태스크는 M개의 원본 패킷을 포함하고; 또는 제1 인코딩 태스크는 M개의 원본 패킷 및 제1 데이터 스트림의 우선순위를 포함한다.
일부 가능한 구현에서, 도 4에 도시된 패킷 처리 장치의 기능은 다르게는 칩을 이용하여 구현될 수 있으며, 칩은 도 4의 프로세서(401) 및 도 4의 타깃 처리 엔진(target processing engine)(402)을 포함할 수 있다.
일부 가능한 구현에서, 제2 단말(304)은 제2 네트워크 디바이스(303)의 기능을 더 가질 수 있다. 도 5는 본 출원의 실시예에 따른 패킷 처리 장치의 구조의 개략도이다. 장치(500)는 프로세서(501) 및 타깃 하드웨어 엔진(502)을 포함한다.
프로세서(501)는 수신된 제1 데이터 스트림으로부터 제1 FEC 패킷 그룹을 획득하고 - 제1 FEC 패킷 그룹의 모든 FEC 패킷의 FEC 패킷 헤더는 동일하고, FEC 패킷 헤더는 FEC-인코딩 원본 패킷 수량 M을 포함함 -; 제1 FEC 패킷 그룹의 원본 패킷의 수량이 원본 패킷 수량 M보다 작을 때, 제1 FEC 패킷 그룹에 기반하여 제1 디코딩 태스크를 생성하도록 - 제1 디코딩 태스크는 제1 FEC 패킷 그룹을 디코딩하도록 지시하는 데 사용됨 - 구성된다.
타깃 하드웨어 엔진(502)은 제1 디코딩 태스크에 기반하여 제1 FEC 패킷 그룹의 원본 패킷 및 원본 패킷의 중복 패킷에 대해 FEC 디코딩을 수행하여, 제1 FEC 패킷 그룹에서 손실된 원본 패킷을 획득하도록 구성된다.
선택적으로, 프로세서(501)는 추가로, 제1 디코딩 태스크를 제2 타깃 송신 큐에 저장하도록 구성되며, 제2 타깃 송신 큐는 장치의 처리될 데이터 스트림의 디코딩 태스크를 저장하는 데 사용되며, 장치의 처리될 데이터 스트림은 제1 데이터 스트림을 포함한다.
타깃 하드웨어 엔진(502)은 추가로, 제2 타깃 송신 큐로부터 제1 디코딩 태스크를 읽도록 구성된다.
선택적으로, 프로세서(501)는 제1 데이터 스트림의 우선순위에 기반하여 제1 디코딩 태스크를 제2 타깃 송신 큐에 추가하도록 구성되며, 여기서 제2 타깃 송신 큐의 우선순위는 제1 데이터 스트림의 우선순위와 같다.
선택적으로, 타깃 하드웨어 엔진(502)은: 송신 큐에서 우선순위 시퀀스에 기반하여, 송신 큐 각각에 디코딩 태스크가 있는지를 순차적으로 질의하고 - 송신 큐 각각이 하나의 우선순위에 대응함 -; 그리고 송신 큐에서 제2 타깃 송신 큐의 우선순위보다 높은 우선순위를 가지는 큐에 다른 디코딩 태스크가 없을 때 제2 타깃 송신 큐로부터 제1 디코딩 태스크를 읽도록 구성된다.
선택적으로, 장치 디바이스는 메모리를 더 포함하고, 제2 타깃 송신 큐는 메모리, 프로세서, 및 타깃 하드웨어 엔진 중 어느 하나에 위치된다.
선택적으로, 제1 디코딩 태스크는 제1 FEC 패킷 그룹에서 손실되지 않은 FEC 패킷의 저장 주소를 포함하고; 또는 제1 디코딩 태스크는 제1 FEC 패킷 그룹에서 손실되지 않은 FEC 패킷의 저장 주소 및 제1 데이터 스트림의 우선순위를 포함하며; 또는 제1 디코딩 태스크는 제1 FEC 패킷 그룹을 포함하고; 또는 제1 디코딩 태스크는 제1 FEC 패킷 그룹 및 제1 데이터 스트림의 우선순위를 포함한다.
일부 가능한 구현에서, 도 5에 도시된 패킷 처리 장치의 기능은 다르게는 칩을 이용하여 구현될 수 있으며, 칩은 도 5의 프로세서(501) 및 도 5의 타깃 처리 엔진(502)을 포함할 수 있다.
설명의 편의를 위해, 제1 네트워크 디바이스(302) 및 제2 네트워크 디바이스(303)는 각각 컴퓨팅 디바이스로 표시된다. 컴퓨팅 디바이스 각각은 타깃 하드웨어 엔진을 포함할 수 있고, 타깃 하드웨어 엔진은 인코딩 및 디코딩 계산을 수행하도록 구성된다. 본 출원의 실시예는 타깃 하드웨어 엔진의 개략도를 제공한다. 도 6의 타깃 하드웨어 엔진(600)을 참조한다. 타깃 하드웨어 엔진(600)은 컨트롤러(601), 버퍼 유닛(602), 데이터 처리 유닛(603), 행렬 생성기(604), 인코딩 및 디코딩 유닛(605)을 포함한다. 컨트롤러(601)는 컴퓨팅 디바이스의 CPU에 의해 송신되는 인코딩될 및 디코딩될 패킷(to-be-encoded and to-be-decoded packets)의 인코딩 및 디코딩 파라미터와 저장 주소를 수신하고, 대응하는 데이터 처리 정책, 인코딩 및 디코딩 모델의 모델 파라미터, 및 인코딩 및 디코딩 파라미터에 기반한 행렬 모델의 모델 파라미터를 결정하도록 구성된다. 인코딩 및 디코딩 파라미터는 인코딩 파라미터 또는 디코딩 파라미터를 포함하고, 디코딩 파라미터는 FEC 패킷 헤더의 콘텐츠일 수 있다. 인코딩될 및 디코딩될 패킷은 M개의 원본 패킷이거나 손실되지 않은 FEC 패킷일 수 있다. 인코딩 및 디코딩 모델은 인코딩 모델 또는 디코딩 모델을 포함할 수 있다. 인코딩 모델의 모델 파라미터는 원본 패킷 수량 M과 타깃 크기 L이다. 디코딩 모델의 모델 파라미터는 손실된 원본 FEC 패킷 수량 F 및 타깃 크기 L을 포함하며, 여기서 F는 0보다 크고 R보다 작거나 같다. 행렬 모델의 모델 파라미터는 생성 행렬의 모델 파라미터 또는 타깃 체크 행렬의 모델 파라미터를 포함한다. 생성 행렬의 모델 파라미터는 원본 패킷 수량 M, 중복 패킷 수량 R 및 타깃 크기 L을 포함한다. 타깃 체크 행렬의 모델 파라미터는 손실된 원본 FEC 패킷 수량 F, 중복 패킷 수량 R 및 타깃 크기 L을 포함한다.
컨트롤러(601)는 추가로, 수신된 인코딩될 및 디코딩될 패킷의 저장 주소에 기반하여 컴퓨팅 디바이스의 메모리로부터 인코딩될 및 디코딩될 패킷을 획득하고, 인코딩될 및 디코딩될 패킷을 버퍼 유닛(602)에 저장하도록 구성된다. 컨트롤러(601)는 추가로, 데이터 처리 유닛(603)이 인코딩될 및 디코딩될 패킷 그리고 인코딩 및 디코딩 모델의 모델 파라미터에 기반하여 그리고 데이터 처리 정책에 따라 인코딩될 행렬 또는 복구 행렬을 생성하도록, 인코딩 및 디코딩 모델의 모델 파라미터와 데이터 처리 정책을 데이터 처리 유닛(603)에 송신하고; 그리고 인코딩될 행렬 또는 복구 행렬을 인코딩 및 디코딩 유닛(605)에 송신한다.
컨트롤러(601)는 추가로, 행렬 모델의 모델 파라미터를 행렬 생성기(604)에 송신하도록 구성되므로, 행렬 생성기(604)가 행렬 모델의 모델 파라미터에 기반하여 생성 행렬 또는 타깃 체크 행렬을 구성하고, 생성 행렬 또는 타깃 체크 행렬을 인코딩 및 디코딩 유닛(605)에 송신한다.
인코딩 및 디코딩 유닛(605)은: 수신된 인코딩될 행렬 또는 수신된 복구 행렬 그리고 대응하는 생성 행렬 또는 대응하는 타깃 체크 행렬에 대해 인코딩 및 디코딩 계산을 수행하여, 중복 패킷 또는 손실된 원본 FEC 패킷을 획득하고(자세한 내용은 도 1 및 도 2에 도시된 인코딩 계산 프로세스 및 디코딩 계산 프로세스를 참조); 중복 패킷 또는 손실된 원본 FEC 패킷을 버퍼 유닛(602)에 송신하도록 구성된다. 버퍼 유닛(602)은 중복 패킷 또는 복구된 패킷을 컴퓨팅 디바이스의 메모리 또는 프로세서에 송신한다.
타깃 하드웨어 엔진의 인코딩 및 디코딩 유닛(605)은 FEC 인코딩 로직(logic)과 FEC 디코딩 로직을 다중화할 수 있다. FEC 인코딩이 수행되어야 할 때, 인코딩 및 디코딩 유닛(605)은 FEC 인코딩 로직에 기반하여 생성 행렬 및 인코딩될 행렬에 대해 FEC 인코딩을 수행한다. FEC 디코딩이 수행되어야 할 때, 인코딩 및 디코딩 유닛(605)은 FEC 디코딩 로직에 기반하여 타깃 체크 행렬 및 복구 행렬에 대해 FEC 디코딩을 수행한다. 일부 가능한 구현에서, 인코딩 및 디코딩 유닛(605)은 인코딩 서브유닛 및 디코딩 서브유닛을 포함할 수 있다. 인코딩 서브유닛은 FEC 인코딩 로직에 기반하여 생성 행렬 및 인코딩될 행렬에 대해 FEC 인코딩을 수행할 수 있고, 디코딩 서브유닛은 FEC 디코딩 로직에 기반하여 타깃 체크 행렬 및 복구 행렬에 대해 FEC 디코딩을 수행할 수 있다.
컴퓨팅 디바이스의 인코딩 프로세스 및 디코딩 프로세스를 추가로 설명하기 위해, 도 7에 도시된 본 출원의 실시예에 따른 패킷 처리 방법의 흐름도를 참조한다. 컴퓨팅 디바이스는 기가비트 이더넷(gigabit Ethernet, GE) 네트워크 포트 또는 10기가비트 이더넷(ten-gigabit Ethernet, GXE) 네트워크 포트를 통해 데이터 스트림의 패킷을 수신한다. GE/GXE 네트워크 포트는 수신된 패킷을 패킷 파싱 엔진(packet parse engine, PPE)에 송신한다. PPE는 패킷을 메모리에 저장하고, 사전에(preliminarily) 패킷을 파싱하여 패킷의 디스크립터(descriptor)를 획득하고, 트래픽 분할(traffic splitting)을 통해 패킷의 저장 주소를 운반하는 알림(notification) 메시지를 네트워크 프로세서(network processor, NP) 엔진에 송신한다. NP 엔진은 패킷을 인코딩해야 하는지를 판정하기 위해 메모리의 패킷에 대해 심층 파싱(deep parsing)을 수행할 수 있다. 패킷을 인코딩해야 할 때, NP 엔진은 추가로 알림 메시지를 CPU에 포워딩할 수 있다. CPU의 프로토콜 스택은 알림 메시지를 사용자 데이터그램 프로토콜(user datagram protocol, UDP) 프록시에 송신한다. UDP 프록시가 수신한 알림 메시지의 수량이 특정 수량에 도달할 때, 이는 현재 기간(time period) 동안 현재 인코딩에 필요한 인코딩될 패킷이 메모리에 저장되어 있음을 지시하며, CPU는 인코딩 태스크를 FEC 소프트웨어 인터페이스를 통해 타깃 하드웨어 엔진에 전달한다. 타깃 하드웨어 엔진은 인코딩 태스크에서 운반되는 인코딩될 패킷의 저장 주소에 기반하여 메모리로부터 인코딩될 패킷을 획득하고, 중복 패킷을 생성하며, 중복 패킷을 메모리에 저장한다. 저장이 완료된 후, 타깃 하드웨어 엔진은 인코딩 태스크 완료 정보를 CPU의 FEC 소프트웨어 인터페이스에 보고한다. FEC 소프트웨어 인터페이스는 인코딩 태스크 완료 정보에서 운반되는 인코딩될 패킷의 저장 주소 및 중복 패킷의 저장 주소에 기반하여 메모리로부터 인코딩될 패킷 및 중복 패킷을 획득하고, FEC 패킷 헤더를 획득된 인코딩될 패킷과 중복 패킷에 추가하여, FEC 패킷을 생성한다. FEC 소프트웨어 인터페이스는 FEC 패킷을 트래픽 관리(traffic management, TM) 엔진에 송신하여, 인코딩이 수행된 후의 인코딩 스트림(즉, 데이터 스트림)을 형성한다. TM 엔진은 CPU 요건 또는 다른 하드웨어 엔진의 요건, 예를 들어, 서비스 품질(quality of service, QoS) 스케줄링, 트래픽 셰이핑(traffic shaping) 및 트래픽 통계 수집에 기반하여 인코딩 스트림을 관리한다. TM 엔진은 관리되는 인코딩 스트림을 PPE에 송신한다. PPE는 관리되는 인코딩 스트림을 GE/GXE 네트워크 포트로 포워딩하고, GE/GXE 네트워크 포트는 관리되는 인코딩 스트림을 출력한다. 일부 가능한 구현에서, 컴퓨팅 디바이스는 NP 엔진, PPE 및 TM 엔진을 포함하지 않으며; NP 엔진, PPE 및 TM 엔진의 작업(work)은 모두 하나의 프로세서 또는 CPU에서 완료될 수 있음을 유의해야 한다 다르게는, NP 엔진, PPE, TM 엔진 및 CPU의 작업을 하나의 프로세서에 의해 완료할 수 있다.
이상은 컴퓨팅 디바이스의 인코딩 프로세스를 설명한다. 컴퓨팅 디바이스의 디코딩 프로세스는 다음과 같이 설명된다. 컴퓨팅 디바이스의 메모리에 저장된 패킷이 FEC 패킷일 때, 패킷 헤더가 동일한 FEC 패킷 그룹의 원본 패킷들이 손실되면, CPU는 FEC 소프트웨어 인터페이스를 통해 디코딩 태스크를 타깃 하드웨어 엔진에 전달한다. 타깃 하드웨어 엔진은 디코딩 태스크에서 운반된 FEC 패킷 그룹의 저장 주소에 기반하여 메모리로부터 FEC 패킷 그룹을 획득하고, FEC 패킷 그룹에 기반하여 손실된 원본 패킷을 복구하며, 복구된 원본 패킷을 메모리에 저장한다. 저장이 완료된 후, 타깃 하드웨어 엔진은 디코딩 태스크 완료 정보를 CPU의 FEC 소프트웨어 인터페이스에 보고한다. FEC 소프트웨어 인터페이스는 디코딩 태스크 완료 정보에서 운반되는, 손실되지 않은 원본 패킷의 저장 주소와 복구된 원본 패킷의 저장 주소에 기반하여, 메모리로부터 원본 FEC 패킷 그룹에서 손실되지 않은 원본 패킷 및 복구된 원본 패킷을 획득하며, 획득한 원본 패킷을 사용하여 출력을 위한 데이터 스트림을 형성한다. CPU가 데이터 스트림을 출력하는 방식은 인코딩 스트림을 출력하는 방식과 유사하다. 여기서, CPU에 의해 데이터 스트림을 출력하는 방식은 본 출원의 이 실시예에서 다시 설명되지 않는다.
일부 가능한 구현에서, 프로토콜 스택, UDP 프록시 및 FEC 소프트웨어 인터페이스는 CPU에 배치되지 않고 NP 엔진에 배치될 수 있다. 이 경우, 인코딩 프로세스와 디코딩 프로세스에서 NP 엔진, 타깃 하드웨어 엔진, 메모리 간의 상호작용이 수행되어야 한다. CPU는 타깃 하드웨어 엔진 및 메모리와 상호 작용할 필요가 없다. 일부 가능한 구현에서, 인코딩 및 디코딩을 통해 인코딩 행렬 또는 인코딩될 행렬을 획득한 후, 타깃 하드웨어 엔진은 인코딩 행렬의 원본 패킷 및 중복 패킷을 FEC 패킷으로 직접 캡슐화하고, FEC 패킷을 네트워크 디바이스로 출력하며; 또는 인코딩될 행렬로부터 원본 패킷을 직접 획득하고, 원본 패킷을 네트워크 디바이스로 출력할 수 있다. 일부 가능한 구현에서, 타깃 하드웨어 엔진은 추가로, 인코딩 행렬 또는 인코딩될 행렬을 FEC 소프트웨어 인터페이스로 직접 송신할 수 있고, FEC 소프트웨어 인터페이스는 인코딩 행렬의 원본 패킷 및 중복 패킷을 FEC 패킷으로 캡슐화하고, FEC 패킷을 네트워크 디바이스로 출력한다. 다르게는, FEC 소프트웨어 인터페이스는 인코딩될 행렬로부터 원본 패킷을 획득하고, 원본 패킷을 네트워크 디바이스로 출력한다.
결론적으로, 네트워크 디바이스의 인코딩 프로세스는 다음과 같이 요약된다. 임의의 데이터 스트림을 획득한 후, 네트워크 디바이스는 임의의 데이터 스트림을 메모리에 저장할 수 있다. 임의의 데이터 스트림의 패킷이 인코딩될 패킷이면, 네트워크 디바이스의 프로세서는 복수의 인코딩될 패킷을 인코딩하는 데 사용되는 인코딩 태스크를 생성할 수 있고, 프로세서는 인코딩 태스크를 메모리로 전달할 수 있다. 네트워크 디바이스의 타깃 하드웨어 엔진은 메모리에서 인코딩 태스크를 읽고, 인코딩 태스크에 기반하여 메모리에 저장된 복수의 인코딩될 패킷에 대해 FEC 인코딩을 수행하여, 복수의 인코딩될 패킷의 중복 패킷을 획득하며, 그런 다음 중복 패킷을 메모리에 저장한다. 그런 다음, 프로세서는 메모리로부터 복수의 인코딩될 패킷 및 복수의 인코딩될 패킷의 중복 패킷을 획득하고, 획득된 패킷을 FEC 패킷으로 캡슐화할 수 있다. 처리 프로세스를 추가로 설명하기 위해, 도 8a 및 도 8b에 도시된 본 출원의 실시예에 따른 패킷 처리 방법의 흐름도를 참조한다. 제1 네트워크 디바이스는 프로세서 및 타깃 하드웨어 엔진을 포함할 수 있고, 방법의 절차는 다음의 단계(801 내지 812)를 포함할 수 있다.
801: 제1 네트워크 디바이스가 처리될 제1 데이터 스트림에서 M개의 원본 패킷을 획득한다.
제1 네트워크 디바이스는 복수의 데이터 스트림을 획득할 수 있다. 제1 데이터 스트림은 복수의 데이터 스트림 중 임의의 데이터 스트림이고, 제1 데이터 스트림은 복수의 패킷을 포함할 수 있다. 데이터 스트림은 비디오 데이터 스트림, 오디오 데이터 스트림, 텍스트 데이터 스트림 등일 수 있다. 제1 데이터 스트림의 유형은 본 출원의 이 실시예에서 특별히 제한되지 않는다.
M개의 원본 패킷은 제1 데이터 스트림에서 M개의 연속적인 원본 패킷이다. 제1 네트워크 디바이스는 M개의 원본 패킷을 매번 인코딩하고; 1회의 인코딩이 완료된 후 제1 데이터 스트림의 다른 M개의 원본 패킷을 인코딩할 수 있다. 일부 가능한 구현에서, 단계(801)는 단계(8011 및 8012)에 도시된 프로세스를 사용하여 구현될 수 있다.
단계(8011): 제1 네트워크 디바이스가 제1 데이터 스트림의 수신된 원본 패킷을 제1 네트워크 디바이스의 메모리에 저장한다.
제1 데이터 스트림에서 하나의 원본 패킷을 수신한 후 매번, 제1 네트워크 디바이스의 GE/GXE 네트워크 포트가 원본 패킷을 PPE에 송신한다. 원본 패킷을 수신한 후 매번, PPE는 원본 패킷을 메모리에 저장하고, 원본 패킷의 저장 주소를 기록한다.
단계(8012): 메모리에서 제1 데이터 스트림의 인코딩되지 않은 원본 패킷의 수량이 M과 같거나 크면, 프로세서는 제1 데이터 스트림의 인코딩되지 않은 원본 패킷으로부터 M개의 원본 패킷을 획득한다.
프로세서는 제1 네트워크 디바이스의 CPU 및 NP 엔진 중 적어도 하나를 포함할 수 있다. 인코딩할 때마다 이후에, 제1 네트워크 디바이스는 M개의 인코딩되지 않은 원본 패킷의 다음 그룹을 인코딩한다. 따라서, 제1 데이터 스트림의 원본 패킷에 대해, M개의 원본 패킷이 제1 네트워크 디바이스의 메모리에 신규로 버퍼링될 때마다, 신규로 버퍼링된 M개의 원본 패킷이 제1 데이터 스트림에서 다음에 인코딩될 M개의 원본 패킷으로 사용될 수 있다.
일부 가능한 구현에서, 제1 네트워크 디바이스는 추가로, 미리 설정된 지속기간(duration)을 설정할 수 있다. 제1 데이터 스트림의 원본 패킷에 대해, 하나의 미리 설정된 지속기간이 경과할 때마다 제1 네트워크 디바이스는 미리 설정된 지속기간 내에 신규로 저장된 원본 패킷을 다음에 인코딩될 원본 패킷으로 사용한다. 일부 가능한 구현에서, M의 값은 인코딩할 때마다 변할 수 있다. 예를 들어, 제1 네트워크 디바이스는 1개의 미리 설정된 지속기간이 경과한 후 5개의 원본 패킷을 획득하며, 이 경우 M은 5와 같으며; 그다음, 다음의 미리 설정된 지속기간이 경과한 후 제1 네트워크 디바이스는 4개의 원본 패킷을 신규로 획득하며, 이 경우 M은 4와 같다. 미리 설정된 지속기간은 본 출원의 이 실시예에서 특별히 제한되지 않는다.
PPE가 하나의 원본 패킷을 메모리에 저장한 후, PPE는 원본 패킷에 대응하는 저장 완료 메시지를 NP 엔진에 송신하며, 여기서 저장 완료 메시지는 제1 데이터 스트림의 스트림 식별자와 원본 패킷의 저장 주소를 운반할 수 있으며, 스트림 식별자는 제1 데이터 스트림의 이름 또는 번호일 수 있으며 그리고 원본 패킷이 속하는 데이터 스트림을 지시하는 데 사용된다. 일부 가능한 구현에서, 제1 네트워크 디바이스는 서비스 요건에 기반하여 각각의 수신된 데이터 스트림에 대해 대응하는 우선순위를 설정하고, 제1 네트워크 디바이스는 바람직하게는 우선순위가 더 높은 데이터 스트림을 처리할 수 있다. 이에 대응하여, 저장 완료 메시지는 추가로, 제1 데이터 스트림에 대응하는 우선순위를 운반할 수 있다. 이러한 방식으로, 제1 네트워크 디바이스의 각 모듈은 우선순위에 기반하여 대응하는 데이터 스트림의 원본 패킷을 처리할 수 있다. 사용자는 제1 네트워크 디바이스에 대한 우선순위 정보 테이블을 구성할 수 있으며, 여기서 우선순위 정보 테이블은 내림차순으로 복수의 우선순위를 포함하고, 우선순위 각각은 하나의 서비스 유형에 대응한다. 제1 데이터 스트림을 수신할 때, 제1 네트워크 디바이스는 제1 데이터 스트림의 원본 패킷에서 운반된 데이터에 기반하여 제1 데이터 스트림의 서비스 유형을 결정할 수 있고, 우선순위 정보 테이블로부터 제1 데이터 스트림의 서비스 유형에 대응하는 우선순위를 결정할 수 있으므로, 제1 네트워크 디바이스는 제1 데이터 스트림에 대한 대응하는 우선순위를 설정할 수 있다.
저장 완료 메시지를 수신한 후, NP 엔진은 저장 완료 메시지를 프로토콜 스택에 송신할 수 있다. 따라서, UDP 프록시는 프로토콜 스택으로부터 각각의 저장 완료 메시지를 수집할 수 있다. UDP 프록시에 의해 신규로 수집된 저장 완료 메시지의 수량이 M일 때, 신규로 수집된 M개의 저장 완료 메시지는 M개의 인코딩될 패킷이 메모리에 신규로 저장되었음을 지시할 수 있다. 따라서, UDP 프록시는 M개의 저장 완료 메시지에 대응하는 M개의 원본 패킷을 M개의 인코딩될 원본 패킷으로 사용할 수 있다.
802: 프로세서가 처리될 제1 데이터 스트림에서 M개의 원본 패킷에 기반하여 제1 인코딩 태스크를 생성하며, 여기서 M은 양의 정수이고, 제1 인코딩 태스크는 M개의 원본 패킷을 인코딩하도록 지시하는 데 사용된다.
단계(802)는 제1 네트워크 디바이스의 프로세서에서 FEC 소프트웨어 인터페이스에 의해 수행될 수 있다. UDP 프록시가 M개의 저장 완료 메시지를 수집할 때마다, UDP 프록시는 수집된 M개의 저장 완료 메시지를 프로세서의 FEC 소프트웨어 인터페이스에 송신할 수 있다. M개의 저장 완료 메시지를 수신한 후, FEC 소프트웨어 인터페이스는 단계(802)를 수행할 수 있다.
FEC 소프트웨어 인터페이스는 M개의 저장 완료 메시지로부터 M개의 원본 패킷의 저장 주소를 획득할 수 있으며, M개의 원본 패킷의 저장 주소는 M개의 원본 패킷 각각의 저장 주소를 포함한다. FEC 소프트웨어 인터페이스는 M개의 원본 패킷의 저장 주소 및 인코딩 파라미터에 기반하여 인코딩 태스크를 생성할 수 있으며, 여기서 인코딩 태스크는 M개의 원본 패킷의 저장 주소 및 인코딩 파라미터를 포함할 수 있으므로, 타깃 하드웨어 엔진은 저장 주소에 기반하여 메모리로부터 M개의 원본 패킷을 획득하고, 인코딩 파라미터에 기반하여 획득된 M개의 원본 패킷을 인코딩할 수 있다. 일부 가능한 구현에서, 제1 인코딩 태스크는 M개의 원본 패킷의 저장 주소를 포함하지 않으나 M개의 원본 패킷을 포함할 수 있으므로, 타깃 하드웨어 엔진은 제1 인코딩 태스크로부터 M개의 원본 패킷을 직접 획득할 수 있다. 제1 데이터 스트림이 우선순위를 가질 때, 제1 인코딩 태스크는 제1 데이터 스트림의 우선순위를 더 포함할 수 있다. 인코딩 태스크는 추가로, 각각의 패킷을 인코딩하도록 지시하는 데 사용되는 인코딩 식별자를 운반할 수 있다. 인코딩 식별자를 나타내는 방식은 본 출원의 이 실시예에서 특별히 제한되지 않는다.
인코딩 파라미터는 제1 네트워크 디바이스에 의해 미리 설정된 인코딩 파라미터일 수 있다. 제1 네트워크 디바이스는 제1 네트워크 디바이스가 인코딩을 수행할 때마다 인코딩 파라미터들을 사용할 수 있다. 물론, 제1 네트워크 디바이스는 패킷 전송 상태에 기반하여 인코딩 파라미터를 적절하게 조정할 수도 있다. 제1 네트워크 디바이스가 매번 동일한 인코딩 파라미터에 기반하여 인코딩을 수행할 때, 제1 패킷 수량은 인코딩 파라미터에서 원본 패킷 수량 M일 수 있다. 제1 네트워크 디바이스는 추가로, 현재 CPU 오버헤드 또는 타깃 하드웨어 엔진의 현재 컴퓨팅 능력에 기반하여, 인코딩 파라미터의 원본 패킷 수량 M을 동적으로 수정할 수 있다. 예를 들어, CPU 오버헤드가 상대적으로 작거나 타깃 하드웨어 엔진이 현재 충분한 컴퓨팅 능력을 가지고 있을 때, 제1 네트워크 디바이스는 적절하게 원본 패킷 수량을 증가시킬 수 있으며, 다시 말해서, 제1 네트워크 디바이스는 인코딩이 한 번 수행되는 패킷을 적절하게 증가시킬 수 있다. 반대로, 제1 네트워크 디바이스는 원본 패킷 수량을 적절하게 감소시킬 수 있으며, 다시 말해서, 제1 네트워크 디바이스는 인코딩이 한 번 수행되는 패킷을 적절하게 감소시킬 수 있다.
제1 네트워크 디바이스는 추가로, 현재 네트워크 패킷 손실률(packet loss rate)에 기반하여 모델 파라미터에서 중복 패킷 수량 R을 동적으로 조정할 수 있다. 예를 들어, 네트워크 패킷 손실률이 상대적으로 높을 때, 제1 네트워크 디바이스는 중복 패킷 수량 R을 적절하게 증가시킬 수 있으며, 다시 말해서, 제1 네트워크 디바이스는 하나의 인코딩 프로세스에서 생성된 중복 패킷의 수량을 적절히 증가시켜, 이후에 모든 손실된 패킷을 복구할 수 있다. 네트워크 패킷 손실률이 상대적으로 낮을 때, 제1 네트워크 디바이스는 중복 패킷 수량 R을 적절하게 감소시킬 수 있으며, 다시 말해서, 제1 네트워크 디바이스는 하나의 인코딩 프로세스에서 생성되는 중복 패킷의 수량을 적절하게 감소시켜 인코딩 효율을 향상시킬 수 있다.
제1 네트워크 디바이스가 인코딩 파라미터를 동적으로 조정할 수 있기 때문에, 제1 네트워크 디바이스의 인코딩 효율은 인코딩 파라미터를 조정하는 것에 의해 개선될 수 있다.
803: 프로세서가 제1 인코딩 태스크를 제1 타깃 송신 큐에 저장하고, 여기서 제1 타깃 송신 큐는 제1 네트워크 디바이스의 처리될 데이터 스트림의 인코딩 태스크를 저장하는 데 사용되며, 제1 네트워크 디바이스의 처리될 데이터 스트림은 제1 데이터 스트림을 포함한다.
단계(803)는 프로세서의 FEC 소프트웨어 인터페이스에 의해 수행될 수 있다. 제1 네트워크 디바이스는 복수의 송신 큐를 미리 설정할 수 있다. 각 송신 큐는 제1 네트워크 디바이스의 처리될 데이터 스트림의 인코딩 태스크를 저장하는 데 사용된다. 제1 타깃 송신 큐는 복수의 송신 큐 중 어느 하나일 수 있다. 복수의 송신 큐는 제1 네트워크 디바이스의 메모리, 프로세서, 및 타깃 하드웨어 엔진 중 어느 하나에 위치할 수 있다.
일부 가능한 구현에서, 제1 네트워크 디바이스는 송신 큐 각각에 대한 우선순위를 설정할 수 있고, 송신 큐 각각은 우선순위가 동일한 데이터 스트림의 인코딩 태스크를 저장하는 데 사용된다. 예를 들어, 도 9는 본 출원의 실시예에 따른 네트워크 디바이스의 내부 상호작용 절차의 개략도이다. 도 9에서, 우선순위가 A인 송신 큐 A와 우선순위 B인 송신 큐 B가 메모리에 있으며, 여기서 우선순위 A가 우선순위 B보다 높다. 이 경우, 송신 큐 A는 인코딩 태스크 3, 인코딩 태스크 5, 인코딩 태스크 6을 저장하고, 송신 큐 B는 인코딩 태스크 1, 인코딩 태스크 2, 인코딩 태스크 4를 저장한다. 인코딩 태스크 3, 인코딩 태스크 5 및 인코딩 태스크 6은 우선순위가 A인 인코딩 태스크이며, 인코딩 태스크 1, 인코딩 태스크 2 및 인코딩 태스크 4는 우선순위가 B인 인코딩 태스크이다.
일부 가능한 구현에서, 단계(803)는: 프로세서가 제1 데이터 스트림의 우선순위에 기반하여 제1 인코딩 태스크를 제1 타깃 송신 큐에 추가하는 것을 포함할 수 있으며, 여기서 제1 타깃 송신 큐의 우선순위가 제1 데이터 스트림의 우선순위와 같다. 구체적으로, FEC 소프트웨어 인터페이스가 하나의 제1 인코딩 태스크를 생성한 후, FEC 소프트웨어 인터페이스는 제1 데이터 스트림의 우선순위에 기반하여 메모리에서 제1 데이터 스트림의 우선순위에 대응하는 제1 타깃 송신 큐를 결정할 수 있다. 제1 타깃 송신 큐의 인코딩 태스크 수량이 제1 타깃 수량보다 적을 때, FEC 소프트웨어 인터페이스는 제1 인코딩 태스크를 제1 타깃 송신 큐에 추가하고, 여기서 제1 타깃 수량은 제1 타깃 송신 큐에 저장될 수 있는 인코딩 태스크의 최대 수량이다. 제1 타깃 송신 큐의 인코딩 태스크 수량이 제1 타깃 수량과 같을 때, FEC 소프트웨어 인터페이스는 제1 미리 설정된 지속기간마다 제1 타깃 송신 큐의 인코딩 태스크 수량이 제1 타깃 수량보다 작은지를 질의한다. 수량이 제1 타깃 수량보다 작으며, FEC 소프트웨어 인터페이스는 제1 인코딩 태스크를 제1 타깃 송신 큐에 추가한다. 제1 미리 설정된 지속기간은 본 출원의 이 실시예에서 특별히 제한되지 않는다. 타깃 하드웨어 엔진은 인코딩 및 디코딩 유닛이 유휴(idle) 상태일 때마다 제1 타깃 송신 큐를 질의할 수 있다.
804: 타깃 하드웨어 엔진이 제1 타깃 송신 큐로부터 제1 인코딩 태스크를 읽는다.
타깃 하드웨어 엔진은 우선순위 시퀀스에 기반하여 메모리 내의 각각의 송신 큐를 폴링하여(poll), 타깃 하드웨어 엔진이 제1 타깃 송신 큐로부터 제1 인코딩 태스크를 읽을 필요가 있는지를 판정할 수 있다. 일부 가능한 구현에서, 타깃 하드웨어 엔진은 송신 큐의 우선순위 시퀀스에 기반하여, 송신 큐 각각에 인코딩 태스크가 있는지를 순차적으로 질의하며, 여기서 각각의 송신 큐는 하나의 우선순위에 대응한다. 각각의 송신 큐에서, 타깃 하드웨어 엔진은 제1 타깃 송신 큐의 우선순위보다 높은 우선순위를 가지는 큐에 인코딩 태스크가 없을 때 제1 타깃 송신 큐로부터 제1 인코딩 태스크를 읽는다.
타깃 하드웨어 엔진이 각각의 송신 큐를 폴링하는 프로세스는 다음과 같다. 타깃 하드웨어 엔진은 송신 큐에서 우선순위가 가장 높은 제1 송신 큐를 질의한다. 제1 송신 큐에 인코딩 태스크가 있을 때, 타깃 하드웨어 엔진은 제1 송신 큐의 큐 헤드(queue head)로부터 하나의 인코딩 태스크를 획득하고, 인코딩 태스크에 기반하여 다음 단계(805)를 수행한다. 타깃 하드웨어 엔진은 미리 설정된 제2 지속기간마다 제1 송신 큐를 다시 질의한다. 제1 송신 큐에 여전히 인코딩 태스크가 있을 때, 타깃 하드웨어 엔진은 제1 송신 큐의 큐 헤드로부터 신규 인코딩 태스크를 다시 획득한다. 제1 송신 큐가 인코딩 태스크를 저장하지 않을 때까지, 타깃 하드웨어 엔진은 복수의 송신 큐에서 제2 우선순위에 대응하는 제2 송신 큐에 인코딩 태스크가 있는지를 질의한다. 제2 송신 큐에 인코딩 태스크가 있을 때, 타깃 하드웨어 엔진은 제2 송신 큐에서 하나의 인코딩 태스크를 획득하고 다음 단계(805)를 수행한다. 제2 우선순위는 가장 높은 우선순위에 이어 두 번째 우선순위이다. 제2 송신 큐에 인코딩 태스크가 없을 때, 타깃 하드웨어 엔진은 유추에 따라 우선순위 시퀀스에 기반하여 제2 우선순위에 대해 두 번째인 우선순위를 가지는 송신 큐를 질의한다.
송신 큐의 큐 헤드에 있는 인코딩 태스크가 타깃 하드웨어 엔진에 의해 획득된 후, 송신 큐의 다음 인코딩 태스크가 송신 큐의 큐 헤드가 된다. 이러한 방식으로, 타깃 하드웨어 엔진은 다음 번에 송신 큐의 큐 헤드로부터 다음 인코딩 태스크를 획득할 수 있다.
805: 타깃 하드웨어 엔진은 제1 인코딩 태스크에서 M개의 원본 패킷의 저장 주소에 기반하여 메모리로부터 M개의 원본 패킷을 획득한다.
제1 인코딩 태스크를 획득한 후, 타깃 하드웨어 엔진의 컨트롤러는 제1 인코딩 태스크로부터 M개의 원본 패킷의 저장 주소를 획득할 수 있고, 타깃 하드웨어 엔진은 제1 패킷 획득 요청을 메모리에 송신할 수 있다. 제1 패킷 획득 요청은 M개의 원본 패킷의 저장 주소를 운반한다. 제1 패킷 획득 요청을 수신한 후, 메모리는 저장 주소에 저장된 M개의 원본 패킷을 타깃 하드웨어 엔진에 송신한다. M개의 원본 패킷을 수신한 후, 타깃 하드웨어 엔진은 M개의 제1 패킷을 버퍼 유닛에 버퍼링하므로, 데이터 처리 유닛이 M개의 원본 패킷을 처리한다. 물론, 제1 인코딩 태스크가 M개의 원본 패킷을 직접 운반하면, 타깃 하드웨어 엔진은 메모리로부터 M개의 원본 패킷을 얻지 않고, 제1 인코딩 태스크로부터 M개의 원본 패킷을 직접 획득할 수 있다.
806: 타깃 하드웨어 엔진은 제1 인코딩 태스크에 기반하여 M개의 원본 패킷에 대해 순방향 오류 정정(forward error correction, FEC) 인코딩을 수행하여 R개의 중복 패킷을 획득하며, 여기서 R은 양의 정수이다.
M개의 원본 패킷을 획득한 후, 타깃 하드웨어 엔진은 제1 인코딩 태스크의 인코딩 파라미터에 기반하여 M개의 원본 패킷에 대해 순방향 오류 정정(forward error correction, FEC) 인코딩을 수행할 수 있다. 가능한 방식으로, 타깃 하드웨어 엔진의 데이터 처리 유닛은 인코딩 파라미터의 원본 패킷 수량 M에 기반하여 M개의 원본 패킷에 대해 패딩 처리를 수행하여, M개의 동일 길이 패킷을 획득할 수 있다. 데이터 처리 유닛은 M개의 동일 길이 패킷을 사용하여 인코딩될 행렬을 형성하며, 여기서 인코딩될 행렬의 하나의 행은 하나의 동일 길이 패킷이고; 인코딩될 행렬을 인코딩 및 디코딩 유닛에 송신한다. 인코딩 및 디코딩 행렬 유닛은 대응하는 생성 행렬 및 인코딩될 행렬에 대해 곱셈 계산을 수행하여 R개의 중복 패킷을 획득하고 단계(806)를 구현한다. 도 1은 생성 행렬과 인코딩될 행렬에 대한 곱셈 계산을 수행하는 프로세스를 설명한다. 여기에서, 본 출원의 이 실시예에서 프로세스는 다시 설명되지 않는다.
생성 행렬은 타깃 하드웨어 엔진의 행렬 생성기에 의해 생성되어 인코딩 및 디코딩 유닛에 송신될 수 있다. 행렬 생성기가 대응하는 생성 행렬을 생성하는 프로세스는 다음과 같다. 타깃 하드웨어 엔진의 컨트롤러는 제1 인코딩 태스크로부터 중복 패킷 수량 R 및 원본 패킷 수량 M을 획득하고, 획득한 중복 패킷 수량 R 및 원본 패킷 수량 M을 행렬 생성기에 송신할 수 있다. 행렬 생성기는 중복 패킷 수량 R 및 원본 패킷 수량 M에 기반하여 (M+R)×M 생성 행렬을 생성하고, (M+R)×M 생성 행렬을 인코딩 및 디코딩 유닛에 송신한다.
807: 타깃 하드웨어 엔진이 R개의 중복 패킷을 메모리에 저장한다.
R개의 중복 패킷을 생성한 후, 타깃 하드웨어 엔진의 인코딩 및 디코딩 유닛은 R개의 중복 패킷을 버퍼 유닛에 버퍼링하고, 버퍼 유닛은 제1 패킷 저장 요청을 메모리에 송신한다. 제1 패킷 저장 요청은 R개의 중복 패킷 및 R개의 중복 패킷의 저장 주소를 운반하고, R개의 중복 패킷의 저장 주소는 각 중복 패킷의 저장 주소를 포함한다. 제1 패킷 저장 요청을 수신한 후, 메모리는 R개의 중복 패킷의 저장 주소에 R개의 중복 패킷을 저장한다.
808: R개의 중복 패킷이 저장된 후, 타깃 하드웨어 엔진은 R개의 중복 패킷의 저장 주소를 제1 인코딩 태스크에 추가하여 M개의 원본 패킷의 제1 인코딩 완료 정보를 획득하고, 여기서 제1 인코딩 완료 정보는 M개의 원본 패킷의 인코딩이 완료되었음을 지시하는 데 사용된다.
타깃 하드웨어 엔진은 추가로, 제1 인코딩 태스크의 인코딩 식별자를 인코딩 완료 식별자로 대체할 수 있으며, 여기서 인코딩 완료 식별자는 원본 패킷의 인코딩이 완료되었음을 지시하는 데 사용된다. 인코딩 완료 식별자를 나타내는 방식은 본 출원의 이 실시예에서 특별히 제한되지 않는다. 제1 인코딩 태스크는 M개의 제1 패킷의 저장 주소 및 인코딩 파라미터를 포함하기 때문에, 제1 인코딩 완료 정보는 R개의 중복 패킷의 저장 주소, M개의 원본 패킷의 저장 주소 및 인코딩 파라미터를 포함할 수 있다. 제1 인코딩 태스크가 제1 데이터 스트림의 우선순위를 운반할 때, 제1 인코딩 완료 정보는 제1 데이터 스트림의 우선순위를 더 포함할 수 있다.
809: 타깃 하드웨어 엔진은 제1 인코딩 완료 정보를 제1 타깃 수신 큐에 저장하고, 여기서 제1 타깃 수신 큐는 제1 네트워크 디바이스의 처리될 데이터 스트림의 인코딩 완료 정보 태스크를 저장하는 데 사용된다.
제1 네트워크 디바이스는 복수의 수신 큐를 미리 설정할 수 있다. 각각의 수신 큐는 제1 네트워크 디바이스의 처리될 데이터 스트림의 인코딩 완료 정보를 저장하는 데 사용된다. 제1 타깃 수신 큐는 복수의 수신 큐 중 어느 하나일 수 있다. 복수의 수신 큐는 제1 네트워크 디바이스의 메모리, 프로세서, 및 타깃 하드웨어 엔진 중 어느 하나에 위치할 수 있다.
일부 가능한 구현에서, 제1 네트워크 디바이스는 수신 큐 각각에 대한 우선순위를 설정할 수 있고, 수신 큐 각각은 우선순위가 동일한 데이터 스트림의 인코딩 완료 정보를 저장하는 데 사용된다. 도 9는 여전히 예시로 사용된다. 도 9에서, 우선순위가 A인 수신 큐 A와 우선순위 B인 수신 큐 B가 있으며, 여기서 우선순위 A는 우선순위 B보다 높다. 이 경우, 수신 큐 A는 태스크 완료 정보 3, 태스크 완료 정보 5, 태스크 완료 정보 6(도 9에서 간단히 "완료 정보 3, 완료 정보 5, 완료 정보 6"으로 언급됨)을 저장하고; 수신 큐 B는 태스크 완료 정보 1, 태스크 완료 정보 2, 태스크 완료 정보 4를 저장하고, 여기서 태스크 완료 정보 3, 태스크 완료 정보 5, 태스크 완료 정보 6은 우선순위가 A인 인코딩 완료 정보이고, 태스크 완료 정보 1, 태스크 완료 정보 2, 태스크 완료 정보 4(도 9에서 "완료 정보 3, 완료 정보 5, 완료 정보 6"으로 간략히 언급됨)는 우선순위가 B인 인코딩 완료 정보이다.
일부 가능한 구현에서, 타깃 하드웨어 엔진은 제1 데이터 스트림의 우선순위에 기반하여 제1 인코딩 완료 정보를 메모리의 제1 타깃 수신 큐에 추가하고, 여기서 제1 타깃 수신 큐의 우선순위는 제1 데이터 스트림의 우선순위와 같다. 구체적으로, 타깃 하드웨어 엔진은 제1 데이터 스트림의 우선순위에 기반하여, 메모리 내의 제1 데이터 스트림의 우선순위에 대응하는 제1 타깃 수신 큐를 결정할 수 있다. 제1 타깃 수신 큐의 인코딩 완료 정보 양이 제2 타깃 수량보다 작을 때, 타깃 하드웨어 엔진은 제1 인코딩 완료 정보를 제1 타깃 수신 큐에 추가하고, 여기서 제2 타깃 수량은 제1 타깃 수신 큐에 저장될 수 있는 인코딩 완료 정보의 최대 양이다. 제1 타깃 수신 큐의 인코딩 완료 정보 양이 제2 타깃 수량과 같을 때, FEC 소프트웨어 인터페이스는 제1 타깃 수신 큐의 인코딩 완료 정보 양이 제2 미리 설정된 지속기간마다 제2 타깃 수량보다 작은지를 질의한다. 양이 제2 타깃 수량보다 적으면, FEC 소프트웨어 인터페이스는 제1 인코딩 완료 정보를 제1 타깃 수신 큐에 추가한다. 제2 미리 설정된 지속기간은 본 출원의 이 실시예에서 특별히 제한되지 않는다.
810: 프로세서가 제1 타깃 수신 큐로부터 제1 인코딩 완료 정보를 읽는다.
단계(810)는 프로세서의 FEC 소프트웨어 인터페이스에 의해 수행될 수 있다. FEC 소프트웨어 인터페이스는 우선순위 시퀀스에 기반하여 수신 큐 각각을 폴링할 수 있다. FEC 소프트웨어 인터페이스는 먼저 폴링 방식으로, 인코딩 완료 정보가 제1 타깃 수신 큐로부터 획득될 수 있는지를 판정할 수 있다. 일부 가능한 구현에서, FEC 소프트웨어 인터페이스는 우선순위 시퀀스에 기반하여, 수신 큐 각각이 다른 인코딩 완료 정보를 갖는지를 순차적으로 질의한다. 수신 큐 각각은 하나의 우선순위에 대응한다. 각각의 제1 수신 큐에서, FEC 소프트웨어 인터페이스는 제1 타깃 수신 큐의 우선순위보다 높은 우선순위를 가지는 큐에 다른 인코딩 완료 정보가 없을 때, 제1 타깃 수신 큐로부터 제1 인코딩 완료 정보를 획득한다.
FEC 소프트웨어 인터페이스가 각 수신 큐를 폴링하는 프로세스는 다음과 같다. FEC 소프트웨어 인터페이스는 수신 큐에서 우선순위가 가장 높은 제1 수신 큐를 질의한다. 제1 수신 큐에 인코딩 완료 정보가 있을 때, FEC 소프트웨어 인터페이스는 제1 수신 큐의 큐 헤드로부터 하나의 인코딩 완료 정보를 획득하고, 인코딩 완료 정보에 기반하여 다음 단계(811)를 수행한다. FEC 소프트웨어 인터페이스는 제3 미리 설정된 지속기간마다 제1 수신 큐를 다시 질의한다. 제1 수신 큐가 여전히 인코딩 완료 정보를 저장하고 있을 때, FEC 소프트웨어 인터페이스는 제1 수신 큐의 큐 헤드로부터 신규의 하나의 인코딩 완료 정보를 다시 획득한다. 제1 송신 큐가 인코딩 태스크를 저장하지 않을 때까지, FEC 소프트웨어 인터페이스는 복수의 제1 수신 큐에서 다음 우선순위에 대응하는 제2 수신 큐가 인코딩 완료 정보를 가지고 있는지를 질의한다. 제2 수신 큐가 인코딩 완료 정보를 저장할 때, FEC 소프트웨어 인터페이스는 제2 수신 큐로부터 하나의 인코딩 완료 정보를 획득하고 다음 단계(811)를 수행한다. 제2 수신 큐가 인코딩 완료 정보를 저장하지 않을 때, FEC 소프트웨어 인터페이스는 유추에 따라 우선순위 시퀀스에 기반하여, 제2 우선순위에 대해 두 번째 우선순위를 갖는 제3 수신 큐를 질의한다.
제1 수신 큐의 인코딩 완료 정보가 FEC 소프트웨어 인터페이스에 의해 획득된 후, 제1 수신 큐의 다음 인코딩 완료 정보가 제1 수신 큐의 큐 헤드가 된다. 이러한 방식으로, FEC 소프트웨어 인터페이스는 다음에 제1 수신 큐의 큐 헤드로부터 다음 인코딩 완료 정보를 획득한다.
811: 프로세서는 제1 인코딩 완료 정보에 기반하여 메모리로부터 M개의 원본 패킷과 R개의 중복 패킷을 획득한다.
단계(811)는 프로세서의 FEC 소프트웨어 인터페이스에 의해 수행될 수 있다. FEC 소프트웨어 인터페이스는 제1 인코딩 완료 정보로부터 R개의 중복 패킷의 저장 주소, M개의 원본 패킷의 저장 주소, 및 인코딩 파라미터를 획득할 수 있다. FEC 소프트웨어 인터페이스는 제2 패킷 획득 요청을 메모리에 송신하고, 여기서 제2 패킷 획득 요청은 R개의 중복 패킷의 저장 주소와 M개의 원본 패킷의 저장 주소를 운반한다. 제2 패킷 획득 요청을 수신할 때, 메모리는 제2 패킷 획득 요청의 R개의 중복 패킷의 저장 주소와 M개의 원본 패킷의 저장 주소에 기반하여, R개의 중복 패킷과 M개의 원본 패킷을 FEC 소프트웨어 인터페이스로 리턴한다(return).
812: 프로세서가 M개의 원본 패킷과 R개의 중복 패킷을 제2 네트워크 디바이스에 송신한다.
단계(812)는 프로세서의 FEC 소프트웨어 인터페이스에 의해 수행될 수 있다. 메모리에 의해 리턴된 R개의 중복 패킷과 M개의 원본 패킷을 획득된 후, FEC 소프트웨어 인터페이스는 제1 인코딩 완료 정보의 인코딩 파라미터에 기반하여 R개의 중복 패킷과 M개의 원본 패킷을 FEC 패킷으로 캡슐화한다. 일부 가능한 구현에서, 단계(812)는 다음 단계(8121 내지 8123)에 도시된 프로세스를 사용하여 구현될 수 있다.
단계(8121): FEC 소프트웨어 인터페이스는 인코딩 파라미터의 타깃 크기에 기반하여, M개의 원본 패킷 중 크기가 타깃 크기보다 작은 패킷에 대해 패딩 처리를 수행하여, M개의 동일 길이 패킷을 획득하며, 여기서 동일 길이 패킷 각각의 크기가 타깃 크기이다.
단계(8122): FEC 소프트웨어 인터페이스는 FEC 패킷 헤더를 동일 길이 패킷 각각에 추가하여 M개의 원본 FEC 패킷을 획득하고, FEC 패킷 헤더를 중복 패킷 각각에 추가하여 R개의 중복 FEC 패킷을 획득하며, 여기서 FEC 패킷 헤더는 M개의 원본 패킷의 인코딩 파라미터를 운반한다.
예를 들어, 도 10은 본 출원의 실시예에 따른 FEC 패킷의 개략도이다. 도 10에서 FEC 패킷의 페이로드 패킷이 제1 데이터 스트림에서 원본 패킷으로 구성된 동일 길이 패킷일 때, FEC 패킷은 원본 FEC 패킷이다. FEC 패킷의 페이로드 패킷이 중복 패킷일 때, FEC 패킷은 중복 FEC 패킷이다.
FEC 패킷 헤더는 M개의 원본 패킷의 인코딩 상태를 지시하는 데 사용된다. FEC 패킷 헤더는 M개의 원본 패킷의 인코딩 파라미터를 운반한다. 예를 들어, 도 10의 FEC 패킷 헤더는 원본 패킷 수량 M - 여기서, M = 4임 -; 중복 패킷 수량은 R - 여기서, R = 2임; 및 타깃 크기 L - 여기서 L = 30MB임 - 를 운반한다. FEC 패킷 헤더는 추가로, M개의 원본 패킷의 타깃 식별자를 운반할 수 있으며, 여기서 타깃 식별자는 제1 데이터 스트림의 원본 패킷에 대해 수행된 인코딩 횟수를 지시하는 데 사용된다. 예를 들어, 도 10에서 FEC 패킷 헤더의 타깃 식별자가 1.2일 때, 이는 제1 네트워크 디바이스가 제1 데이터 스트림 1의 패킷에 대해 두 번째 인코딩을 수행하고, M개의 원본 패킷이 두 번째 인코딩에 사용되는 제1 데이터 스트림의 원본 패킷임을 지시한다.
FEC 패킷 헤더는 추가로, 우선순위 식별자, 알고리즘 식별자, 제1 데이터 스트림에서의 M개의 원본 패킷 각각의 시퀀스 번호, 인코딩될 행렬의 각 동일 길이 패킷의 시퀀스 번호 및 인코딩 행렬의 각 중복 패킷의 시퀀스 번호를 운반할 수 있다. 우선순위 식별자는 제1 데이터 스트림의 우선순위를 지시하는 데 사용되며, 알고리즘 식별자는 인코딩 프로세스에서 제1 네트워크 디바이스가 사용하는 알고리즘을 지시하는 데 사용되고, 인코딩될 행렬의 각 동일 길이 패킷의 시퀀스 번호는 인코딩될 행렬에서 동일 길이 패킷의 행 번호이고, 인코딩 행렬의 각 중복 패킷의 시퀀스 번호는 인코딩 행렬에서 각 중복 패킷의 행 번호이다. 예를 들어, 도 10의 FEC 헤더에서, 제1 데이터 스트림에서 원본 패킷 A0 내지 A3의 시퀀스 번호는 각각 10, 11, 12 및 13이고, 동일 길이 패킷 M0 내지 M3의 시퀀스 번호는 각각 0, 1, 2, 3이며, 중복 패킷 R0 및 R1의 시퀀스 번호는 각각 4 및 5이다. 도 10의 FEC 패킷 헤더의 예는 도 1에 도시된 인코딩 계산 프로세스에 기반한다.
단계(8123): 프로세서는 M개의 원본 FEC 패킷과 R개의 중복 FEC 패킷을 송신한다.
M개의 원본 FEC 패킷과 R개의 중복 FEC 패킷의 패킷 헤더가 동일하기 때문에, M개의 원본 FEC 패킷과 R개의 중복 FEC 패킷은 FEC 패킷 그룹으로 간주될 수 있다. M개의 원본 FEC 패킷 및 R개의 중복 FEC 패킷에 있는 임의의 FEC 패킷에 대해, 임의의 FEC 패킷을 획득한 후 매번, FEC 소프트웨어 인터페이스는 임의의 FEC 패킷을 제1 네트워크 디바이스의 TM 엔진에 출력한다. FEC 소프트웨어 인터페이스가 FEC 패킷을 TM 엔진으로 계속해서 출력할 수 있기 때문에, TM 엔진은 제1 데이터 스트림에 대응하는 인코딩 스트림을 형성할 수 있다. 인코딩 스트림을 관리한 후, TM 엔진은 관리되는 인코딩 스트림을 PPE로 출력한다. PPE는 관리된 인코딩 스트림을 GE/GXE 네트워크 포트로 포워딩하고, GE/GXE 네트워크 포트는 관리되는 인코딩 스트림을 제2 네트워크 디바이스로 출력하므로, 제2 네트워크 디바이스가 인코딩 스트림을 획득할 수 있다.
인코딩 프로세스에서 제1 네트워크 디바이스의 프로세서, 타깃 하드웨어 엔진, 및 메모리 간의 상호 작용 상태를 추가로 설명하기 위해, 도 11에 도시된 본 출원의 실시예에 따른 FEC 인코딩의 흐름도를 참조한다. 절차는 구체적으로 단계(1101) 내지 단계(11106)를 포함한다.
단계(1101): UDP 프록시는 저장 완료 메시지를 FEC 소프트웨어 인터페이스로 송신한다.
단계(1102): FEC 소프트웨어 인터페이스가 수신된 저장 완료 메시지의 수량이 M과 같을 때, FEC 소프트웨어 인터페이스는 제1 인코딩 태스크를 생성하고, 제1 인코딩 태스크를 메모리의 태스크 버퍼에 송신한다.
태스크 버퍼는 복수의 송신 큐 및 복수의 수신 큐를 포함하고, FEC 소프트웨어 인터페이스는 제1 인코딩 태스크를 제1 인코딩 태스크의 우선순위에 대응하는 제1 타깃 송신 큐에 송신할 수 있다.
단계(1103): 타깃 하드웨어 엔진은 태스크 버퍼의 제1 타깃 송신 큐로부터 제1 인코딩 태스크를 획득하고, 제1 인코딩 태스크의 저장 주소에 기반하여 메모리로부터 M개의 원본 패킷을 읽는다.
단계(1104): 타깃 하드웨어 엔진은 읽힌 M개의 원본 패킷에 대해 FEC 인코딩을 수행하여 R개의 중복 패킷을 획득하고, 타깃 하드웨어 엔진은 R개의 중복 패킷을 메모리에 저장하며, 제1 인코딩 완료 정보를 태스크 버퍼의 제1 타깃 수신 큐에 송신한다.
단계(1105): FEC 소프트웨어 인터페이스는 태스크 버퍼의 제1 타깃 수신 큐로부터 제1 인코딩 완료 정보를 읽고, 제1 완료 정보에 기반하여 메모리에서 M개의 원본 패킷과 R개의 중복 패킷을 읽으며, FEC 패킷 헤더를 별도로 M개의 원본 패킷과 R개의 중복 패킷 각각에 캡슐화하여, FEC 패킷을 획득한다.
단계(1106): FEC 소프트웨어 인터페이스가 FEC 패킷을 송신한다.
단계(807 내지 812)에 도시된 프로세스는, 타깃 처리 엔진, 메모리 및 프로세서가 협력하여 M개의 원본 패킷 및 R개의 중복 패킷을 제2 네트워크 디바이스에 송신하는 프로세스이다. 일부 가능한 구현에서, 타깃 처리 엔진은 추가로, M개의 원본 패킷 및 R개의 중복 패킷을 프로세서에 직접 송신할 수 있으며, 프로세서는 8122 및 8123에 도시된 프로세스를 수행하여, M개의 원본 패킷 및 R개의 중복 패킷을 전송할 수 있다. 일부 가능한 구현에서, 타깃 처리 엔진은 다르게는, 8122 및 8123에 도시된 프로세스를 수행하여, M개의 원본 패킷 및 R개의 중복 패킷을 전송할 수 있다.
본 출원의 이 실시예에서 제공된 방법에 따르면, FEC 인코딩은 프로세서가 아니라 제1 네트워크 디바이스의 타깃 하드웨어 엔진에서 제1 데이터 스트림의 M개의 원본 패킷에 대해 직접 수행된다. 따라서, CPU 오버헤드가 감소될 수 있고, 제1 네트워크 디바이스의 인코딩 효율이 향상될 수 있다. 이와 같이, 제1 네트워크 디바이스는 패킷 전송 프로세스에서 큰 처리량의 요건을 쉽게 충족시킬 수 있다. 또한, 제1 네트워크 디바이스는 인코딩 파라미터를 동적으로 조정할 수 있으므로, 인코딩 파라미터를 조정하는 것에 의해 제1 네트워크 디바이스의 인코딩 효율이 향상될 수 있다.
제2 네트워크 디바이스가 인코딩 스트림을 획득한 후, 인코딩 스트림의 원본 FEC 패킷이 손실되면, 제2 네트워크 디바이스는 손실되지 않은 FEC 패킷을 디코딩하여 손실된 FEC 패킷을 복구할 수 있다. 처리 프로세스는 다음과 같을 수 있다. 임의의 인코딩 스트림을 획득한 후, 제2 네트워크 디바이스는 임의의 인코딩 스트림을 메모리에 저장할 수 있다. 임의의 인코딩 스트림에서 임의의 FEC 패킷 그룹에 있는 원본 FEC 패킷의 수량이 인코딩 동안 원본 패킷 수량 M보다 작으면, 이는 전송 프로세스에서 임의의 FEC 패킷 그룹에서 패킷 손실이 발생함을 지시한다. 제2 네트워크 디바이스의 프로세서는 임의의 FEC 패킷 그룹을 디코딩하도록 지시하는 데 사용되는 디코딩 태스크를 생성할 수 있고, 프로세서는 디코딩 태스크를 메모리에 전달할 수 있다. 제2 네트워크 디바이스의 타깃 하드웨어 엔진은 메모리에서 디코딩 태스크를 읽고, 인코딩 태스크에 기반하여 메모리에 저장된 임의의 FEC 패킷 그룹에 대해 FEC 인코딩을 수행하여, 임의의 FEC 패킷 그룹에서 손실된 원본 패킷을 복구하고, 그런 다음 복구된 원본 패킷을 메모리에 저장한다. 그다음, 프로세서는 임의의 FEC 패킷 그룹에서 손실되지 않은 원본 FEC 패킷 및 복구된 원본 패킷을 메모리로부터 획득하고, 손실되지 않은 원본 FEC 패킷의 FEC 패킷 헤더를 제거하여, 손실되지 않은 원본 패킷을 획득할 수 있다. 처리 프로세스를 추가로 설명하기 위해, 도 12a 및 도 12b에 도시된 본 출원의 실시예에 따른 패킷 처리 방법의 흐름도를 참조한다. 제2 네트워크 디바이스는 프로세서 및 타깃 하드웨어 엔진을 포함할 수 있고, 방법의 절차는 단계(1201 내지 1213)를 포함한다.
1201: 프로세서는 수신된 제1 데이터 스트림으로부터 제1 FEC 패킷 그룹을 획득하고, 여기서 제1 FEC 패킷 그룹에 있는 모든 FEC 패킷의 FEC 패킷 헤더는 동일하고, FEC 패킷 헤더는 FEC 인코딩 원본 패킷 수량 M을 포함한다.
제2 네트워크 디바이스는 복수의 인코딩 스트림을 획득할 수 있고, 제1 데이터 스트림은 복수의 인코딩 스트림 중 임의의 인코딩 스트림일 수 있으며, 제1 데이터 스트림은 복수의 FEC 패킷 그룹을 포함할 수 있고, 제1 FEC 패킷 그룹은 복수의 FEC 패킷 그룹 내의 임의의 FEC 패킷 그룹이다. 제1 FEC 패킷 그룹은 1회의 인코딩이 수행된 후 제1 네트워크 단말에 의해 출력되는 M개의 원본 FEC 패킷 및 R개의 중복 FEC 패킷을 포함한다.
제2 네트워크 디바이스가 제1 데이터 스트림을 수신하기 시작할 때, 제2 네트워크 디바이스는 제2 네트워크 디바이스가 제1 데이터 스트림에서 FEC 패킷을 수신할 때마다 FEC 패킷을 제2 네트워크 디바이스의 메모리에 저장한다. 일부 가능한 구현에서, 제2 네트워크 디바이스의 GE/GXE 네트워크 포트는 FEC 패킷을 수신하고, FEC 패킷을 제2 네트워크 디바이스의 PPE에 송신한다. PPE는 FEC 패킷을 메모리에 저장하고, FEC 패킷의 저장 주소를 기록하며, 저장 완료 메시지를 제2 네트워크 단말의 NP 엔진에 송신하며, 여기서 저장 완료 메시지는 FEC 패킷의 저장 주소를 운반한다. 저장 완료 메시지를 수신한 후, NP 엔진은 저장 완료 메시지를 제2 네트워크 디바이스의 CPU에 있는 프로토콜 스택에 송신할 수 있다. 따라서, UDP 프록시는 프로토콜 스택으로부터 각각의 저장 완료 메시지를 수집하고, 수집된 저장 완료 메시지를 제2 네트워크 디바이스의 FEC 소프트웨어 인터페이스에 송신할 수 있다. FEC 소프트웨어 인터페이스는 제3 미리 설정된 지속기간마다 각각의 저장 완료 메시지를 획득한다. FEC 소프트웨어 인터페이스는 각 저장 메시지에서 운반된 저장 주소에 기반하여, 메모리에 대응하는 저장 주소에서 FEC 패킷의 패킷 헤더를 읽어서 복수의 패킷 헤더를 획득한다. 그다음, FEC 소프트웨어 인터페이스는 복수의 패킷 헤더를 비교하여 동일한 패킷 헤더를 획득하고, 패킷 헤더가 동일한 FEC 패킷을 FEC 패킷 그룹으로 결정한다. 달리 말하면, 제1 데이터 스트림의 FEC 패킷에 대해, 제3 미리 설정된 지속기간이 경과할 때마다, 제2 네트워크 디바이스는 제3 미리 설정된 지속기간 내에 신규로 저장된 FEC 패킷에서 FEC 패킷 헤더가 동일한 패킷을 제1 FEC 패킷 그룹으로 사용한다. 제3 미리 설정된 지속기간은 본 출원의 이 실시예에서 특별히 제한되지 않는다. FEC 패킷 헤더는 타깃 식별자를 운반하고, 타깃 식별자는 인코딩 횟수를 지시하는 데 사용되기 때문이다. 일부 가능한 구현에서, 복수의 FEC 패킷의 패킷 헤더 내의 타깃 식별자가 동일할 때, 이는 또한 복수의 FEC 패킷이 동일 번째의 인코딩 이후에 획득된 패킷이라는 것을 지시할 수 있다. 달리 말하면, 복수의 FEC 패킷은 FEC 패킷 그룹이다.
1202: 제1 FEC 패킷 그룹의 원본 패킷의 수량이 원본 패킷 수량 M보다 작을 때, 프로세서는 제1 FEC 패킷 그룹에 기반하여 제1 디코딩 태스크를 생성하며, 여기서 제1 디코딩 태스크는 제1 FEC 패킷 그룹을 디코딩하도록 지시하는 데 사용된다.
단계(1202)는 프로세서의 FEC 소프트웨어 인터페이스에 의해 수행될 수 있다. FEC 소프트웨어 인터페이스가 제1 FEC 패킷1 그룹을 결정한 후, 제2 네트워크 디바이스는 제1 FEC 패킷 그룹에서 하나의 FEC 패킷의 패킷 헤더로부터 인코딩 파라미터들을 획득할 수 있다. 인코딩 파라미터의 원본 패킷 수량 M은 제1 FEC 패킷 그룹에 초기에 포함된 원본 FEC 패킷의 수량이다. 각각의 원본 FEC 패킷은 인코딩 시 하나의 원본 패킷에 대응하기 때문에, 제1 FEC 패킷 그룹의 원본 FEC 패킷 수량이 원본 패킷 수량 M보다 작을 때, 다시 말해서, 제1 FEC 패킷 그룹의 원본 패킷 수량이 원본 패킷 수량 M보다 작을 때, 이는 제1 FEC 패킷 그룹에서 적어도 하나의 원본 FEC 패킷이 손실되었음을 지시한다. 달리 말하면, 제1 네트워크 디바이스가 제1 그룹의 FEC 패킷을 제2 네트워크 디바이스에 송신하는 프로세스에서, 일부 원본 FEC 패킷, 즉 인코딩 동안의 원본 패킷이 손실된다. 인코딩 전의 제1 데이터 스트림을 복구하기 위해, FEC 소프트웨어 인터페이스는 제1 디코딩 태스크를 생성할 수 있으므로, 타깃 하드웨어 엔진은 제1 디코딩 태스크에 기반하여 제1 FEC 패킷 그룹에서 손실되지 않은 FEC 패킷을 디코딩하여, 손실된 원본 FEC 패킷을 복구할 수 있다.
제1 디코딩 태스크는 제1 FEC 패킷 그룹 또는 제1 FEC 패킷 그룹의 저장 주소를 포함하므로, 타깃 하드웨어 엔진이 제1 FEC 패킷 그룹의 저장 주소에 기반하여 메모리로부터 제1 FEC 패킷 그룹을 획득할 수 있으며; 또는 타깃 하드웨어 엔진이 제1 디코딩 태스크로부터 제1 FEC 패킷 그룹을 직접 획득할 수 있다. 제1 데이터 스트림이 우선순위를 가질 때, 제1 디코딩 태스크는 추가로, 제1 데이터 스트림의 우선순위를 포함할 수 있다.
복수의 FEC 패킷의 원본 FEC 패킷의 수량이 인코딩 파라미터의 원본 패킷 수량 M과 같을 때, 이는 제1 FEC 패킷 그룹에서 원본 FEC 패킷이 손실되지 않았음을 나타내며, 제2 네트워크 디바이스는 다음 단계(1211)를 수행할 수 있다.
1203: 프로세서는 제1 디코딩 태스크를 제2 타깃 송신 큐에 저장하고, 여기서 제2 타깃 송신 큐는 제2 네트워크 디바이스의 처리될 데이터 스트림의 디코딩 태스크를 저장하는 데 사용되며, 네트워크 디바이스의 처리될 데이터 스트림은 제1 데이터 스트림을 포함한다.
단계(1203)는 프로세서의 FEC 소프트웨어 인터페이스에 의해 수행될 수 있다. 단계(1203)에서 처리될 데이터 스트림은 처리될 인코딩 스트림이다. 제2 네트워크 디바이스는 복수의 송신 큐를 미리 설정할 수 있다. 각각의 송신 큐는 제2 네트워크 디바이스의 처리될 데이터 스트림의 디코딩 태스크를 저장하는 데 사용된다. 제2 타깃 송신 큐는 복수의 송신 큐 중 어느 하나일 수 있다. 복수의 송신 큐는 제2 네트워크 디바이스의 메모리, 프로세서, 및 타깃 하드웨어 엔진 중 어느 하나에 위치할 수 있다.
일부 가능한 구현에서, 제2 네트워크 디바이스는 송신 큐 각각에 대한 우선순위를 설정할 수 있고, 송신 큐 각각은 우선순위가 동일한 데이터 스트림의 디코딩 태스크를 저장하는 데 사용된다. 일부 가능한 구현에서, 단계(1203)는: 프로세서가 제1 데이터 스트림의 우선순위에 기반하여 제1 디코딩 태스크를 제2 타깃 송신 큐에 추가하는 것 - 여기서 제2 타깃 송신 큐의 우선순위는 제1 데이터 스트림의 우선순위와 같음 - 을 포함할 수 있다. 프로세서가 제1 디코딩 태스크를 제2 타깃 송신 큐에 추가하는 프로세스는, 단계(803)에서 프로세서가 제1 인코딩 태스크를 제1 타깃 송신 큐에 추가하는 프로세스와 동일하다. 여기서, 제1 디코딩 태스크를 제2 타깃 송신 큐에 추가하는 특정 프로세스는 본 출원의 이 실시예에서 다시 설명되지 않는다.
1204: 타깃 하드웨어 엔진이 제2 타깃 송신 큐로부터 제1 디코딩 태스크를 읽는다.
타깃 하드웨어 엔진은 우선순위 시퀀스에 기반하여 메모리 내의 제2 송신 큐 각각을 먼저 폴링하여, 타깃 하드웨어 엔진이 제2 타깃 송신 큐로부터 제1 디코딩 태스크를 읽을 필요가 있는지를 판정할 수 있다. 일부 가능한 구현에서, 타깃 하드웨어 엔진은 송신 큐의 우선순위 시퀀스에 기반하여, 송신 큐 각각에 디코딩 태스크가 있는지를 순차적으로 질의하며, 여기서 송신 큐 각각은 하나의 우선순위에 대응한다. 각각의 송신 큐에서, 타깃 하드웨어 엔진은 제2 타깃 송신 큐의 우선순위보다 높은 우선순위를 가지는 큐에 다른 디코딩 태스크가 없을 때, 제2 타깃 송신 큐로부터 제1 디코딩 태스크를 읽는다.
타깃 하드웨어 엔진이 송신 큐 각각을 폴링하여 제1 디코딩 태스크를 획득하는 프로세스는, 단계(804)에서 타깃 하드웨어 엔진이 각각의 송신 큐를 폴링하여 제1 인코딩 태스크를 획득하는 프로세스와 동일하다. 여기서, 송신 큐 각각을 폴링하여 제1 디코딩 태스크를 획득하는 프로세스는 본 출원의 이 실시예에서 다시 설명되지 않는다.
1205: 타깃 하드웨어 엔진은 제1 디코딩 태스크에서 제1 FEC 패킷 그룹의 저장 주소에 기반하여 메모리로부터 제1 FEC 패킷 그룹을 획득한다.
단계(1205)에 도시된 프로세스는 단계(805)에 도시된 프로세스와 동일하다. 여기서, 단계(1205)는 본 출원의 이 실시예에서 다시 설명되지 않는다. 일부 가능한 구현에서, 제1 디코딩 태스크가 제1 FEC 패킷 그룹을 운반할 때, 타깃 하드웨어 엔진은 메모리로부터 제1 FEC 패킷 그룹을 획득하지 않고, 제1 디코딩 태스크로부터 제1 FEC 패킷 그룹을 직접 획득할 수 있다. 타깃 하드웨어 엔진이 획득한 제1 FEC 패킷 그룹은 제1 FEC 패킷 그룹에서 손실되지 않은 FEC 패킷이며, 손실되지 않은 원본 FEC 패킷과 손실되지 않은 중복 FEC 패킷을 포함한다.
1206: 타깃 하드웨어 엔진은 제1 FEC 패킷 그룹의 원본 패킷과 원본 패킷의 중복 패킷에 대해 FEC 디코딩을 수행하여, 제1 FEC 패킷 그룹에서 손실된 원본 패킷을 획득한다.
타깃 하드웨어 엔진이 제1 FEC 패킷 그룹을 획득할 때, 타깃 하드웨어 엔진의 데이터 처리 유닛은 제1 FEC 패킷 그룹으로부터 원본 FEC 패킷의 패킷 헤더 및 중복 FEC 패킷의 패킷 헤더를 제거하여, 복수의 동일 길이 패킷 및 적어도 하나의 중복 패킷을 획득한다. 동일 길이 패킷 각각은 제1 FEC 패킷 그룹에서 손실된 원본 패킷이다. 데이터 처리 유닛은 복수의 동일 길이 패킷과 적어도 하나의 중복 패킷을 사용하여 복구 행렬을 형성하고, 복구 행렬을 인코딩 및 디코딩 유닛에 송신할 수 있다. 행렬 생성기는 대응하는 타깃 체크 행렬을 구성하고, 대응하는 타깃 체크 행렬을 인코딩 및 디코딩 유닛에 송신한다. 인코딩 및 디코딩 유닛은 대응하는 타깃 체크 행렬의 역행렬과 복구 행렬에 곱셈 계산을 수행하여 인코딩될 행렬을 획득하고; FEC 패킷 헤더에 있는 각 동일 길이 패킷의 시퀀스 번호와 가 중복 패킷의 시퀀스 번호에 기반하여, 어떤 동일 길이 패킷이 손실되고 어떤 중복 패킷이 손실되었는지를 결정하며, 다시 말해서, 어떤 원본 FEC 패킷이 손실되거나 어떤 중복 FEC 패킷이 손실되었는지를 결정한다. 따라서, 손실된 동일 길이 패킷이 인코딩될 행렬로부터 획득되어, 손실된 원본 패킷을 획득하고 단계(1206)를 구현할 수 있다. 도 2는 타깃 체크 행렬의 역행렬과 복구 행렬의 곱셈 계산 프로세스를 설명한다. 여기에서, 본 출원의 이 실시예에서 프로세스는 다시 설명되지 않는다.
행렬 생성기가 대응하는 타깃 체크 행렬을 구성하는 프로세스는 다음과 같다. 타깃 하드웨어 엔진의 컨트롤러는 패킷 헤더의 인코딩 파라미터에 있는 중복 패킷 수량 R에 기반하여 손실된 중복 FEC 패킷의 수량을 결정하고, 여기서 손실된 중복 FEC 패킷의 수량은 중복 패킷 수량 R과 복수의 FEC 패킷에서의 중복 FEC 패킷의 수량 사이의 차이이다. 컨트롤러는 FEC 패킷 헤더의 인코딩 파라미터에 있는 원본 패킷 수량 M과 복수의 FEC 패킷에 있는 원본 FEC 패킷의 수량에 기반하여 손실된 원본 FEC 패킷의 수량을 결정하고, 여기서 손실된 원본 FEC 패킷의 수량은 원본 패킷 수량 M과 복수의 FEC 패킷에서 원본 FEC 패킷의 수량 사이의 차이이다. 컨트롤러는 손실된 중복 FEC 패킷의 수량과 손실된 원본 FEC 패킷의 수량을 행렬 생성기에 송신한다. 행렬 생성기는 손실된 중복 FEC 패킷의 수량과 손실된 원본 FEC 패킷의 수량에 기반하여 대응하는 타깃 체크 행렬을 구성하고, 대응하는 타깃 체크 행렬을 인코딩 및 디코딩 유닛에 송신한다.
단계(1205 및 1206)에 도시된 프로세스는, 제1 디코딩 태스크에 기반하여, 제1 FEC 패킷 그룹의 원본 패킷과 원본 패킷의 중복 패킷에 대해 FEC 디코딩을 수행하여, 제1 FEC 패킷 그룹에서 손실된 원본 패킷을 획득하는 프로세스이다.
1207: 타깃 하드웨어 엔진이 제1 FEC 패킷 그룹의 손실된 원본 패킷을 메모리에 저장한다.
단계(1207)에 도시된 프로세스는 단계(807)에 도시된 프로세스와 동일하다. 여기서, 단계(1207)는 본 출원의 이 실시예에서 다시 설명되지 않는다.
1208: 손실된 원본 패킷의 저장이 완료된 후, 타깃 하드웨어 엔진은 손실된 원본 패킷의 저장 주소를 제1 디코딩 태스크에 추가하여 제1 디코딩 완료 정보를 획득하고, 여기서 제1 인코딩 완료 정보는 제1 FEC 패킷 그룹의 디코딩이 완료됨을 지시한다.
제1 디코딩 완료 정보는 손실된 원본 패킷의 저장 주소와 제1 FEC 패킷 그룹의 원본 FEC 패킷을 운반한다. 제1 데이터 스트림이 우선순위를 가질 때, 제1 디코딩 완료 정보는 추가로, 제1 데이터 스트림의 우선순위를 운반한다. 단계(1208)에에 도시된 프로세스는 단계(808)에서 제1 인코딩 완료 정보를 생성하는 프로세스와 동일하다. 여기서, 단계(1208)는 본 출원의 이 실시예에서 다시 설명되지 않는다.
1209: 타깃 하드웨어 엔진은 제1 디코딩 완료 정보를 제2 타깃 수신 큐에 추가하고, 여기서 제2 타깃 수신 큐는 제2 네트워크 디바이스의 처리될 인코딩 스트림의 디코딩 완료 정보를 저장하는 데 사용된다.
제2 네트워크 디바이스는 복수의 수신 큐를 미리 설정할 수 있다. 각각의 수신 큐는 제2 네트워크 디바이스의 처리될 인코딩 스트림의 디코딩 완료 정보를 저장하는 데 사용된다. 제2 타깃 수신 큐는 복수의 수신 큐 중 어느 하나일 수 있다. 복수의 수신 큐는 제2 네트워크 디바이스의 메모리, 프로세서, 및 타깃 하드웨어 엔진 중 어느 하나에 위치할 수 있다.
일부 가능한 구현에서, 제2 네트워크 디바이스는 수신 큐 각각에 대한 우선순위를 설정할 수 있다. 일부 가능한 구현에서, 제1 디코딩 완료 정보는 인코딩 스트림의 우선순위에 기반하여 메모리의 제2 타깃 수신 큐에 추가되고, 여기서 제2 타깃 수신 큐의 우선순위는 인코딩 스트림의 우선순위와 동일하다. 구체적인 추가 프로세스는 단계(809)에서 제1 인코딩 완료 정보를 제1 타깃 수신 큐에 추가하는 프로세스와 동일하다.
1210: 프로세서가 제2 타깃 수신 큐로부터 제1 디코딩 완료 정보를 읽는다.
단계(1210)는 프로세서의 FEC 소프트웨어 인터페이스에 의해 수행될 수 있다. FEC 소프트웨어 인터페이스는 우선순위 시퀀스에 기반하여 제2 수신 큐를 폴링할 수 있다. FEC 소프트웨어 인터페이스는 먼저 폴링 방식으로, 제1 디코딩 완료 정보가 제2 타깃 수신 큐로부터 획득될 수 있는지를 판정할 수 있다. 일부 가능한 구현에서, FEC 소프트웨어 인터페이스는 우선순위 시퀀스에 기반하여, 각각의 제2 수신 큐가 다른 디코딩 완료 정보를 갖는지를 순차적으로 질의하며, 여기서 제2 수신 큐 각각은 하나의 우선순위에 대응한다. 제2 수신 큐 각각에서, FEC 소프트웨어 인터페이스는 제2 타깃 수신 큐의 우선순위보다 높은 우선순위를 가지는 큐에 다른 디코딩 완료 정보가 없을 때, 제2 타깃 수신 큐로부터 디코딩 완료 정보를 획득한다. 단계(1210)에서 FEC 소프트웨어 인터페이스가 각각의 수신 큐를 폴링하는 프로세스는, 단계(810)에서 FEC 소프트웨어 인터페이스가 각각의 수신 큐를 폴링하는 프로세스와 동일하다.
1211: 프로세서는 제1 디코딩 완료 정보에 기반하여 메모리로부터 제1 FEC 패킷 그룹의 원본 FEC 패킷과 손실된 원본 패킷을 획득한다.
단계(1211)에 도시된 프로세스는 단계(811)에서 M개의 원본 패킷과 R개의 중복 패킷을 획득하는 프로세스와 동일하다. 여기에서, 본 출원의 이 실시예에서 단계(1211)는 다시 설명되지 않는다.
1212: 프로세서가 제1 FEC 패킷 그룹의 원본 FEC 패킷과 손실된 원본 패킷에 기반하여, 제1 데이터 스트림이 인코딩되기 전의 데이터 스트림을 복구한다.
단계(1212)는 프로세서의 FEC 소프트웨어 인터페이스에 의해 수행될 수 있다. FEC 소프트웨어 인터페이스는 제1 FEC 패킷 그룹에서 손실되지 않은 원본 FEC 패킷의 패킷 헤더를 먼저 제거하여 복수의 동일 길이 패킷을 획득할 수 있고; 그리고 나서, 복수의 동일 길이 패킷 및 손실된 원본 패킷에 기반하여, 제1 데이터 스트림이 인코딩되기 전의 데이터 스트림을 복구할 수 있다. 일부 가능한 구현에서, 단계(1212)는 다음 단계(12A 내지 12C)에 도시된 프로세스를 사용하여 구현될 수 있다.
단계(12A): 제1 FEC 패킷 그룹에 있는 원본 FEC 패킷에 대해, FEC 소프트웨어 인터페이스는 원본 FEC 패킷 각각의 FEC 패킷 헤더를 제거하여 복수의 동일 길이 패킷을 획득한다.
단계(12B): FEC 소프트웨어 인터페이스는 손실된 원본 패킷에 패딩된 데이터 및 복수의 동일 길이 패킷을 제거하여, 제1 데이터 스트림이 인코딩되기 전의 데이터 스트림에서 M개의 원본 패킷을 획득한다.
단계(12C): FEC 소프트웨어 인터페이스는 FEC 패킷 헤더에서 운반되는 원본 패킷 각각의 시퀀스 번호에 기반하여 M개의 원본 패킷을 정렬하여, 제1 데이터 스트림이 인코딩되기 전의 데이터 스트림을 획득한다.
1213: 프로세서가 데이터 스트림을 제2 단말로 송신한다.
단계(1213)는 단계(8123)와 유사하다. 여기에서, 본 출원의 이 실시예에서 단계(1213)는 다시 설명되지 않는다.
디코딩 프로세스에서 제2 네트워크 디바이스의 프로세서, 타깃 하드웨어 엔진 및 메모리 간의 상호 작용 상태를 추가로 설명하기 위해, 도 13에 도시된 본 출원의 실시예에 따른 FEC 디코딩의 흐름도를 참조한다. 절차는 구체적으로 단계(1301 내지 1306)를 포함한다.
단계(1301): UDP 프록시는 각 FEC 패킷의 저장 완료 메시지를 FEC 소프트웨어 인터페이스에 송신한다.
단계(1302): FEC 패킷 그룹의 저장 완료 메시지를 수신한 후, 원본 FEC 패킷이 FEC 패킷 그룹에서 손실되면, FEC 소프트웨어 인터페이스는 수신된 FEC 패킷 그룹에 기반하여 제1 디코딩 태스크를 생성하고, 제1 디코딩 태스크를 메모리의 태스크 버퍼에 송신한다.
태스크 버퍼는 복수의 송신 큐 및 복수의 수신 큐를 포함하고, FEC 소프트웨어 인터페이스는 제1 디코딩 태스크를 제1 디코딩 태스크의 우선순위에 대응하는 제2 타깃 송신 큐에 송신할 수 있다.
단계(1303): 타깃 하드웨어 엔진은 태스크 버퍼의 제2 타깃 송신 큐로부터 제1 디코딩 태스크를 획득하고, 제1 디코딩 태스크의 저장 주소에 기반하여 메모리로부터 FEC 패킷 그룹을 읽는다.
단계(1304): 타깃 하드웨어 엔진은 읽힌 FEC 패킷 그룹을 디코딩하여 손실된 원본 패킷을 획득하고, 손실된 원본 패킷을 메모리에 저장하며, 제1 디코딩 완료 정보를 메모리의 제2 타깃 수신 큐에 추가한다.
단계(1305): FEC 소프트웨어 인터페이스는 태스크 버퍼의 제2 타깃 수신 큐로부터 제1 디코딩 완료 정보를 읽고, 제1 디코딩 완료 정보에 기반하여 메모리에서 FEC 패킷 그룹 및 손실된 원본 패킷을 읽으며, FEC 패킷 그룹의 패킷 헤더를 제거하여 동일 길이 패킷을 획득한다.
단계(1306): FEC 소프트웨어 인터페이스는 동일 길이 패킷을 처리하여 데이터 스트림을 획득하고, 데이터 스트림을 출력한다.
단계(1207 내지 1213)에 도시된 프로세스는 타깃 처리 엔진, 메모리 및 프로세서가 협력하여 데이터 스트림을 제2 단말에 송신하는 프로세스이다. 일부 가능한 구현에서, 타깃 처리 엔진은 제1 FEC 패킷 그룹 및 손실된 원본 패킷을 프로세서에 직접 송신할 수 있고, 프로세서는 1212 및 1213에 도시된 프로세스를 수행한다. 일부 가능한 구현에서, 타깃 처리 엔진은 다르게는 1212 및 1213에 도시된 프로세스를 수행할 수 있다.
본 출원의 이 실시예에서 제공된 방법에 따르면, FEC 디코딩은, CPU에서가 아니라 제2 네트워크 디바이스의 타깃 하드웨어 엔진에서 제1 FEC 패킷 그룹에서 손실되지 않은 FEC 패킷에 대해 직접 수행된다. 따라서, CPU 오버헤드가 감소될 수 있으며, 제2 네트워크 디바이스의 디코딩 효율이 향상될 수 있다. 이와 같이, 제2 네트워크 디바이스는 패킷 전송 프로세스에서 큰 처리량의 요건을 쉽게 충족시킬 수 있다.
전술한 선택적 기술 솔루션 모두는 임의의 조합을 통해 본 개시의 선택적 실시예를 형성할 수 있다. 여기에서 세부 사항은 여기에서 다시 설명하지 않는다.
본 출원의 전술한 실시예에서 제공된 패킷 처리 장치가 패킷 처리를 수행할 때, 전술한 기능 모듈로의 분할은 단지 예시를 위한 것이다. 실제 애플리케이션에서 전술한 기능들은 서로 다른 기능 모듈에 할당되어 요건에 따라 구현될 수 있으며, 즉, 장치의 내부 구조는 상술한 기능의 전부 또는 일부를 완성하기 위해 서로 다른 기능 모듈로 분할된다. 또한, 전술한 실시예에서 제공된 패킷 처리 장치와 전술한 실시예에서 제공된 패킷 처리 방법 실시예는 동일한 개념에 속한다. 장치의 특정 구현 프로세스에 대해서는 방법 실시예를 참조한다. 세부 사항은 여기서 다시 설명하지 않는다.
당업자는 실시예의 단계의 전부 또는 일부가 하드웨어 또는 관련 하드웨어에 명령하는 프로그램에 의해 구현될 수 있음을 이해할 수 있다. 프로그램은 컴퓨터가 판독 가능한 저장 매체에 저장될 수 있다. 저장 매체는 읽기 전용 메모리, 자기 디스크, 광 디스크 등을 포함할 수 있다.
전술한 설명은 단지 본 출원의 바람직한 실시예일 뿐, 본 출원을 제한하려는 것은 아니다. 본 출원의 원칙을 벗어나지 않고 이루어진 모든 수정, 동등한 교체 또는 개선은 본 출원의 보호 범위에 속해야 한다.

Claims (20)

  1. 프로세서 및 타깃 하드웨어 엔진을 포함하는 네트워크 디바이스에 적용되는 패킷 처리 방법으로서,
    상기 패킷 처리 방법은,
    상기 프로세서가, 처리될 제1 데이터 스트림에서 M개의 원본 패킷에 기반하여 제1 인코딩 태스크(task)를 생성하는 단계 - M은 양의 정수이고, 상기 제1 인코딩 태스크는 상기 M개의 원본 패킷을 인코딩하도록 지시하는 데 사용됨 -; 및
    상기 타깃 하드웨어 엔진이, 상기 제1 인코딩 태스크에 기반하여 상기 M개의 원본 패킷에 대해 순방향 오류 정정(forward error correction, FEC) 인코딩을 수행하여 R개의 중복(redundant) 패킷을 획득하는 단계 - R은 양의 정수임 -
    를 포함하는 패킷 처리 방법.
  2. 제1항에 있어서,
    상기 프로세서가, 처리될 제1 데이터 스트림에서 M개의 원본 패킷에 기반하여 제1 인코딩 태스크를 생성하는 단계 이후에,
    상기 패킷 처리 방법은,
    상기 프로세서가, 상기 제1 인코딩 태스크를 제1 타깃 송신 큐에 저장하는 단계 - 상기 제1 타깃 송신 큐는 상기 네트워크 디바이스의 처리될 데이터 스트림의 인코딩 태스크를 저장하는 데 사용되고, 상기 네트워크 디바이스의 처리될 데이터 스트림은 상기 제1 데이터 스트림을 포함함 -; 및
    상기 타깃 하드웨어 엔진이, 상기 제1 타깃 송신 큐로부터 상기 제1 인코딩 태스크를 읽는 단계
    를 더 포함하는 패킷 처리 방법.
  3. 제2항에 있어서,
    상기 프로세서가, 상기 제1 인코딩 태스크를 제1 타깃 송신 큐에 저장하는 단계는,
    상기 프로세서가, 상기 제1 데이터 스트림의 우선순위에 기반하여 상기 제1 인코딩 태스크를 상기 제1 타깃 송신 큐에 추가하는 단계 - 상기 제1 타깃 송신 큐의 우선순위는 상기 제1 데이터 스트림의 우선순위와 같음 -
    를 포함하는, 패킷 처리 방법.
  4. 제2항에 있어서,
    상기 타깃 하드웨어 엔진이, 상기 제1 타깃 송신 큐로부터 상기 제1 인코딩 태스크를 읽는 단계는,
    상기 타깃 하드웨어 엔진이, 송신 큐의 우선순위 시퀀스에 기반하여 상기 송신 큐 각각에 인코딩 태스크가 있는지를 순차적으로 질의하는 단계 - 상기 송신 큐 각각은 하나의 우선순위에 대응함 -; 및
    상기 타깃 하드웨어 엔진이, 상기 송신 큐에서 상기 제1 타깃 송신 큐의 우선순위보다 높은 우선순위를 가지는 큐에 인코딩 태스크가 없을 때 상기 제1 타깃 송신 큐로부터 상기 제1 인코딩 태스크를 읽는 단계
    를 포함하는, 패킷 처리 방법.
  5. 제1항에 있어서,
    상기 프로세서가, 처리될 제1 데이터 스트림에서 저장된 M개의 원본 패킷에 기반하여 제1 인코딩 태스크를 생성하는 단계 이전에,
    상기 패킷 처리 방법은,
    상기 네트워크 디바이스가, 상기 제1 데이터 스트림의 수신된 원본 패킷을 상기 네트워크 디바이스의 메모리에 저장하는 단계; 및
    상기 네트워크 디바이스의 메모리에서 상기 제1 데이터 스트림의 인코딩되지 않은 원본 패킷의 수량이 M보다 크거나 같을 때, 상기 프로세서가, 상기 제1 데이터 스트림의 인코딩되지 않은 원본 패킷으로부터 상기 M개의 원본 패킷을 획득하는 단계
    를 더 포함하는 패킷 처리 방법.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 제1 인코딩 태스크는 상기 M개의 원본 패킷의 저장 주소(storage address)를 포함하고; 또는 상기 제1 인코딩 태스크는 상기 M개의 원본 패킷의 저장 주소 및 상기 제1 데이터 스트림의 우선순위를 포함하며; 또는 상기 제1 인코딩 태스크는 상기 M개의 원본 패킷을 포함하고; 또는 상기 제1 인코딩 태스크는 상기 M개의 원본 패킷 및 상기 제1 데이터 스트림의 우선순위를 포함하는, 패킷 처리 방법.
  7. 프로세서 및 타깃 하드웨어 엔진을 포함하는 네트워크 디바이스에 적용되는, 패킷 처리 방법으로서,
    상기 패킷 처리 방법은,
    상기 프로세서가, 수신된 제1 데이터 스트림으로부터 제1 FEC 패킷 그룹을 획득하는 단계 - 상기 제1 FEC 패킷 그룹에서 모든 FEC 패킷은 동일한 FEC 패킷 헤더를 갖고, 상기 FEC 패킷 헤더는 FEC-인코딩 원본 패킷 수량 M을 포함함 -;
    상기 제1 FEC 패킷 그룹의 원본 패킷의 수량이 상기 원본 패킷 수량 M보다 적을 때, 상기 프로세서가, 상기 제1 FEC 패킷 그룹에 기반하여 제1 디코딩 태스크를 생성하는 단계 - 상기 제1 디코딩 태스크는 상기 제1 FEC 패킷 그룹을 디코딩하도록 지시하는 데 사용됨 -; 및
    상기 타깃 하드웨어 엔진이, 상기 제1 디코딩 태스크에 기반하여 상기 제1 FEC 패킷 그룹의 원본 패킷 및 상기 원본 패킷의 중복 패킷에 대해 FEC 디코딩을 수행하여, 상기 제1 FEC 패킷 그룹에서 손실된 원본 패킷을 획득하는 단계
    를 포함하는 패킷 처리 방법.
  8. 제7항에 있어서,
    상기 프로세서가, 상기 제1 FEC 패킷 그룹에 기반하여 제1 디코딩 태스크를 생성하는 단계 이후에,
    상기 패킷 처리 방법은,
    상기 프로세서가, 상기 제1 디코딩 태스크를 제2 타깃 송신 큐에 저장하는 단계 - 상기 제2 타깃 송신 큐는 상기 네트워크 디바이스의 처리될 데이터 스트림의 디코딩 태스크를 저장하는 데 사용되고, 상기 네트워크 디바이스의 처리될 데이터 스트림은 상기 제1 데이터 스트림을 포함함 -; 및
    상기 타깃 하드웨어 엔진이, 상기 제2 타깃 송신 큐로부터 상기 제1 디코딩 태스크를 읽는 단계
    를 더 포함하는 패킷 처리 방법.
  9. 제8항에 있어서,
    상기 프로세서가, 상기 제1 디코딩 태스크를 제2 타깃 송신 큐에 저장하는 단계는,
    상기 프로세서가, 상기 제1 데이터 스트림의 우선순위에 기반하여 상기 제1 디코딩 태스크를 상기 제2 타깃 송신 큐에 추가하는 단계 - 상기 제2 타깃 송신 큐의 우선순위는 상기 제1 데이터 스트림의 우선순위와 같음 -
    를 포함하는, 패킷 처리 방법.
  10. 제8항에 있어서,
    상기 타깃 하드웨어 엔진이, 상기 제2 타깃 송신 큐로부터 상기 제1 디코딩 태스크를 읽는 단계는,
    상기 타깃 하드웨어 엔진이, 송신 큐의 우선순위 시퀀스에 기반하여 상기 송신 큐 각각에 디코딩 태스크가 있는지를 순차적으로 질의하는 단계 - 상기 송신 큐 각각은 하나의 우선순위에 대응함 -; 및
    상기 타깃 하드웨어 엔진이, 상기 송신 큐에서 상기 제2 타깃 송신 큐의 우선순위보다 높은 우선순위를 가지는 큐에 다른 디코딩 태스크가 없을 때 상기 제2 타깃 송신 큐로부터 상기 제1 디코딩 태스크를 읽는 단계
    를 포함하는, 패킷 처리 방법.
  11. 패킷 처리 장치로서,
    상기 패킷 처리 장치는,
    처리될 제1 데이터 스트림에서 M개의 원본 패킷에 기반하여 제1 인코딩 태스크를 생성하도록 - M은 양의 정수이고, 상기 제1 인코딩 태스크는 상기 M개의 원본 패킷을 인코딩하도록 지시하는 데 사용됨 - 구성된 프로세서; 및
    상기 제1 인코딩 태스크에 기반하여 상기 M개의 원본 패킷에 대해 순방향 오류 정정(forward error correction, FEC) 인코딩을 수행하여 R개의 중복 패킷을 획득하도록 - R은 양의 정수임 - 구성된 타깃 하드웨어 엔진
    을 포함하는 패킷 처리 장치.
  12. 제11항에 있어서,
    상기 프로세서는 추가로, 상기 제1 인코딩 태스크를 제1 타깃 송신 큐에 저장하도록 구성되고, 상기 제1 타깃 송신 큐는 상기 패킷 처리 장치의 처리될 데이터 스트림의 인코딩 태스크를 저장하는 데 사용되고, 상기 패킷 처리 장치의 처리될 데이터 스트림은 상기 제1 데이터 스트림을 포함하며, 그리고
    상기 타깃 하드웨어 엔진이 추가로, 상기 제1 타깃 송신 큐로부터 상기 제1 인코딩 태스크를 읽도록 구성되는, 패킷 처리 장치.
  13. 제12항에 있어서,
    상기 프로세서가, 상기 제1 데이터 스트림의 우선순위에 기반하여 상기 제1 인코딩 태스크를 상기 제1 타깃 송신 큐에 추가하도록 구성되며, 상기 제1 타깃 송신 큐의 우선순위는 상기 제1 데이터 스트림의 우선순위와 같은, 패킷 처리 장치.
  14. 제13항에 있어서,
    상기 타깃 하드웨어 엔진이,
    송신 큐의 우선순위 시퀀스에 기반하여 상기 송신 큐 각각에 인코딩 태스크가 있는지를 순차적으로 질의하고 - 상기 송신 큐 각각은 하나의 우선순위에 대응함 -; 및
    상기 송신 큐에서 상기 제1 타깃 송신 큐의 우선순위보다 높은 우선순위를 가지는 큐에 인코딩 태스크가 없을 때 상기 제1 타깃 송신 큐로부터 상기 제1 인코딩 태스크를 읽도록 구성되는, 패킷 처리 장치.
  15. 패킷 처리 장치로서,
    상기 패킷 처리 장치는 프로세서 및 타깃 하드웨어 엔진을 포함하고,
    상기 프로세서가, 수신된 제1 데이터 스트림으로부터 제1 FEC 패킷 그룹을 획득하고 - 상기 제1 FEC 패킷 그룹에서 모든 FEC 패킷은 동일한 FEC 패킷 헤더를 갖고, 상기 FEC 패킷 헤더는 FEC-인코딩 원본 패킷 수량 M을 포함함 -;
    상기 제1 FEC 패킷 그룹의 원본 패킷의 수량이 상기 원본 패킷 수량 M보다 적을 때, 상기 제1 FEC 패킷 그룹에 기반하여 제1 디코딩 태스크를 생성하도록 - 상기 제1 디코딩 태스크는 상기 제1 FEC 패킷 그룹을 디코딩하도록 지시하는 데 사용됨 - 구성되고; 그리고
    상기 타깃 하드웨어 엔진이, 상기 제1 디코딩 태스크에 기반하여 상기 제1 FEC 패킷 그룹의 원본 패킷 및 상기 원본 패킷의 중복 패킷에 대해 FEC 디코딩을 수행하여, 상기 제1 FEC 패킷 그룹에서 손실된 원본 패킷을 획득하도록 구성되는, 패킷 처리 장치.
  16. 제15항에 있어서,
    상기 프로세서가 추가로, 상기 제1 디코딩 태스크를 제2 타깃 송신 큐에 저장하도록 구성되고, 상기 제2 타깃 송신 큐는 상기 패킷 처리 장치의 처리될 데이터 스트림의 디코딩 태스크를 저장하는 데 사용되고, 상기 패킷 처리 장치의 처리될 데이터 스트림은 상기 제1 데이터 스트림을 포함하며; 그리고
    상기 타깃 하드웨어 엔진이 추가로, 상기 제2 타깃 송신 큐로부터 상기 제1 디코딩 태스크를 읽도록 구성되는, 패킷 처리 장치.
  17. 제16항에 있어서,
    상기 프로세서가, 상기 제1 데이터 스트림의 우선순위에 기반하여 상기 제1 디코딩 태스크를 상기 제2 타깃 송신 큐에 추가하도록 구성되고, 상기 제2 타깃 송신 큐의 우선순위는 상기 제1 데이터 스트림의 우선순위와 같은, 패킷 처리 장치.
  18. 제16항에 있어서,
    상기 타깃 하드웨어 엔진이,
    송신 큐의 우선순위 시퀀스에 기반하여 상기 송신 큐 각각에 디코딩 태스크가 있는지를 순차적으로 질의하고 - 상기 송신 큐 각각은 하나의 우선순위에 대응함 -; 및
    상기 송신 큐에서 상기 제2 타깃 송신 큐의 우선순위보다 높은 우선순위를 가지는 큐에 다른 디코딩 태스크가 없을 때 상기 제2 타깃 송신 큐로부터 상기 제1 디코딩 태스크를 읽도록 구성되는, 패킷 처리 장치.
  19. 프로세서와 타깃 하드웨어 엔진을 포함하는 칩으로서,
    상기 프로세서가 제1항 내지 제6항 중 어느 하나에 따른 방법을 구현하도록 구성된 프로세서이고, 상기 타깃 하드웨어 엔진은 제1항 내지 제6항 중 어느 하나에 따른 방법을 구현하도록 구성된 타깃 하드웨어 엔진인, 칩.
  20. 프로세서와 타깃 하드웨어 엔진을 포함하는 칩으로서,
    상기 프로세서가 제7항 내지 제10항 중 어느 하나에 따른 방법을 구현하도록 구성된 프로세서이고, 상기 타깃 하드웨어 엔진은 제7항 내지 제10항 중 어느 하나에 따른 방법을 구현하도록 구성된 타깃 하드웨어 엔진인, 칩.
KR1020227005436A 2019-09-10 2020-09-10 패킷 처리 방법 및 장치 그리고 칩 KR20220033055A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
CN201910854367.2 2019-09-10
CN201910854367 2019-09-10
CN201911205835.X 2019-11-29
CN201911205835.XA CN112564855A (zh) 2019-09-10 2019-11-29 报文处理方法、装置以及芯片
PCT/CN2020/114586 WO2021047606A1 (zh) 2019-09-10 2020-09-10 报文处理方法、装置以及芯片

Publications (1)

Publication Number Publication Date
KR20220033055A true KR20220033055A (ko) 2022-03-15

Family

ID=74866580

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227005436A KR20220033055A (ko) 2019-09-10 2020-09-10 패킷 처리 방법 및 장치 그리고 칩

Country Status (6)

Country Link
US (2) US11695502B2 (ko)
EP (1) EP3996302B1 (ko)
JP (1) JP2022546102A (ko)
KR (1) KR20220033055A (ko)
MX (1) MX2022002813A (ko)
WO (1) WO2021047606A1 (ko)

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5844897A (en) * 1994-09-16 1998-12-01 Sony Corporation Data transmission apparatus and data transmission method
US6317462B1 (en) * 1998-10-22 2001-11-13 Lucent Technologies Inc. Method and apparatus for transmitting MPEG video over the internet
JP3438651B2 (ja) * 1999-05-31 2003-08-18 日本電気株式会社 パケット多重装置
US6748441B1 (en) * 1999-12-02 2004-06-08 Microsoft Corporation Data carousel receiving and caching
US7178089B1 (en) * 2000-08-23 2007-02-13 Telefonaktiebolaget Lm Ericsson (Publ) Two stage date packet processing scheme
AU2003901931A0 (en) * 2003-04-23 2003-05-15 Thiss Pty Ltd Radio network assignment and access system
US7328393B2 (en) * 2004-04-13 2008-02-05 Cisco Technology, Inc. Forward error correction in packet networks
WO2007132016A1 (en) * 2006-05-16 2007-11-22 Interuniversitair Microelektronica Centrum (Imec) Digital receiver for software-defined radio implementation
JP2008028767A (ja) * 2006-07-21 2008-02-07 Sumitomo Electric Networks Inc ネットワークカードおよび情報処理装置
WO2009087774A1 (ja) * 2008-01-10 2009-07-16 Sumitomo Electric Networks, Inc. ネットワークカードおよび情報処理装置
JP5353278B2 (ja) * 2009-02-06 2013-11-27 富士通株式会社 通信装置
CN101877620B (zh) * 2009-04-30 2013-08-14 华为技术有限公司 前向纠错方法、装置和***
US9237105B2 (en) * 2009-12-08 2016-01-12 Microsoft Technology Licensing, Llc Data communication with compensation for packet loss
US8839078B2 (en) * 2010-03-05 2014-09-16 Samsung Electronics Co., Ltd. Application layer FEC framework for WiGig
CN102595252B (zh) * 2011-01-11 2016-09-28 中兴通讯股份有限公司 流媒体前向纠错实现方法及***
WO2012119398A1 (zh) * 2011-08-19 2012-09-13 华为技术有限公司 一种光传输模块和光信号传输装置
US9009567B2 (en) * 2011-12-12 2015-04-14 Cleversafe, Inc. Encrypting distributed computing data
JP6070712B2 (ja) * 2012-10-01 2017-02-01 富士通株式会社 情報処理装置及び性能解析データの収集方法
JP6188093B2 (ja) * 2012-12-26 2017-08-30 リアルテック シンガポール プライベート リミテッド 通信トラフィック処理アーキテクチャおよび方法
CN103533453A (zh) * 2013-10-28 2014-01-22 苏州新海宜通信科技股份有限公司 一种抗丢包的传输方法
US10320520B2 (en) * 2013-11-15 2019-06-11 Hitachi, Ltd. Communication device, system and method
US9755901B2 (en) * 2014-01-21 2017-09-05 Huawei Technologies Co., Ltd. System and method for a software defined protocol network node
JP6229543B2 (ja) 2014-02-28 2017-11-15 株式会社三洋物産 遊技機
US9417945B2 (en) * 2014-03-05 2016-08-16 International Business Machines Corporation Error checking and correction for NAND flash devices
WO2015162734A1 (ja) * 2014-04-23 2015-10-29 三菱電機株式会社 中継装置およびデータ転送方法
CN105933342A (zh) * 2016-06-24 2016-09-07 浙江宇视科技有限公司 一种视频监控数据的传输方法及装置

Also Published As

Publication number Publication date
US20220190956A1 (en) 2022-06-16
US20230299878A1 (en) 2023-09-21
EP3996302A4 (en) 2022-09-07
EP3996302A1 (en) 2022-05-11
MX2022002813A (es) 2022-04-06
JP2022546102A (ja) 2022-11-02
EP3996302B1 (en) 2024-03-20
WO2021047606A1 (zh) 2021-03-18
US11695502B2 (en) 2023-07-04

Similar Documents

Publication Publication Date Title
CN109981471B (zh) 一种缓解拥塞的方法、设备和***
WO2017161999A1 (zh) 一种报文处理的方法及相关设备
JP4516129B2 (ja) データのセグメンテーションと連結と再構成を実現する方法及び送信機
KR20210038959A (ko) 서비스 전송 방법, 설비 및 컴퓨터 저장매체
KR100971052B1 (ko) 데이터 축적 방법 및 데이터 축적 시스템, 및 데이터 기록제어 장치, 데이터 기록 명령 장치, 데이터 수신 장치 및정보 처리 단말기
CN110418376A (zh) 数据传输方法及装置
WO2018201498A1 (zh) 一种数据接收状态报告方法及装置
WO2018121742A1 (zh) 一种流数据的传输方法和装置
JP2012508534A (ja) 同期スケジューリング方法および装置
CN103975551A (zh) 端到端的网络QoS控制***、通信设备和端到端的网络QoS控制方法
EP1473636A1 (en) Information processing device and method, and computer program
CN113079074A (zh) 一种基于can总线的协议栈通信方法、装置和存储介质
US11695502B2 (en) Packet processing method and apparatus, and chip
CN112564855A (zh) 报文处理方法、装置以及芯片
WO2014067409A1 (zh) 一种队列调度方法、装置及***
WO2015106444A1 (zh) 一种数据包的传输方法和传输设备
CN106850153B (zh) 数据重传方法及***
US11683123B2 (en) Packet processing method and apparatus, and computer storage medium
CN112564856A (zh) 报文处理方法、装置以及计算机可读存储介质
KR102601348B1 (ko) 데이터 송신 방법, 송신 장치, 데이터 수신 방법 및 수신 장치
WO2017088489A1 (zh) 一种数据报文传输方法、***及通信***
Bouras et al. Al-fec application on ngmn-edge computing integrated systems
JP5833191B1 (ja) 配信システム及び方法
Saxena et al. Dare: Dof-aided random encoding for network coding over lossy line networks
Cabrera-Medina et al. Video transmission in multicast networks using network coding

Legal Events

Date Code Title Description
E902 Notification of reason for refusal