Skip to content

Commit

Permalink
[Reclaim buffer] Common infrastructure update for reclaiming buffer (#…
Browse files Browse the repository at this point in the history
…9133)

- Why I did it
This is to update the common sonic-buildimage infra for reclaiming buffer.

- How I did it
Render zero_profiles.j2 to zero_profiles.json for vendors that support reclaiming buffer
The zero profiles will be referenced in PR [Reclaim buffer] Reclaim unused buffers by applying zero buffer profiles #8768 on Mellanox platforms and there will be test cases to verify the behavior there.
Rendering is done here for passing azure pipeline.
Load zero_profiles.json when the dynamic buffer manager starts
Generate inactive port list to reclaim buffer

Signed-off-by: Stephen Sun <stephens@nvidia.com>
  • Loading branch information
stephenxs committed Nov 24, 2021
1 parent e79c715 commit b3ccef9
Show file tree
Hide file tree
Showing 7 changed files with 106 additions and 7 deletions.
10 changes: 6 additions & 4 deletions dockers/docker-orchagent/buffermgrd.sh
Expand Up @@ -3,14 +3,16 @@
BUFFER_CALCULATION_MODE=$(redis-cli -n 4 hget "DEVICE_METADATA|localhost" buffer_model)

if [ "$BUFFER_CALCULATION_MODE" == "dynamic" ]; then
BUFFERMGRD_ARGS="-a /etc/sonic/asic_table.json"
if [ -f /etc/sonic/peripheral_table.json ]; then
BUFFERMGRD_ARGS="-a /etc/sonic/asic_table.json -p /etc/sonic/peripheral_table.json"
else
BUFFERMGRD_ARGS="-a /etc/sonic/asic_table.json"
BUFFERMGRD_PERIPHERIAL_ARGS=" -p /etc/sonic/peripheral_table.json"
fi
if [ -f /etc/sonic/zero_profiles.json ]; then
BUFFERMGRD_ZERO_PROFILE_ARGS=" -z /etc/sonic/zero_profiles.json"
fi
else
# Should we use the fallback MAC in case it is not found in Device.Metadata
BUFFERMGRD_ARGS="-l /usr/share/sonic/hwsku/pg_profile_lookup.ini"
fi

exec /usr/bin/buffermgrd ${BUFFERMGRD_ARGS}
exec /usr/bin/buffermgrd ${BUFFERMGRD_ARGS} ${BUFFERMGRD_PERIPHERIAL_ARGS} ${BUFFERMGRD_ZERO_PROFILE_ARGS}
31 changes: 29 additions & 2 deletions files/build_templates/buffers_config.j2
Expand Up @@ -96,20 +96,28 @@ def
{%- set PORT_ALL = [] %}

{%- if PORT is not defined %}
{%- if defs.generate_port_lists(PORT_ALL) %} {% endif %}
{%- if defs.generate_port_lists is defined %}
{%- if defs.generate_port_lists(PORT_ALL) %} {% endif %}
{%- endif %}
{%- else %}
{%- for port in PORT %}
{%- if PORT_ALL.append(port) %}{%- endif %}
{%- endfor %}
{%- endif %}

{%- set PORT_ACTIVE = [] %}
{%- set PORT_INACTIVE = [] %}
{%- if DEVICE_NEIGHBOR is not defined %}
{%- set PORT_ACTIVE = PORT_ALL %}
{%- else %}
{%- for port in DEVICE_NEIGHBOR.keys() %}
{%- if PORT_ACTIVE.append(port) %}{%- endif %}
{%- endfor %}
{%- for port in PORT_ALL %}
{%- if port not in DEVICE_NEIGHBOR.keys() %}
{%- if PORT_INACTIVE.append(port) %}{%- endif %}
{%- endif %}
{%- endfor %}
{%- endif %}

{%- set port_names_list_active = [] %}
Expand All @@ -118,6 +126,12 @@ def
{%- endfor %}
{%- set port_names_active = port_names_list_active | join(',') %}

{%- set port_names_list_inactive = [] %}
{%- for port in PORT_INACTIVE %}
{%- if port_names_list_inactive.append(port) %}{%- endif %}
{%- endfor %}
{%- set port_names_inactive = port_names_list_inactive | join(',') %}

