It works now! Thanks Alexander for your help! I really appreciate it and for me it has been very great value.
On Tue, Oct 13, 2015 at 9:47 PM, Mattias Barthel <mattiasbart...@gmail.com> wrote: > Thanks again Alex, > It might be a good idea to upgrade the driver, who knows what more there > is in store for me using this one. > > Anyways, regarding the timestamping in each rx buffer I think I found it. > > From the I350 datasheet: > ----- > When the TSAUXC.Disable systime bit is cleared and the SRRCTL[n].Timestamp > bit is set to 1, packets received to the queue will be time stamped if > they meet one of the following conditions: > — Meet the criteria defined in the TSYNCRXCTL.Type field (See Section > 8.16.1 and Section 8.16.26). > — Match the value defined in one of the ETQF registers with the 1588 time > stamp bit set (See Section 7.1.2.4) if TSYNCRXCTL.Type field defines time > stamping of L2 packets. > > — Match a 2-tuple filter with the TTQF.1588 time stamp set (See Section > 7.1.2.5) if TSYNCRXCTL.Type field defines time stamping of L4 packets. > > When detecting a receive packet that should be time stamped, the I350 > will: > • Place a 64 bit timestamp, indicating the time a packet was received by > the MAC, at the beginning of the receive buffer before the received packet. > • Set the TSIP bit in the RDESC.STATUS field of the last receive > descriptor. > • Update the RDESC.Packet Type field in the last receive descriptor. Value > in this field enables identifying that this is a PTP (Precision Time > Protocol) packet (this indication is only relevant for L2 packets). > • Update the RDESC.HDR_LEN and RDESC.PKT_LEN values to include size of > timestamp. > ----- > In my driver I found this: > > if (hw->mac.type == e1000_82580) > srrctl |= E1000_SRRCTL_TIMESTAMP; > > So again, its only being done if its 82580. I will try to set this bit > tomorrow for the I350 before trying any driver upgrades which can be quite > painful. > > Thank again! > > On Tue, Oct 13, 2015 at 8:45 PM, Alexander Duyck < > alexander.du...@gmail.com> wrote: > >> You can probably just download and use the latest driver from: >> http://sourceforge.net/projects/e1000/files/igb%20stable/ >> >> It should be able to build on a 3.0.8 kernel provided nothing has been >> back-ported that would change the APIs. >> >> - Alex >> >> On 10/13/2015 10:26 AM, Mattias Barthel wrote: >> >>> Thanks a lot Alex, there might still be some hope then. >>> Unfortunately Im bound to using the linux kernel 3.0.8. What out-of-tree >>> driver can I use with that, please? >>> >>> On Tuesday, October 13, 2015, Alexander Duyck <alexander.du...@gmail.com >>> <mailto:alexander.du...@gmail.com>> wrote: >>> >>> 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 <http://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® >>> 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. >>> >>> >>> >>> 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
------------------------------------------------------------------------------
_______________________________________________ E1000-devel mailing list E1000-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/e1000-devel To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired