On 10/21/2011 10:03 PM, Flavio Leitner wrote:
> On Fri, 21 Oct 2011 14:15:12 +0800
> Michael Wang<wang...@linux.vnet.ibm.com>  wrote:
>
>> On 10/19/2011 08:16 PM, Flavio Leitner wrote:
>>> On Wed, 19 Oct 2011 12:49:48 +0800
>>> wangyun<wang...@linux.vnet.ibm.com>   wrote:
>>>
>>>> Hi, Flavio
>>>>
>>>> I am new to join the community, work on e1000e driver currently,
>>>> And I found a thing strange in this issue, please check below.
>>>>
>>>> Thanks,
>>>> Michael Wang
>>>>
>>>> On 10/18/2011 10:42 PM, Flavio Leitner wrote:
>>>>> On Mon, 17 Oct 2011 11:48:22 -0700
>>>>> Jesse Brandeburg<jesse.brandeb...@intel.com>    wrote:
>>>>>
>>>>>> On Fri, 14 Oct 2011 10:04:26 -0700
>>>>>> Flavio Leitner<f...@redhat.com>    wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I got few reports so far that 82571EB models are having the
>>>>>>> "Detected Hardware Unit Hang" issue after upgrading the kernel.
>>>>>>>
>>>>>>> Further debugging with an instrumented kernel revealed that the
>>>>>>> socket buffer time stamp matches with the last time e1000_xmit_frame()
>>>>>>> was called. Also that the time stamp of e1000_clean_tx_irq() last run
>>>>>>> is prior to the one in socket buffer.
>>>>>>>
>>>>>>> However, ~1 second later, an interrupt is fired and the old entry
>>>>>>> is found. Sometimes, the scheduled print_hang_task dumps the
>>>>>>> information _after_ the old entry is sent (shows empty ring),
>>>>>>> indicating that the HW TX unit isn't really stuck and apparently
>>>>>>> just missed the signal to initiate the transmission.
>>>>>>>
>>>>>>> Order of events:
>>>>>>>     (1) skb is pushed down
>>>>>>>     (2) e1000_xmit_frame() is called
>>>>>>>     (3) ring is filled with one entry
>>>>>>>     (4) TDT is updated
>>>>>>>> (5) nothing happens for little more than 1 second
>>>>>>>     (6) interrupt is fired
>>>>>>>     (7) e1000_clean_tx_irq() is called
>>>>>>>     (8) finds the entry not ready with an old time stamp,
>>>>>>>         schedules print_hang_task and stops the TX queue.
>>>>>>>     (9) print_hang_task runs, dump the info but the old entry is now 
>>>>>>> sent
>>>>>>> (10) apparently the TX queue is back.
>>>>>> Flavio, thanks for the detailed info, please be sure to supply us the
>>>>>> bugzilla number.
>>>>>>
>>>>> It was buried in the end of the first email:
>>>>> https://bugzilla.redhat.com/show_bug.cgi?id=746272
>>>>>
>>>>>> TDH is probably not moving due to the writeback threshold settings in
>>>>>> TXDCTL.  netperf UDP_RR test is likely a good way to test this.
>>>>>>
>>>>> Yeah, makes sense. I haven't heard about new events after had removed
>>>>> the flag FLAG2_DMA_BURST.  Unfortunately, I don't have access to the exact
>>>>> same hardware and I haven't reproduced the issue in-house yet with another
>>>>> 82571EB. See below about interface statistics from sar.

Currently, if FLAG2_DMA_BURST setted, the device will pre-fetch the
tx descriptor only when:

1. the descriptor device cached is lower then 32.
2. The descriptor host prepared is at least one.

I don't think this will cause that issue, but another thing it done is to
set the device to write-back the processed descriptor only when the
amount reach 5(or 4).

So may be when the device get a descriptor and processed, but the
amount not reached 5, so it don't write-back it, but actually already
transmitted.

But this will happen only when the transmit suddenly stopped for one
second or more, I don't know whether this is the real traffic situation
or not.

And may be I am wrong about this, but also I think this may be the only
reason cause this issue.