{
"CABLE_LENGTH": {
"AZURE": {
Expand All @@ -131,14 +145,22 @@ def

{% if defs.generate_buffer_pool_and_profiles is defined %}
{{ defs.generate_buffer_pool_and_profiles() }}
{% elif defs.generate_buffer_pool_and_profiles_with_inactive_ports is defined %}
{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }}
{% endif %}


{%- if port_names_active|length > 0 or port_names_inactive|length > 0 -%}
{%- if defs.generate_profile_lists is defined %}
{{ defs.generate_profile_lists(port_names_active) }},
{% elif defs.generate_profile_lists_with_inactive_ports is defined %}
{{ defs.generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) }},
{% endif %}

{%- if defs.generate_pg_profils is defined %}
{{ defs.generate_pg_profils(port_names_active) }}
{% elif defs.generate_pg_profiles_with_inactive_ports is defined %}
{{ defs.generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) }},
{% else %}
"BUFFER_PG": {
{% for port in PORT_ACTIVE %}
Expand All @@ -157,6 +179,8 @@ def

{% if defs.generate_queue_buffers is defined %}
{{ defs.generate_queue_buffers(port_names_active) }}
{% elif defs.generate_queue_buffers_with_inactive_ports is defined %}
{{ defs.generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) }}
{% else %}
"BUFFER_QUEUE": {
{% for port in PORT_ACTIVE %}
Expand All @@ -177,8 +201,11 @@ def
{% endfor %}
}
{% endif %}
{% if dynamic_mode is defined %}
{%- if dynamic_mode is defined -%}
,
{%- endif -%}
{%- endif -%}
{% if dynamic_mode is defined %}
"DEFAULT_LOSSLESS_BUFFER_PARAMETER": {
"AZURE": {
"default_dynamic_th": "0"
Expand Down
3 changes: 3 additions & 0 deletions files/build_templates/docker_image_ctl.j2
Expand Up @@ -296,6 +296,9 @@ start() {
if [ ! -f /etc/sonic/peripheral_table.json ] && [ -f /usr/share/sonic/device/$PLATFORM/port_peripheral_config.j2 ]; then
sonic-cfggen -d -t /usr/share/sonic/device/$PLATFORM/port_peripheral_config.j2 > /etc/sonic/peripheral_table.json
fi
if [ ! -f /etc/sonic/zero_profiles.json ] && [ -f /usr/share/sonic/templates/zero_profiles.j2 ]; then
sonic-cfggen -d -t /usr/share/sonic/device/$PLATFORM/zero_profiles.j2 > /etc/sonic/zero_profiles.json
fi
{%- endif %}

# In Multi ASIC platforms the global database config file database_global.json will exist.
Expand Down
5 changes: 5 additions & 0 deletions files/build_templates/sonic_debian_extension.j2
Expand Up @@ -502,6 +502,11 @@ if [ -f platform/{{ sonic_asic_platform }}/peripheral_table.j2 ]
then
sudo cp platform/{{ sonic_asic_platform }}/peripheral_table.j2 $FILESYSTEM_ROOT/usr/share/sonic/templates/peripheral_table.j2
fi

if [ -f platform/{{ sonic_asic_platform }}/zero_profiles.j2 ]
then
sudo cp platform/{{ sonic_asic_platform }}/zero_profiles.j2 $FILESYSTEM_ROOT/usr/share/sonic/templates/zero_profiles.j2
fi
{% endif %}

# Copy hostname configuration scripts
Expand Down
1 change: 1 addition & 0 deletions platform/vs/docker-sonic-vs/Dockerfile.j2
Expand Up @@ -171,6 +171,7 @@ COPY ["hostname.j2", "/usr/share/sonic/templates/"]
COPY ["init_cfg.json.j2", "/usr/share/sonic/templates/"]
COPY ["default_chassis_cfg.json", "/etc/default/sonic-db/"]
COPY ["asic_table.json", "/etc/sonic/"]
COPY ["zero_profiles.json", "/etc/sonic"]
COPY ["buffermgrd.sh", "/usr/bin/"]
COPY ["platform.json", "/usr/share/sonic/device/x86_64-kvm_x86_64-r0/"]
Expand Down
6 changes: 5 additions & 1 deletion platform/vs/docker-sonic-vs/buffermgrd.sh
Expand Up @@ -5,9 +5,13 @@ export ASIC_VENDOR=vs

if [ "$BUFFER_CALCULATION_MODE" == "dynamic" ]; then
BUFFERMGRD_ARGS="-a /etc/sonic/asic_table.json"

if [ -f /etc/sonic/zero_profiles.json ]; then
BUFFERMGRD_ZERO_PROFILE_ARGS=" -z /etc/sonic/zero_profiles.json"
fi
else
# Should we use the fallback MAC in case it is not found in Device.Metadata
BUFFERMGRD_ARGS="-l /usr/share/sonic/hwsku/pg_profile_lookup.ini"
fi

exec /usr/bin/buffermgrd ${BUFFERMGRD_ARGS}
exec /usr/bin/buffermgrd ${BUFFERMGRD_ARGS} ${BUFFERMGRD_ZERO_PROFILE_ARGS}
57 changes: 57 additions & 0 deletions platform/vs/docker-sonic-vs/zero_profiles.json
@@ -0,0 +1,57 @@
[
{
"BUFFER_POOL_TABLE:ingress_zero_pool": {
"mode": "static",
"type": "ingress",
"size": "0"
},
"OP": "SET"
},
{
"BUFFER_PROFILE_TABLE:ingress_lossy_pg_zero_profile" : {
"pool":"ingress_zero_pool",
"size":"0",
"static_th":"0"
},
"OP": "SET"
},
{
"BUFFER_PROFILE_TABLE:ingress_lossy_zero_profile" : {
"pool":"ingress_lossless_pool",
"size":"0",
"dynamic_th":"-8"
},
"OP": "SET"
},
{
"BUFFER_PROFILE_TABLE:ingress_lossless_zero_profile" : {
"pool":"ingress_lossless_pool",
"size":"0",
"dynamic_th":"-8"
},
"OP": "SET"
},
{
"BUFFER_PROFILE_TABLE:egress_lossy_zero_profile" : {
"pool":"egress_lossy_pool",
"size":"0",
"dynamic_th":"-8"
},
"OP": "SET"
},
{
"BUFFER_PROFILE_TABLE:egress_lossless_zero_profile" : {
"pool":"egress_lossless_pool",
"size":"0",
"dynamic_th":"-8"
},
"OP": "SET"
},
{
"control_fields" : {
"pgs_to_apply_zero_profile":"0",
"ingress_zero_profile":"ingress_lossy_pg_zero_profile"
},
"OP": "SET"
}
]

0 comments on commit b3ccef9

Please sign in to comment.