diff --git a/doc/bgp_loading_optimization/bgp-loading-optimization-hld.md b/doc/bgp_loading_optimization/bgp-loading-optimization-hld.md index b8b6a9c1856..3ef50e9feed 100644 --- a/doc/bgp_loading_optimization/bgp-loading-optimization-hld.md +++ b/doc/bgp_loading_optimization/bgp-loading-optimization-hld.md @@ -28,18 +28,14 @@ - [Synchronous sairedis API usage](#synchronous-sairedis-api-usage) - [Requirements](#requirements) - [High-Level Proposal](#high-level-proposal) - - [1. Reduce Redis I/O traffic between Fpmsyncd and Orchagent](#1-reduce-redis-io-traffic-between-fpmsyncd-and-orchagent) - - [1.1 Remove _PUBLISH_ in the lua script](#11-remove-publish--in-the-lua-script) - - [1.2 Reduce pipeline flush frequency](#12-reduce-pipeline-flush-frequency) - - [1.3 Discard the state table with prefix \_](#13-discard-the-state-table-with-prefix-_) + - [1. Improve I/O performance between Fpmsyncd and Orchagent with ZMQ](#1-improve-io-performance-between-fpmsyncd-and-orchagent-with-zmq) - [2. Add an assistant thread to the monolithic Orchagent/Syncd main event loop workflow](#2-add-an-assistant-thread-to-the-monolithic-orchagentsyncd-main-event-loop-workflow) - [3. Asynchronous sairedis API usage](#3-asynchronous-sairedis-api-usage) - [New ResponseThread in OA](#new-responsethread-in-oa) - [Low-Level Implementation](#low-level-implementation) - [Fpmsyncd](#fpmsyncd) - - [Lua scripts](#lua-scripts) - - [Multi-threaded orchagent with a singleton ring buffer](#multi-threaded-orchagent-with-a-singleton-ring-buffer) - - [Syncd \[similar optimization to orchagent\]](#syncd-similar-optimization-to-orchagent) + - [Orchagent](#orchagent) + - [Syncd](#syncd) - [Asynchronous sairedis API usage and new ResponseThread in orchagent](#asynchronous-sairedis-api-usage-and-new--responsethread-in-orchagent) - [WarmRestart scenario](#warmrestart-scenario) - [Testing Requirements/Design](#testing-requirementsdesign) @@ -102,7 +98,7 @@ The whole BGP loading/withdrawing workflow is shown in the figure below: **NOTE**: [Linux kernel](https://github.com/SONiC-net/SONiC/wiki/Architecture#routing-state-interactions) part is ignored here. -### Orchagent consumer workflow can improve by ZMQ +### Orchagent consumer workflow is single-threaded Let's take the consumer for `ROUTE_TABLE` for example. In Orchagent's event-triggered main loop, Consumer would be selected to run its `execute()` API which contains three steps.