>>>>>
>>>>>> I don't think the sequence is quite what you said.  We are going to
>>>>>> work with the hardware team to get a sequence that works right, and we
>>>>>> should have a fix for you soon.
>>>>> Yeah, the sequence might not be exact, but gives us a good idea of
>>>>> what could be happening.
>>>>>
>>>>> There are two events right after another:
>>>>>
>>>>> Oct  9 05:45:23  kernel:   TDH<48>
>>>>> Oct  9 05:45:23  kernel:   TDT<49>
>>>>> Oct  9 05:45:23  kernel:   next_to_use<49>
>>>>> Oct  9 05:45:23  kernel:   next_to_clean<48>
>>>>> Oct  9 05:45:23  kernel: buffer_info[next_to_clean]:
>>>>> Oct  9 05:45:23  kernel:   time_stamp<102338ca6>
>>>>> Oct  9 05:45:23  kernel:   next_to_watch<48>
>>>>> Oct  9 05:45:23  kernel:   jiffies<102338dc1>
>>>>> Oct  9 05:45:23  kernel:   next_to_watch.status<0>
>>>>> Oct  9 05:45:23  kernel: MAC Status<80383>
>>>>> Oct  9 05:45:23  kernel: PHY Status<792d>
>>>>> Oct  9 05:45:23  kernel: PHY 1000BASE-T Status<3800>
>>>>> Oct  9 05:45:23  kernel: PHY Extended Status<3000>
>>>>> Oct  9 05:45:23  kernel: PCI Status<10>
>>>>> Oct  9 05:51:54  kernel: e1000e 0000:22:00.1: eth7: Detected Hardware 
>>>>> Unit Hang:
>>>>> Oct  9 05:51:54  kernel:   TDH<55>
>>>>> Oct  9 05:51:54  kernel:   TDT<56>
>>>>> Oct  9 05:51:54  kernel:   next_to_use<56>
>>>>> Oct  9 05:51:54  kernel:   next_to_clean<55>
>>>>> Oct  9 05:51:54  kernel: buffer_info[next_to_clean]:
>>>>> Oct  9 05:51:54  kernel:   time_stamp<102350986>
>>>>> Oct  9 05:51:54  kernel:   next_to_watch<55>
>>>>> Oct  9 05:51:54  kernel:   jiffies<102350b07>
>>>>> Oct  9 05:51:54  kernel:   next_to_watch.status<0>
>>>>> Oct  9 05:51:54  kernel: MAC Status<80383>
>>>>> Oct  9 05:51:54  kernel: PHY Status<792d>
>>>>> Oct  9 05:51:54  kernel: PHY 1000BASE-T Status<3800>
>>>>> Oct  9 05:51:54  kernel: PHY Extended Status<3000>
>>>>> Oct  9 05:51:54  kernel: PCI Status<10>
>>>>>
>>>> I see the judgement of hang is:
>>>>
>>>> time_after(jiffies, tx_ring->buffer_info[i].time_stamp +
>>>> (adapter->tx_timeout_factor * HZ))
>>>>
>>>> which means the hang happened when current jiffies minus buffer's time
>>>> stamp is over
>>>> (adapter->tx_timeout_factor * HZ).
>>>>
>>>> And I see the tx_timeout_factor will at least be 1, so on x86 the
>>>> (jiffies-time_stamp) should
>>>> over 1000, but here looks only around 300.
>>>>
>>>> Could you please check the HZ number of your platform?
>>>>
>>> sure, adapter->tx_timeout_factor * HZ = 0xfa/250d
>>> That data came from a customer using kernel-xen, so HZ is 250.
>>>
>>> Here is the debugging patch used:
>>> http://people.redhat.com/~fleitner/linux-kernel-test.patch
>>>
>>> The idea was to capture all the relevant values at the time
>>> of the problem. (The print_hang_task is scheduled and sometimes
>>> it shows timestamp=0, TDH=TDT because the packet is already sent)
>>>
>>> This is the full output with debugging patch applied:
>>> Oct 11 02:03:52 kernel: e1000e 0000:22:00.1: eth7: Detected Hardware Unit 
>>> Hang:
>>> Oct 11 02:03:52 kernel:   TDH<25>
>>> Oct 11 02:03:52 kernel:   TDT<26>
>>> Oct 11 02:03:52 kernel:   next_to_use<26>
>>> Oct 11 02:03:52 kernel:   next_to_clean<25>
>>> Oct 11 02:03:52 kernel: buffer_info[next_to_clean]:
>>> Oct 11 02:03:52 kernel:   time_stamp<100b2aa22>
>>> Oct 11 02:03:52 kernel:   next_to_watch<25>
>>> Oct 11 02:03:52 kernel:   jiffies<100b2ab25>
>>> Oct 11 02:03:52 kernel:   next_to_watch.status<0>
>>> Oct 11 02:03:52 kernel:   stored_i =<25>
>>> Oct 11 02:03:52 kernel:   stored_first =<25>
>>> Oct 11 02:03:52 kernel:   stamp =<100b2aa22>
>>> Oct 11 02:03:52 kernel:   factor =<fa>
>>> Oct 11 02:03:52 kernel:   last_clean =<100b2aa1a>
>>> Oct 11 02:03:52 kernel:   last_tx =<100b2aa22>
>>> Oct 11 02:03:52 kernel:   count =<0>/<100>
>> The tx_ring->count seems not the default value which should be 256,
>> could you please check if you have change this number to 100?
>>
> If you look at the debugging patch mentioned above, you will see
> that it prints in hexa, so that is actually 0x100 which is the 256d
> you are looking for.
This is my silly mistake, I am sorry for that.
> To be clear, the driver reproducing the issue is the one shipped
> in 2.6.18-274.el5 (Red Hat Enterprise Linux 5 Update 7) with no
> other patches.  In order to get more details at the time of the
> event, we had applied the patch mentioned above, nothing else.
>
> thanks,
> fbl
So have you try to use the Red Hat 6, is this problem still
exist?

Regards,
Michael Wang

------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev
_______________________________________________
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