• Vinicius Costa Gomes's avatar
    igc: Retrieve TX timestamp during interrupt handling · afa14158
    Vinicius Costa Gomes authored
    When the interrupt is handled, the TXTT_0 bit in the TSYNCTXCTL
    register should already be set and the timestamp value already loaded
    in the appropriate register.
    
    This simplifies the handling, and reduces the latency for retrieving
    the TX timestamp, which increase the amount of TX timestamps that can
    be handled in a given time period.
    
    As the "work" function doesn't run in a workqueue anymore, rename it
    to something more sensible, a event handler.
    
    Using ntpperf[1] we can see the following performance improvements:
    
    Before:
    
    $ sudo ./ntpperf -i enp3s0 -m 10:22:22:22:22:21 -d 192.168.1.3 -s 172.18.0.0/16 -I -H -o -37
                   |          responses            |     TX timestamp offset (ns)
    rate   clients |  lost invalid   basic  xleave |    min    mean     max stddev
    1000       100   0.00%   0.00%   0.00% 100.00%      -56      +9     +52     19
    1500       150   0.00%   0.00%   0.00% 100.00%      -40     +30     +75     22
    2250       225   0.00%   0.00%   0.00% 100.00%      -11     +29     +72     15
    3375       337   0.00%   0.00%   0.00% 100.00%      -18     +40     +88     22
    5062       506   0.00%   0.00%   0.00% 100.00%      -19     +23     +77     15
    7593       759   0.00%   0.00%   0.00% 100.00%       +7     +47   +5168     43
    11389     1138   0.00%   0.00%   0.00% 100.00%      -11     +41   +5240     39
    17083     1708   0.00%   0.00%   0.00% 100.00%      +19     +60   +5288     50
    25624     2562   0.00%   0.00%   0.00% 100.00%       +1     +56   +5368     58
    38436     3843   0.00%   0.00%   0.00% 100.00%      -84     +12   +8847     66
    57654     5765   0.00%   0.00% 100.00%   0.00%
    86481     8648   0.00%   0.00% 100.00%   0.00%
    129721   12972   0.00%   0.00% 100.00%   0.00%
    194581   16384   0.00%   0.00% 100.00%   0.00%
    291871   16384  27.35%   0.00%  72.65%   0.00%
    437806   16384  50.05%   0.00%  49.95%   0.00%
    
    After:
    
    $ sudo ./ntpperf -i enp3s0 -m 10:22:22:22:22:21 -d 192.168.1.3 -s 172.18.0.0/16 -I -H -o -37
                   |          responses            |     TX timestamp offset (ns)
    rate   clients |  lost invalid   basic  xleave |    min    mean     max stddev
    1000       100   0.00%   0.00%   0.00% 100.00%      -44      +0     +61     19
    1500       150   0.00%   0.00%   0.00% 100.00%       -6     +39     +81     16
    2250       225   0.00%   0.00%   0.00% 100.00%      -22     +25     +69     15
    3375       337   0.00%   0.00%   0.00% 100.00%      -28     +15     +56     14
    5062       506   0.00%   0.00%   0.00% 100.00%       +7     +78    +143     27
    7593       759   0.00%   0.00%   0.00% 100.00%      -54     +24    +144     47
    11389     1138   0.00%   0.00%   0.00% 100.00%      -90     -33     +28     21
    17083     1708   0.00%   0.00%   0.00% 100.00%      -50      -2     +35     14
    25624     2562   0.00%   0.00%   0.00% 100.00%      -62      +7     +66     23
    38436     3843   0.00%   0.00%   0.00% 100.00%      -33     +30   +5395     36
    57654     5765   0.00%   0.00% 100.00%   0.00%
    86481     8648   0.00%   0.00% 100.00%   0.00%
    129721   12972   0.00%   0.00% 100.00%   0.00%
    194581   16384  19.50%   0.00%  80.50%   0.00%
    291871   16384  35.81%   0.00%  64.19%   0.00%
    437806   16384  55.40%   0.00%  44.60%   0.00%
    
    [1] https://github.com/mlichvar/ntpperfSigned-off-by: default avatarVinicius Costa Gomes <vinicius.gomes@intel.com>
    Reviewed-by: Kurt Kanzenbach's avatarKurt Kanzenbach <kurt@linutronix.de>
    Tested-by: default avatarNaama Meir <naamax.meir@linux.intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    afa14158
igc.h 17.1 KB