위성 접시

백서

PCIe 데이터 캡처

개요

고해상도 센서는 호스트 컴퓨터가 캡처하고 처리할 수 있는 수준으로 출력을 낮추기 위해 FPGA 사전 처리가 필요한 데이터 속도를 생성할 수 있습니다. FPGA 후 데이터 속도가 초당 약 40Gb/s를 초과하는 경우, 해당 데이터를 호스트로 이동하려면 특수 솔루션이 필요합니다.

비트웨어는 고객 IP의 요구에 유연하게 대응하고 비용을 절감할 수 있는 아키텍처 개념을 갖추고 있습니다.

이 백서에서는 비트웨어의 고속 데이터 캡처 및 레코더 개념의 데이터 캡처 구성 요소를 다룹니다. PCIe 버스를 통해 호스트 DDR4로 지속적인 100Gb/s 캡처를 달성하는 데 사용되는 몇 가지 기술을 설명합니다.

PCIe 데이터 캡처를 위한 아키텍처 목표

이 개념의 목표는 고객이 많은 CPU 코어를 사용하여 해당 데이터를 처리할 수 있는 마더보드에서 FPGA에서 100Gb/s를 달성하는 것입니다. 이 개념은 PCIe와 CPU를 통해 FPGA 카드에서 호스트 DDR4로 데이터를 이동합니다. 영구 메모리에 기록하는 옵션 구성 요소(이 작업에는 전용 CPU가 필요함)와 두 개의 CPU를 사용하여 DDR4에 200Gb/s를 캡처하기 위한 두 번째 PCIe를 추가하는 옵션이 있습니다.

데이터 캡처 개념은 AMD 및 Intel FPGA 기반 제품을 사용하는 고객을 위해 BittWare 개발자 웹사이트에서 사용할 수 있습니다. 이 기능은 AMD 버텍스 울트라스케일+ VU9P FPGA의 12%를 소비합니다. 이 프로젝트를 다른 BittWare Agilex 또는 UltraScale+ 카드에 적용하는 것은 고객이 직접 비교적 쉽게 할 수 있습니다. 

데이터 캡처 예시
앱 노트 썸네일
데이터 캡처 앱 노트의 샘플 페이지

앱 노트 요청하기

이 백서보다 더 자세한 정보가 필요하신가요? 데이터 캡처 개념에 대한 설명서를 제공하는 앱 노트를 요청하세요. 여기를 클릭하세요 >>

100Gb/s PCIe 데이터 캡처를 달성한 방법

PCIe 이론과 실제

이론적으로 PCIe 3세대는 레인당 985MB/s를 전송할 수 있습니다. 16배속의 경우 각 방향에서 15.760GB/s(126Gb/s)를 의미하며, 이는 100Gb/s의 목표를 훨씬 뛰어넘는 속도입니다. 그러나 경로를 따라 버퍼 관리뿐만 아니라 프로토콜 계층이 있습니다. 이를 탐구하는 훌륭한 학술 논문은 Rolf Neugebauer의 '엔드 호스트 네트워킹을 위한 PCIe 성능 이해'입니다.

실제로 비트웨어의 PCIe 데이터 캡처는 12.8GB/s(102Gb/s)를 FPGA에서 호스트 DRAM으로 푸시할 수 있었습니다. 이는 PCIe의 이론적 최대 전송 속도의 80%를 약간 넘는 속도입니다.

실제로 PCIe 전송의 현실은 이보다 훨씬 낮으며 시스템 최적화에 사용되는 특정 접근 방식에 따라 크게 영향을 받습니다. 100Gb/s를 달성하는 것은 실제로 PCIe에 스트레스를 주는 좋은 방법입니다. 매우 큰 패킷 크기의 경우 100Gb 이더넷(GbE)은 12.5GB/s에 근접하여 메타데이터를 위한 300MB/s의 헤드룸을 남깁니다. 그러나 포화 상태인 100GbE가 모두 작은 패킷으로 구성되면 전체 데이터 속도는 훨씬 낮아지지만 PCIe 버스 트랜잭션 수는 증가하여 다른 방식으로 PCIe에 스트레스를 줄 수 있습니다.

