Date: Mon, 20 Nov 2017 21:43:06 -0600 From: Xiaoye Sun <Xiaoye.Sun@rice.edu> To: Luigi Rizzo <rizzo@iet.unipi.it> Cc: Vincenzo Maffione <v.maffione@gmail.com>, FreeBSD Net <freebsd-net@freebsd.org> Subject: Re: [netmap] when does a packet in the netmap ring send out exactly Message-ID: <CAJnByzg-=9Aqy9S5ZuFFyLQgCJBtZ7MrDAuf5ccsVzj68=dSTw@mail.gmail.com> In-Reply-To: <CA%2BhQ2%2Bh0QEx3LPvFGNZv5ZvBJOJ-X0go-=c3V0gr6FRhe7icXA@mail.gmail.com> References: <CAJnByzh4Kzp6-DXXcB06QHSBJpHBKhtDnKUn7R%2BK0A_5VUThyw@mail.gmail.com> <CA%2B_eA9i5WOiA8j3y8fX65rzDLXEyt2B2wo8pK12jM2ZvEBURYg@mail.gmail.com> <CAJnByzhv27D_V=kyJjzQPQ28GM8kACKsH87MB5uDKVkQ-aka0g@mail.gmail.com> <CA%2BhQ2%2Bh0QEx3LPvFGNZv5ZvBJOJ-X0go-=c3V0gr6FRhe7icXA@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi Luigi, Thanks! I was using the most recent netmap on Github and I believe the tail pointer only moves forward when there are less than half of the total slots available in the netmap ring. Then I switch to the version of v11.3 <https://github.com/luigirizzo/netmap/tree/v11.3>, it behaves as what you described. Linux Kernel: 3.16.0-4-amd64 Best, Xiaoye On Mon, Nov 20, 2017 at 6:11 PM, Luigi Rizzo <rizzo@iet.unipi.it> wrote: > Hi, > I think if you call the TXSYNC ioctl without advancing the head > pointer, then the tail is advanced > as much as possible. > > Cheers > luigi > > On Mon, Nov 20, 2017 at 3:35 PM, Xiaoye Sun <Xiaoye.Sun@rice.edu> wrote: > > Hi, > > > > I found that the tail pointer only moves when the ring has less than half > > of the slots available. This prevents me from knowing the accurate time > > when the packet in a slot is processed. Is there a way to move the tail > > pointer as long as the packet in the slot is processed? Is this a > > configurable feature? > > > > Best, > > Xiaoye > > > > On Fri, Oct 27, 2017 at 11:52 AM, Vincenzo Maffione < > v.maffione@gmail.com> > > wrote: > > > >> Hi, > >> This is actually a limitation of the netmap API: ring->tail is exposed > >> to the user so that it knows it can use the slots in the range > >> "[ring->head..ring->tail[" for new transmissions (note that head is > >> included, tail excluded, to prevent wraparound). However, there is no > >> explicit indication of "up to what slots packets were transmitted". > >> For hw NICs, however, ring->tail is an indication of where transmission > >> was completed. > >> Example: > >> 1) at the beginning ring->tail = ring->head = ring->cur = 0 > >> 2) then your program moves head/cur forward: head = cur = 10 > >> 3) you call TXSYNC, to submit the packets to the NIC. > >> 4) after the TXSYNC call, is very likely that tail is still 0, i.e. > >> because no transmission has been completed by the NIC (and no interrupt > >> generated). > >> 5) say after 20 us you issue another TXSYNC, and in the meanwhile 6 > >> packets had completed. In this case after TXSYNC you will find tail==5, > >> meaning that packets in the slots 0,1,2,3,4 and 5 have been completed. > Note > >> that also the slot pointed by tail has been completed. > >> > >> But you are right that there is no way to receive completion > notification > >> if the queue is not full. You must use TXSYNC to check (by sleeping or > busy > >> wait) when tail moves forward. > >> > >> Cheers, > >> Vincenzo > >> > >> > >> 2017-10-27 3:06 GMT+02:00 Xiaoye Sun <Xiaoye.Sun@rice.edu>: > >> > >>> Hi > >>> > >>> I write a netmap program that sends packets to the network. my program > >>> uses one netmap ring and fills the ring slots with packets. > >>> My program needs to do something (action A) after a particular packet > >>> (packet P) in the ring slot is sent to the network. so the program > tracks > >>> the position of the tail point and checks if the tail point has moved > >>> across the slot I used to put that packet P. > >>> However, I found that the tail pointer may not move forward even > seconds > >>> after the receiver side got packet P. > >>> Sometimes the tail pointer never moves forward until the TX ring is > full. > >>> I try ioctl(NIOCTXSYNC), however, it cannot 100% solve the problem. > >>> > >>> My question is that is there a way to make the TX ring empty as early > as > >>> possible so that I can know when my packet is sent out. or is there > >>> another > >>> way to know when the packet in the slot is sent to the network/NIC > >>> physical > >>> queue? > >>> > >>> I am using Linux 3.16.0-4-amd64. > >>> > >>> Thanks! > >>> > >>> Best, > >>> Xiaoye > >>> _______________________________________________ > >>> freebsd-net@freebsd.org mailing list > >>> https://lists.freebsd.org/mailman/listinfo/freebsd-net > >>> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" > >>> > >> > >> > >> > >> -- > >> Vincenzo Maffione > >> > > _______________________________________________ > > freebsd-net@freebsd.org mailing list > > https://lists.freebsd.org/mailman/listinfo/freebsd-net > > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" > > > > -- > -----------------------------------------+------------------------------- > Prof. Luigi RIZZO, rizzo@iet.unipi.it . Dip. di Ing. dell'Informazione > http://www.iet.unipi.it/~luigi/ . Universita` di Pisa > TEL +39-050-2217533 . via Diotisalvi 2 > Mobile +39-338-6809875 . 56122 PISA (Italy) > -----------------------------------------+------------------------------- >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJnByzg-=9Aqy9S5ZuFFyLQgCJBtZ7MrDAuf5ccsVzj68=dSTw>