Message ID | 20240314085459.115933-8-xuanzhuo@linux.alibaba.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | virtio-net: support device stats | expand |
On Thu, 14 Mar 2024 16:54:58 +0800 Xuan Zhuo wrote: > + - > + name: rx-hw-drops > + doc: | > + Number of packets that arrived at the device but never left it, > + encompassing packets dropped for reasons such as insufficient buffer s/encompassing/including/ > + space, processing errors, as well as those affected by explicitly > + defined policies and packet filtering criteria. I'm afraid the attempt to "correct my English" ended up decreasing the clarity. Maybe use what I suggested more directly? Number of all packets which entered the device, but never left it, including but not limited to: packets dropped due to lack of buffer space, processing errors, explicit or implicit policies and packet filters. > + type: uint > + - > + name: rx-hw-drop-overruns > + doc: | > + Number of packets that arrived at the device but never left it due to > + no descriptors. I put a paragraph in my previous email explaining how tricky this is to state for HW devices and you just went with the virtio spec :| Number of packets dropped due to transient lack of resources, such as buffer space, host descriptors etc. > + - > + name: rx-csum-bad > + doc: | > + Number of packets that are dropped by device due to invalid checksum. Quoting myself: >> Maybe add a note in "bad" that packets with bad csum are not >> discarded, but still delivered to the stack. Devices should not drop packets due to invalid L4 checksums. > + type: uint > + - > + name: rx-hw-gro-packets > + doc: | > + Number of packets that area coalesced from smaller packets by the device, > + that do not cover LRO packets. s/area/were/ ? s/that do not cover LRO packets/Counts only packets coalesced with the HW-GRO netdevice feature, LRO-coalesced packets are not counted./ > + type: uint > + - > + name: rx-hw-gro-bytes > + doc: see `rx-hw-gro-packets`. > + type: uint > + - > + name: rx-hw-gro-wire-packets > + doc: | > + Number of packets that area coalesced to bigger packets(no LRO packets) > + by the device. s/area/were/ s/packets(no LRO packets)/packets by the HW-GRO feature of the device/ > + type: uint > + - > + name: rx-hw-gro-wire-bytes > + doc: see `rx-hw-gro-wire-packets`. Please make sure the "See `xyz`." references are capitalized (See) and end with a full stop. > + type: uint > + - > + name: rx-hw-drop-ratelimits > + doc: | > + Number of the packets dropped by the device due to the received > + packets bitrate exceeding the device speed limit. Maybe s/speed/rate/ > + type: uint > + - > + name: tx-hw-drops > + doc: | > + Number of packets that arrived at the device but never left it, > + encompassing packets dropped for reasons such as processing errors, as > + well as those affected by explicitly defined policies and packet > + filtering criteria. > + type: uint > + - > + name: tx-hw-drop-errors > + doc: Number of packets dropped because they were invalid or malformed. > + type: uint > + - > + name: tx-csum-none > + doc: | > + Number of packets that do not require the device to calculate the > + checksum. I think we should use past tense everywhere. > + type: uint > + - > + name: tx-needs-csum > + doc: | > + Number of packets that require the device to calculate the > + checksum. > + type: uint > + - > + name: tx-hw-gso-packets > + doc: | > + Number of packets that necessitated segmentation into smaller packets > + by the device. > + type: uint > + - > + name: tx-hw-gso-bytes > + doc: | > + Successfully segmented into smaller packets by the device, see > + `tx-hw-gso-packets`. Maybe stick to "see `tx-hw-gso-packets`", none of the other counters mention the send being "successful". > + type: uint > + - > + name: tx-hw-gso-wire-packets > + doc: | > + Number of the small packets that segmented from bigger packets by the > + device. Maybe Number of wire-sized packets generated by processing `tx-hw-gso-packets` ? > + type: uint > + - > + name: tx-hw-gso-wire-bytes > + doc: See `tx-hw-gso-wire-packets`. > + > + type: uint > + - > + name: tx-hw-drop-ratelimits > + doc: | > + Number of the packets dropped by the device due to the transmit > + packets bitrate exceeding the device speed limit. s/speed/rate/ > + type: uint > > operations: > list: > diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h > index 1ec408585373..c7ac4539eafc 100644 > --- a/include/net/netdev_queues.h > +++ b/include/net/netdev_queues.h > @@ -9,11 +9,38 @@ struct netdev_queue_stats_rx { > u64 bytes; > u64 packets; > u64 alloc_fail; > + > + u64 hw_drops; > + u64 hw_drop_overruns; > + > + u64 csum_unnecessary; > + u64 csum_none; > + u64 csum_bad; > + > + u64 hw_gro_packets; > + u64 hw_gro_bytes; > + u64 hw_gro_wire_packets; > + u64 hw_gro_wire_bytes; > + > + u64 hw_drop_ratelimits; > }; > > struct netdev_queue_stats_tx { > u64 bytes; > u64 packets; > + > + u64 hw_drops; > + u64 hw_drop_errors; > + > + u64 csum_none; > + u64 needs_csum; > + > + u64 hw_gso_packets; > + u64 hw_gso_bytes; > + u64 hw_gso_wire_packets; > + u64 hw_gso_wire_bytes; > + > + u64 hw_drop_ratelimits; > }; > > /** > diff --git a/include/uapi/linux/netdev.h b/include/uapi/linux/netdev.h > index bb65ee840cda..702d69b09f14 100644 > --- a/include/uapi/linux/netdev.h > +++ b/include/uapi/linux/netdev.h > @@ -147,6 +147,26 @@ enum { > NETDEV_A_QSTATS_TX_BYTES, > NETDEV_A_QSTATS_RX_ALLOC_FAIL, > Looks hand written. Once you update the yaml file, you should run: ./tools/net/ynl/ynl-regen.sh This will generate the uAPI changes for you. > + NETDEV_A_QSTATS_RX_HW_DROPS, > + NETDEV_A_QSTATS_RX_HW_DROP_OVERRUNS, > + NETDEV_A_QSTATS_RX_CSUM_UNNECESSARY, > + NETDEV_A_QSTATS_RX_CSUM_NONE, > + NETDEV_A_QSTATS_RX_CSUM_BAD, > + NETDEV_A_QSTATS_RX_HW_GRO_PACKETS, > + NETDEV_A_QSTATS_RX_HW_GRO_BYTES, > + NETDEV_A_QSTATS_RX_HW_GRO_WIRE_PACKETS, > + NETDEV_A_QSTATS_RX_HW_GRO_WIRE_BYTES, > + NETDEV_A_QSTATS_RX_HW_DROP_RATELIMITS, > + NETDEV_A_QSTATS_TX_HW_DROPS, > + NETDEV_A_QSTATS_TX_HW_DROP_ERRORS, > + NETDEV_A_QSTATS_TX_CSUM_NONE, > + NETDEV_A_QSTATS_TX_NEEDS_CSUM, > + NETDEV_A_QSTATS_TX_HW_GSO_PACKETS, > + NETDEV_A_QSTATS_TX_HW_GSO_BYTES, > + NETDEV_A_QSTATS_TX_HW_GSO_WIRE_PACKETS, > + NETDEV_A_QSTATS_TX_HW_GSO_WIRE_BYTES, > + NETDEV_A_QSTATS_TX_HW_DROP_RATELIMITS, > + > __NETDEV_A_QSTATS_MAX, > NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1) > };
On Thu, 14 Mar 2024 16:21:42 -0700, Jakub Kicinski <kuba@kernel.org> wrote: > On Thu, 14 Mar 2024 16:54:58 +0800 Xuan Zhuo wrote: > > + - > > + name: rx-hw-drops > > + doc: | > > + Number of packets that arrived at the device but never left it, > > + encompassing packets dropped for reasons such as insufficient buffer > > s/encompassing/including/ > > > + space, processing errors, as well as those affected by explicitly > > + defined policies and packet filtering criteria. > > I'm afraid the attempt to "correct my English" ended up decreasing the > clarity. I apologize for the misunderstanding; that was not my intention. Your original phrasing is indeed clear and comprehensive. Let's use your suggested description. > Maybe use what I suggested more directly? > > Number of all packets which entered the device, but never left it, > including but not limited to: packets dropped due to lack of buffer > space, processing errors, explicit or implicit policies and packet filters. > > > + type: uint > > + - > > + name: rx-hw-drop-overruns > > + doc: | > > + Number of packets that arrived at the device but never left it due to > > + no descriptors. > > I put a paragraph in my previous email explaining how tricky this is to > state for HW devices and you just went with the virtio spec :| Sorry, not native speaker, I misunderstood. Other is ok. I will fix in next version. Thanks. > > Number of packets dropped due to transient lack of resources, such as > buffer space, host descriptors etc. > > > + - > > + name: rx-csum-bad > > + doc: | > > + Number of packets that are dropped by device due to invalid checksum. > > Quoting myself: > > >> Maybe add a note in "bad" that packets with bad csum are not > >> discarded, but still delivered to the stack. > > Devices should not drop packets due to invalid L4 checksums. > > > + type: uint > > + - > > + name: rx-hw-gro-packets > > + doc: | > > + Number of packets that area coalesced from smaller packets by the device, > > + that do not cover LRO packets. > > s/area/were/ ? > s/that do not cover LRO packets/Counts only packets coalesced with the > HW-GRO netdevice feature, LRO-coalesced packets are not counted./ > > > + type: uint > > + - > > + name: rx-hw-gro-bytes > > + doc: see `rx-hw-gro-packets`. > > + type: uint > > + - > > + name: rx-hw-gro-wire-packets > > + doc: | > > + Number of packets that area coalesced to bigger packets(no LRO packets) > > + by the device. > > s/area/were/ > s/packets(no LRO packets)/packets by the HW-GRO feature of the device/ > > > + type: uint > > + - > > + name: rx-hw-gro-wire-bytes > > + doc: see `rx-hw-gro-wire-packets`. > > Please make sure the "See `xyz`." references are capitalized (See) > and end with a full stop. > > > + type: uint > > + - > > + name: rx-hw-drop-ratelimits > > + doc: | > > + Number of the packets dropped by the device due to the received > > + packets bitrate exceeding the device speed limit. > > Maybe s/speed/rate/ > > > + type: uint > > + - > > + name: tx-hw-drops > > + doc: | > > + Number of packets that arrived at the device but never left it, > > + encompassing packets dropped for reasons such as processing errors, as > > + well as those affected by explicitly defined policies and packet > > + filtering criteria. > > + type: uint > > + - > > + name: tx-hw-drop-errors > > + doc: Number of packets dropped because they were invalid or malformed. > > + type: uint > > + - > > + name: tx-csum-none > > + doc: | > > + Number of packets that do not require the device to calculate the > > + checksum. > > I think we should use past tense everywhere. > > > + type: uint > > + - > > + name: tx-needs-csum > > + doc: | > > + Number of packets that require the device to calculate the > > + checksum. > > + type: uint > > + - > > + name: tx-hw-gso-packets > > + doc: | > > + Number of packets that necessitated segmentation into smaller packets > > + by the device. > > + type: uint > > + - > > + name: tx-hw-gso-bytes > > + doc: | > > + Successfully segmented into smaller packets by the device, see > > + `tx-hw-gso-packets`. > > Maybe stick to "see `tx-hw-gso-packets`", none of the other counters > mention the send being "successful". > > > + type: uint > > + - > > + name: tx-hw-gso-wire-packets > > + doc: | > > + Number of the small packets that segmented from bigger packets by the > > + device. > > Maybe > > Number of wire-sized packets generated by processing > `tx-hw-gso-packets` > > ? > > > + type: uint > > + - > > + name: tx-hw-gso-wire-bytes > > + doc: See `tx-hw-gso-wire-packets`. > > + > > + type: uint > > + - > > + name: tx-hw-drop-ratelimits > > + doc: | > > + Number of the packets dropped by the device due to the transmit > > + packets bitrate exceeding the device speed limit. > > s/speed/rate/ > > > + type: uint > > > > operations: > > list: > > diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h > > index 1ec408585373..c7ac4539eafc 100644 > > --- a/include/net/netdev_queues.h > > +++ b/include/net/netdev_queues.h > > @@ -9,11 +9,38 @@ struct netdev_queue_stats_rx { > > u64 bytes; > > u64 packets; > > u64 alloc_fail; > > + > > + u64 hw_drops; > > + u64 hw_drop_overruns; > > + > > + u64 csum_unnecessary; > > + u64 csum_none; > > + u64 csum_bad; > > + > > + u64 hw_gro_packets; > > + u64 hw_gro_bytes; > > + u64 hw_gro_wire_packets; > > + u64 hw_gro_wire_bytes; > > + > > + u64 hw_drop_ratelimits; > > }; > > > > struct netdev_queue_stats_tx { > > u64 bytes; > > u64 packets; > > + > > + u64 hw_drops; > > + u64 hw_drop_errors; > > + > > + u64 csum_none; > > + u64 needs_csum; > > + > > + u64 hw_gso_packets; > > + u64 hw_gso_bytes; > > + u64 hw_gso_wire_packets; > > + u64 hw_gso_wire_bytes; > > + > > + u64 hw_drop_ratelimits; > > }; > > > > /** > > diff --git a/include/uapi/linux/netdev.h b/include/uapi/linux/netdev.h > > index bb65ee840cda..702d69b09f14 100644 > > --- a/include/uapi/linux/netdev.h > > +++ b/include/uapi/linux/netdev.h > > @@ -147,6 +147,26 @@ enum { > > NETDEV_A_QSTATS_TX_BYTES, > > NETDEV_A_QSTATS_RX_ALLOC_FAIL, > > > > Looks hand written. Once you update the yaml file, you should run: > > ./tools/net/ynl/ynl-regen.sh > > This will generate the uAPI changes for you. > > > + NETDEV_A_QSTATS_RX_HW_DROPS, > > + NETDEV_A_QSTATS_RX_HW_DROP_OVERRUNS, > > + NETDEV_A_QSTATS_RX_CSUM_UNNECESSARY, > > + NETDEV_A_QSTATS_RX_CSUM_NONE, > > + NETDEV_A_QSTATS_RX_CSUM_BAD, > > + NETDEV_A_QSTATS_RX_HW_GRO_PACKETS, > > + NETDEV_A_QSTATS_RX_HW_GRO_BYTES, > > + NETDEV_A_QSTATS_RX_HW_GRO_WIRE_PACKETS, > > + NETDEV_A_QSTATS_RX_HW_GRO_WIRE_BYTES, > > + NETDEV_A_QSTATS_RX_HW_DROP_RATELIMITS, > > + NETDEV_A_QSTATS_TX_HW_DROPS, > > + NETDEV_A_QSTATS_TX_HW_DROP_ERRORS, > > + NETDEV_A_QSTATS_TX_CSUM_NONE, > > + NETDEV_A_QSTATS_TX_NEEDS_CSUM, > > + NETDEV_A_QSTATS_TX_HW_GSO_PACKETS, > > + NETDEV_A_QSTATS_TX_HW_GSO_BYTES, > > + NETDEV_A_QSTATS_TX_HW_GSO_WIRE_PACKETS, > > + NETDEV_A_QSTATS_TX_HW_GSO_WIRE_BYTES, > > + NETDEV_A_QSTATS_TX_HW_DROP_RATELIMITS, > > + > > __NETDEV_A_QSTATS_MAX, > > NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1) > > }; >
diff --git a/Documentation/netlink/specs/netdev.yaml b/Documentation/netlink/specs/netdev.yaml index 76352dbd2be4..41ba22cf1123 100644 --- a/Documentation/netlink/specs/netdev.yaml +++ b/Documentation/netlink/specs/netdev.yaml @@ -335,6 +335,111 @@ attribute-sets: Allocation failure may, or may not result in a packet drop, depending on driver implementation and whether system recovers quickly. type: uint + - + name: rx-hw-drops + doc: | + Number of packets that arrived at the device but never left it, + encompassing packets dropped for reasons such as insufficient buffer + space, processing errors, as well as those affected by explicitly + defined policies and packet filtering criteria. + type: uint + - + name: rx-hw-drop-overruns + doc: | + Number of packets that arrived at the device but never left it due to + no descriptors. + type: uint + - + name: rx-csum-unnecessary + doc: Number of packets that are marked as CHECKSUM_UNNECESSARY. + type: uint + - + name: rx-csum-none + doc: Number of packets that are not checksummed by device. + type: uint + - + name: rx-csum-bad + doc: | + Number of packets that are dropped by device due to invalid checksum. + type: uint + - + name: rx-hw-gro-packets + doc: | + Number of packets that area coalesced from smaller packets by the device, + that do not cover LRO packets. + type: uint + - + name: rx-hw-gro-bytes + doc: see `rx-hw-gro-packets`. + type: uint + - + name: rx-hw-gro-wire-packets + doc: | + Number of packets that area coalesced to bigger packets(no LRO packets) + by the device. + type: uint + - + name: rx-hw-gro-wire-bytes + doc: see `rx-hw-gro-wire-packets`. + type: uint + - + name: rx-hw-drop-ratelimits + doc: | + Number of the packets dropped by the device due to the received + packets bitrate exceeding the device speed limit. + type: uint + - + name: tx-hw-drops + doc: | + Number of packets that arrived at the device but never left it, + encompassing packets dropped for reasons such as processing errors, as + well as those affected by explicitly defined policies and packet + filtering criteria. + type: uint + - + name: tx-hw-drop-errors + doc: Number of packets dropped because they were invalid or malformed. + type: uint + - + name: tx-csum-none + doc: | + Number of packets that do not require the device to calculate the + checksum. + type: uint + - + name: tx-needs-csum + doc: | + Number of packets that require the device to calculate the + checksum. + type: uint + - + name: tx-hw-gso-packets + doc: | + Number of packets that necessitated segmentation into smaller packets + by the device. + type: uint + - + name: tx-hw-gso-bytes + doc: | + Successfully segmented into smaller packets by the device, see + `tx-hw-gso-packets`. + type: uint + - + name: tx-hw-gso-wire-packets + doc: | + Number of the small packets that segmented from bigger packets by the + device. + type: uint + - + name: tx-hw-gso-wire-bytes + doc: See `tx-hw-gso-wire-packets`. + type: uint + - + name: tx-hw-drop-ratelimits + doc: | + Number of the packets dropped by the device due to the transmit + packets bitrate exceeding the device speed limit. + type: uint operations: list: diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h index 1ec408585373..c7ac4539eafc 100644 --- a/include/net/netdev_queues.h +++ b/include/net/netdev_queues.h @@ -9,11 +9,38 @@ struct netdev_queue_stats_rx { u64 bytes; u64 packets; u64 alloc_fail; + + u64 hw_drops; + u64 hw_drop_overruns; + + u64 csum_unnecessary; + u64 csum_none; + u64 csum_bad; + + u64 hw_gro_packets; + u64 hw_gro_bytes; + u64 hw_gro_wire_packets; + u64 hw_gro_wire_bytes; + + u64 hw_drop_ratelimits; }; struct netdev_queue_stats_tx { u64 bytes; u64 packets; + + u64 hw_drops; + u64 hw_drop_errors; + + u64 csum_none; + u64 needs_csum; + + u64 hw_gso_packets; + u64 hw_gso_bytes; + u64 hw_gso_wire_packets; + u64 hw_gso_wire_bytes; + + u64 hw_drop_ratelimits; }; /** diff --git a/include/uapi/linux/netdev.h b/include/uapi/linux/netdev.h index bb65ee840cda..702d69b09f14 100644 --- a/include/uapi/linux/netdev.h +++ b/include/uapi/linux/netdev.h @@ -147,6 +147,26 @@ enum { NETDEV_A_QSTATS_TX_BYTES, NETDEV_A_QSTATS_RX_ALLOC_FAIL, + NETDEV_A_QSTATS_RX_HW_DROPS, + NETDEV_A_QSTATS_RX_HW_DROP_OVERRUNS, + NETDEV_A_QSTATS_RX_CSUM_UNNECESSARY, + NETDEV_A_QSTATS_RX_CSUM_NONE, + NETDEV_A_QSTATS_RX_CSUM_BAD, + NETDEV_A_QSTATS_RX_HW_GRO_PACKETS, + NETDEV_A_QSTATS_RX_HW_GRO_BYTES, + NETDEV_A_QSTATS_RX_HW_GRO_WIRE_PACKETS, + NETDEV_A_QSTATS_RX_HW_GRO_WIRE_BYTES, + NETDEV_A_QSTATS_RX_HW_DROP_RATELIMITS, + NETDEV_A_QSTATS_TX_HW_DROPS, + NETDEV_A_QSTATS_TX_HW_DROP_ERRORS, + NETDEV_A_QSTATS_TX_CSUM_NONE, + NETDEV_A_QSTATS_TX_NEEDS_CSUM, + NETDEV_A_QSTATS_TX_HW_GSO_PACKETS, + NETDEV_A_QSTATS_TX_HW_GSO_BYTES, + NETDEV_A_QSTATS_TX_HW_GSO_WIRE_PACKETS, + NETDEV_A_QSTATS_TX_HW_GSO_WIRE_BYTES, + NETDEV_A_QSTATS_TX_HW_DROP_RATELIMITS, + __NETDEV_A_QSTATS_MAX, NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1) }; diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c index 7004b3399c2b..a2bf9af2dcf6 100644 --- a/net/core/netdev-genl.c +++ b/net/core/netdev-genl.c @@ -489,7 +489,17 @@ netdev_nl_stats_write_rx(struct sk_buff *rsp, struct netdev_queue_stats_rx *rx) { if (netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_PACKETS, rx->packets) || netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_BYTES, rx->bytes) || - netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_ALLOC_FAIL, rx->alloc_fail)) + netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_ALLOC_FAIL, rx->alloc_fail) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_DROPS, rx->hw_drops) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_DROP_OVERRUNS, rx->hw_drop_overruns) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_CSUM_UNNECESSARY, rx->csum_unnecessary) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_CSUM_NONE, rx->csum_none) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_CSUM_BAD, rx->csum_bad) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_GRO_PACKETS, rx->hw_gro_packets) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_GRO_BYTES, rx->hw_gro_bytes) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_GRO_WIRE_PACKETS, rx->hw_gro_wire_packets) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_GRO_WIRE_BYTES, rx->hw_gro_wire_bytes) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_DROP_RATELIMITS, rx->hw_drop_ratelimits)) return -EMSGSIZE; return 0; } @@ -498,7 +508,16 @@ static int netdev_nl_stats_write_tx(struct sk_buff *rsp, struct netdev_queue_stats_tx *tx) { if (netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_PACKETS, tx->packets) || - netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_BYTES, tx->bytes)) + netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_BYTES, tx->bytes) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_DROPS, tx->hw_drops) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_DROP_ERRORS, tx->hw_drop_errors) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_CSUM_NONE, tx->csum_none) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_NEEDS_CSUM, tx->needs_csum) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_GSO_PACKETS, tx->hw_gso_packets) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_GSO_BYTES, tx->hw_gso_bytes) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_GSO_WIRE_PACKETS, tx->hw_gso_wire_packets) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_GSO_WIRE_BYTES, tx->hw_gso_wire_bytes) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_DROP_RATELIMITS, tx->hw_drop_ratelimits)) return -EMSGSIZE; return 0; } diff --git a/tools/include/uapi/linux/netdev.h b/tools/include/uapi/linux/netdev.h index bb65ee840cda..cf24f1d9adf8 100644 --- a/tools/include/uapi/linux/netdev.h +++ b/tools/include/uapi/linux/netdev.h @@ -146,6 +146,25 @@ enum { NETDEV_A_QSTATS_TX_PACKETS, NETDEV_A_QSTATS_TX_BYTES, NETDEV_A_QSTATS_RX_ALLOC_FAIL, + NETDEV_A_QSTATS_RX_HW_DROPS, + NETDEV_A_QSTATS_RX_HW_DROP_OVERRUNS, + NETDEV_A_QSTATS_RX_CSUM_UNNECESSARY, + NETDEV_A_QSTATS_RX_CSUM_NONE, + NETDEV_A_QSTATS_RX_CSUM_BAD, + NETDEV_A_QSTATS_RX_HW_GRO_PACKETS, + NETDEV_A_QSTATS_RX_HW_GRO_BYTES, + NETDEV_A_QSTATS_RX_HW_GRO_WIRE_PACKETS, + NETDEV_A_QSTATS_RX_HW_GRO_WIRE_BYTES, + NETDEV_A_QSTATS_RX_HW_DROP_RATELIMITS, + NETDEV_A_QSTATS_TX_HW_DROPS, + NETDEV_A_QSTATS_TX_HW_DROP_ERRORS, + NETDEV_A_QSTATS_TX_CSUM_NONE, + NETDEV_A_QSTATS_TX_NEEDS_CSUM, + NETDEV_A_QSTATS_TX_HW_GSO_PACKETS, + NETDEV_A_QSTATS_TX_HW_GSO_BYTES, + NETDEV_A_QSTATS_TX_HW_GSO_WIRE_PACKETS, + NETDEV_A_QSTATS_TX_HW_GSO_WIRE_BYTES, + NETDEV_A_QSTATS_TX_HW_DROP_RATELIMITS, __NETDEV_A_QSTATS_MAX, NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1)
These stats are commonly. Support reporting those via netdev-genl queue stats. name: rx-hw-drops name: rx-hw-drop-overruns name: rx-csum-unnecessary name: rx-csum-none name: rx-csum-bad name: rx-hw-gro-packets name: rx-hw-gro-bytes name: rx-hw-gro-wire-packets name: rx-hw-gro-wire-bytes name: rx-hw-drop-ratelimits name: tx-hw-drops name: tx-hw-drop-errors name: tx-csum-none name: tx-needs-csum name: tx-hw-gso-packets name: tx-hw-gso-bytes name: tx-hw-gso-wire-packets name: tx-hw-gso-wire-bytes name: tx-hw-drop-ratelimits Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> --- Documentation/netlink/specs/netdev.yaml | 105 ++++++++++++++++++++++++ include/net/netdev_queues.h | 27 ++++++ include/uapi/linux/netdev.h | 20 +++++ net/core/netdev-genl.c | 23 +++++- tools/include/uapi/linux/netdev.h | 19 +++++ 5 files changed, 192 insertions(+), 2 deletions(-)