Hi,

        IMHO, Interrupt coalescence does not work as advertised with
the igb and e1000e drivers. Interrupt coalescence seems to not use
properly the 'rx-usecs' parameter. Moreover, when running at 100 Mb/s,
it seems to be scaled by a factor 10, resulting in huge packet
latency.

        The Broadcom tg3 driver has a default time window for
interrupt coalescence of about 20 us, as per ethtool. With UDP
traffic, a 1 Gb/s, I measure a time window of around 40 us. At 100
Mb/s, I measure a time window of around 60 us in the worse case, in
other cases it's below 20 us.
        The X710/i40e driver has a default time window of 25 us. With
UDP traffic, I measure a time window of around 20 us, at 10 Gb/s
(sorry, can't change speed).

        Both the igb driver, the default time window for interrupt
coalescence of about 3 us, as per ethtool (see below).
        With UDP traffic, at 1 Gb/s, I measure a time window of around
40 us.
        At 100 Mb/s, I measure a time window of around 200-250 us (see
below).
        The e1000e driver has the same behaviour as igb.

        If in igb, I use ethtool to change the time window for
interrupt coalescence to 1 us (i.e., the smallest value), it does not
seem to help. With rx-usecs set to 1, at 100 Mb/s, I still measure
around 200-250 us, and at 1 Gb/s, 40 us. I.e., reducing the parameter
does not change anything.

        As igb and e1000e don't seem to be using the rx-usecs
parameter properly, there seems to be no way to set interrupt
coalescence to a sensible value at 100 Mb/s (let say, 20-40 us).
        So, IMHO, buggy.

Setup :
-----
        Linux kernel : 4.9.82
        igb driver : 5.3.5.18 & 5.4.0-k
        firmware-version: 3.16, 0x800004ff, 1.304.0
        e1000e driver : 3.2.6-k
        firmware-version: 5.6-10

        Speed is changed with :
# ethtool -s eth6 speed 100 duplex full

        Speed change was validated with ethtool and running netperf

Interrupt Coal :
--------------
        Default settings. With the default setting, the max int-coal
time window is supposed to be 3 usec.

# ethtool -c eth6
Coalesce parameters for eth6:
Adaptive RX: off  TX: off
stats-block-usecs: 0
sample-interval: 0
pkt-rate-low: 0
pkt-rate-high: 0

rx-usecs: 3
rx-frames: 0
rx-usecs-irq: 0
rx-frames-irq: 0

tx-usecs: 0
tx-frames: 0
tx-usecs-irq: 0
tx-frames-irq: 128

rx-usecs-low: 0
rx-frame-low: 0
tx-usecs-low: 0
tx-frame-low: 0

rx-usecs-high: 0
rx-frame-high: 0
tx-usecs-high: 0
tx-frame-high: 0

        rx-usecs was changed with :
# ethtool -C eth6 rx-usecs 1

Received packet log :
-------------------
        I run a stream of UDP packet, each packet is 1000 byte, log of
receive times is below. In the received packet time log, I can see
groups of packets batched closely together (separated by 2 usec,
indicating a speed of 4 Gb/s, i.e. clearly coalesced), and those
groups are separated by 200-250 us.

        Please find below the packet log. First column is received
time from the kernel in nanoseconds. Second column is time difference
to previous received packet, i.e. the gap between two received
packets in nanoseconds.

 1524864423.932657212  ;  226658
 1524864423.932659491  ;  2279
 1524864423.932661023  ;  1532
 1524864423.932662308  ;  1285
 1524864423.932923593  ;  261285
 1524864423.932927914  ;  4321
 1524864423.933147424  ;  219510
 1524864423.933149500  ;  2076
 1524864423.933407932  ;  258432
 1524864423.933412290  ;  4358
 1524864423.933413758  ;  1468
 1524864423.933415107  ;  1349
 1524864423.933637323  ;  222216
 1524864423.933639505  ;  2182
 1524864423.933640854  ;  1349
 1524864423.933899512  ;  258658
 1524864423.934130315  ;  230803
 1524864423.934132701  ;  2386
 1524864423.934134096  ;  1395
 1524864423.934135391  ;  1295
 1524864423.934377340  ;  241949
 1524864423.934381582  ;  4242
 1524864423.934382997  ;  1415
 1524864423.934628593  ;  245596
 1524864423.934885071  ;  256478
 1524864423.934886928  ;  1857
 1524864423.934888129  ;  1201
 1524864423.934889348  ;  1219
 1524864423.934890530  ;  1182
 1524864423.935107683  ;  217153
 1524864423.935110140  ;  2457
 1524864423.935111242  ;  1102
 1524864423.935367980  ;  256738
 1524864423.935371950  ;  3970
 1524864423.935373136  ;  1186
 1524864423.935600854  ;  227718
 1524864423.935855419  ;  254565
 1524864423.935857871  ;  2452
 1524864423.935859196  ;  1325
 1524864423.935860454  ;  1258
 1524864423.935861796  ;  1342
 1524864423.936087278  ;  225482
 1524864423.936089122  ;  1844
 1524864423.936366475  ;  277353
 1524864423.936577632  ;  211157
 1524864423.936580055  ;  2423
 1524864423.936581466  ;  1411
 1524864423.936582828  ;  1362
 1524864423.936584173  ;  1345
 1524864423.936848161  ;  263988
 1524864423.936852586  ;  4425
 1524864423.936853977  ;  1391
 1524864423.937069593  ;  215616
 1524864423.937071769  ;  2176
 1524864423.937073050  ;  1281
 1524864423.937333677  ;  260627
 1524864423.937557332  ;  223655
 1524864423.937561290  ;  3958
 1524864423.937562748  ;  1458
 1524864423.937564110  ;  1362
 1524864423.937826533  ;  262423

------------------------------------------------------------------------------
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® Ethernet, visit 
http://communities.intel.com/community/wired

Reply via email to