[ZmqOrch] Optimize memory by popping batch size at a time - #3910
Conversation
Signed-off-by: Vivek Reddy <vkarri@nvidia.com>
Signed-off-by: Vivek <vkarri@nvidia.com>
Signed-off-by: Vivek <vkarri@nvidia.com>
Signed-off-by: Vivek Reddy <vkarri@nvidia.com>
|
/azp run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
@liuh-80 , please review/signoff |
<!--
Please make sure you've read and understood our contributing guidelines:
https://github.com/Azure/SONiC/blob/gh-pages/CONTRIBUTING.md
** Make sure all your commits include a signature generated with `git commit -s` **
If this is a bug fix, make sure your description includes "fixes #xxxx", or
"closes #xxxx" or "resolves #xxxx"
Please provide the following information:
-->
#### Why I did it
Increase the pop batch size and Max Bulker limit to 65536 to speed up applying the high volume Dash configuration
Depends on
sonic-net/sonic-sairedis#1660
sonic-net/sonic-swss-common#1084
sonic-net/sonic-swss#3910
##### Work item tracking
- Microsoft ADO **(number only)**:
#### How I did it
#### How to verify it
```
root@sonic:/home/admin# ps -aux | grep orch
root 11118 1.5 0.4 464804 267368 pts/0 Sl 02:50 0:00 /usr/bin/orchagent -d /var/log/swss -b 65536 -z zmq_sync -k 65536 -m B0:CF:0E:20:8E:DE -q tcp://eth0-midplane
2025 Sep 30 18:48:38.911835 sonic NOTICE swss#orchagent: :- main: Setting maximum bulk size in bulk mode as 65536
```
Apply Scale config and verify
<!--
If PR needs to be backported, then the PR must be tested against the base branch and the earliest backport release branch and provide tested image version on these two branches. For example, if the PR is requested for master, 202211 and 202012, then the requester needs to provide test results on master and 202012.
-->
#### Which release branch to backport (provide reason below if selected)
<!--
- Note we only backport fixes to a release branch, *not* features!
- Please also provide a reason for the backporting below.
- e.g.
- [x] 202006
-->
- [ ] 202205
- [ ] 202211
- [ ] 202305
- [ ] 202311
- [ ] 202405
- [ ] 202411
- [ ] 202505
#### Tested branch (Please provide the tested image version)
<!--
- Please provide tested image version
- e.g.
- [x] 20201231.100
-->
- [ ] <!-- image version 1 -->
- [ ] <!-- image version 2 -->
#### Description for the changelog
<!--
Write a short (one line) summary that describes the changes in this
pull request for inclusion in the changelog:
-->
<!--
Ensure to add label/tag for the feature raised. example - PR#2174 under sonic-utilities repo. where, Generic Config and Update feature has been labelled as GCU.
-->
#### Link to config_db schema for YANG module changes
<!--
Provide a link to config_db schema for the table for which YANG model
is defined
Link should point to correct section on https://github.com/Azure/sonic-buildimage/blob/master/src/sonic-yang-models/doc/Configuration.md
-->
#### A picture of a cute animal (not mandatory but encouraged)
…1691) <!-- Please make sure you've read and understood our contributing guidelines: https://github.com/Azure/SONiC/blob/gh-pages/CONTRIBUTING.md failure_prs.log skip_prs.log Make sure all your commits include a signature generated with `git commit -s` ** If this is a bug fix, make sure your description includes "fixes #xxxx", or "closes #xxxx" or "resolves #xxxx" Please provide the following information: --> #### Why I did it Increase the pop batch size and Max Bulker limit to 65536 to speed up applying the high volume Dash configuration Depends on sonic-net/sonic-sairedis#1660 sonic-net/sonic-swss-common#1084 sonic-net/sonic-swss#3910 ##### Work item tracking - Microsoft ADO **(number only)**: #### How I did it #### How to verify it ``` root@sonic:/home/admin# ps -aux | grep orch root 11118 1.5 0.4 464804 267368 pts/0 Sl 02:50 0:00 /usr/bin/orchagent -d /var/log/swss -b 65536 -z zmq_sync -k 65536 -m B0:CF:0E:20:8E:DE -q tcp://eth0-midplane 2025 Sep 30 18:48:38.911835 sonic NOTICE swss#orchagent: :- main: Setting maximum bulk size in bulk mode as 65536 ``` Apply Scale config and verify <!-- If PR needs to be backported, then the PR must be tested against the base branch and the earliest backport release branch and provide tested image version on these two branches. For example, if the PR is requested for master, 202211 and 202012, then the requester needs to provide test results on master and 202012. --> #### Which release branch to backport (provide reason below if selected) <!-- - Note we only backport fixes to a release branch, *not* features! - Please also provide a reason for the backporting below. - e.g. - [x] 202006 --> - [ ] 202205 - [ ] 202211 - [ ] 202305 - [ ] 202311 - [ ] 202405 - [ ] 202411 - [ ] 202505 #### Tested branch (Please provide the tested image version) <!-- - Please provide tested image version - e.g. - [x] 20201231.100 --> - [ ] <!-- image version 1 --> - [ ] <!-- image version 2 --> #### Description for the changelog <!-- Write a short (one line) summary that describes the changes in this pull request for inclusion in the changelog: --> <!-- Ensure to add label/tag for the feature raised. example - PR#2174 under sonic-utilities repo. where, Generic Config and Update feature has been labelled as GCU. --> #### Link to config_db schema for YANG module changes <!-- Provide a link to config_db schema for the table for which YANG model is defined Link should point to correct section on https://github.com/Azure/sonic-buildimage/blob/master/src/sonic-yang-models/doc/Configuration.md --> #### A picture of a cute animal (not mandatory but encouraged)
|
/azp run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
/azpw run Azure.sonic-swss |
|
/AzurePipelines run Azure.sonic-swss |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
Cherry-pick PR to msft-202506: Azure/sonic-swss.msft#159 |
…3910) * [ZmqOrch] Optimize memory by popping batch size at a time What I did Used a reference instead of a unnecessary copy of a set object Optimize memory by popping batch size at a time NOTE: Please merge only after the below two PR's are merged sonic-net/sonic-swss-common#1084 sonic-net/sonic-sairedis#1660
…3910) * [ZmqOrch] Optimize memory by popping batch size at a time What I did Used a reference instead of a unnecessary copy of a set object Optimize memory by popping batch size at a time NOTE: Please merge only after the below two PR's are merged sonic-net/sonic-swss-common#1084 sonic-net/sonic-sairedis#1660 Signed-off-by: Lawrence Lee <lawlee@microsoft.com>
…3910) * [ZmqOrch] Optimize memory by popping batch size at a time What I did Used a reference instead of a unnecessary copy of a set object Optimize memory by popping batch size at a time NOTE: Please merge only after the below two PR's are merged sonic-net/sonic-swss-common#1084 sonic-net/sonic-sairedis#1660 Signed-off-by: Baorong Liu <96146196+baorliu@users.noreply.github.com>
|
Tagging @deepak-singhal0408 for viz |
@venkit-nexthop since this PR is merged already, can you help create a new issue for the regression you are observing, while tagging this PR? |
PR sonic-net#3910 changed ZmqConsumer::execute() to perform a single batch pop per invocation, primarily to reduce peak memory in DASH (DPU) workloads. For non-DPU / non-fabric switches that receive high volumes of APPL_DB route updates from fpmsyncd, this regressed throughput: each execute() call no longer drains the consumer table, so updates take many more polls to apply. Introduce a ZmqRouteConsumer subclass that restores the prior drain-until-empty loop in execute(). ZmqOrch::addConsumer() selects ZmqRouteConsumer for non-DPU / non-fabric switch types; DPU and fabric continue to use ZmqConsumer to preserve the bounded-memory behavior added in sonic-net#3910. Also define gMySwitchType in orchagent/p4orch/tests/test_main.cpp so p4orch_tests links once zmqorch.cpp references the global. Signed-off-by: Venkit Kasiviswanathan <venkit@nexthop.ai>
PR sonic-net#3910 changed ZmqConsumer::execute() to perform a single batch pop per invocation, primarily to reduce peak memory in DASH (DPU) workloads. For non-DPU / non-fabric switches that receive high volumes of APPL_DB route updates from fpmsyncd, this regressed throughput: each execute() call no longer drains the consumer table, so updates take many more polls to apply. Introduce a ZmqRouteConsumer subclass that restores the prior drain-until-empty loop in execute(). ZmqOrch::addConsumer() selects ZmqRouteConsumer for non-DPU / non-fabric switch types; DPU and fabric continue to use ZmqConsumer to preserve the bounded-memory behavior added in sonic-net#3910. Also define gMySwitchType in orchagent/p4orch/tests/test_main.cpp so p4orch_tests links once zmqorch.cpp references the global. Signed-off-by: Venkit Kasiviswanathan <venkit@nexthop.ai>
PR sonic-net#3910 changed ZmqConsumer::execute() to perform a single batch pop per invocation, primarily to reduce peak memory in DASH (DPU) workloads. For non-DPU / non-fabric switches that receive high volumes of APPL_DB route updates from fpmsyncd, this regressed throughput: each execute() call no longer drains the consumer table, so updates take many more polls to apply. Introduce a ZmqRouteConsumer subclass that restores the prior drain-until-empty loop in execute(). ZmqOrch::addConsumer() selects ZmqRouteConsumer for non-DPU / non-fabric switch types; DPU and fabric continue to use ZmqConsumer to preserve the bounded-memory behavior added in sonic-net#3910. Also define gMySwitchType in orchagent/p4orch/tests/test_main.cpp so p4orch_tests links once zmqorch.cpp references the global. Signed-off-by: Venkit Kasiviswanathan <venkit@nexthop.ai>
PR sonic-net#3910 changed ZmqConsumer::execute() to perform a single batch pop per invocation, primarily to reduce peak memory in DASH (DPU) workloads. For non-DPU / non-fabric switches that receive high volumes of APPL_DB route updates from fpmsyncd, this regressed throughput: each execute() call no longer drains the consumer table, so updates take many more polls to apply. Introduce a ZmqRouteConsumer subclass that restores the prior drain-until-empty loop in execute(). ZmqOrch::addConsumer() selects ZmqRouteConsumer for non-DPU / non-fabric switch types; DPU and fabric continue to use ZmqConsumer to preserve the bounded-memory behavior added in sonic-net#3910. Also define gMySwitchType in orchagent/p4orch/tests/test_main.cpp so p4orch_tests links once zmqorch.cpp references the global. Signed-off-by: Venkit Kasiviswanathan <venkit@nexthop.ai>
PR sonic-net#3910 changed ZmqConsumer::execute() to perform a single batch pop per invocation, primarily to reduce peak memory in DASH (DPU) workloads. For non-DPU / non-fabric switches that receive high volumes of APPL_DB route updates from fpmsyncd, this regressed throughput: each execute() call no longer drains the consumer table, so updates take many more polls to apply. Introduce a ZmqRouteConsumer subclass that restores the prior drain-until-empty loop in execute(). ZmqOrch::addConsumer() selects ZmqRouteConsumer for non-DPU / non-fabric switch types; DPU and fabric continue to use ZmqConsumer to preserve the bounded-memory behavior added in sonic-net#3910. Also define gMySwitchType in orchagent/p4orch/tests/test_main.cpp so p4orch_tests links once zmqorch.cpp references the global. Signed-off-by: Venkit Kasiviswanathan <venkit@nexthop.ai>
PR sonic-net#3910 changed ZmqConsumer::execute() to perform a single batch pop per invocation, primarily to reduce peak memory in DASH (DPU) workloads. For non-DPU / non-fabric switches that receive high volumes of APPL_DB route updates from fpmsyncd, this regressed throughput: each execute() call no longer drains the consumer table, so updates take many more polls to apply. Introduce a ZmqRouteConsumer subclass that restores the prior drain-until-empty loop in execute(). ZmqOrch::addConsumer() selects ZmqRouteConsumer for non-DPU / non-fabric switch types; DPU and fabric continue to use ZmqConsumer to preserve the bounded-memory behavior added in sonic-net#3910. Also define gMySwitchType in orchagent/p4orch/tests/test_main.cpp so p4orch_tests links once zmqorch.cpp references the global. Signed-off-by: Venkit Kasiviswanathan <venkit@nexthop.ai>
PR sonic-net#3910 changed ZmqConsumer::execute() to perform a single batch pop per invocation, primarily to reduce peak memory in DASH (DPU) workloads. For non-DPU / non-fabric switches that receive high volumes of APPL_DB route updates from fpmsyncd, this regressed throughput: each execute() call no longer drains the consumer table, so updates take many more polls to apply. Introduce a ZmqRouteConsumer subclass that restores the prior drain-until-empty loop in execute(). ZmqOrch::addConsumer() selects ZmqRouteConsumer for non-DPU / non-fabric switch types; DPU and fabric continue to use ZmqConsumer to preserve the bounded-memory behavior added in sonic-net#3910. Also define gMySwitchType in orchagent/p4orch/tests/test_main.cpp so p4orch_tests links once zmqorch.cpp references the global. Signed-off-by: Venkit Kasiviswanathan <venkit@nexthop.ai>
Restore do...while drain loop in ZmqConsumer::execute() for the non-ordered queue path. The single pops() call from PR sonic-net#3910 may leave messages unprocessed if more arrive during execution, hurting route convergence throughput under high ZMQ load. Signed-off-by: Deepak Singhal <deepsinghal@microsoft.com>
* [zmqorch]: Restore drain-until-empty consumer for non-DPU/fabric PR #3910 changed ZmqConsumer::execute() to perform a single batch pop per invocation, primarily to reduce peak memory in DASH (DPU) workloads. For non-DPU / non-fabric switches that receive high volumes of APPL_DB route updates from fpmsyncd, this regressed throughput: each execute() call no longer drains the consumer table, so updates take many more polls to apply. Introduce a ZmqRouteConsumer subclass that restores the prior drain-until-empty loop in execute(). ZmqOrch::addConsumer() selects ZmqRouteConsumer for non-DPU / non-fabric switch types; DPU and fabric continue to use ZmqConsumer to preserve the bounded-memory behavior added in #3910. Also define gMySwitchType in orchagent/p4orch/tests/test_main.cpp so p4orch_tests links once zmqorch.cpp references the global. Signed-off-by: Venkit Kasiviswanathan <venkit@nexthop.ai>
…3910) * [ZmqOrch] Optimize memory by popping batch size at a time What I did Used a reference instead of a unnecessary copy of a set object Optimize memory by popping batch size at a time NOTE: Please merge only after the below two PR's are merged sonic-net/sonic-swss-common#1084 sonic-net/sonic-sairedis#1660 Signed-off-by: Yogapriya Mohankumar <ymohanku@cisco.com>
…ic-net#4578) * [zmqorch]: Restore drain-until-empty consumer for non-DPU/fabric PR sonic-net#3910 changed ZmqConsumer::execute() to perform a single batch pop per invocation, primarily to reduce peak memory in DASH (DPU) workloads. For non-DPU / non-fabric switches that receive high volumes of APPL_DB route updates from fpmsyncd, this regressed throughput: each execute() call no longer drains the consumer table, so updates take many more polls to apply. Introduce a ZmqRouteConsumer subclass that restores the prior drain-until-empty loop in execute(). ZmqOrch::addConsumer() selects ZmqRouteConsumer for non-DPU / non-fabric switch types; DPU and fabric continue to use ZmqConsumer to preserve the bounded-memory behavior added in sonic-net#3910. Also define gMySwitchType in orchagent/p4orch/tests/test_main.cpp so p4orch_tests links once zmqorch.cpp references the global. Signed-off-by: Venkit Kasiviswanathan <venkit@nexthop.ai> Signed-off-by: Yogapriya Mohankumar <ymohanku@cisco.com>
…3910) * [ZmqOrch] Optimize memory by popping batch size at a time What I did Used a reference instead of a unnecessary copy of a set object Optimize memory by popping batch size at a time NOTE: Please merge only after the below two PR's are merged sonic-net/sonic-swss-common#1084 sonic-net/sonic-sairedis#1660
…ic-net#4578) * [zmqorch]: Restore drain-until-empty consumer for non-DPU/fabric PR sonic-net#3910 changed ZmqConsumer::execute() to perform a single batch pop per invocation, primarily to reduce peak memory in DASH (DPU) workloads. For non-DPU / non-fabric switches that receive high volumes of APPL_DB route updates from fpmsyncd, this regressed throughput: each execute() call no longer drains the consumer table, so updates take many more polls to apply. Introduce a ZmqRouteConsumer subclass that restores the prior drain-until-empty loop in execute(). ZmqOrch::addConsumer() selects ZmqRouteConsumer for non-DPU / non-fabric switch types; DPU and fabric continue to use ZmqConsumer to preserve the bounded-memory behavior added in sonic-net#3910. Also define gMySwitchType in orchagent/p4orch/tests/test_main.cpp so p4orch_tests links once zmqorch.cpp references the global. Signed-off-by: Venkit Kasiviswanathan <venkit@nexthop.ai>
What I did
NOTE: Please merge only after the below two PR's are merged
sonic-net/sonic-swss-common#1084
sonic-net/sonic-sairedis#1660
Why I did it
To reduce peak memory usage when applying high-volume dash configuration
How I verified it
Details if related