Developer Wiki'ye dön
GStreamer

Jetson Orin'de Zero-Copy GStreamer Pipeline: NVMM DMA Buffer

NVIDIA Jetson'da GStreamer pipeline'larında CPU kopyasını ortadan kaldıran NVMM (Non-Volatile Memory Manager) DMA buffer kullanımı — yapılandırma, hata ayıklama ve performans tuzakları.

Spikedge Mühendislik13 Nisan 20268 dk okuma

Jetson'da Zero-Copy GStreamer: NVMM DMA Buffer

NVMM Nedir?

NVMM (NVIDIA Memory Manager), Jetson SoC'un ISP, encoder (NVENC), decoder (NVDEC) ve GPU birimleri arasında veriyi CPU belleğine kopyalamadan iletmesini sağlayan paylaşımlı DMA bellek mekanizmasıdır. NVMM olmadan her nvvidconv çağrısı, GPU DRAM → CPU DRAM → GPU DRAM döngüsü oluşturur.

CPU kopyası olmadan: ~2ms dönüşüm, CPU yükü <%5 CPU kopyasıyla: ~18ms dönüşüm, CPU yükü %30-40

Temel Kural

NVMM pipeline'ı kesintisiz çalışabilmesi için tüm element'lerin memory:NVMM desteklemesi gerekir. Zincirde tek bir CPU-side element bu avantajı yok eder.

NVMM destekli element'ler:

  • nvarguscamerasrc — ISP çıkışı direkt NVMM
  • nvv4l2decoder — NVDEC çıkışı NVMM
  • nvvidconv — NVMM → NVMM (veya NVMM → CPU)
  • nvv4l2h264enc, nvv4l2h265enc — NVENC, NVMM input alır
  • nvinfer — TensorRT inference, NVMM input
  • nvdrmvideosink, nveglglessink — NVMM doğrudan display

Pipeline Örnekleri

Doğru: Tam Zero-Copy

gst-launch-1.0 \
  nvarguscamerasrc sensor-id=0 ! \
  'video/x-raw(memory:NVMM), format=NV12, width=1920, height=1080, framerate=30/1' ! \
  nvv4l2h264enc maxperf-enable=true insert-sps-pps=true ! \
  rtph264pay config-interval=-1 pt=96 ! \
  udpsink host=192.168.1.100 port=5000 sync=false

Yanlış: CPU Kopyası Yaratır

# nvvidconv'dan sonra memory:NVMM eksik — CPU kopyası zorunlu hale gelir
gst-launch-1.0 \
  nvarguscamerasrc ! \
  nvvidconv ! \
  'video/x-raw, format=BGRx' ! \
  x264enc ! ...

appsink ile NVMM Buffer Erişimi

OpenCV veya custom ML inference için buffer'a CPU erişimi gerekiyorsa:

#include <nvbufsurface.h>

GstSample *sample = gst_app_sink_pull_sample(GST_APP_SINK(appsink));
GstBuffer *buf = gst_sample_get_buffer(sample);

GstMapInfo map;
gst_buffer_map(buf, &map, GST_MAP_READ);

NvBufSurface *surf = (NvBufSurface *)map.data;
NvBufSurfaceMap(surf, 0, 0, NVBUF_MAP_READ);

// surf->surfaceList[0].mappedAddr.addr[0] — Y plane
// surf->surfaceList[0].mappedAddr.addr[1] — UV plane

NvBufSurfaceSyncForCpu(surf, 0, 0);
// ... işlem ...
NvBufSurfaceUnMap(surf, 0, 0);
gst_buffer_unmap(buf, &map);
gst_sample_unref(sample);

Hata Ayıklama: NVMM Kırılma Noktalarını Bul

# GST_DEBUG ile element kararlarını izle
GST_DEBUG="nvvidconv:5,nvv4l2h264enc:5" gst-launch-1.0 [pipeline]

# "Could not negotiate" mesajı NVMM uyumsuzluğuna işaret eder
# "Allocating new buffer" satırları CPU kopyasının göstergesidir

Sık Yapılan Hatalar

Hata Sebep Çözüm
Could not negotiate Caps'te memory:NVMM eksik Açık caps ekle
Yüksek CPU, düşük GPU CPU-side element pipeline'da Element'i NVMM desteklisiyle değiştir
nvvidconv format hatası NV12 yerine BGRx isteniyor format=NV12 ile kısıtla
Yavaş ilk frame NVMM buffer pool ısınma nvarguscamerasrc wbmode=0 ile AE kapat

İlgili Kaynaklar

#GStreamer#Jetson#NVMM#Zero-Copy#DMA#JetPack#Video

Sık Sorulan Sorular

GStreamer'da NVMM zero-copy neden önemlidir?+
NVMM (NVIDIA Memory Manager), Jetson SoC'un ISP, NVENC ve GPU birimleri arasında veriyi CPU belleğine kopyalamadan taşır. NVMM olmadan her dönüşüm GPU→CPU→GPU döngüsü oluşturur ve ~18ms ekstra gecikme yaratır. Zero-copy ile bu süre ~2ms'ye düşer ve CPU yükü %30-40'tan <%5'e iner.
Jetson'da GStreamer pipeline latency'si nasıl ölçülür?+
GstShark eklentisi veya GST_DEBUG ortam değişkeni kullanılabilir. Donanım düzeyinde ölçüm için nvarguscamerasrc kaynak timestamp'i ile nvoverlaysink çıkış timestamp'i karşılaştırılır. Alternatif olarak, GPIO toggle + osiloskop yöntemiyle frame capture → display süresi doğrudan ölçülür.
NVMM pipeline'ında 'Could not negotiate' hatası neden oluşur?+
Bu hata, element'ler arasındaki caps filtrelerinde 'memory:NVMM' belirtilmemesinden kaynaklanır. Zincirde tek bir CPU-side element tüm zero-copy avantajını ortadan kaldırır. nvvidconv sonrası explicit 'video/x-raw(memory:NVMM)' caps eklenmesi gerekir.

Projenizde bu teknolojiyi kullanıyor musunuz?

Spikedge mühendisleriyle mimari denetim planlayın.

Mimari Denetim Talebi