Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimize counter initialization #1862

Merged
merged 4 commits into from
Jan 25, 2025

Conversation

stephenxs
Copy link
Collaborator

@stephenxs stephenxs commented Dec 6, 2024

Optimize counter initialization by reducing the number of bulk counter poll calls during initialization.

Implementation PRs

Module PR title state
sonic-sairedis Optimize counter initialization by reducing the number of bulk counter poll calls and communication between swss/sairedis GitHub issue/pull request detail
sonic-swss Optimize counter initialization by reducing the number of bulk counter poll calls and communication between swss/sairedis GitHub issue/pull request detail

Signed-off-by: Stephen Sun [email protected]

Signed-off-by: Stephen Sun <[email protected]>
@mssonicbld
Copy link
Collaborator

/azp run

Copy link

No pipelines are associated with this pull request.

@stephenxs stephenxs requested a review from kcudnik December 13, 2024 12:58
@stephenxs
Copy link
Collaborator Author

Supplied benchmark data on the latest image (without vendor SAI mutex on counter polling APIs)
Vendor SAI's implementation takes most of time in bulk counter-polling SAI API call during initialization

@kcudnik
Copy link
Contributor

kcudnik commented Jan 23, 2025

should i marge this ?

@stephenxs
Copy link
Collaborator Author

should i marge this ?

Yes, please. Thank you.