저희는 이더넷을 사용하여 비트웨어 고객이 일반적으로 사용하는 독점 센서를 대신합니다. 저희 솔루션은 큰 패킷과 작은 패킷을 모두 손실 없이 전달할 수 있습니다. 이제 그 방법을 설명하겠습니다.

구현 파트 1: 호스트 최적화하기

PCIe를 통해 고대역폭 데이터를 푸시할 때 한 가지 최적화는 실제로 FPGA 내부가 아니라 호스트의 소프트웨어 쪽에서 이루어집니다. CPU의 내부 아키텍처를 살펴보십시오.

성능 목표를 달성하려면 칩의 PCIe 인터페이스와 DRAM 인터페이스 사이에 있는 모든 CPU 코어는 해당 코어가 다른 작업을 수행하지 않더라도 최대 클럭 속도(절전 모드 없음)로 실행되어야 합니다. 다시 말해, 각 CPU 코어는 C-상태 0과 P-상태 0에 있어야 합니다. Linux에서 이를 달성하는 한 가지 방법은 "tuned-adm" 명령을 사용하고 "지연 시간-성능" 옵션을 선택하는 것입니다.

CPU 아키텍처 그림

구현 2부: PCIe 최적화하기

통합을 통한 PCIe 트랜잭션 최적화

FPGA 측에서 가장 중요한 것은 버스를 통해 데이터를 이동하는 데 필요한 PCIe 트랜잭션의 수를 최소화하는 것입니다. 즉, 모든 PCIe 트랜잭션이 시스템에서 협상된 "최대 페이로드" 크기(일반적으로 최신 인텔 기반 시스템에서는 256바이트)를 달성할 수 있도록 설계된 버퍼 관리 체계에서 여러 패킷을 통합하는 것입니다.

따라서 비트웨어가 제공하는 주요 기능은 이 통합 기능을 수행하는 것입니다. 패킷을 고정 크기 버퍼로 통합하여 MBUF라고 부릅니다.

MBUF 크기는 FPGA 초기화 시 변경할 수 있습니다. 앞서 언급했듯이 MBUF는 PCIe 최대 페이로드 크기의 고정 배수여야 합니다. 나중에 설명하는 이유 때문에 4K 바이를 사용하는 것이 좋습니다.

FPGA 프로세싱에서 패킷을 그룹화하여 별도의 제어 스레드에서 처리하는 것은 매우 일반적입니다. 이러한 그룹을 "큐"라고 하며 각 큐는 호스트 측의 다른 프로세싱 코어로 이동해야 합니다. 따라서 패킷 통합은 큐 단위로 이루어져야 합니다.

통합 기능은 HLS로 작성되었으며 다음에 설명하는 대기열 관리 기능 위에서 실행됩니다.

패킷 연결 그림

호스트 대기열

당사의 IP는 MBUF 스트림을 호스트 DRAM으로 전송합니다. 이를 수행하는 다른 모든 업체와 마찬가지로 저희도 DRAM에서 순환 대기열을 사용합니다. 그러나 AMD에서는 QDMA 대기열을 사용하지 않고 대신 QDMA의 브리징 기능 위에 자체적인 대안을 만듭니다.

AMD QDMA 대기열은 RDMA 데이터 구조를 기반으로 합니다. RDMA는 우리에게 필요한 것보다 더 동적인 환경입니다. 저희 버전에는 디스크립터 링이 있지만 호스트 드라이버는 FPGA 초기화 시점에 디스크립터를 로드하여 재사용합니다. 이렇게 하면 런타임에 PCIe를 통해 디스크립터를 전송하지 않아도 됩니다. 또한 더 큰 편차로는 완료 대기열이 없다는 것입니다. 대신 디스크립터를 재사용하고 호스트 소프트웨어가 호스트가 해당 데이터를 처리할 수 있는 속도보다 FPGA가 데이터를 더 빠르게 이동하는지 파악할 수 있습니다. 다시 말해, FPGA에 데이터를 드롭하는 대신 호스트에 데이터를 드롭합니다. RDMA 용어로 호스트 드라이버는 CIDX 업데이트를 FPGA로 전송하지 않습니다.

