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.