Re: [RFC] e1000e: Add delays after writing to registers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/06/2015 05:08 AM, Thomas Gleixner wrote:
[..]

Now my question is how big is the induced latency.


Here is one such trace we've captured.

---
cyclictest-2345  [002]    73.674891: hrtimer_init:         hrtimer=0xffff8800b5b1feb8 clockid=CLOCK_MONOTONIC mode=HRTIMER_MODE_ABS
cyclictest-2345  [002]    73.674891: function:                   do_nanosleep
cyclictest-2345  [002]    73.674891: function:                      __hrtimer_start_range_ns
cyclictest-2345  [002]    73.674891: function:                         lock_hrtimer_base.isra.24
cyclictest-2345  [002]    73.674891: function:                            _raw_spin_lock_irqsave
cyclictest-2345  [002]    73.674891: function:                         enqueue_hrtimer
cyclictest-2345  [002]    73.674891: hrtimer_start:        hrtimer=0xffff8800b5b1feb8 function=hrtimer_wakeup expires=73712055622 softexpires=73712055622
...

...
avahi-daemon-1385  [002]    73.675075: function:                               e1000e_set_rx_mode
avahi-daemon-1385  [002]    73.675078: function:                                  __kmalloc
avahi-daemon-1385  [002]    73.675079: function:                                     kmalloc_slab
avahi-daemon-1385  [002]    73.675079: function:                                  e1000e_update_mc_addr_list_generic
avahi-daemon-1385  [002]    73.675080: bputs:                e1000e_update_mc_addr_list_generic: replace MTA table
avahi-daemon-1385  [002]    73.675159: function:             smp_apic_timer_interrupt
avahi-daemon-1385  [002]    73.675159: function:                irq_enter
avahi-daemon-1385  [002]    73.675159: function:                   rcu_irq_enter
avahi-daemon-1385  [002]    73.675159: function:                exit_idle
avahi-daemon-1385  [002]    73.675159: function:                local_apic_timer_interrupt
avahi-daemon-1385  [002]    73.675159: function:                hrtimer_interrupt
avahi-daemon-1385  [002]    73.675159: function:                   _raw_spin_lock
avahi-daemon-1385  [002]    73.675159: function:                   ktime_get_update_offsets
avahi-daemon-1385  [002]    73.675159: function:                   __run_hrtimer
avahi-daemon-1385  [002]    73.675160: hrtimer_cancel:       hrtimer=0xffff8800b5b1feb8
avahi-daemon-1385  [002]    73.675160: function:                      __remove_hrtimer
avahi-daemon-1385  [002]    73.675160: hrtimer_expire_entry: hrtimer=0xffff8800b5b1feb8 now=73712084997 function=hrtimer_wakeup/0x0
---

After the wake-up timer is armed, the e1000e driver handles the network
link configuration after the NIC was reset. When the function
"e1000e_update_mc_addr_list_generic" is called, the MTA table is
rewritten (the writing of this table consists of >70 MMIO writes
followed by a read).

We see the hrtimer entry expire at the value 73712084997 near the bottom of the
trace.

73712084997ns - 73712055622ns = 29375ns

So, we see a ~29us latency, in comparison to a good case where we see about 1us.
Consistently, when we've seen large cyclictest latencies, we see that the e1000e
driver calls a function which uses e1e_flush after a large series of writes.

- JD
--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux