/* Dump of 64 PRIOs and 256 REDs seems to take 850us on Xeon v4 @ 2.20GHz; * 2.5ms / 400Hz seems more than sufficient for stats resolution.
*/ #define NFP_ABM_STATS_REFRESH_IVAL (2500 * 1000) /* ns */
/* The possible actions if thresholds are exceeded */ enum nfp_abm_q_action { /* mark if ECN capable, otherwise drop */
NFP_ABM_ACT_MARK_DROP = 0, /* mark if ECN capable, otherwise goto QM */
NFP_ABM_ACT_MARK_QUEUE = 1,
NFP_ABM_ACT_DROP = 2,
NFP_ABM_ACT_QUEUE = 3,
NFP_ABM_ACT_NOQUEUE = 4,
};
/** * struct nfp_abm - ABM NIC app structure * @app: back pointer to nfp_app * @pf_id: ID of our PF link * * @red_support: is RED offload supported * @num_prios: number of supported DSCP priorities * @num_bands: number of supported DSCP priority bands * @action_mask: bitmask of supported actions * * @thresholds: current threshold configuration * @threshold_undef: bitmap of thresholds which have not been set * @actions: current FW action configuration * @num_thresholds: number of @thresholds and bits in @threshold_undef * * @prio_map_len: computed length of FW priority map (in bytes) * @dscp_mask: mask FW will apply on DSCP field * * @eswitch_mode: devlink eswitch mode, advanced functions only visible * in switchdev mode * * @q_lvls: queue level control area * @qm_stats: queue statistics symbol * @q_stats: basic queue statistics (only in per-band case)
*/ struct nfp_abm { struct nfp_app *app; unsignedint pf_id;
/** * struct nfp_alink_stats - ABM NIC statistics * @tx_pkts: number of TXed packets * @tx_bytes: number of TXed bytes * @backlog_pkts: momentary backlog length (packets) * @backlog_bytes: momentary backlog length (bytes) * @overlimits: number of ECN marked TXed packets (accumulative) * @drops: number of tail-dropped packets (accumulative)
*/ struct nfp_alink_stats {
u64 tx_pkts;
u64 tx_bytes;
u64 backlog_pkts;
u64 backlog_bytes;
u64 overlimits;
u64 drops;
};
/** * struct nfp_alink_xstats - extended ABM NIC statistics * @ecn_marked: number of ECN marked TXed packets * @pdrop: number of hard drops due to queue limit
*/ struct nfp_alink_xstats {
u64 ecn_marked;
u64 pdrop;
};
/** * struct nfp_qdisc - tracked TC Qdisc * @netdev: netdev on which Qdisc was created * @type: Qdisc type * @handle: handle of this Qdisc * @parent_handle: handle of the parent (unreliable if Qdisc was grafted) * @use_cnt: number of attachment points in the hierarchy * @num_children: current size of the @children array * @children: pointers to children * * @params_ok: parameters of this Qdisc are OK for offload * @offload_mark: offload refresh state - selected for offload * @offloaded: Qdisc is currently offloaded to the HW * * @mq: MQ Qdisc specific parameters and state * @mq.stats: current stats of the MQ Qdisc * @mq.prev_stats: previously reported @mq.stats * * @red: RED Qdisc specific parameters and state * @red.num_bands: Number of valid entries in the @red.band table * @red.band: Per-band array of RED instances * @red.band.ecn: ECN marking is enabled (rather than drop) * @red.band.threshold: ECN marking threshold * @red.band.stats: current stats of the RED Qdisc * @red.band.prev_stats: previously reported @red.stats * @red.band.xstats: extended stats for RED - current * @red.band.prev_xstats: extended stats for RED - previously reported
*/ struct nfp_qdisc { struct net_device *netdev; enum nfp_qdisc_type type;
u32 handle;
u32 parent_handle; unsignedint use_cnt; unsignedint num_children; struct nfp_qdisc **children;
/** * struct nfp_abm_link - port tuple of a ABM NIC * @abm: back pointer to nfp_abm * @vnic: data vNIC * @id: id of the data vNIC * @queue_base: id of base to host queue within PCIe (not QC idx) * @total_queues: number of PF queues * * @last_stats_update: ktime of last stats update * * @prio_map: current map of priorities * @has_prio: @prio_map is valid * * @def_band: default band to use * @dscp_map: list of DSCP to band mappings * * @root_qdisc: pointer to the current root of the Qdisc hierarchy * @qdiscs: all qdiscs recorded by major part of the handle
*/ struct nfp_abm_link { struct nfp_abm *abm; struct nfp_net *vnic; unsignedint id; unsignedint queue_base; unsignedint total_queues;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.