우리의 큐 구현은 인터럽트 대신 호스트 측에서 폴링을 사용합니다. 이는 인터럽트가 더 많은 PCIe 대역폭을 소비하기 때문인데, 두 접근 방식 모두에서 FPGA가 호스트에 PIDX 업데이트를 전송해야 하기 때문입니다. 실험 결과, 최신 CPU를 사용하면 총 4k 바이트의 MBUF 시퀀스를 전송한 후 PIDX 업데이트를 수행해야 하는 것으로 나타났습니다. 그렇기 때문에 단일 MBUF를 4k 바이트로 만드는 것이 좋습니다.

호스트 측에서는 큐 설명자가 대용량 페이지를 가리키도록 허용합니다. 이렇게 하면 CPU TLB 미스를 최소화할 수 있습니다. 또한 FPGA 카드의 위치에 따라 특정 호스트 NUMA 영역에 대용량 페이지를 할당하여 호스트 처리 스레드에 대한 FPGA DMA 전송 경로를 제어할 수 있으며, 이 또한 특정 NUMA 영역에 잠겨 있습니다.

데이터 캡처의 첫 번째 릴리즈는 AMD XDMA 위에 계층화되어 있습니다. 두 번째 릴리즈는 AMD QDMA의 브리징 모드 위에 계층화된 자체 DMA 전송으로 전환됩니다.

호스트 제어

PCIe 데이터 캡처 개념은 표준 Linux VFIO 드라이버를 사용합니다. 이를 통해 CPU의 가상화 하드웨어가 프로세스 보호 및 보안을 제공할 수 있습니다. 유니티는 카드를 제어할 수 있는 Python API를 제공합니다. Python 프로그램을 사용하여 디스크립터를 FPGA에 로드하고, DRAM 대기열을 설정하고, 애플리케이션 코드를 킥오프합니다. 비트웨어의 툴킷은 현재 드라이버로 VFIO를 지원하지 않지만 향후 지원할 계획입니다.

신청 처리

호스트 측에서 BittWare의 처리 프레임워크는 DPDK(데이터 플레인 개발 키트)를 모델로 합니다. 호스트에서 단일 대상 큐를 사용합니다. 전용 코어는 들어오는 MBUF를 구문 분석하여 MBUF 포인터를 워커 스레드 모음으로 보냅니다. 전용 코어는 모든 MBUF 크기에서 이 작업을 수행할 수 있습니다.

내부 데이터 구조를 PCAPng 형식으로 재포맷하는 샘플 워커 프로그램을 출시할 계획입니다. 포맷을 재포맷하려면 모든 패킷 크기에 대해 회선 속도 100GbE를 유지하기 위해 약 4개의 워커 코어가 필요합니다.

PCIe 데이터 캡처 아키텍처 컨셉을 위한 추가 옵션

하나는 SSD에 레코딩 요소를 추가하는 것이고, 다른 하나는 XUP-P3R의 두 번째 PCIe 인터페이스 기능을 사용하여 최대 200Gb/s의 캡처를 가능하게 하는 것입니다.

100Gb/s 기록

