#233 - Add automatic RSS for multi-queue flows - #234
Conversation
Signed-off-by: Cliff Burdick <cburdick@nvidia.com>
|
| Filename | Overview |
|---|---|
| include/daqiri/types.h | Adds ids_ to FlowAction after legacy fields (preserving aggregate-init compatibility), plus flow_config_actions, flow_queue_ids, and flow_queue_action_uses_rss helpers; ABI version bumped to 1. |
| src/rss.h | New header with the fixed 40-byte Microsoft Toeplitz RSS key and rss_table_size (next-power-of-two); shared by DPDK and ibverbs engines. |
| src/engine.cpp | Validation updated to use flow_config_actions; adds duplicate-queue-id, unknown-queue-id, eCPRI+RSS, and reorder-vs-RSS checks; the old "no actions" early-continue is replaced by a correct fallback through flow_config_actions. |
| src/common.cpp | YAML parsing extended with id/ids mutual-exclusion check, non-empty-sequence validation, and per-entry range check; backward-compatible with scalar id. |
| src/engines/dpdk/daqiri_dpdk_engine.cpp | Introduces DpdkRxDestination to emit either a QUEUE or an RSS action; RSS flows are gated out of the template path; add_flow forces IPv4+UDP pattern items when RSS is active; add_flex_item_flow signature changed from uint16_t queue_id to const FlowAction& queue_action. |
| src/engines/ibverbs/daqiri_ibverbs_engine.cpp | New resolve_rx_destination creates a DevX RQT+indirect-TIR for multi-queue flows and caches via weak_ptr; create_dr_rule_locked now takes a pre-resolved dr_action* and RssDestinationPtr; shutdown correctly clears rules then rule_specs (releasing shared_ptrs) before queue destruction. |
| src/engines/ibverbs/daqiri_ibverbs_engine.h | Adds RssDestination struct and RssDestinationPtr, updates DynamicFlowEntry and PortSteering::RuleSpec to hold shared ownership, and refactors create_dr_rule_locked / adds resolve_rx_destination declarations. |
| src/engines/ibverbs/mlx5_prm_min.h | Adds RQT create command opcode, DISP_TYPE_INDIRECT, Toeplitz hash constants, hash-field-selector constants, and the mlx5_ifc_create_rqt_in/out_bits / mlx5_ifc_rqtc_bits structures. |
| python/daqiri_common_pybind.cpp | Exposes ids on FlowAction to Python via def_readwrite; minimal change, correctly mirrors the C++ field. |
Reviews (4): Last reviewed commit: "#233 - Default dynamic flow example to l..." | Re-trigger Greptile
Signed-off-by: Cliff Burdick <cburdick@nvidia.com>
|
Tested PR 234 on the IGX against the CX-7 raw ports. Built Results:
One IGX caveat: the checked-in example config with So the core multi-queue RSS behavior looks good on both raw engines; the async-flow/example portability issue looks separate. |
Does this happen on your spark too? |
|
Yes, I can reproduce the IGX caveat on the Spark too. I tested PR 234 at With With RX DPDK stats had So the core DPDK multi-queue RSS behavior still looks good on Spark, but the checked-in example async-flow capacity setting has the same portability issue here as on IGX. |
Signed-off-by: Cliff Burdick <cburdick@nvidia.com>
Resolved by defaulting to 0 |
Summary
ids: [queue, ...]in YAML, C++, and PythonMARK + RSSactions and ibverbs DevX RQT/indirect-TIR destinationsDAQIRI_ABI_VERSIONto 1 for the publicFlowActionlayout changeWhy
A flow previously targeted only one RX queue, preventing applications from distributing varied IPv4/UDP traffic across multiple queues while preserving per-flow affinity. Multi-queue targets now select hardware RSS automatically without changing existing scalar configurations.
User impact
Existing
action.idconfigurations remain unchanged. Users can specify:A fixed five-tuple remains on one queue. Roughly even packet counts require enough varied tuples with reasonably balanced traffic. Exact per-packet striping is not part of this change.
Validation
git diff --checkCloses #233