@kcudnik kcudnik merged commit 3c6bd92 into sonic-net:master Jan 25, 2025
1 check passed
@stephenxs stephenxs deleted the optimize-counter-initialization branch January 25, 2025 12:24
kcudnik pushed a commit to sonic-net/sonic-sairedis that referenced this pull request Feb 19, 2025
…r poll calls and communication between swss/sairedis (#1527)

Optimize counter initialization by reducing the number of bulk counter poll calls and communication between swss(orchagent)/sairedis(syncd) during initialization.

Originally, orchagent notifies syncd to initialize the counter using an extended sairedis call SAI_REDIS_SWITCH_ATTR_FLEX_COUNTER for each SAI object with the object ID as the key, which means the number of the extended sairedis calls is identical as the number of objects. It takes time to finish all the extended sairedis calls.

Now, for counter groups that have many objects (e.g., port, PG, queues, etc), orchagent notifies syncd to initialize the counter using a single extend sairedis call with many objects' ID as the key (format: <key1>,<key2>,...<keyn>). So, it takes much less time to initialize the counters because fewer extend sairedis calls are required.

Details:

In sairedis, the bulk counter is supported for all counter groups except Buffer Pool Counter and DASH ENI counter.

In swss, bulk counter for the following counter groups

priority group watermark
priority group drop
queue watermark
queue stat
PFC watchdog
HLD sonic-net/SONiC#1862
mssonicbld added a commit to mssonicbld/sonic-sairedis.msft that referenced this pull request Feb 28, 2025
…r poll calls and communication between swss/sairedis

Optimize counter initialization by reducing the number of bulk counter poll calls and communication between swss(orchagent)/sairedis(syncd) during initialization.

Originally, `orchagent` notifies `syncd` to initialize the counter using an extended sairedis call `SAI_REDIS_SWITCH_ATTR_FLEX_COUNTER` for each SAI object with the object ID as the key, which means the number of the extended sairedis calls is identical as the number of objects. It takes time to finish all the extended sairedis calls.

Now, for counter groups that have many objects (e.g., port, PG, queues, etc), `orchagent` notifies `syncd` to initialize the counter using a single extend sairedis call with many objects' ID as the key (format: `<key1>,<key2>,...<keyn>`). So, it takes much less time to initialize the counters because fewer extend sairedis calls are required.

Details:
- In sairedis, the bulk counter is supported for all counter groups except `Buffer Pool Counter` and `DASH ENI counter`.
- In swss, bulk counter for the following counter groups

  - priority group watermark
  - priority group drop
  - queue watermark
  - queue stat
  - PFC watchdog

HLD sonic-net/SONiC#1862
mssonicbld added a commit to Azure/sonic-sairedis.msft that referenced this pull request Feb 28, 2025
…r poll calls and communication between swss/sairedis (#25)

Optimize counter initialization by reducing the number of bulk counter poll calls and communication between swss(orchagent)/sairedis(syncd) during initialization.

Originally, `orchagent` notifies `syncd` to initialize the counter using an extended sairedis call `SAI_REDIS_SWITCH_ATTR_FLEX_COUNTER` for each SAI object with the object ID as the key, which means the number of the extended sairedis calls is identical as the number of objects. It takes time to finish all the extended sairedis calls.

Now, for counter groups that have many objects (e.g., port, PG, queues, etc), `orchagent` notifies `syncd` to initialize the counter using a single extend sairedis call with many objects' ID as the key (format: `<key1>,<key2>,...<keyn>`). So, it takes much less time to initialize the counters because fewer extend sairedis calls are required.

Details:
- In sairedis, the bulk counter is supported for all counter groups except `Buffer Pool Counter` and `DASH ENI counter`.
- In swss, bulk counter for the following counter groups

 - priority group watermark
 - priority group drop
 - queue watermark
 - queue stat
 - PFC watchdog

HLD sonic-net/SONiC#1862
mssonicbld added a commit to mssonicbld/sonic-swss.msft that referenced this pull request Mar 4, 2025
…r poll calls and communication between swss/sairedis

<!--
Please make sure you have read and understood the contribution guildlines:
https://github.com/Azure/SONiC/blob/gh-pages/CONTRIBUTING.md

1. Make sure your commit includes a signature generted with `git commit -s`
2. Make sure your commit title follows the correct format: [component]: description
3. Make sure your commit message contains enough details about the change and related tests
4. Make sure your pull request adds related reviewers, asignees, labels

Please also provide the following information in this pull request:
-->

**What I did**

Optimize counter initialization by reducing the number of bulk counter poll calls and communication between swss(orchagent)/sairedis(syncd) during initialization.

Originally, `orchagent` notifies `syncd` to initialize the counter using an extended sairedis call `SAI_REDIS_SWITCH_ATTR_FLEX_COUNTER` for each SAI object with the object ID as the key, which means the number of the extended sairedis calls is identical as the number of objects. It takes time to finish all the extended sairedis calls.

Now, for counter groups that have many objects (e.g., port, PG, queues, etc), `orchagent` notifies `syncd` to initialize the counter using a single extend sairedis call with many objects' ID as the key (format: `<key1>,<key2>,...<keyn>`). So, it takes much less time to initialize the counters because fewer extend sairedis calls are required.

HLD sonic-net/SONiC#1862
Depends on sonic-net/sonic-sairedis#1527

**Why I did it**

**How I verified it**

Unit test (mock test) and regression.

**Details if related**
- In sairedis, the bulk counter is supported for all counter groups except `Buffer Pool Counter` and `DASH ENI counter`.
- In swss, bulk counter for the following counter groups

  - priority group watermark
  - priority group drop
  - queue watermark
  - queue stat
  - PFC watchdog
  - WRED/ECN counter
mssonicbld added a commit to Azure/sonic-swss.msft that referenced this pull request Mar 4, 2025
…r poll calls and communication between swss/sairedis (#49)

<!--
Please make sure you have read and understood the contribution guildlines:
https://github.com/Azure/SONiC/blob/gh-pages/CONTRIBUTING.md

1. Make sure your commit includes a signature generted with `git commit -s`
2. Make sure your commit title follows the correct format: [component]: description
3. Make sure your commit message contains enough details about the change and related tests
4. Make sure your pull request adds related reviewers, asignees, labels

Please also provide the following information in this pull request:
-->

**What I did**

Optimize counter initialization by reducing the number of bulk counter poll calls and communication between swss(orchagent)/sairedis(syncd) during initialization.

Originally, `orchagent` notifies `syncd` to initialize the counter using an extended sairedis call `SAI_REDIS_SWITCH_ATTR_FLEX_COUNTER` for each SAI object with the object ID as the key, which means the number of the extended sairedis calls is identical as the number of objects. It takes time to finish all the extended sairedis calls.

Now, for counter groups that have many objects (e.g., port, PG, queues, etc), `orchagent` notifies `syncd` to initialize the counter using a single extend sairedis call with many objects' ID as the key (format: `<key1>,<key2>,...<keyn>`). So, it takes much less time to initialize the counters because fewer extend sairedis calls are required.

HLD sonic-net/SONiC#1862
Depends on sonic-net/sonic-sairedis#1527

**Why I did it**

**How I verified it**

Unit test (mock test) and regression.

**Details if related**
- In sairedis, the bulk counter is supported for all counter groups except `Buffer Pool Counter` and `DASH ENI counter`.
- In swss, bulk counter for the following counter groups

 - priority group watermark
 - priority group drop
 - queue watermark
 - queue stat
 - PFC watchdog
 - WRED/ECN counter
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants