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

[Reclaim buffer][202106] Reclaim unused buffers by applying zero buffer profiles #9062

Merged
merged 13 commits into from
Dec 13, 2021

Conversation

stephenxs
Copy link
Collaborator

This is to backport community PR #8768 to 202106 branch

Why I did it

Support zero buffer profiles

  1. Add buffer profiles and pool definition for zero buffer profiles
  2. Support applying zero profiles on INACTIVE PORTS
  3. Enable dynamic buffer manager to load zero pools and profiles from a JSON file

Signed-off-by: Stephen Sun stephens@nvidia.com

How I did it

  1. Add buffer profiles and pool definition for zero buffer profiles

    • If the buffer model is static:
      • Apply normal buffer profiles to admin-up ports
      • Apply zero buffer profiles to admin-down ports
    • If the buffer model is dynamic:
      • Apply normal buffer profiles to all ports
      • buffer manager will take care when a port is shut down
  2. Update buffers_config.j2 to support INACTIVE PORTS by extending the existing macros to generate the various buffer objects, including PGs, queues, ingress/egress profile lists

    • Originally, all the macros to generate the above buffer objects took active ports only as an argument
    • Now that buffer items need to be generated on inactive ports as well, an extra argument representing the inactive ports need to be added
    • To be backward compatible, a new series of macros are introduced to take both active and inactive ports as arguments
    • The original version (with active ports only) will be checked first. If it is not defined, then the extended version will be called
    • Only vendors who support zero profiles need to change their buffer templates
  3. Enable buffer manager to load zero pools and profiles from a JSON file:

    • The JSON file is provided on a per-platform basis
    • It is copied from platform/<vendor> folder to /usr/share/sonic/temlates folder in compiling time and rendered when the swss container is being created.
  4. To make code clean and reduce redundant code, extract common macros from buffer_defaults_t{0,1}.j2 of all SKUs to two common files:

    • One in Mellanox-SN2700-D48C8 for single ingress pool mode
    • The other in ACS-MSN2700 for double ingress pool mode

    Those files of all other SKUs will be symbol link to the above files

  5. Update sonic-cfggen test accordingly:

    • Adjust example output file of JSON template for unit test
    • Add unit test in for Mellanox's new buffer templates.

How to verify it

  1. Regression test.
  2. Unit test in sonic-cfggen

Run regression test and manually test.

Which release branch to backport (provide reason below if selected)

  • 201811
  • 201911
  • 202006
  • 202012
  • 202106

Description for the changelog

A picture of a cute animal (not mandatory but encouraged)

1. Add buffer profiles and pool definition for zero buffer profiles
   - If buffer model is static:
      - Apply normal buffer profiles to admin-up ports
      - Apply zero buffer profiles to admin-down ports
   - If buffer model is dynamic:
      - Apply normal buffer profiles to all ports
      - buffer manager will take care when a port is shutdown
2. To make code clean and reduce redundant code, extract common macros from buffer_defaults_t{0,1}.j2 of all SKUs to two common files:
    - one in Mellanox-SN2700 for single ingress pool mode
    - the other in ACS-MSN2700 for double ingress pool mode
   Those files of all other SKUs will be symbol link to the above files
3. Adjust example output file of json template for unit test

Signed-off-by: Stephen Sun <stephens@nvidia.com>

Conflicts:
	device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/buffers_defaults_t0.j2
	device/mellanox/x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/buffers_defaults_t1.j2
@stephenxs stephenxs changed the title Support zero buffer profiles [Reclaim buffer][202106] Reclaim unused buffers by applying zero buffer profiles Oct 26, 2021
Signed-off-by: Stephen Sun <stephens@nvidia.com>
Signed-off-by: Stephen Sun <stephens@nvidia.com>
Signed-off-by: Stephen Sun <stephens@nvidia.com>
Signed-off-by: Stephen Sun <stephens@nvidia.com>
Signed-off-by: Stephen Sun <stephens@nvidia.com>
…template test

Do not use pytest fixture in the test since it is not compatible with
unittest which is used by all of other testcases.

Signed-off-by: Stephen Sun <stephens@nvidia.com>
@qiluo-msft
Copy link
Collaborator

@neethajohn There are new commits after you approval. Could you check again?

@stephenxs
Copy link
Collaborator Author

@neethajohn There are new commits after you approval. Could you check again?

There is still ci failures that look like related to the PR. I am still investigating.

stephenxs and others added 4 commits December 7, 2021 11:52
- buffer template files for all Mellanox SKUs
- update test case output files

Signed-off-by: Stephen Sun <stephens@nvidia.com>
Signed-off-by: Stephen Sun <stephens@nvidia.com>
@stephenxs
Copy link
Collaborator Author

@neethajohn There are new commits after you approval. Could you check again?

There is still ci failures that look like related to the PR. I am still investigating.

All ci checkers passed. @neethajohn can you please review it? thanks

@neethajohn neethajohn merged commit 5c91f23 into sonic-net:202106 Dec 13, 2021
@stephenxs stephenxs deleted the zero-profiles-202106 branch December 14, 2021 06:00
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.

3 participants