2소켓 마더보드를 사용하면 100GbE 패킷 스트림을 기록할 수 있습니다. BittWare IP는 소켓 중 하나에 연결된 호스트 DRAM으로 패킷을 캡처합니다. 그런 다음 애플리케이션 소프트웨어가 프로세서 소켓 간의 QPI 링크를 통해 MBUF를 다른 CPU 소켓의 PCIe에 연결된 RAID 0 NVMe로 이동합니다. 향후 백서에서 이 작업이 어떻게 수행되는지 설명할 예정입니다. 요약하자면, 생각보다 훨씬 더 많은 NVMe 드라이브가 필요합니다. 이는 널리 사용되는 TLC SSD의 NVMe 드라이브 데이터시트에서 Pseudo-SLC 캐시에 대한 쓰기 성능을 지정하는 경향이 있기 때문입니다. 이 캐시가 넘치면 쓰기 성능이 급격히 떨어집니다. 최신 QLC SSD는 실제로 길고 끝없는 스트리밍 쓰기에서 구식 디스크 기술보다 느릴 수 있습니다!

듀얼 PCIe를 통한 200Gb/s

두 개의 CPU가 장착된 TeraBox에 세 번째 슬롯 애드온 카드를 추가하면 XUP-P3R은 두 개의 Gen3 x16 PCIe 인터페이스에서 200Gb/s를 달성할 수 있습니다!

듀얼 PCIe 데이터 캡처

100Gb/s 이상의 캡처가 필요한 고객의 경우, 또 다른 옵션은 XUP-P3R의 SEP - PCIe 애드온 카드를 활용하는 것입니다. 이 경우 호스트 메모리에 최대 약 200Gb/s의 속도를 구현할 수 있습니다. 두 번째 연결은 인접한 PCIe 슬롯에 연결합니다. 이 옵션은 영구 메모리에 라인 레이트로 레코딩할 수 있는 옵션 없이 두 번째 CPU를 사용한다는 점에 유의하세요.

또한 고객은 두 개 이상의 CPU가 있는 마더보드에 두 개의 FPGA 카드만 사용할 수도 있습니다.

듀얼 CPU에 확장 카드가 연결된 XUP-P3R의 그림

결론

오늘날 센서는 점점 더 빨라지고 있으며, 이로 인해 두 가지 CPU 문제가 발생합니다. 첫 번째는 I/O를 CPU로 가져오는 것이고, 두 번째는 센서 데이터를 실행 가능한 정보로 변환하는 것입니다. 하드웨어 전처리를 통해 이 간극을 좁히기 위해 FPGA를 사용하는 경우가 많지만, 데이터 양이 줄어든다고 해도 여전히 CPU에 스트레스를 주는 경우가 많습니다.

이 백서에서는 CPU 캡처를 DRAM에 사용하는 것을 포함하여 PCIe 대역폭을 최대화하여 최대 100Gb/s까지 캡처하는 방법을 조사했습니다. 하지만 여전히 CPU에 스트레스를 줄 가능성이 있으므로 다음 백서에서는 CPU를 완전히 우회하여 NVMe에 직접 레코딩하는 방법을 살펴볼 것입니다.

비트웨어는 다년간의 경험을 바탕으로 고객이 CPU에 데이터를 압축할 수 있도록 지원하여 이러한 문제를 해결할 수 있는 아키텍처 개념을 생성하고 있습니다. 이를 바탕으로 BittWare의 광범위한 FPGA 카드 및 통합 서버 포트폴리오를 활용하여 대규모로 배포할 수 있으므로 고객은 특정 사용 사례에 맞는 데이터 캡처 및 레코더 어플라이언스를 쉽게 구축할 수 있습니다. 비트웨어의 소셜 미디어 채널을 팔로우하여 최신 소식을 받아보세요.

읽을거리가 더 있습니다: 데이터 캡처 앱 노트 받기

PDF 다운로드 요청

이 페이지에 표시된 내용은 비트웨어의 데이터 캡처에 대한 소개입니다. 전체 앱 노트에는 더 자세한 내용이 있습니다! 양식을 작성하여 전체 앱 노트의 PDF 버전에 대한 액세스를 요청하세요.

앱 노트 썸네일
데이터 캡처 앱 노트의 샘플 페이지

"*"는 필수 필드를 나타냅니다.

이름*
이 주소를 사용하여 PDF가 전송되므로 이 이메일이 활성 이메일인지 확인하세요.
주소 및 도시*