Subject: Re: [PATCH v2 net-next] net/mlx5e: Report rx_discards_phy via rx_fifo_errors

From: Saeed Mahameed <[email-masked]>
Date: Fri, 15 Nov 2024 14:09:02 -0800

On 15 Nov 13:25, Jakub Kicinski wrote:
>On Fri, 15 Nov 2024 11:54:38 -0800 Saeed Mahameed wrote:
>> >We can, but honestly I'd just make sure they are counted in rx_dropped
>>
>> rx_dropped: Number of packets received but not processed,
>>   *   e.g. due to lack of resources or unsupported protocol.
>>   *   For hardware interfaces this counter may include packets discarded
>>   *   due to L2 address filtering but should not include packets dropped
>>                                   ^^^^^^^^^^^^^^
>>   *   by the device due to buffer exhaustion which are counted separately in
>>                            ^^^^^^^^^^^^^^^^^
>>   *   @rx_missed_errors (since procfs folds those two counters together).
>>       ^^^^^^^^^^^^^^^^^
>
>I presume you quote this comment to indicate the rx_dropped should
>count packets dropped due to buffer exhaustion? If yes then you don't
>understand the comment. If no then I don't understand why you're
>quoting it.
>

I quoted this because you suggested to use rx_dropped. It's not a good fit.
In your previous reply you said: 
"but honestly I'd just make sure they are counted in rx_dropped"

>> I think we should use rx_fifo_errors for this and update documentation:
>>
>> rx_missed_errors --> host buffers
>> rx_fifo_errors   --> device buffers
>
>In theory I'd love to use fifo errors to mean device buffer drops.
>In practice devices can backpressure due to host slowness, so the

So what? host slowness will always be counted in rx_missed_errors.
if you see both rx_missed_erros and fifo_errors progressing, you can make
the connection.. With CX devices out_of_buffer "missed_errors" can never cause
fifo drops "fifo_errors".

>device drops are hard to categorize. The vendors themselves have
>limited understanding of how their devices will behave under real
>workloads. And once devices are deployed it may be too late to change
>definitions.
>

Forget about vendors, here is my simplified categorization that we could
align with easily among all vendors and users

// delivered to SW but dropped in SW
1) seen by sw dropped by sw. (rx_dropped?)

// couldn't deliver to SW (back-pressure)
2) slow SW: passed pipeline/fifo: but SW lack of descriptors (rx_missed_errors)
3) overflow: pipeline/fifo overflow at any point before SW queue (rx_fifo_errors)
4) expected drops: steering/flow filters, configuration, carrier
    down, etc ).. no counter in rtnl_stats exists for this
  
// couldn't deliver to SW, errors
5) errors, dropped due to packet related errors or HW errors

If all vendors agree, with some repurposing and renaming of the counters
maybe we can achieve the above with minimal backward compatibility breakage.
To solve this once and for all, we need the documentation to reflect strong
and clear definitions even if it renders existing implementation/interpretation 
to be wrong. Otherwise this will never be solved.

>> rx_dropped       --> unsupported portocols, filter drops, link down, etc..