On Fri, Mar 30, 2018 at 8:08 PM, Alexander Duyck
<alexander.du...@gmail.com> wrote:
> On Thu, Mar 29, 2018 at 10:35 PM, Ran Shalit <ransha...@gmail.com> wrote:
>> On Fri, Mar 30, 2018 at 12:34 AM, Ran Shalit <ransha...@gmail.com> wrote:
>>> On Thu, Mar 29, 2018 at 9:36 PM, Alexander Duyck
>>> <alexander.du...@gmail.com> wrote:
>>>> On Thu, Mar 29, 2018 at 11:18 AM, Ran Shalit <ransha...@gmail.com> wrote:
>>>>> On Thu, Mar 29, 2018 at 8:52 PM, Alexander Duyck
>>>>> <alexander.du...@gmail.com> wrote:
>>>>>> On Thu, Mar 29, 2018 at 7:45 AM, Ran Shalit <ransha...@gmail.com> wrote:
>>>>>>> On Tue, Mar 27, 2018 at 11:43 PM, Alexander Duyck
>>>>>>> <alexander.du...@gmail.com> wrote:
>>>>>>>> On Tue, Mar 27, 2018 at 1:52 AM, Ran Shalit <ransha...@gmail.com> 
>>>>>>>> wrote:
>>>>>>>>> On Thu, Mar 22, 2018 at 7:31 PM, Alexander Duyck
>>>>>>>>> <alexander.du...@gmail.com> wrote:
>>>>>>>>>> On Thu, Mar 22, 2018 at 9:11 AM, Ran Shalit <ransha...@gmail.com> 
>>>>>>>>>> wrote:
>>>>>>>>>>> On Mon, Mar 19, 2018 at 10:23 PM, Alexander Duyck
>>>>>>>>>>> <alexander.du...@gmail.com> wrote:
>>>>>>>>>>>> On Mon, Mar 19, 2018 at 12:31 PM, Ran Shalit <ransha...@gmail.com> 
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> On Mon, Mar 19, 2018 at 6:27 PM, Alexander Duyck
>>>>>>>>>>>>> <alexander.du...@gmail.com> wrote:
>>>>>>>>>>>>>> On Mon, Mar 19, 2018 at 9:07 AM, Ran Shalit 
>>>>>>>>>>>>>> <ransha...@gmail.com> wrote:
>>>>>>>>>>>>>>> Hello,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I am using igb driver:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> cat output/build/linux-4.10.17/.config | grep IGB
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> CONFIG_IGB=y
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> CONFIG_IGB_HWMON=y
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> CONFIG_IGBVF=y
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> But every boot is takes a lot of time till ethernet is ready.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I try to disable auto negotiation, but nothing helps yet, the 
>>>>>>>>>>>>>>> device
>>>>>>>>>>>>>>> resist, and keep resets phy.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> adapter->fc_autoneg = false;
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> hw->mac.autoneg = false;
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> hw->phy.autoneg_advertised = 0;
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I tried more flags, but nothing helps.
>>>>>>>>>>>>>>> The phy always disabled/reset at boot (led is off for 1 second 
>>>>>>>>>>>>>>> and then on).
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Is there a way to disable auto-negotiation with igb driver ?
>>>>>>>>>>>>>>> I use buildroot with kernel 4.10.81.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thank you for any suggestion,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> ran
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Instead of trying to disable it in the driver why not just 
>>>>>>>>>>>>>> change your
>>>>>>>>>>>>>> system configuration to disable it? You should be able to 
>>>>>>>>>>>>>> configure
>>>>>>>>>>>>>> things in either Network Manager, or via the network init 
>>>>>>>>>>>>>> scripts so
>>>>>>>>>>>>>> that you instead just used a forced speed/duplex combination. If
>>>>>>>>>>>>>> nothing else you can go through and drop support for any other
>>>>>>>>>>>>>> advertised speed/duplex and that should improve the speed of 
>>>>>>>>>>>>>> autoneg
>>>>>>>>>>>>>> itself.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> I think I tried it and it did not work, but I shall try again.
>>>>>>>>>>>>> Where should I put it ? in init.d startup scripts ?
>>>>>>>>>>>>> I think I tried, and yet , I have seen that in reset, the leds of 
>>>>>>>>>>>>> the
>>>>>>>>>>>>> phy are always turned off for a ~1.5 second and then on again.
>>>>>>>>>>>>> This is actually what I am trying to overcome, this strange reset 
>>>>>>>>>>>>> of
>>>>>>>>>>>>> phy every powerup.
>>>>>>>>>>>>
>>>>>>>>>>>> So it sounds like what you may want to disable would not be the phy
>>>>>>>>>>>> autoneg, but the phy reset itself. If that is what you are looking 
>>>>>>>>>>>> for
>>>>>>>>>>>> then you might try modifying igb_reset_phy, or at least when we 
>>>>>>>>>>>> invoke
>>>>>>>>>>>> it in igb_power_up_link. You could look at adding a private flag to
>>>>>>>>>>>> the igb driver to disable it for your use case if that is the 
>>>>>>>>>>>> issue.
>>>>>>>>>>>>
>>>>>>>>>>>>>> You could refer to something like this for more information:
>>>>>>>>>>>>>> https://www.shellhacks.com/change-speed-duplex-ethernet-card-linux/
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> - Alex
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thank you very much,
>>>>>>>>>>>>> ran
>>>>>>>>>>>>
>>>>>>>>>>>> Now I am not so certain if this will solve you issue. What you may
>>>>>>>>>>>> want to do instead is take a look at the function 
>>>>>>>>>>>> igb_power_up_link in
>>>>>>>>>>>> igb_main.c and possibly consider adding a flag check to allow you 
>>>>>>>>>>>> to
>>>>>>>>>>>> disable it on the systems you need to disable it on, or if this is 
>>>>>>>>>>>> for
>>>>>>>>>>>> just one driver you could comment the line out and see if that will
>>>>>>>>>>>> solve the issue.
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Using dmesg to understand what's going on , I see 2 things:
>>>>>>>>>>> 1. Long time interval between opening and link up (5.0 - 1.9 = 
>>>>>>>>>>> ~3seconds !)
>>>>>>>>>>
>>>>>>>>>> For a 1G link 3 seconds isn't all that long.
>>>>>>>>>>
>>>>>>>>>>> 2. Long time interval between link up state and ping success ( 8 - 
>>>>>>>>>>> 5 =
>>>>>>>>>>> ~3 sedconds !)
>>>>>>>>>>
>>>>>>>>>> I don't know what to tell you about that part. I suspect that may be
>>>>>>>>>> some delays in notifiers being processed after the interface has
>>>>>>>>>> reported link up. In addition I don't know what you link partner is.
>>>>>>>>>> Normally for a ping you have to take care of things like setting up
>>>>>>>>>> routes, getting an ARP out to find your target, and then sending the
>>>>>>>>>> ping to that address.
>>>>>>>>>>
>>>>>>>>>> What might be interesting would be to add a dump of the 
>>>>>>>>>> tx_buffer_info
>>>>>>>>>> data for the rings that have transmitted packets. For example we 
>>>>>>>>>> might
>>>>>>>>>> have reported link up, but the link partner may not have been
>>>>>>>>>> responding to us because it wasn't.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Hi Alexander,
>>>>>>>>>
>>>>>>>>> Is there a way to open this dump with compilation flag ? How to dump
>>>>>>>>> this information ?
>>>>>>>>> This time interval (from igb probe to link up) is now is the major
>>>>>>>>> delay (we solved the other time to ping).
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> ranran
>>>>>>>>
>>>>>>>> Actually it can be turned on dynamically to some extend. The code to
>>>>>>>> dump the Tx descriptor information is in a function called igb_dump in
>>>>>>>> the driver. To turn on the bits related to dumping Tx packets you
>>>>>>>> would need to use:
>>>>>>>> ethtool -s <ethX> msglvl hw on
>>>>>>>> ethtool -s <ethX> msglvl tx_done on
>>>>>>>> ethtool -s <ethX> msglvl pktdata on
>>>>>>>>
>>>>>>>> Then it is just a matter of triggering a call to the reset task. There
>>>>>>>> are a few ways to get there. If nothing else you might modify the
>>>>>>>> driver to call igb_dump() at the start of the igb_close() function.
>>>>>>>> Then all you would have to do is bring down the interface with
>>>>>>>> something like an ifconfig <ethX> down and that should trigger the
>>>>>>>> dump of the Tx descriptor data.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I've added start/stop log in main igb functions.
>>>>>>> I can now see things more clearly.
>>>>>>> please see the attached log below,
>>>>>>> It seems that igb_watchdog is responsible somehow for waking up and
>>>>>>> checking things, before deciding that link is up.
>>>>>>> Maybe there is a way to call it higher rate ?
>>>>>>
>>>>>> When the link state changes it is triggered via an interrupt. The time
>>>>>> was about 3.5s to bring up link here if I am understanding correctly.
>>>>>> The other issue I see in your test is I am guessing you aren't pinging
>>>>>> something with a static ARP entry which is another cause for delay in
>>>>>> your test.
>>>>>>
>>>>>> One other thing you might try doing to shave time off of link training
>>>>>> is to disable mdix via ethtool "ethtool -s <ethX> mdix off" and see if
>>>>>> that saves you any time. It might shave maybe about .5 seconds off of
>>>>>> the total link time.
>>>>>>
>>>>>> If you are wanting it to link faster maybe you should look at using
>>>>>> something besides 1000BaseT. Typically about 3 to 4 seconds is about
>>>>>> the limit for Gigabit copper. You may wan to look at a device with a
>>>>>> different PHY if you require a faster link time. For example for
>>>>>> automotive applications something like 1000BaseT1
>>>>>> (https://standards.ieee.org/events/automotive/2016/d1_09_tan_1000base_t1_learning_and_next_gen_use_cases_v6.pdf)
>>>>>> is supposed to be the intended way to go with link times in the
>>>>>> sub-200ms range.
>>>>>>
>>>>>> - Alex
>>>>>
>>>>> I will check your interesting suggestions.
>>>>> Do you think it might help to start igb and networking earlier ?
>>>>
>>>> No.
>>>>
>>>>> I see in dmesg log that igb starts late in kernel boot, even when I
>>>>> add ip=... in bootargs instead of using the init.d script (which calls
>>>>> ifup).
>>>>
>>>> You need enough of the basics up that 2 seconds is pretty reasonable.
>>
>>
>> I would like to add another very interesting result I got:
>> disabling auto-negotiation did not reduce time, and I disabled start
>> networking in init.d (S40network , ifup)
>> and started the network instead with bootargs (ip=10.0.0.2:....)
>>
>> Is there any reason for this dependency of these methods in each other ?
>>
>> Best Regards,
>> ranran
>
> So as they say "it takes two to tango". You are controlling one end of
> the link. What is the other end of the link configured for currently?
> If it is set to auto-negotiate or do stuff like automdix that will add
> time to link establishment.
>

I understand. I did tried the autonegotiation disabling in both sides,
I haven't tried mdix yet, but trying to see if I have mdix
configuration in the windows PC NIC,
I don't find such configuration in the adapter in the windows adapter
menu, so not sure if I can change it in both sides.


> I'm not sure what you are talking about in regards to dependencies. If
> you are asking why the network has to be running in order to configure
> a network interface I would think that is kind of obvious.
>
> Thanks.
>
> - Alex

I meant dependency by the following:
When using auto-negotiation (in both sides of course), I got 10
seconds till ping.
Then if I:
1. Removing ifup in startup script and used bootargs (ip=) instead - no change
2. Adding ifup again (and removed ip from bootargs) , and disabled
autonegotiation - 1.5 second improvement to time till ping.
3. Now I tried again to removed ifup in startup script and use ip in
bootargs - got imrpovement of 1 second to time till ping.

So, I mean that I get improvement in method described in (3) above
only after disabling auto-negotiation.
I am not sure what is the reason for this imporvement and why it
depends on disabling auto-negotiation.
I have dmesg of all trials.

Best Regards,
Ran

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
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