From 65cf3774196519dd40f92129fa8807ba9bbadb3d Mon Sep 17 00:00:00 2001 From: Venkit Kasiviswanathan Date: Tue, 12 May 2026 02:17:40 +0000 Subject: [PATCH 1/2] [orchagent] HLD: Resiliency improvement for Orchagent Route Programming Add a high-level design document covering the orchagent route programming redesign to improve resiliency. The redesign eliminates non-coalescing intermediate queues by updating m_toSync directly from mqPollThread, splits drain() into three independently schedulable stages (toBulkTask, flushTask, responseHandlingTask) with yield/resume semantics and bounded time quanta, and makes the route state publish asynchronous. Per-task instrumentation in orchdaemon and corresponding show/clear CLIs are also covered. Tracked under sonic-net/sonic-buildimage#27098. Signed-off-by: Venkit Kasiviswanathan --- .../existing_design.png | Bin 0 -> 78878 bytes .../orchagent_route_redesign/new_design.png | Bin 0 -> 52407 bytes doc/orchagent/orchagent_route_redesign.md | 471 ++++++++++++++++++ 3 files changed, 471 insertions(+) create mode 100644 doc/orchagent/images/orchagent_route_redesign/existing_design.png create mode 100644 doc/orchagent/images/orchagent_route_redesign/new_design.png create mode 100644 doc/orchagent/orchagent_route_redesign.md diff --git a/doc/orchagent/images/orchagent_route_redesign/existing_design.png b/doc/orchagent/images/orchagent_route_redesign/existing_design.png new file mode 100644 index 0000000000000000000000000000000000000000..56bb6d736c39785a9a0c425c5f30bcd6bd45798d GIT binary patch literal 78878 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 n)`m~VQF?}3Oo)(3*=W#%VrPub9poWJoOMk-{I literal 0 HcmV?d00001 diff --git a/doc/orchagent/images/orchagent_route_redesign/new_design.png b/doc/orchagent/images/orchagent_route_redesign/new_design.png new file mode 100644 index 0000000000000000000000000000000000000000..2339288ce64a6257a96cd62aaa5929216dd6a01f GIT binary patch literal 52407 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 literal 0 HcmV?d00001 diff --git a/doc/orchagent/orchagent_route_redesign.md b/doc/orchagent/orchagent_route_redesign.md new file mode 100644 index 00000000000..c84a2055a29 --- /dev/null +++ b/doc/orchagent/orchagent_route_redesign.md @@ -0,0 +1,471 @@ +# Improve Resiliency of Orchagent Route Programming + +## Table of Content + +- [Table of Content](#table-of-content) + - [1. Revision](#1-revision) + - [2. Scope](#2-scope) + - [3. Definitions/Abbreviations](#3-definitionsabbreviations) + - [4. Overview](#4-overview) + - [5. Requirements](#5-requirements) + - [6. Architecture Design](#6-architecture-design) + - [6.1. Existing design](#61-existing-design) + - [6.2. Issues with the existing design](#62-issues-with-the-existing-design) + - [6.3. New design overview](#63-new-design-overview) + - [7. High-Level Design](#7-high-level-design) + - [7.1. Change `m_toSync` data structure](#71-change-m_tosync-data-structure) + - [7.2. Update `m_toSync` from `mqPollThread` directly](#72-update-m_tosync-from-mqpollthread-directly) + - [7.3. Split `drain()` into 3 independent operations](#73-split-drain-into-3-independent-operations) + - [7.4. Enable the 3 tasks to be capable of yield/resume](#74-enable-the-3-tasks-to-be-capable-of-yieldresume) + - [7.5. Task processing adheres to time quanta](#75-task-processing-adheres-to-time-quanta) + - [7.6. Asynchronous route state publish](#76-asynchronous-route-state-publish) + - [7.7. Per task instrumentation in Orchdaemon](#77-per-task-instrumentation-in-orchdaemon) + - [7.8. Modules and repositories affected](#78-modules-and-repositories-affected) + - [7.9. SWSS / Syncd changes](#79-swss--syncd-changes) + - [7.10. DB and schema changes](#710-db-and-schema-changes) + - [7.11. Scalability and performance](#711-scalability-and-performance) + - [7.12. Serviceability and debug](#712-serviceability-and-debug) + - [7.13. Platform dependency](#713-platform-dependency) + - [8. SAI API](#8-sai-api) + - [9. Configuration and management](#9-configuration-and-management) + - [9.1. Manifest (if the feature is an Application Extension)](#91-manifest-if-the-feature-is-an-application-extension) + - [9.2. CLI/YANG model Enhancements](#92-cliyang-model-enhancements) + - [9.3. Config DB Enhancements](#93-config-db-enhancements) + - [10. Warmboot and Fastboot Design Impact](#10-warmboot-and-fastboot-design-impact) + - [Warmboot and Fastboot Performance Impact](#warmboot-and-fastboot-performance-impact) + - [11. Memory Consumption](#11-memory-consumption) + - [12. Restrictions/Limitations](#12-restrictionslimitations) + - [13. Testing Requirements/Design](#13-testing-requirementsdesign) + - [13.1. Unit Test cases](#131-unit-test-cases) + - [13.2. System Test cases](#132-system-test-cases) + - [14. Open/Action items](#14-openaction-items) + +## 1. Revision + +| Rev | Date | Author | Change Description | +|-----|------------|-------------------------|--------------------| +| 0.1 | 2026-05-12 | Venkit Kasiviswanathan | Initial version | + +## 2. Scope + +This document describes an improvement of the route programming hot path in +`orchagent` to improve resiliency. The scope is limited to how `RouteOrch` and related orch agents +consume route updates from `fpmsyncd` over ZMQ, accumulate them, and program +them into syncd. The goals are to: + +- Eliminate non-coalescing intermediate queues between the ZMQ ingress and + `m_toSync`. +- Bound the CPU time consumed by route programming per main-loop iteration so + other orch agents continue to make progress. +- Make the response-handling path asynchronous to avoid blocking the hot path + on REDIS publishes. + +Tracked under upstream issue +[sonic-buildimage#27098](https://github.com/sonic-net/sonic-buildimage/issues/27098). + +## 3. Definitions/Abbreviations + +| Term | Definition | +|-----------------|------------| +| ZMQ | ZeroMQ messaging library used between `fpmsyncd` and `orchagent`. | +| `m_toSync` | Coalescing data structure inside an orch agent holding pending updates keyed by entity. | +| `mqPollThread` | Thread inside the orch ZMQ consumer that reads from the ZMQ socket. | +| `drain()` | Routine that processes pending entries from `m_toSync` and programs them. | +| `toBulk` | Local accumulator inside `drain()` used to batch updates to the bulker. | +| `EntityBulker` / `gRouteBulker` | SAI bulk-API helpers in SWSS. | +| `doTask()` | Per-orch entry point invoked by orchdaemon to do pending work. | +| RAII | Resource Acquisition Is Initialization (C++ idiom used for the task timer). | +| IQR | Inter-quartile range; used for outlier classification in task stats. | + +## 4. Overview + +`orchagent` today receives route updates from `fpmsyncd` over ZMQ. The +`mqPollThread` deserializes incoming buffers into a non-coalescing queue. The +main thread then drains that queue into the coalescing `m_toSync` map, runs +`doTask()` to build a bulk request, flushes the bulk to syncd, and finally +publishes the response back to REDIS. All of these steps run serially in the +main thread, which holds up every other orch agent and lets intermediate +queues and ZMQ socket buffers back up under load. + +This HLD proposes to: + +1. Move the addToSync work into `mqPollThread` so tuples flow directly into + the coalescing `m_toSync`, removing the intermediate non-coalescing queues. +2. Split `drain()` into three independent stages (build bulk, flush, handle + response) and run each under a bounded time quantum with yield/resume + semantics. +3. Make the response publish asynchronous so the hot path is not blocked on + REDIS. +4. Add per-task instrumentation in orchdaemon and corresponding CLI to + inspect/clear the stats. + +## 5. Requirements + +- Keep draining from ZMQ and updating the coalescing state continuously, so + that ZMQ socket buffers do not overrun and non-coalescing queues do not + build up. Only the latest update for a key should be processed when + orchagent gets around to it. +- The drain operation must not block ingress into `m_toSync`. The slower the + drain, the more coalescing benefit is realized. +- The three activities inside `drain()` must be independent of updating + `m_toSync`, so they do not hold up the coalescing path. +- Each of the three activities must yield the CPU after a bounded time + duration and resume later, so other orch agents get a chance to run. +- Provide observability (per-task run time, scheduling latency, outliers) and + a way to clear the counters. + +## 6. Architecture Design + +The change is internal to `orchagent`. The overall SONiC architecture +(`fpmsyncd` → ZMQ → `orchagent` → syncd → ASIC, with REDIS state publish) is +unchanged. What changes is the threading model and data flow inside +`orchagent` between the ZMQ consumer and `RouteOrch`. + +### 6.1. Existing design + +![Existing orchagent route programming flow](images/orchagent_route_redesign/existing_design.png) + +1. `zmq_recv()` reads from the ZMQ socket buffer into `m_buffer`. +2. `BinarySerializer::deserializeBuffer()` is called. +3. Data is written into `m_receivedOperationQueue`. +4. Notify the main thread. +5. The main thread issues `pops()` and reads 1024 items. +6. Data is written to `m_toSync`. This coalesces previous writes. +7. `doTask()` runs on **all the items** present in `m_toSync`. It populates a + local `toBulk` data structure. +8. `EntityBulker.flush()` is called. It flushes in chunks of 1000 entries in + the following order: + 1. Delete entries are written first. + 2. New entries are written next. + 3. Change entries are written last. +9. Wait for the response from syncd and call `ResponsePublish` to publish into + REDIS. + 1. This step can be made asynchronous to save time in the hot path. + +### 6.2. Issues with the existing design + +- **Non-coalescing nature of the intermediate queues** + - All queues maintained in the `mqPollThread` are non-coalescing. If the + same route churns multiple times, multiple entries exist in those queues. + - The only coalescing data structure is `m_toSync`. + - If the main thread takes more time to process, these non-coalescing queues + start building up and consume a lot of memory and CPU. + - If `mqPollThread` is slower, the ZMQ socket buffers fill up and the sender + (`fpmsyncd`) is forced to retry and stall. + - The following operations happen serially: `pops()`, `addToSync()`, + `drain()`. While `drain()` is running, the queue in the previous stage is + growing. +- **Unbounded CPU utilization** + - Because the three operations happen serially in the main thread, no other + orch agents can run while route programming is in progress. +- **Synchronous nature of `drain()`** + - `drain()` is comprised of three different activities: + 1. Accumulate a bulk of updates in `toBulk`. + 2. Flush the accumulated bulk to syncd. + 3. Process the response, handle errors, and update REDIS. + - All of these happen synchronously without yielding the CPU. + +### 6.3. New design overview + +![New orchagent route programming flow](images/orchagent_route_redesign/new_design.png) + +- Move `addToSync` work off the main thread. The merge logic now runs in + `mqPollThread`. +- Eliminate the intermediate queues. Tuples flow from `mqPollThread` → + `m_toSync` directly. +- Wake the main loop at most once per "real" burst. Use a 2-tier poll timeout + to coalesce notifications. +- Split `drain()` into three independent tasks (`toBulkTask`, `flushTask`, + `responseHandlingTask`) that each adhere to a time quantum and support + yield/resume. + +## 7. High-Level Design + +### 7.1. Change `m_toSync` data structure + +- After [sonic-swss#3872](https://github.com/sonic-net/sonic-swss/pull/3872) was + merged, `m_toSync` no longer needs to be a `std::multimap` (holding + multiple values for the same key). Currently it holds: + - Just `SET` + - Just `DEL` + - Or `DEL` followed by `SET` +- This allowed coalescing of multiple fields for a key. +- With the above PR, this is no longer a requirement. +- `m_toSync` can be converted to a simple `unordered_map`. Any update simply + overwrites the existing entry's value. + +### 7.2. Update `m_toSync` from `mqPollThread` directly + +PRs implementing this: + +- [sonic-swss-common#1187](https://github.com/sonic-net/sonic-swss-common/pull/1187) +- [sonic-swss#4564](https://github.com/sonic-net/sonic-swss/pull/4564) + +- Eliminate the intermediate non-coalescing queues described above and update + the coalescing `m_toSync` directly from `mqPollThread`. +- This ensures ZMQ socket buffers are drained on time. +- More coalescing happens when `drain()` is slower. +- The following operations are performed inside `mqPollThread`: + - `pops()` + - `addToSync()` +- Locks protect concurrent access to `m_toSync`. +- The change is implemented incrementally. The initial implementation still + holds the lock for the entire duration when `drain()` is operating, which + is no different from today. +- In subsequent PRs the code incrementally reads/writes `m_toSync` only when + required, allowing `mqPollThread` to update it even while `drain()` is + operating. + +### 7.3. Split `drain()` into 3 independent operations + +- Split `drain()` into the following independent operations / functions: + 1. `toBulkTask`: update `toBulk`. + 2. `flushTask`: `gRouteBulker.flush()`. + 3. `responseHandlingTask`: response handling. +- `doTask()` has 3 states depending on what part of the processing is being + handled: + 1. `toBulkTask` state + 2. `flushTask` state + 3. `responseHandlingTask` state +- For incremental implementation, initial PRs can focus on splitting the + `doTask()` code into independent functions and calling them serially. + +### 7.4. Enable the 3 tasks to be capable of yield/resume + +- Once the 3 tasks are separated as described above, each function is + refactored to yield after a specified duration of operation. +- The code stores the state it was in (`toBulkTask`, `flushTask`, or + `responseHandlingTask`). +- It also stores any additional checkpoint information so the task can resume + where it left off. +- It gets rescheduled by posting a notification event to self. +- When the Selectable is scheduled again, `doTask()` looks at the previous + state and calls the appropriate function. The checkpoint information helps + it start from where it left off. + +### 7.5. Task processing adheres to time quanta + +- To keep `m_toSync` independent and allow `mqPollThread` to keep updating + (and coalescing) it, `toBulkTask` consults `m_toSync` in a manner that + allows concurrent access. +- `toBulkTask` does not walk through the entire `m_toSync` collection like it + does today. It walks some bounded number of entries (until a fixed time + quantum is over). +- While walking, it removes those items from `m_toSync` and updates the + `toBulk` data structure. +- `flushTask` does not need access to `m_toSync` at all. +- `responseHandlingTask` normally does not need access to `m_toSync` if there + are no failures. If there is a failure, it does the following: + - Write the entry back to `m_toSync`, if the key does not exist there. + - If the key exists in `m_toSync`, drop the failed entry because there is a + more recent update. + +### 7.6. Asynchronous route state publish + +- [sonic-swss#4437](https://github.com/sonic-net/sonic-swss/pull/4437) turns + this on. Existing code can publish into REDIS from a separate thread. +- This makes `responseHandlingTask` much faster and lets it handle more work + in a given time quantum. + +### 7.7. Per task instrumentation in Orchdaemon + +Show commands display task stats and a clear command resets them. + +- [sonic-utilities#4536](https://github.com/sonic-net/sonic-utilities/pull/4536) +- [sonic-swss#4563](https://github.com/sonic-net/sonic-swss/pull/4563) + +Example output: + +``` +show orchagent tasks + +TASK RUN TIME RUNS OUTLIERS SCHED LATENCY TOTAL + median/q1/q3/max median/q1/q3/max run/sched + (in msec) (in msec) (in msec) +ROUTE_TABLE 1293.32/314.13/1368.40/1569.05 27 0 2.02/0.22/14.52/204.94 27755.02/618.12 +ASIC_SENSORS_POLL_TIMER 204.31/156.05/204.31/208.18 4 0 9930.07/9930.07/10861.90/10861.90 724.40/30323.27 +WM_TELEMETRY_TIMER 79.75/79.75/79.75/79.75 1 0 - 79.75/- +NEIGH_TABLE 0.28/0.19/0.28/11.62 4 0 1380.30/1380.30/11540.49/11540.49 12.18/14217.58 +flush 0.20/0.16/0.21/0.31 26 0 1322.48/1305.44/1403.67/2098.98 5.21/33617.53 +FABRIC_POLL 0.11/0.11/0.11/0.11 1 0 - 0.11/- +PFC_WD_COUNTERS_POLL 0.00/0.00/0.00/0.00 28 0 1319.41/1060.10/1375.67/2099.29 0.03/33999.72 +UPDATE_MAPS_TIMER 0.00/0.00/0.00/0.00 28 0 1314.26/1056.07/1367.65/1992.78 0.02/33884.63 +P4_ACL_COUNTERS_STATS_POLL_TIMER 0.00/0.00/0.00/0.00 3 0 10180.80/9538.98/10180.80/10180.80 0.00/19719.79 +P4_EXT_COUNTERS_STATS_POLL_TIMER 0.00/0.00/0.00/0.00 3 0 10180.82/9538.97/10180.82/10180.82 0.00/19719.79 +ACL_TABLE - 0 0 - -/- +ASIC_SENSORS - 0 0 - -/- +``` + +A companion `sonic-clear orchagent tasks` command resets the counters. + +The implementation wraps every `Executor::execute()` (as well as `flush` and +`logRotate`) in a small RAII `TaskTimer`. The per-`Executor` results land in an +`ExecutorStat` structure and report: + +- Run time (median, 25%, 75%, max) +- Runs +- Scheduling latency (median, 25%, 75%, max) +- Total run time and total scheduling latency +- Outliers (> 1.5 × IQR) + +### 7.8. Modules and repositories affected + +| Repository | Modules / files | Nature of change | +|----------------------|------------------------------------------------------------------|-----------------------------------------------------------------| +| `sonic-swss-common` | ZMQ consumer / producer plumbing | Allow direct updates of coalescing state from poll thread | +| `sonic-swss` | `orchagent` (`RouteOrch`, `Orch`, `Orchdaemon`, ZMQ consumer) | Data structure change, split `drain()`, yield/resume, async publish, per-task instrumentation | +| `sonic-utilities` | `show`/`sonic-clear` commands | New `show orchagent tasks` and `sonic-clear orchagent tasks` | + +This is a built-in SONiC feature, not a SONiC Application Extension. + +### 7.9. SWSS / Syncd changes + +- Inside SWSS, the largest changes are in the ZMQ consumer path and + `RouteOrch`. The change replaces a non-coalescing intermediate queue with + direct updates into the coalescing `m_toSync` map (protected by a lock), + and breaks `drain()` into three independently schedulable stages with + yield/resume semantics and per-stage time quanta. +- Syncd is not modified by this design. The SAI bulk API usage and + flush-ordering semantics (deletes first, adds next, changes last) are + preserved. + +### 7.10. DB and schema changes + +There are no schema changes to `APP_DB`, `ASIC_DB`, `COUNTERS_DB`, +`LOGLEVEL_DB`, `CONFIG_DB`, or `STATE_DB`. The publish into REDIS uses the +existing route state mechanism; the only change is that it now happens +asynchronously from a separate thread. + +### 7.11. Scalability and performance + +- ZMQ socket buffers no longer back up under bursty churn because + `mqPollThread` drains them directly into the coalescing `m_toSync`. +- Higher churn rates increase the amount of coalescing, reducing the number + of SAI operations that ultimately reach syncd. +- Bounded time quanta on `toBulkTask`, `flushTask`, and + `responseHandlingTask` ensure that other orch agents get scheduled in a + timely manner. This bounds the worst-case scheduling latency of other + agents (visible through the `show orchagent tasks` output). + +### 7.12. Serviceability and debug + +- `show orchagent tasks` exposes per-Executor run-time and scheduling-latency + statistics (median, q1, q3, max, total) along with outlier counts based on + the 1.5 × IQR rule. +- `sonic-clear orchagent tasks` resets the counters. +- Existing syslog logging in `RouteOrch` and the ZMQ consumer paths is + retained. + +### 7.13. Platform dependency + +None. The change is internal to `orchagent` and does not require any SAI or +platform vendor changes. + +## 8. SAI API + +No new or modified SAI APIs are introduced by this design. The existing +`SAI_OBJECT_TYPE_ROUTE_ENTRY` bulk APIs are used unchanged. + +## 9. Configuration and management + +### 9.1. Manifest (if the feature is an Application Extension) + +Not applicable. This is a built-in SONiC feature. + +### 9.2. CLI/YANG model Enhancements + +Two new commands are added. There are no YANG model changes. + +| Command | Description | +|----------------------------------|--------------------------------------------------------------------------| +| `show orchagent tasks` | Display per-Executor run time, runs, outliers, and scheduling latency. | +| `sonic-clear orchagent tasks` | Reset the per-Executor counters. | + +Both are additive, do not change any existing CLI, and are downward +compatible. The corresponding entries in +[sonic-utilities Command-Reference.md](https://github.com/sonic-net/sonic-utilities/blob/master/doc/Command-Reference.md) +will be updated alongside the CLI PR. + +### 9.3. Config DB Enhancements + +No `CONFIG_DB` changes. + +## 10. Warmboot and Fastboot Design Impact + +This feature does not change the warmboot or fastboot contract. `orchagent` +continues to use the same APP_DB / ASIC_DB / STATE_DB interactions and the +same SAI bulk-flush ordering. Existing warmboot/fastboot guarantees +(including data-plane disruption budgets) are preserved. + +### Warmboot and Fastboot Performance Impact + +- No additional stalls, sleeps, or I/O operations are introduced into the + boot critical chain. +- No additional CPU-heavy processing (e.g., Jinja template rendering) is + added in the boot path. +- No third-party dependency updates are required. +- The feature is part of `orchagent`; it is not a separate docker or service + that could be delayed. +- Because the change reduces the worst-case time the main thread spends + inside `drain()`, the expected effect on warmboot route-convergence time is + neutral to positive. + +## 11. Memory Consumption + +- Eliminating the intermediate non-coalescing queues reduces steady-state + memory consumption under churn; in the existing design, those queues can + grow unbounded when the main thread is slower than the producer. +- The new `m_toSync` is a single `unordered_map` instead of a `multimap`, + which slightly reduces per-entry overhead. +- The per-Executor statistics structure adds a small fixed amount of memory + per Executor; no growth proportional to traffic. +- No memory consumption growth is expected when the feature is disabled via + configuration; the instrumentation has negligible cost when disabled. + +## 12. Restrictions/Limitations + +- The incremental rollout still holds the `m_toSync` lock for the entire + duration of `drain()` in the initial PRs. Full concurrent access is gated + on subsequent PRs that read/write `m_toSync` only when required. +- The yield/resume scheme relies on each stage being able to checkpoint its + progress. Stages that, in the future, perform indivisible work larger than + the time quantum will still run to completion before yielding. + +## 13. Testing Requirements/Design + +### 13.1. Unit Test cases + +- `m_toSync` as `unordered_map`: SET-then-SET coalesces, DEL-then-SET + overwrites, SET-then-DEL overwrites. +- `mqPollThread` writes directly into `m_toSync` with the correct lock + discipline. +- `toBulkTask`, `flushTask`, `responseHandlingTask` each respect the + configured time quantum and correctly checkpoint/resume. +- `responseHandlingTask` failure handling: write back to `m_toSync` only when + the key is absent; drop when a newer update is present. +- `TaskTimer` records run time and scheduling latency correctly, and + outliers are classified using the 1.5 × IQR rule. +- `sonic-clear orchagent tasks` resets all counters. + +### 13.2. System Test cases + +- Sustained route churn from `fpmsyncd` at rates that previously caused ZMQ + socket-buffer back-pressure: verify no ZMQ retries/stalls and that + `show orchagent tasks` shows bounded run times per stage. +- Bursty churn: verify coalescing increases as `drain()` time grows, + resulting in fewer SAI operations than discrete updates produced. +- Co-scheduling: verify that other orch agents (e.g., NEIGH, ACL) make + forward progress while `RouteOrch` is processing a heavy churn burst, + visible as bounded scheduling latency in `show orchagent tasks`. +- Warmboot with active route churn: verify route convergence time is not + regressed. + +## 14. Open/Action items + +- Throttle writes in `fpmsyncd` by handling soft back-pressure in the form + of ZMQ socket buffers being full. This will require `fpmsyncd` to maintain + local state of the items it writes into ZMQ. +- Convert other agents in `orchagent` to the yield/resume pattern when each + run takes a specified quantum of time. This ensures the main thread of + `orchagent` runs within bounds and is able to schedule every task in a + reasonable time. From cc3f5061cb40bd4ba541b14db6fd32848208242b Mon Sep 17 00:00:00 2001 From: Venkit Kasiviswanathan Date: Sun, 19 Jul 2026 21:11:30 +0000 Subject: [PATCH 2/2] [orchagent] HLD: revise ZMQ ingress model to staging-map design Match the design implemented in sonic-swss-common#1187 and sonic-swss#4564: the mqPollThread ingress callback coalesces tuples into a plain staging map (m_ingress) under m_toSyncMutex rather than merging into m_toSync directly. ZmqRouteConsumer::execute() merges the staged tuples into m_toSync under the lock and then runs drain() lock-free. Revise sections 4, 6.3, 7.2, 7.9, 12, and 13.1, bump the revision table, and update the new-design diagram. Signed-off-by: Venkit Kasiviswanathan --- .../orchagent_route_redesign/new_design.png | Bin 52407 -> 62829 bytes doc/orchagent/orchagent_route_redesign.md | 70 ++++++++++-------- 2 files changed, 40 insertions(+), 30 deletions(-) diff --git a/doc/orchagent/images/orchagent_route_redesign/new_design.png b/doc/orchagent/images/orchagent_route_redesign/new_design.png index 2339288ce64a6257a96cd62aaa5929216dd6a01f..88f9c996d097ce375e7c3ebe010bcd9d63cef31e 100644 GIT binary patch literal 62829 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 KV>q+(H~t5e8UZ2z literal 52407 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 diff --git a/doc/orchagent/orchagent_route_redesign.md b/doc/orchagent/orchagent_route_redesign.md index c84a2055a29..94f7fb7b15d 100644 --- a/doc/orchagent/orchagent_route_redesign.md +++ b/doc/orchagent/orchagent_route_redesign.md @@ -45,6 +45,7 @@ | Rev | Date | Author | Change Description | |-----|------------|-------------------------|--------------------| | 0.1 | 2026-05-12 | Venkit Kasiviswanathan | Initial version | +| 0.2 | 2026-07-19 | Venkit Kasiviswanathan | Revise §7.2 ingress model: stage ZMQ tuples in a coalescing map (`m_ingress`) and merge into `m_toSync` in `execute()`; `drain()` runs lock-free. | ## 2. Scope @@ -89,8 +90,9 @@ queues and ZMQ socket buffers back up under load. This HLD proposes to: -1. Move the addToSync work into `mqPollThread` so tuples flow directly into - the coalescing `m_toSync`, removing the intermediate non-coalescing queues. +1. Remove the intermediate non-coalescing queues: the `mqPollThread` ingress + callback coalesces tuples into a staging map, and the main thread merges + that map into `m_toSync` in `execute()`. 2. Split `drain()` into three independent stages (build bulk, flush, handle response) and run each under a bounded time quantum with yield/resume semantics. @@ -169,10 +171,10 @@ unchanged. What changes is the threading model and data flow inside ![New orchagent route programming flow](images/orchagent_route_redesign/new_design.png) -- Move `addToSync` work off the main thread. The merge logic now runs in - `mqPollThread`. -- Eliminate the intermediate queues. Tuples flow from `mqPollThread` → - `m_toSync` directly. +- Eliminate the intermediate non-coalescing queues. The `mqPollThread` ingress + callback coalesces tuples into a staging map (`m_ingress`) instead. +- Merge the staging map into `m_toSync` in `execute()` on the main thread, then + run `drain()` without holding the lock. - Wake the main loop at most once per "real" burst. Use a 2-tier poll timeout to coalesce notifications. - Split `drain()` into three independent tasks (`toBulkTask`, `flushTask`, @@ -194,27 +196,35 @@ unchanged. What changes is the threading model and data flow inside - `m_toSync` can be converted to a simple `unordered_map`. Any update simply overwrites the existing entry's value. -### 7.2. Update `m_toSync` from `mqPollThread` directly +### 7.2. Coalesce ZMQ ingress into a staging map; merge into `m_toSync` in `execute()` PRs implementing this: - [sonic-swss-common#1187](https://github.com/sonic-net/sonic-swss-common/pull/1187) - [sonic-swss#4564](https://github.com/sonic-net/sonic-swss/pull/4564) -- Eliminate the intermediate non-coalescing queues described above and update - the coalescing `m_toSync` directly from `mqPollThread`. -- This ensures ZMQ socket buffers are drained on time. -- More coalescing happens when `drain()` is slower. -- The following operations are performed inside `mqPollThread`: - - `pops()` - - `addToSync()` -- Locks protect concurrent access to `m_toSync`. -- The change is implemented incrementally. The initial implementation still - holds the lock for the entire duration when `drain()` is operating, which - is no different from today. -- In subsequent PRs the code incrementally reads/writes `m_toSync` only when - required, allowing `mqPollThread` to update it even while `drain()` is - operating. +- Eliminate the intermediate non-coalescing queues described above. Rather than + merging into `m_toSync` from `mqPollThread`, the poll thread's ingress + callback stages each tuple into a separate, key-coalescing + `std::unordered_map` (`m_ingress`) under `m_toSyncMutex`. Because `m_ingress` + is keyed by the route key, repeated updates to the same key overwrite in + place, so it coalesces (unlike the old queue). The poll thread never calls + `addToSync()` and never touches `m_toSync`. +- This ensures ZMQ socket buffers are drained on time. More coalescing happens + in `m_ingress` when `drain()` is slower. +- `ZmqRouteConsumer::execute()` (the orch main thread) then merges the staged + tuples into `m_toSync`: under `m_toSyncMutex` it moves everything out of + `m_ingress`, clears it, and calls `addToSync(entries)` — mirroring + `ZmqConsumer::execute()`'s `pops()` + `addToSync()`. The lock is held only + for this brief hand-off. +- `drain()` then runs **without** the lock. Because `m_toSync` is mutated only + by the main thread, `drain()` and all base `ConsumerBase` paths need no + locking; there is no phase where the lock is held for the duration of + `drain()`. +- Wake-up is coalesced: the ingress callback fires `notifyPending()` only once + the staged batch reaches `gMaxBulkSize` (so the main loop wakes to a real + batch), and the `ZmqRouteServer` poll loop otherwise wakes the main loop at + most once per burst (the 2-tier poll timeout described in §6.3). ### 7.3. Split `drain()` into 3 independent operations @@ -321,10 +331,12 @@ This is a built-in SONiC feature, not a SONiC Application Extension. ### 7.9. SWSS / Syncd changes - Inside SWSS, the largest changes are in the ZMQ consumer path and - `RouteOrch`. The change replaces a non-coalescing intermediate queue with - direct updates into the coalescing `m_toSync` map (protected by a lock), - and breaks `drain()` into three independently schedulable stages with - yield/resume semantics and per-stage time quanta. + `RouteOrch`. The change replaces a non-coalescing intermediate queue with a + key-coalescing staging map (`m_ingress`) populated by the poll thread; the + main thread merges it into `m_toSync` in `execute()` (holding the lock only + for that hand-off) and then runs `drain()` lock-free. It also breaks + `drain()` into three independently schedulable stages with yield/resume + semantics and per-stage time quanta. - Syncd is not modified by this design. The SAI bulk API usage and flush-ordering semantics (deletes first, adds next, changes last) are preserved. @@ -424,9 +436,6 @@ same SAI bulk-flush ordering. Existing warmboot/fastboot guarantees ## 12. Restrictions/Limitations -- The incremental rollout still holds the `m_toSync` lock for the entire - duration of `drain()` in the initial PRs. Full concurrent access is gated - on subsequent PRs that read/write `m_toSync` only when required. - The yield/resume scheme relies on each stage being able to checkpoint its progress. Stages that, in the future, perform indivisible work larger than the time quantum will still run to completion before yielding. @@ -437,8 +446,9 @@ same SAI bulk-flush ordering. Existing warmboot/fastboot guarantees - `m_toSync` as `unordered_map`: SET-then-SET coalesces, DEL-then-SET overwrites, SET-then-DEL overwrites. -- `mqPollThread` writes directly into `m_toSync` with the correct lock - discipline. +- The `mqPollThread` ingress callback stages tuples into `m_ingress` + (coalescing by key) under `m_toSyncMutex`, and `execute()` merges `m_ingress` + into `m_toSync` and then runs `drain()` without the lock. - `toBulkTask`, `flushTask`, `responseHandlingTask` each respect the configured time quantum and correctly checkpoint/resume. - `responseHandlingTask` failure handling: write back to `m_toSync` only when