GigE Vision SDK || libfsock /w GVA

libfsock Media extensions

With our FastSockets API we introduced a concept overcoming disadvantages of traditional networking. Kernel Bypass being the essential need for any fast communication beyond 1Gbit.

Zero Copy Image Processing into Application Buffers
/* we allocate a GVA endpoint */
rc = fsock_open(&sin.sin_addr, FSOCK_GVA, &gva_dev);
/* depending on the image fps, resolution, request alternate RING BUF SIZE (default 128MB) */
rc = fsock_set_ep_attribute(gva_dev, FSOCK_RINGBUF_SIZE, &ring_size, sizeof (ring_size));
/* create a channel for given 'port' */
rc = fsock_bind(gva_dev, FSOCK_BIND_DEFAULT, port, NULL, &gva_chan);
struct ip_mreq mreq; /* standard structures, e.g mcast */
rc = fsock_setopt(gva_chan, FSOCK_JOIN_MCAST, &mreq, sizeof(mreq));
/* allocate internal buffers to describe received block*/
fsock_gva_alloc_type_t gva_alloc;
rc = fsock_setopt(gva_chan, FSOCK_GVA_ALLOC, &gva_alloc, sizeof(gva_alloc));
/* if needed, specify a RX timeout for the channel */
rc = fsock_setopt(gva_chan, FSOCK_RX_TIMEOUT, &block_timeout, sizeof(block_timeout));
/* wait for data blocks , XOR in the IN place option */
rc = fsock_recv(gva_chan, FSOCK_RECV_DEFAULT | FSOCK_RECV_GVABLOCK_INPLACE, &gva_blk, sizeof(gva_blk), &rxinfo);
/* re-queue this block */
rc = fsock_setopt(gva_chan, FSOCK_GVA_QUEUE_BUF, &gva_blk.gva_buf, sizeof(gva_buf_t));
CPU Load per *Core* vs Aggregated Bandwidth for 8 streams

libFSOCK Feature Set for GigE Vision Acceleration


For Real

Our test application for grabbing GVSP blocks in action. Receiving 1000 blocks (images) with zero CPU load. This is syncing life traffic from a 10GbE device.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
NEIO Systems, Ltd.

NEIO Systems, Ltd. || low latency, networking experts, 10GbE++, FPGA trading, Linux and Windows internals gurus