I don't know if it is available in that driver or not, but there is an 
option in later igb drivers to support a time stamp being written with 
the packet data.  Based on the fact that you are already seeing issues, 
you might want to try getting the out-of-tree driver from e1000.sf.net 
and seeing if you can use that with the time stamp in packet option that 
is enabled when you select to timestamp all incoming Rx packets.

- Alex

On 10/13/2015 10:01 AM, Mattias Barthel wrote:
> Yes, setting the cycles.shift to the same as on the 82580 and also 
> shifting the reads accordingly everything works. The sync of 
> shhwtstamps->syststamp too.
>
> My driver version is 3.0.6-k2 and linux is 3.0.8.
>
> Although this might not be very suited to my needs.
> The incoming buffers wont be timestamped if you cant keep up with 
> reading the timestamping registers as I understand it.
> This might be perfectly fine in the case of PTP where the packet rate 
> is fairly low. In my case Im looking at some 80kpps that all would 
> need to be timestamped.
> There is a comment about this in the driver:
>
> *//* If this bit is set, then the RX registers contain the time stamp. 
> No/**/ other packet will be time stamped until we read these 
> registers, so/* */read the registers to make them available again. 
> Because only one/**/ packet can be time stamped at a time, we know 
> that the register/* */values must belong to this one here and 
> therefore we don't need to/**/ compare any of the additional 
> attributes stored for it./* */If nothing went wrong, then it should 
> have a shared tx_flags that we/**/ can turn into a 
> skb_shared_hwtstamps. *//*
> *//*
> *//*
>
> On Tuesday, October 13, 2015, Alexander Duyck 
> <alexander.du...@gmail.com <mailto:alexander.du...@gmail.com>> wrote:
>
>     I'm assuming you are using either an older kernel or an
>     out-of-tree driver do I have that right?  I ask because this code
>     doesn't resemble what is is currently in the latest Linux kernel.
>
>     Comments on what you have found are inline below.
>
>     - Alex
>
>     On 10/13/2015 12:53 AM, Mattias Barthel wrote:
>
>         Hi, I think I managed to get around this problem.
>
>
>         in function init_hw_timer():
>         ----
>         case e1000_i350:
>         case e1000_82580:
>
>         /*
>         * The 82580 timesync updates the system timer every 8ns by 8ns
>         * and the value cannot be shifted.  Instead we need to shift
>         * the registers to generate a 64bit timer value.  As a result
>         * SYSTIMR/L/H, TXSTMPL/H, RXSTMPL/H all have to be shifted by
>         * 24 in order to generate a larger value for synchronization.
>         */
>         adapter->cycles.shift = IGB_82580_TSYNC_SHIFT;
>
>         ----
>
>         I have the I350 and I dont think this cycles shift was meant
>         for my adapter.
>          IGB_82580_TSYNC_SHIFT is 24.
>
>         Also when doing  igb_read_clock,
>         this shifting is applied only for the 82580 and I guess it
>         should not have been set in the first place for the I350:
>         --------
>         /*
>         * The timestamp latches on lowest register read. For the 82580
>         * the lowest register is SYSTIMR instead of SYSTIML. However
>         we never
>         * adjusted TIMINCA so SYSTIMR will just read as all 0s so
>         ignore it.
>         */
>         if (hw->mac.type == e1000_82580) {
>         stamp = rd32(E1000_SYSTIMR) >> 8;
>         shift = IGB_82580_TSYNC_SHIFT;
>         }
>
>         stamp |= (u64)rd32(E1000_SYSTIML) << shift;
>         stamp |= (u64)rd32(E1000_SYSTIMH) << (shift + 32);
>         -------------
>
>
>     This is a bug in the code.  The i350 should be shifted by the same
>     value as the 82580.  Then the result would be the same as if you
>     had set the shift to 0.  As I recall the reasoning behind the
>     change was to make use of as many bits of the time as possible,
>     and on 82580 and newer the SYSTIMH portion of the clock only
>     contained 8 bits of actual clock data.
>
>     Without that change I believe there is a risk of the counter being
>     considered to have cycled too fast and causing errors as the cycle
>     counter will roll over at 40 bits instead of 64.  The alternative
>     would be to update the cycle counter you are using so that it is
>     aware that it is limited to 40 bits and then use an shift of 0.
>
>         Setting adapter->cycles.shift to 0 makes the clock run at
>         about the same speed as the system clock.
>
>         Next problem I have is that the syststamp is not syncing
>         correctly against the system clock.
>
>         Any help is much appreciated.
>
>         Regards,
>
>         Mattias
>
>
>
>
>
>
>
>
>
>
>
>
>         On Mon, Oct 12, 2015 at 5:04 PM, Mattias Barthel
>         <mattiasbart...@gmail.com <mailto:mattiasbart...@gmail.com>>
>         wrote:
>
>             Hi again,
>
>             Started to try and timestamp all packets in the I350.
>
>             Driver version:
>
>             driver: igb
>             version: 3.0.6-k2
>             firmware-version: 0.147-0
>
>             Doing an ioctl that turns on timestamping for all packets.
>
>             hwconfig.tx_type = HWTSTAMP_TX_OFF;
>             hwconfig.rx_filter =  HWTSTAMP_FILTER_ALL;
>             hwconfig_requested = hwconfig;
>             ioctl(sock, SIOCSHWTSTAMP, &hwtstamp)
>
>             The strangest thing is that although it works to read the
>             timestamps the clock seems to advance very slowly and/or
>         incorrectly.
>
>             I just printout the HW timestamps alongside the
>         systemclock and
>             the hw stamping is advancing the nanoseconds when the
>         systemclock
>             is advancing us and seconds.
>
>             Is there a know bug in this version of the driver that maybe
>             initializes the clock incorrectly or maybe reads
>         incorrectly from
>             the clock?
>
>
>             [ 63.004116] igb_rx_hwtstamp
>             [ 63.004684] hwtstamp: 1444656871372825302, syststamp:
>             1444656871372845807
>             [ 63.005721] system timestamp: tv_sec: 1444656793,
>         tv_usec: 683825
>             [ 63.006631] sys hw timestamp: tstamp: 1444656871372845807,
>             tv_sec: 1444656871, tv_usec: 372845
>             [ 63.008044] hw timestamp: tstamp: 1444656871372825302,
>         tv_sec:
>             1444656871, tv_usec: 372825
>             [ 63.009395]
>             [ 63.104111] igb_rx_hwtstamp
>             [ 63.104704] hwtstamp: 1444656871372825308, syststamp:
>             1444656871372845813
>             [ 63.105747] system timestamp: tv_sec: 1444656793,
>         tv_usec: 783851
>             [ 63.106669] sys hw timestamp: tstamp: 1444656871372845813,
>             tv_sec: 1444656871, tv_usec: 372845
>             [ 63.108075] hw timestamp: tstamp: 1444656871372825308,
>         tv_sec:
>             1444656871, tv_usec: 372825
>             [ 63.109428]
>             [ 63.204109] igb_rx_hwtstamp
>             [ 63.204683] hwtstamp: 1444656871372825314, syststamp:
>             1444656871372845819
>             [ 63.206018] system timestamp: tv_sec: 1444656793,
>         tv_usec: 884122
>             [ 63.207242] sys hw timestamp: tstamp: 1444656871372845819,
>             tv_sec: 1444656871, tv_usec: 372845
>             [ 63.209096] hw timestamp: tstamp: 1444656871372825314,
>         tv_sec:
>             1444656871, tv_usec: 372825
>             [ 63.210897]
>             [ 63.304068] igb_rx_hwtstamp
>             [ 63.304849] hwtstamp: 1444656871372825320, syststamp:
>             1444656871372845825
>             [ 63.306176] system timestamp: tv_sec: 1444656793,
>         tv_usec: 984280
>             [ 63.307391] sys hw timestamp: tstamp: 1444656871372845825,
>             tv_sec: 1444656871, tv_usec: 372845
>             [ 63.309252] hw timestamp: tstamp: 1444656871372825320,
>         tv_sec:
>             1444656871, tv_usec: 372825
>             [ 63.311032]
>             [ 63.404107] igb_rx_hwtstamp
>             [ 63.404659] hwtstamp: 1444656871372825326, syststamp:
>             1444656871372845831
>             [ 63.405695] system timestamp: tv_sec: 1444656794,
>         tv_usec: 83798
>             [ 63.406635] sys hw timestamp: tstamp: 1444656871372845831,
>             tv_sec: 1444656871, tv_usec: 372845
>             [ 63.408044] hw timestamp: tstamp: 1444656871372825326,
>         tv_sec:
>             1444656871, tv_usec: 372825
>             [ 63.409405]
>             [ 63.504084] igb_rx_hwtstamp
>             [ 63.504670] hwtstamp: 1444656871372825332, syststamp:
>             1444656871372845837
>             [ 63.505715] system timestamp: tv_sec: 1444656794,
>         tv_usec: 183819
>             [ 63.506657] sys hw timestamp: tstamp: 1444656871372845837,
>             tv_sec: 1444656871, tv_usec: 372845
>             [ 63.508090] hw timestamp: tstamp: 1444656871372825332,
>         tv_sec:
>             1444656871, tv_usec: 372825
>
>
>             Any help will be very much appreciated.
>
>             Best regards,
>
>             Mattias
>
>
>
>
>
>
>
>
>             On Thu, Oct 8, 2015 at 6:01 PM, Alexander Duyck
>             <alexander.du...@gmail.com
>         <mailto:alexander.du...@gmail.com>> wrote:
>
>                 The i350 should support timestamping all packets as I
>         recall.         You should probably look into getting the
>         linuxptp package and
>                 seeing if you can make use of the hwstamp_ctl command to
>                 enable timestamping for all incoming packets on the
>         adapter.
>
>                 - Alex
>
>                 On 10/08/2015 12:33 AM, Mattias Barthel wrote:
>
>                     Hi
>                     thanks for answer.
>
>                     Unfortunately, the udp/ip stream just as the cfm
>         stream is
>                     against only one peer.
>                     Furthemore on the guest side I have only one vcpu
>         tied to
>                     two physical siblings to minimize L2 cache misses
>         on ISRs
>                     due to cache coherence.
>
>                     I had an idea this morning, maybe I can make use
>         of the
>                     ptp hw timestaming for this? This should give
>         better accuracy.
>                     Is this possible or does it only work for
>         ethertype ptp?
>
>                     On Thursday, October 8, 2015, Alexander Duyck
>                     <alexander.du...@gmail.com
>                     <mailto:alexander.du...@gmail.com>
>                     <mailto:alexander.du...@gmail.com
>                     <mailto:alexander.du...@gmail.com>>> wrote:
>
>                         The difference could be Receive Side Scaling
>         (RSS).             The UDP/IP
>                         packets
>                         can be load balanced across all queues via RSS
>         based
>                     on a hash of the
>                         source and destination addresses.  So if you have
>                     multiple sources
>                         generating these packets, or they are being
>         received
>                     on multiple IP
>                         addresses then it is possible the load is
>         being spread
>                     out over
>                         multiple
>                         CPUs. Your CFM packets are on an Ethertype
>         other than
>                     IPv4 or IPv6 so
>                         all packets will end up on queue 0 if I am not
>         mistaken.
>
>                         - Alex
>
>                         On 10/07/2015 10:21 PM, Mattias Barthel wrote:
>                         > Hi again!
>                         >
>                         > I realise my message might not have been so
>         clear.
>                         >
>                         > I will try to clarify. I am doing PM with
>         software
>                     timestamping.
>                         >
>                         > igb versions:
>                         > version: 3.0.6-k2
>                         > firmware-version: 0.147-0
>                         >
>                         > I do timestamping (NTP format) of the
>         packets in the
>                     same place
>                         for all
>                         > protocols. (in igb_clean_rx_irq_adv()).
>                         >
>                         > For these non ip packets like IEEE 801.2ag 
>         CFM ETH-DM
>                         (ethertype 0x8902) I
>                         > get quite a lot worse accuracy in the
>         timestamping.
>                         >
>                         > For UDP/IP TWAMP I get for 10k pps a max
>         delay of
>                     around 140us
>                         back to back.
>                         > For CFM ETH DM I get for the same packet
>         rate and
>                     packet size a
>                         max delay
>                         > of around 900us.
>                         >
>                         > So my hypothesis was:
>                         > Could FW be putting these L2 packets in another
>                     queue with different
>                         > characteristics?
>                         >
>                         > I tried to add a ET-type filter as written in my
>                     previous mail
>                         but it
>                         > showed no difference.
>                         >
>                         >
>                         > Thanks for any help given!
>                         >
>                         >
>                         >
>                         > On Mon, Oct 5, 2015 at 2:19 PM, Mattias Barthel
>                         <mattiasbart...@gmail.com
>                     <mailto:mattiasbart...@gmail.com> <javascript:;>>
>
>                         > wrote:
>                         >
>                         >> Greetings,
>                         >>
>                         >> Im getting quite bad latency when using the igb
>                     driver on i350
>                         on linux
>                         >> regarding
>                         >> ETH CFM packets. This compared to TWAMP
>         (IPv4 UDP
>                     packets).
>                         >> The environment is KVM with the i350 devices in
>                     PCI-passthrough.
>                         >>
>                         >> So i figured I add an own rx-queue (filter) for
>                     those types of
>                         ethernet
>                         >> protocol packets.
>                         >>
>                         >> This is what i added:
>                         >>
>                         >>
>                         >> wr32(E1000_ETQF(4),
>                         >> (1 << 31) | /* queue enable */
>                         >>      (E1000_ETQF_FILTER_ENABLE) | /* enable
>         filter */
>                         >>       (1 << 29) | /* enable immediate
>         interrupt */
>                         >>       (0x4 << 16) | /* queue no. 4 */
>                         >>       (ETH_P_8021AG));     /* 0x8902 CFM eth
>                     protocol type */
>                         >>
>                         >>
>                         >> ETH_P_8021A is 0x8902
>                         >>
>                         >>
>                         >>
>                         >> Is this a correct/good approach?
>                         >>
>                         >> Thanks in advance!
>                         >>
>                         >> --
>                         >> Mattias Barthel
>                         >>
>                         >
>
>
>         
> ------------------------------------------------------------------------------
>         _______________________________________________
>                         E1000-devel mailing list
>         E1000-devel@lists.sourceforge.net
>                     <mailto:E1000-devel@lists.sourceforge.net>
>         <javascript:;>
>         https://lists.sourceforge.net/lists/listinfo/e1000-devel
>                         To learn more about Intel&#174; Ethernet, visit
>         http://communities.intel.com/community/wired
>
>
>                     Avis de confidentialité
>
>                     Les informations contenues dans le présent message
>         et dans
>                     toute pièce qui lui est jointe sont confidentielles et
>                     peuvent être protégées par le secret
>         professionnel. Ces
>                     informations sont à l’usage exclusif de son ou de ses
>                     destinataires. Si vous recevez ce message par erreur,
>                     veuillez s’il vous plait communiquer immédiatement
>         avec
>                     l’expéditeur et en détruire tout exemplaire. De
>         plus, il
>                     vous est strictement interdit de le divulguer, de le
>                     distribuer ou de le reproduire sans l’autorisation de
>                     l’expéditeur. Merci.
>
>                     Confidentiality notice
>
>                     This e-mail message and any attachment hereto contain
>                     confidential information which may be privileged
>         and which
>                     is intended for the exclusive use of its
>         addressee(s). If
>                     you receive this message in error, please inform
>         sender
>                     immediately and destroy any copy thereof.
>         Furthermore, any
>                     disclosure, distribution or copying of this
>         message and/or
>                     any attachment hereto without the consent of the
>         sender is
>                     strictly prohibited. Thank you.
>
>
>
>
>
>             --     Mattias Barthel
>
>
>
>
>         -- 
>         Mattias Barthel
>
>
>
> Avis de confidentialité
>
> Les informations contenues dans le présent message et dans toute pièce 
> qui lui est jointe sont confidentielles et peuvent être protégées par 
> le secret professionnel. Ces informations sont à l’usage exclusif de 
> son ou de ses destinataires. Si vous recevez ce message par erreur, 
> veuillez s’il vous plait communiquer immédiatement avec l’expéditeur 
> et en détruire tout exemplaire. De plus, il vous est strictement 
> interdit de le divulguer, de le distribuer ou de le reproduire sans 
> l’autorisation de l’expéditeur. Merci.
>
> Confidentiality notice
>
> This e-mail message and any attachment hereto contain confidential 
> information which may be privileged and which is intended for the 
> exclusive use of its addressee(s). If you receive this message in 
> error, please inform sender immediately and destroy any copy thereof. 
> Furthermore, any disclosure, distribution or copying of this message 
> and/or any attachment hereto without the consent of the sender is 
> strictly prohibited. Thank you.
>


------------------------------------------------------------------------------
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit 
http://communities.intel.com/community/wired

Reply via email to