Add switch for synchronous mode (#5237)
Add a master switch so that the sync/async mode can be configured. Example usage of the switch: 1. Configure mode while building an image `make ENABLE_SYNCHRONOUS_MODE=y <target>` 2. Configure when the device is running Change CONFIG_DB with `sonic-cfggen -a '{"DEVICE_METADATA":{"localhost": {"synchronous_mode": "enable"}}}' --write-to-db` Restart swss with `systemctl restart swss`
This commit is contained in:
parent
58db2d53e3
commit
f3feb56c8a
2
.gitignore
vendored
2
.gitignore
vendored
@ -60,3 +60,5 @@ platform/broadcom/sonic-platform-modules-dell/s6100/modules/dell_s6100_lpc.c
|
||||
platform/broadcom/sonic-platform-modules-dell/z9100/modules/dell_ich.c
|
||||
platform/broadcom/sonic-platform-modules-dell/z9100/modules/dell_mailbox.c
|
||||
platform/broadcom/sonic-platform-modules-dell/z9264f/sonic_platform/ipmihelper.py
|
||||
platform/vs/docker-sonic-vs/init_cfg.json
|
||||
platform/p4/docker-sonic-p4/init_cfg.json
|
||||
|
@ -38,6 +38,7 @@
|
||||
# * SONIC_DPKG_CACHE_METHOD: Specifying method of obtaining the Debian packages from cache: none or cache
|
||||
# * SONIC_DPKG_CACHE_SOURCE: Debian package cache location when cache enabled for debian packages
|
||||
# * BUILD_LOG_TIMESTAMP: Set timestamp in the build log (simple/none)
|
||||
# * ENABLE_SYNCHRONOUS_MODE: Enable synchronous mode between orchagent and syncd
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
@ -212,6 +213,7 @@ SONIC_BUILD_INSTRUCTION := make \
|
||||
EXTRA_DOCKER_TARGETS=$(EXTRA_DOCKER_TARGETS) \
|
||||
BUILD_LOG_TIMESTAMP=$(BUILD_LOG_TIMESTAMP) \
|
||||
SONIC_ENABLE_IMAGE_SIGNATURE=$(ENABLE_IMAGE_SIGNATURE) \
|
||||
ENABLE_SYNCHRONOUS_MODE=$(ENABLE_SYNCHRONOUS_MODE) \
|
||||
$(SONIC_OVERRIDE_BUILD_VARS)
|
||||
|
||||
.PHONY: sonic-slave-build sonic-slave-bash init reset
|
||||
|
@ -25,6 +25,12 @@ ORCHAGENT_ARGS="-d /var/log/swss "
|
||||
# Set orchagent pop batch size to 8192
|
||||
ORCHAGENT_ARGS+="-b 8192 "
|
||||
|
||||
# Set synchronous mode if it is enabled in CONFIG_DB
|
||||
SYNC_MODE=$(echo $SWSS_VARS | jq -r '.synchronous_mode')
|
||||
if [ "$SYNC_MODE" == "enable" ]; then
|
||||
ORCHAGENT_ARGS+="-s "
|
||||
fi
|
||||
|
||||
# Check if there is an "asic_id field" in the DEVICE_METADATA in configDB.
|
||||
#"DEVICE_METADATA": {
|
||||
# "localhost": {
|
||||
|
@ -1,6 +1,7 @@
|
||||
{
|
||||
"asic_type": "{{ asic_type }}",
|
||||
"asic_id": "{{ DEVICE_METADATA.localhost.asic_id }}",
|
||||
"mac": "{{ DEVICE_METADATA.localhost.mac }}"
|
||||
"mac": "{{ DEVICE_METADATA.localhost.mac }}",
|
||||
"synchronous_mode": "{{ DEVICE_METADATA.localhost.synchronous_mode }}"
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,8 @@
|
||||
"DEVICE_METADATA": {
|
||||
"localhost": {
|
||||
"default_bgp_status": {% if shutdown_bgp_on_start == "y" %}"down"{% else %}"up"{% endif %},
|
||||
"default_pfcwd_status": {% if enable_pfcwd_on_start == "y" %}"enable"{% else %}"disable"{% endif %}
|
||||
"default_pfcwd_status": {% if enable_pfcwd_on_start == "y" %}"enable"{% else %}"disable"{% endif %},
|
||||
"synchronous_mode": {% if enable_synchronous_mode == "y" %}"enable"{% else %}"disable"{% endif %}
|
||||
}
|
||||
},
|
||||
"CRM": {
|
||||
|
@ -78,6 +78,7 @@ COPY ["start.sh", "orchagent.sh", "config_bm.sh", "/usr/bin/"]
|
||||
COPY ["supervisord.conf", "/etc/supervisor/conf.d/"]
|
||||
COPY ["files/configdb-load.sh", "/usr/bin/"]
|
||||
COPY ["files/arp_update", "/usr/bin"]
|
||||
COPY ["init_cfg.json", "/etc/sonic/"]
|
||||
RUN echo "docker-sonic-p4" > /etc/hostname
|
||||
RUN touch /etc/quagga/zebra.conf
|
||||
|
||||
|
7
platform/p4/docker-sonic-p4/init_cfg.json.j2
Normal file
7
platform/p4/docker-sonic-p4/init_cfg.json.j2
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"DEVICE_METADATA": {
|
||||
"localhost": {
|
||||
"synchronous_mode": {% if enable_synchronous_mode == "y" %}"enable"{% else %}"disable"{% endif %}
|
||||
}
|
||||
}
|
||||
}
|
@ -13,6 +13,12 @@ ORCHAGENT_ARGS="-d /var/log/swss "
|
||||
# Set orchagent pop batch size to 8192
|
||||
ORCHAGENT_ARGS+="-b 8192 "
|
||||
|
||||
# Set synchronous mode if it is enabled in CONFIG_DB
|
||||
SYNC_MODE=$(sonic-cfggen -d -v DEVICE_METADATA.localhost.synchronous_mode)
|
||||
if [ "$SYNC_MODE" == "enable" ]; then
|
||||
ORCHAGENT_ARGS+="-s "
|
||||
fi
|
||||
|
||||
# Set mac address
|
||||
ORCHAGENT_ARGS+="-m $MAC_ADDRESS"
|
||||
|
||||
|
@ -8,7 +8,12 @@ if ! ip link show eth0 &> /dev/null; then
|
||||
fi
|
||||
|
||||
SYSTEM_MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}')
|
||||
if [ -f /etc/sonic/init_cfg.json ]; then
|
||||
sonic-cfggen -j /etc/sonic/init_cfg.json -a '{"DEVICE_METADATA":{"localhost": {"mac": "'$SYSTEM_MAC_ADDRESS'"}}}' --print-data > /tmp/init_cfg.json
|
||||
mv /tmp/init_cfg.json /etc/sonic/init_cfg.json
|
||||
else
|
||||
sonic-cfggen -a '{"DEVICE_METADATA":{"localhost": {"mac": "'$SYSTEM_MAC_ADDRESS'"}}}' --print-data > /etc/sonic/init_cfg.json
|
||||
fi
|
||||
|
||||
if [ -f /etc/sonic/config_db.json ]; then
|
||||
sonic-cfggen -j /etc/sonic/init_cfg.json -j /etc/sonic/config_db.json --print-data > /tmp/config_db.json
|
||||
|
@ -128,6 +128,7 @@ COPY ["files/configdb-load.sh", "/usr/bin/"]
|
||||
COPY ["files/arp_update", "/usr/bin/"]
|
||||
COPY ["files/buffers_config.j2", "files/qos_config.j2", "/usr/share/sonic/templates/"]
|
||||
COPY ["files/sonic_version.yml", "/etc/sonic/"]
|
||||
COPY ["init_cfg.json", "/etc/sonic/"]
|
||||
COPY ["database_config.json", "/etc/default/sonic-db/"]
|
||||
COPY ["hostname.j2", "/usr/share/sonic/templates/"]
|
||||
COPY ["default_chassis_cfg.json", "/etc/default/sonic-db/"]
|
||||
|
7
platform/vs/docker-sonic-vs/init_cfg.json.j2
Normal file
7
platform/vs/docker-sonic-vs/init_cfg.json.j2
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"DEVICE_METADATA": {
|
||||
"localhost": {
|
||||
"synchronous_mode": {% if enable_synchronous_mode == "y" %}"enable"{% else %}"disable"{% endif %}
|
||||
}
|
||||
}
|
||||
}
|
@ -6,7 +6,8 @@ else
|
||||
export platform=$fake_platform
|
||||
fi
|
||||
|
||||
MAC_ADDRESS=$(sonic-cfggen -d -v 'DEVICE_METADATA.localhost.mac')
|
||||
CFG_VARS=$(sonic-cfggen -d --var-json 'DEVICE_METADATA')
|
||||
MAC_ADDRESS=$(echo $CFG_VARS | jq -r '.localhost.mac')
|
||||
if [ "$MAC_ADDRESS" == "None" ] || [ -z "$MAC_ADDRESS" ]; then
|
||||
MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}')
|
||||
logger "Mac address not found in Device Metadata, Falling back to eth0"
|
||||
@ -19,6 +20,12 @@ ORCHAGENT_ARGS="-d /var/log/swss "
|
||||
# Set orchagent pop batch size to 8192
|
||||
ORCHAGENT_ARGS+="-b 8192 "
|
||||
|
||||
# Set synchronous mode if it is enabled in CONFIG_DB
|
||||
SYNC_MODE=$(echo $CFG_VARS | jq -r '.localhost.synchronous_mode')
|
||||
if [ "$SYNC_MODE" == "enable" ]; then
|
||||
ORCHAGENT_ARGS+="-s "
|
||||
fi
|
||||
|
||||
# Set mac address
|
||||
ORCHAGENT_ARGS+="-m $MAC_ADDRESS"
|
||||
|
||||
|
@ -31,7 +31,12 @@ if [[ -f /usr/share/sonic/virtual_chassis/default_config.json ]]; then
|
||||
fi
|
||||
|
||||
SYSTEM_MAC_ADDRESS=$(ip link show eth0 | grep ether | awk '{print $2}')
|
||||
if [ -f /etc/sonic/init_cfg.json ]; then
|
||||
sonic-cfggen -j /etc/sonic/init_cfg.json -a '{"DEVICE_METADATA":{"localhost": {"mac": "'$SYSTEM_MAC_ADDRESS'"}}}' $CHASS_CFG --print-data > /tmp/init_cfg.json
|
||||
mv /tmp/init_cfg.json /etc/sonic/init_cfg.json
|
||||
else
|
||||
sonic-cfggen -a '{"DEVICE_METADATA":{"localhost": {"mac": "'$SYSTEM_MAC_ADDRESS'"}}}' $CHASS_CFG --print-data > /etc/sonic/init_cfg.json
|
||||
fi
|
||||
|
||||
if [ -f /etc/sonic/config_db.json ]; then
|
||||
sonic-cfggen -j /etc/sonic/init_cfg.json -j /etc/sonic/config_db.json --print-data > /tmp/config_db.json
|
||||
|
@ -158,3 +158,6 @@ K8s_GCR_IO_PAUSE_VERSION = 3.2
|
||||
# CA_CERT =
|
||||
# The relative path is build root folder.
|
||||
SONIC_ENABLE_IMAGE_SIGNATURE ?= n
|
||||
|
||||
# ENABLE_SYNCHRONOUS_MODE - enable synchronous mode between orchagent and syncd
|
||||
ENABLE_SYNCHRONOUS_MODE = n
|
||||
|
5
slave.mk
5
slave.mk
@ -230,6 +230,7 @@ $(info "INCLUDE_SFLOW" : "$(INCLUDE_SFLOW)")
|
||||
$(info "INCLUDE_NAT" : "$(INCLUDE_NAT)")
|
||||
$(info "INCLUDE_KUBERNETES" : "$(INCLUDE_KUBERNETES)")
|
||||
$(info "TELEMETRY_WRITABLE" : "$(TELEMETRY_WRITABLE)")
|
||||
$(info "ENABLE_SYNCHRONOUS_MODE" : "$(ENABLE_SYNCHRONOUS_MODE)")
|
||||
$(info )
|
||||
|
||||
include Makefile.cache
|
||||
@ -247,6 +248,7 @@ endif
|
||||
|
||||
export kernel_procure_method=$(KERNEL_PROCURE_METHOD)
|
||||
export vs_build_prepare_mem=$(VS_PREPARE_MEM)
|
||||
export enable_synchronous_mode=$(ENABLE_SYNCHRONOUS_MODE)
|
||||
|
||||
###############################################################################
|
||||
## Local targets
|
||||
@ -695,6 +697,9 @@ $(addprefix $(TARGET_PATH)/, $(DOCKER_IMAGES)) : $(TARGET_PATH)/%.gz : .platform
|
||||
$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_whls=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_PYTHON_WHEELS)))\n" | awk '!a[$$0]++'))
|
||||
$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_dbgs=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_DBG_PACKAGES)))\n" | awk '!a[$$0]++'))
|
||||
j2 $($*.gz_PATH)/Dockerfile.j2 > $($*.gz_PATH)/Dockerfile
|
||||
if [ -f $($*.gz_PATH)/init_cfg.json.j2 ] ; then
|
||||
j2 $($*.gz_PATH)/init_cfg.json.j2 > $($*.gz_PATH)/init_cfg.json
|
||||
fi
|
||||
docker info $(LOG)
|
||||
docker build --squash --no-cache \
|
||||
--build-arg http_proxy=$(HTTP_PROXY) \
|
||||
|
Loading…
Reference in New Issue
Block a user