Hi, The timestamp assigned to packet at the time of enqueue (value of timestamp field in mbuf), is it in milliseconds or microseconds or in cpu cycles? How this timestamp is calculated? Is it calculated using the *rte_cycles.h*? Thanks in advance! --Gokul
On 11/18/2019 2:29 PM, Gokul Bargaje wrote: > Hi, > > The timestamp assigned to packet at the time of enqueue (value of timestamp > field in mbuf), is it in milliseconds or microseconds or in cpu cycles? The unit is not defined [1]. 'rte_eth_read_clock()' was added [2] to help converting it to time when it is clock counter. [1] 918ae9dc775e ("mbuf: add a timestamp field") [2] 5e741377657c ("ethdev: add API to read device clock") > > How this timestamp is calculated? Is it calculated using the *rte_cycles.h*? >
Thank you for the clarification. But I am still unable to understand how
exactly timestamp is calculated before assigning to a timestamp field.
Could you please tell me the steps to calculate the timestamp in DPDK?
I have to implement the PIE AQM algorithm in DPDK and for that, I need to
calculate the total time spent by the packet waiting in queue (i.e. the
difference between enqueue time and dequeue time).
Thanks,
Gokul
On Fri, Nov 22, 2019 at 8:18 PM Ferruh Yigit <ferruh.yigit@intel.com> wrote:
> On 11/18/2019 2:29 PM, Gokul Bargaje wrote:
> > Hi,
> >
> > The timestamp assigned to packet at the time of enqueue (value of
> timestamp
> > field in mbuf), is it in milliseconds or microseconds or in cpu cycles?
>
> The unit is not defined [1]. 'rte_eth_read_clock()' was added [2] to help
> converting it to time when it is clock counter.
>
> [1]
> 918ae9dc775e ("mbuf: add a timestamp field")
>
> [2]
> 5e741377657c ("ethdev: add API to read device clock")
>
> >
> > How this timestamp is calculated? Is it calculated using the
> *rte_cycles.h*?
> >
>
>
>
>
>
>
On Fri, 22 Nov 2019 22:30:11 +0530
Gokul Bargaje <gokulbargaje.182009@nitk.edu.in> wrote:
> Thank you for the clarification. But I am still unable to understand how
> exactly timestamp is calculated before assigning to a timestamp field.
> Could you please tell me the steps to calculate the timestamp in DPDK?
>
> I have to implement the PIE AQM algorithm in DPDK and for that, I need to
> calculate the total time spent by the packet waiting in queue (i.e. the
> difference between enqueue time and dequeue time).
The use of timestamp field is very spotty.
Only mellanox implements it.
From lib/librte_mbuf/rte_mbuf_core.h:
|605 /** Valid if PKT_RX_TIMESTAMP is set. The unit and time reference
606 * are not normalized but are always the same for a given port. 607 *
Some devices allow to query rte_eth_read_clock that will return the 608
* current device timestamp. 609 */ 610 uint64_t timestamp;|
|I believe the timestamp in mbuf is set by the NIC. If it isn't,
librte_eventdev sets it using rte_get_tsc_cycle(). From
/lib/librte_eventdev/rte_event_eth_rx_adapter.h |
22 * The adapter uses a EAL service core function for SW based packet transfer
23 * and uses the eventdev PMD functions to configure HW based packet transfer
24 * between the ethernet device and the event device. For SW based packet
25 * transfer, if the mbuf does not have a timestamp set, the adapter adds a
26 * timestamp to the mbuf using rte_get_tsc_cycles(), this provides a more
27 * accurate timestamp as compared to if the application were to set the time
28 * stamp since it avoids event device schedule latency.
Hope that helps!
On 11/18/2019 7:59 PM, Gokul Bargaje wrote:
> Hi,
>
> The timestamp assigned to packet at the time of enqueue (value of timestamp
> field in mbuf), is it in milliseconds or microseconds or in cpu cycles?
>
> How this timestamp is calculated? Is it calculated using the *rte_cycles.h*?
>
> Thanks in advance!
> --Gokul
--
Archit Pandey
Senior Year Undergraduate Student
Department of Computer Science and Engineering
National Institute of Technology Karnataka
Surathkal, India
Hi Gokul,
As Setphen said, only Mellanox sets the hardware timestamp.
If you have a Mellanox card, you can actually follow the example given
in the rxtx_callback sample application that precisely gives the number
of CPU cycles a packet spent into the queue.
Tom
Le 22/11/2019 à 18:00, Gokul Bargaje a écrit :
> Thank you for the clarification. But I am still unable to understand how
> exactly timestamp is calculated before assigning to a timestamp field.
> Could you please tell me the steps to calculate the timestamp in DPDK?
>
> I have to implement the PIE AQM algorithm in DPDK and for that, I need to
> calculate the total time spent by the packet waiting in queue (i.e. the
> difference between enqueue time and dequeue time).
>
> Thanks,
> Gokul
>
> On Fri, Nov 22, 2019 at 8:18 PM Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>
>> On 11/18/2019 2:29 PM, Gokul Bargaje wrote:
>>> Hi,
>>>
>>> The timestamp assigned to packet at the time of enqueue (value of
>> timestamp
>>> field in mbuf), is it in milliseconds or microseconds or in cpu cycles?
>>
>> The unit is not defined [1]. 'rte_eth_read_clock()' was added [2] to help
>> converting it to time when it is clock counter.
>>
>> [1]
>> 918ae9dc775e ("mbuf: add a timestamp field")
>>
>> [2]
>> 5e741377657c ("ethdev: add API to read device clock")
>>
>>>
>>> How this timestamp is calculated? Is it calculated using the
>> *rte_cycles.h*?
>>>
>>
>>
>>
>>
>>
>>
On Fri, Nov 22, 2019 at 10:30:11PM +0530, Gokul Bargaje wrote: > Thank you for the clarification. But I am still unable to understand how > exactly timestamp is calculated before assigning to a timestamp field. > Could you please tell me the steps to calculate the timestamp in DPDK? > > I have to implement the PIE AQM algorithm in DPDK and for that, I need to > calculate the total time spent by the packet waiting in queue (i.e. the > difference between enqueue time and dequeue time). > > Thanks, > Gokul Hi Gokul octeontx2 also suports hardware timestamping, as soon as packet enter the NIC queue, MAC writes the timestamp value to a memory location (which is later read in mbuf->timestamp). Later using 'rte_eth_read_clock()' one can read the timestamp clock. Hence "mbuf->timestamp - rte_eth_read_clock()" gives the time spent by packet when it entered the queue to that point. As everybody suggested you can refer rxtx_callback for more clarity. Octeontx2 driver also has 'rte_eth_read_clock()' eth op implemented Thanks Harman > > On Fri, Nov 22, 2019 at 8:18 PM Ferruh Yigit <ferruh.yigit@intel.com> wrote: > > > On 11/18/2019 2:29 PM, Gokul Bargaje wrote: > > > Hi, > > > > > > The timestamp assigned to packet at the time of enqueue (value of > > timestamp > > > field in mbuf), is it in milliseconds or microseconds or in cpu cycles? > > > > The unit is not defined [1]. 'rte_eth_read_clock()' was added [2] to help > > converting it to time when it is clock counter. > > > > [1] > > 918ae9dc775e ("mbuf: add a timestamp field") > > > > [2] > > 5e741377657c ("ethdev: add API to read device clock") > > > > > > > > How this timestamp is calculated? Is it calculated using the > > *rte_cycles.h*? > > > > > > > > > > > > > > >