원자 규칙의 타임서보 IP 코어
비트웨어 파트너 IP 타임서보 IP 코어 고성능 시스템 타이머 IP Atomic Rules의 타임서보 IP 코어는 다음과 같은 역할을 하는 RTL IP 코어입니다.
비트웨어의 SmartNIC 셸과 비트웨어의 루프백 예제 모두의 기능 중 하나는 패킷에서 프로토콜 필드를 추출하는 패킷 파서/분류기입니다. 이 백서에서는 파서에 대해 설명할 뿐만 아니라 HLS를 사용하여 파서를 빌드하고 구성하는 것이 P4 언어를 사용하는 것보다 어떻게 더 나은 구현 결과를 가져오는지 설명하고자 했습니다. 파서 코드는 루프백 예제(2020년 1월 제공)의 일부로 AMD UltraScale+ 소유자에게 무료로 BittWare 개발자 웹사이트에서 제공됩니다.
현재 BittWare의 SmartNIC Shell의 파서 구성 요소는 AMD HLS C++ 개발 환경을 사용하여 빌드됩니다. 하지만 이전 버전의 BittWare SmartNIC Shell은 AMD SDNet 툴을 통해 P4 언어를 사용했습니다.
P4를 사용하는 이유 중 하나는 상용 인텔 서버에서 소프트웨어 정의 네트워킹(SDN)을 도입하는 사람들 사이에서 인기 있는 새로운 표준이기 때문입니다. 하지만 AMD는 나중에 SDNet의 가용성을 제한했습니다. P4는 특히 SmartNIC Shell의 최종 사용자를 위한 것이었기 때문에 이러한 제한으로 인해 보다 개방적인 솔루션을 찾게 되었습니다. HLS를 사용한 RSS 구현의 성공 이후, 우리는 동일한 HLS 접근 방식(특히 자일링스 HLS C++ 환경)을 사용하여 SmartNIC Shell 파서를 다시 구현해야겠다는 동기를 부여받았습니다.
이더넷을 통해 사용되는 프로토콜은 하드웨어가 활용하기 까다롭습니다. 이러한 문제는 프로토콜에 많은 옵션 필드가 있기 때문에 존재합니다. 이러한 옵션은 예를 들어 IP 헤더의 시작 부분을 찾는 것을 복잡하게 만듭니다. 왜 그럴까요? IP 헤더의 경우 앞에 0, 1 또는 2개의 VLAN 태그가 있을 수 있습니다. MPLS 태그도 있을 수 있습니다. 따라서 하드웨어는 IP 헤더를 찾을 수 있을 정도로 프로토콜을 이해해야 합니다. 하드웨어 필터와 테이블에서 자주 사용되는 IP 주소를 찾으려면 하드웨어에 IP 헤더가 필요합니다. IP 헤더 자체에 선택적 필드가 있기 때문에 다음 단계에서도 비슷한 문제가 존재합니다.
BittWare의 HLS C++ 패킷 파서는 처리할 수 있습니다:
포트 ID는 이러한 IP 프로토콜에서 찾을 수 있다고 가정합니다: TCP, UDP, DCCP 및 STCP
기본적으로 두 가지 버전의 패킷 구문 분석기를 만들었기 때문에 P4와 HLS C++를 사용할 때 몇 가지 차이점을 발견했습니다. 전반적으로 HLS 흐름은 P4보다 덜 추상적이지만 도구는 훨씬 더 성숙합니다.
리소스 사용량에 대한 자세한 내용은 표에 나와 있습니다:
특징 | P4/SDNet | HLS C++ |
---|---|---|
CLB | 3,185 | 3,391 |
BRAM | 22 | 0 |
레지스터 | 10,361 | 5,975 |
코드 라인 | 206 | 1,154 |
모든 FPGA 리소스에서 HLS가 비슷하거나 더 낫다는 것을 알 수 있습니다. 소스 코드에 더 많은 줄이 필요하지만, 그 중 일부는 주석과 서식의 영향을 받습니다. 그러나 HLS C++ 구현이 항상 P4보다 더 많은 코드 줄을 필요로 하는 것은 사실입니다. 하지만 이는 패킷 파서/분류기의 경우로, P4가 설명할 수 있는 범위에 속하며 HLS C++는 더 많은 작업을 수행할 수 있습니다. HLS는 매우 범용적이며 거의 모든 것을 할 수 있습니다. P4는 매우 전문적입니다.
더 좋은 점은 이제 HLS 구현이 존재하므로 이더넷 프로토콜 변형을 소화하기 위해 이를 수정하는 후속 작업은 P4 언어에서 수정하는 것과 거의 동일하다는 것입니다. 이는 HLS C++ 구현이 우리가 만든 저수준 구문 분석기 함수에 대한 호출 시퀀스로 구성되어 있기 때문입니다. 이 접근 방식은 P4 아래에 있는 런타임을 직접 조작하는 것과 유사합니다.
앞서 언급했듯이 루프백 예제의 소스 코드(파서 블록 포함)는 BittWare 개발자 사이트를 통해 울트라스케일++ 소유자에게 무료로 제공됩니다. 이 예제는 HLS C++ 코드 내에서 AXI 인터페이스를 사용하는 방법을 보여주는 훌륭한 예시입니다. 보고 싶지만 BittWare FPGA 카드가 없으신가요? 유니티에 문의하여 구입처를 알아보세요.
이더넷을 통해 사용되는 프로토콜은 하드웨어가 활용하기 까다롭습니다. 이러한 문제는 프로토콜에 많은 옵션 필드가 있기 때문에 존재합니다. 이러한 옵션은 예를 들어 IP 헤더의 시작 부분을 찾는 것을 복잡하게 만듭니다. 왜 그럴까요? IP 헤더의 경우 앞에 0, 1 또는 2개의 VLAN 태그가 있을 수 있습니다. MPLS 태그도 있을 수 있습니다. 따라서 하드웨어는 IP 헤더를 찾을 수 있을 정도로 프로토콜을 이해해야 합니다. 하드웨어 필터와 테이블에서 자주 사용되는 IP 주소를 찾으려면 하드웨어에 IP 헤더가 필요합니다. IP 헤더 자체에 선택적 필드가 있기 때문에 다음 단계에서도 비슷한 문제가 존재합니다.
BittWare의 HLS C++ 패킷 파서는 처리할 수 있습니다:
포트 ID는 이러한 IP 프로토콜에서 찾을 수 있다고 가정합니다: TCP, UDP, DCCP 및 STCP
P4 언어는 소프트웨어를 사용하여 "패킷 전달 데이터 플레인"(또는 네트워크 스위치)을 정의하기 위해 만들어졌습니다. 이 언어는 특히 하드웨어 공급업체인 베어풋 네트웍스와 관련이 있습니다. P4 언어는 Google이 홍보하는 "P4 런타임"이라는 것과는 구별됩니다. P4 런타임은 P4로 컴파일된 솔루션의 제어 플레인을 조작할 수 있는 표준 런타임 API를 제공합니다.
P4를 사용하면 새로운 프로토콜에 대한 패킷 분류기/파서를 쉽게 정의할 수 있습니다. 또한 P4는 완전한 테이블 조회 기능 세트를 지정하며, 예를 들어 VLAN 태그를 제거하여 흐르는 패킷을 다시 작성할 수 있습니다.
그렇다면 P4의 유연성이 FPGA의 채택으로 이어질까요? 그렇게 되지 않을 것으로 보이는 몇 가지 이유가 있습니다.
FPGA 하드웨어에서 P4의 하위 집합을 제공하는 상용 옵션이 존재하지만, 현재 그 범위가 제한되어 있습니다. 또한 앞서 언급했듯이 상업적 조건으로 인해 BittWare는 이를 활용하여 제품과 함께 무료로 제공할 수 있는 예제 프로그램을 만들기가 어렵습니다.
실제 FPGA 애플리케이션을 P4로만 작성할 수 있는 것은 없다는 점에 유의해야 합니다. 예를 들어, 일부 예제에서 파서 다음에 나오는 RSS(수신자 측 스케일링) 블록은 P4로 작성할 수 없습니다. 그러나 HLS C++를 사용하여 두 블록 또는 두 기능을 결합한 단일 블록을 작성할 수 있습니다.
또한 P4 테이블 조회 함수는 기본적으로 RTL 또는 HLS C++로 작성된 하드웨어 전용 런타임 라이브러리의 래퍼입니다. 프로그래머는 아무런 불이익 없이 HLS C++에서 이러한 런타임을 직접 호출할 수 있습니다.
결론은 P4와 HLS C++를 모두 사용하여 구문 분석기를 구현한 결과, 실제로는 HLS C++ 접근 방식을 선호한다는 것입니다. FPGA에서 P4에 대한 수요가 성숙한 툴을 지원할 만큼 충분히 커질지는 확실하지 않습니다. HLS C++는 더 많은 작업을 수행할 수 있고 더 성숙합니다.
FPGA에서 패킷 구문 분석기를 구현하는 두 가지 방법, 즉 P4 언어와 HLS C++를 사용하는 방법에 대한 설명이 여러분에게 적합한 접근 방식을 평가하는 데 도움이 되기를 바랍니다.
마지막으로 한 가지 참고할 사항은 FPGA 카드 간의 이식성에 관한 것입니다. HLS는 AMD FPGA 기반 카드 간에는 변경이 거의 필요 없는 간편한 방법을 제공합니다. 520N-MX와 같은 인텔 기반 카드로 이동하려면 특히 컴파일러 프래그마와 관련하여 소스 코드 변경이 필요합니다. 그러나 기본 개념은 동일합니다. 두 경우 모두 유니티는 FPGA 번역 문제에 대한 지식을 바탕으로 C++를 구조화하고 있습니다. 임의의 C++ 코드는 FPGA 내부에서 매우 제대로 실행되지 않습니다. 그러나 프래그마로 재구조화되고 기름을 부은 C++ 코드는 매우 잘 작동합니다. AMD나 Intel에 필요한 변경 사항은 매우 유사하지만 표현 방식만 약간 다를 뿐입니다.
비트웨어의 SmartNIC 셸의 일부인 파서는 팀이 FPGA 카드에서 네트워크 패킷 처리 애플리케이션을 빠르게 구축할 수 있도록 도와줍니다. 유니티 카드용 SmartNIC에 대해 자세히 알아보거나 유니티에 연락하여 애플리케이션 요구 사항에 대해 상담하세요.
BittWare의 루프백 예제는 무료로 제공할 수 있는 SmartNIC 셸의 하위 집합을 다시 배포합니다. 이 하위 집합에는 파서 라이브러리가 포함됩니다.
이 페이지에 표시된 내용은 SmartNIC Shell의 일부인 파서에 대한 기본 개요입니다. SmartNIC Shell에 대한 전체 앱 노트에는 훨씬 더 자세한 내용이 있으며, 무엇보다도 무료로 다운로드할 수 있습니다! 양식을 작성하여 전체 앱 노트의 PDF 버전에 대한 액세스를 요청하세요.
"*"는 필수 필드를 나타냅니다.
비트웨어 파트너 IP 타임서보 IP 코어 고성능 시스템 타이머 IP Atomic Rules의 타임서보 IP 코어는 다음과 같은 역할을 하는 RTL IP 코어입니다.
IA-780i 400G + PCIe Gen5 단일 폭 카드 Agilex의 성능을 갖춘 소형 400G 카드 인텔 Agilex 7 I-시리즈 FPGA는 애플리케이션에 최적화되어 있습니다.
IP & 솔루션으로 돌아가기 TCP/IP 오프로드 이더넷 IP TCP/IP(전송 제어 프로토콜/인터넷 프로토콜)는 FPGA용 이더넷 IP 코어로, 다음과 같은 기능을 제공합니다.
BittWare 온디맨드 웨비나 컴퓨팅 스토리지: 가속화를 데이터에 더 가깝게 가져오기 가속화가 스토리지에 더 가까워지고 기존 폼 팩터가 변화함에 따라 고성능 스토리지가 변화하고 있습니다.