11 Replies Latest reply on May 21, 2015 8:02 PM by wb_Intel

    ixgbe LLIpush does not seem to work correctly


      My understanding of the LLI Push parameter for ixgbe is that it will cause a Low Latency Interrupt (bypassing the interrupt coalescing setting) when a TCP packet with the PUSH flag set is received. However, it looks like it just issues an LLI no matter what.


      If I load ixgbe with LLIPush=0 and ping flood the system with the default value for interrupt coalescing (rx-usecs 1), I get the following RTT:


      round-trip min/avg/max/stddev = 0.043/0.054/0.167/0.004 ms


      If I crank up rx-usecs to 1000 (1 millisecond), I get exactly what I expect:


      round-trip min/avg/max/stddev = 0.045/1.003/1.432/0.021 ms


      eg. average RTT increases by about 1 millisecond due to the interrupt coalescing delay.  If I run the same test with LLIPush=1, I get this;


      rx-usecs 1

      round-trip min/avg/max/stddev = 0.040/0.050/0.137/0.004 ms


      rx-usecs 1000

      round-trip min/avg/max/stddev = 0.040/0.050/0.150/0.004 ms


      The interrupt coalescing setting has no effect.  I would expect to see this if the TCP push was set - but in this case, I am just doing a simple ping, so the packets aren't even TCP, much less have the TCP push flag set.


      I experimented with changing the value written to IXGBE_FTQF(0), since it looked incorrect to me.  I changed it from (IXGBE_FTQF_5TUPLE_MASK_MASK << IXGBE_FTQF_5TUPLE_MASK_SHIFT) to (IXGBE_FTQF_PROTOCOL_COMP_MASK << IXGBE_FTQF_5TUPLE_MASK_SHIFT) and this seems to prevent non-TCP packet from issuing an LLI.  However I used hping to verify that any TCP packet, regardless of flags, seems to trigger an LLI.  I also tried only setting only the SIZE_BP and CTRL_PSH bits in L34T_IMIR with the same results.


      Note that all of my testing was done with an 82599, but the datasheet does not document the L34_TIMIR bit for LLI on Push, contradicting what is used by the ixgbe driver.