Lines Matching +full:queue +full:- +full:pkt +full:- +full:rx
1 .\" Copyright (c) 2011-2014 Matteo Landi, Luigi Rizzo, Universita` di Pisa
45 .Bl -tag -width XXXX
51 implementing a very fast and modular in-kernel software switch/dataplane;
72 35-40 Mpps on 40 Gbit/s NICs (limited by the hardware);
79 which uses unmodified device drivers and is 3-5 times faster than
98 supports both non-blocking I/O through
138 There is one ring for each transmit/receive queue of a
145 the rings, and possibly implement zero-copy forwarding
186 .Bl -tag -width XXXX
195 Both SSS and PPP have the form [0-9a-zA-Z_]+ , the string
208 Non-blocking I/O is done with special
218 OS-generated packets for that NIC end up into a
233 .Bl -tag -width XXX
235 .Bd -literal
241 const uint32_t ni_rx_rings; /* NIC rx rings */
250 The number of tx and rx rings
253 NICs also have an extra tx/rx ring pair connected to the host stack.
281 .Bd -literal
303 .Bd -literal
373 during the execution of a netmap-related system call.
375 .Va tail\ . . . head-1 ,
381 .Va head\ . . . tail-1
396 .Va head-1
401 .Bd -literal
425 .Dl ring->cur == ring->tail
432 .Dl ring->head != ring->tail + 1 (modulo the ring size).
440 .Va head\& . . . tail-1
454 .Va head-1
459 Below is an example of the evolution of an RX ring:
460 .Bd -literal
465 RX [..hhhhhhRRRRRRRR..........]
471 RX [..*****hhhRRRRRR...........]
477 RX [.......hhhRRRRRRRRRRRR....]
480 Normally, packets should be stored in the netmap-allocated buffers
485 .Bl -tag -width XXX
492 zero-copy forwarding, see
493 .Sx ZERO-COPY FORWARDING .
511 indicates that the packet's payload is in a user-supplied buffer
544 for non-blocking I/O.
548 .Bd -literal
555 uint32_t nr_rx_slots; /* (i/o) slots in rx rings */
557 uint16_t nr_rx_rings; /* (i/o) number of rx rings */
572 .Bl -tag -width XXXX
579 .Bl -tag -width XX
596 using interface-specific functions (e.g.,
651 .Bl -tag -width XXXXX
658 .It NR_REG_ONE_NIC "netmap:foo-i"
659 only the i-th hardware ring pair, where the number is in
682 The feature can be disabled by or-ing
717 .Va ( ring->cur == ring->tail ) .
760 API, to ease porting of libpcap-based applications to
768 .Bl -tag -width XXXXX
773 .Bl -tag -width XX
852 from the emulated adapter onto the host RX ring, the sniffer will intercept
871 .Bl -tag -width indent
940 Allow ptnet devices to use virtio-net headers
948 domains, this will prevent zero-copy forwarding optimizations and thus may hurt
989 .Xr pkt-gen 8
993 .Dl pkt-gen -i ix0 -f tx -l 60
995 .Dl pkt-gen -i ix0 -f rx
1000 .Xr pkt-gen 8
1010 .Dl bridge -i netmap:ix0 -i netmap:ix1
1012 .Dl bridge -i netmap:ix0
1016 .Bd -literal -compact
1037 poll(&fds, 1, -1);
1039 i = ring->cur;
1040 buf = NETMAP_BUF(ring, ring->slot[i].buf_index);
1042 ring->slot[i].len = ... packet length ...
1043 ring->head = ring->cur = nm_ring_next(ring, i);
1051 .Bd -literal -compact
1066 poll(&fds, 1, -1);
1073 .Ss ZERO-COPY FORWARDING
1080 .Bd -literal -compact
1084 src = &src_ring->slot[rxr->cur];
1085 dst = &dst_ring->slot[txr->cur];
1086 tmp = dst->buf_idx;
1087 dst->buf_idx = src->buf_idx;
1088 dst->len = src->len;
1089 dst->flags = NS_BUF_CHANGED;
1090 src->buf_idx = tmp;
1091 src->flags = NS_BUF_CHANGED;
1092 rxr->head = rxr->cur = nm_ring_next(rxr, rxr->cur);
1093 txr->head = txr->cur = nm_ring_next(txr, txr->cur);
1102 mode end up into the RX ring, whereas all packets queued to the
1109 .Dl pkt-gen -i vale1:a -f rx # receiver
1110 .Dl pkt-gen -i vale1:b -f tx # sender
1113 .Dl pkt-gen -i vale2:x{3 -f rx # receiver on the master side
1114 .Dl pkt-gen -i vale2:x}3 -f tx # sender on the slave side
1118 .Dl valectl -h vale2:em0
1128 .Xr pkt-gen 8 ,
1134 Communications of the ACM, 55 (3), pp.45-51, March 2012
1147 .An -nosplit
1189 device-specific sysctl variables.