From a5f2de02edb06bf2c8e34103753b1525258c672e Mon Sep 17 00:00:00 2001 From: Tamer Ahmed Date: Thu, 13 Aug 2020 16:56:59 -0700 Subject: [PATCH 1/2] [frr] Reduce Calls to SONiC Cfggen Calls to sonic-cfggen is CPU expensive. This PR reduces calls to sonic-cfggen to two calls during startup when starting frr service. singed-off-by: Tamer Ahmed --- dockers/docker-fpm-frr/docker_init.sh | 28 +++++++++++++++++++-------- dockers/docker-fpm-gobgp/start.sh | 13 +++++++++---- dockers/docker-fpm-quagga/start.sh | 13 +++++++++---- 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/dockers/docker-fpm-frr/docker_init.sh b/dockers/docker-fpm-frr/docker_init.sh index c0cc341ce795..556521805d3b 100755 --- a/dockers/docker-fpm-frr/docker_init.sh +++ b/dockers/docker-fpm-frr/docker_init.sh @@ -3,10 +3,14 @@ mkdir -p /etc/frr mkdir -p /etc/supervisor/conf.d -sonic-cfggen -d -t /usr/share/sonic/templates/supervisord/supervisord.conf.j2 > /etc/supervisor/conf.d/supervisord.conf - CONFIG_TYPE=`sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["docker_routing_config_mode"]'` +CFGGEN_PARAMS=" \ + -d \ + -y /etc/sonic/constants.yml \ + -t /usr/share/sonic/templates/supervisord/supervisord.conf.j2,/etc/supervisor/conf.d/supervisord.conf \ +" + if [[ ! -z "$NAMESPACE_ID" ]]; then # FRR is not running in host namespace so we need to delete # default gw kernel route added by docker network via eth0 and add it back @@ -31,24 +35,32 @@ if [[ ! -z "$NAMESPACE_ID" ]]; then fi if [ -z "$CONFIG_TYPE" ] || [ "$CONFIG_TYPE" == "separated" ]; then - sonic-cfggen -d -t /usr/share/sonic/templates/bgpd/bgpd.conf.j2 -y /etc/sonic/constants.yml > /etc/frr/bgpd.conf - sonic-cfggen -d -t /usr/share/sonic/templates/zebra/zebra.conf.j2 > /etc/frr/zebra.conf - sonic-cfggen -d -t /usr/share/sonic/templates/staticd/staticd.conf.j2 > /etc/frr/staticd.conf + CFGGEN_PARAMS+=" \ + -t /usr/share/sonic/templates/bgpd/bgpd.conf.j2,/etc/frr/bgpd.conf \ + -t /usr/share/sonic/templates/zebra/zebra.conf.j2,/etc/frr/zebra.conf \ + -t /usr/share/sonic/templates/staticd/staticd.conf.j2,/etc/frr/staticd.conf \ + " echo "no service integrated-vtysh-config" > /etc/frr/vtysh.conf rm -f /etc/frr/frr.conf elif [ "$CONFIG_TYPE" == "unified" ]; then - sonic-cfggen -d -y /etc/sonic/constants.yml -t /usr/share/sonic/templates/frr.conf.j2 >/etc/frr/frr.conf + CFGGEN_PARAMS+=" \ + -t /usr/share/sonic/templates/frr.conf.j2,/etc/frr/frr.conf \ + " echo "service integrated-vtysh-config" > /etc/frr/vtysh.conf rm -f /etc/frr/bgpd.conf /etc/frr/zebra.conf /etc/frr/staticd.conf fi +CFGGEN_PARAMS+=" \ + -t /usr/share/sonic/templates/isolate.j2,/usr/sbin/bgp-isolate \ + -t /usr/share/sonic/templates/unisolate.j2,/usr/sbin/bgp-unisolate \ +" +sonic-cfggen $CFGGEN_PARAMS + chown -R frr:frr /etc/frr/ -sonic-cfggen -d -t /usr/share/sonic/templates/isolate.j2 > /usr/sbin/bgp-isolate chown root:root /usr/sbin/bgp-isolate chmod 0755 /usr/sbin/bgp-isolate -sonic-cfggen -d -t /usr/share/sonic/templates/unisolate.j2 > /usr/sbin/bgp-unisolate chown root:root /usr/sbin/bgp-unisolate chmod 0755 /usr/sbin/bgp-unisolate diff --git a/dockers/docker-fpm-gobgp/start.sh b/dockers/docker-fpm-gobgp/start.sh index 83afbda4f736..cdb0c6301686 100755 --- a/dockers/docker-fpm-gobgp/start.sh +++ b/dockers/docker-fpm-gobgp/start.sh @@ -1,14 +1,19 @@ #!/usr/bin/env bash mkdir -p /etc/quagga -sonic-cfggen -d -t /usr/share/sonic/templates/gobgpd.conf.j2 > /etc/gobgp/gobgpd.conf -sonic-cfggen -d -t /usr/share/sonic/templates/zebra.conf.j2 > /etc/quagga/zebra.conf -sonic-cfggen -d -t /usr/share/sonic/templates/isolate.j2 > /usr/sbin/bgp-isolate +CFGGEN_PARAMS=" \ + -d \ + -t /usr/share/sonic/templates/gobgpd.conf.j2,/etc/gobgp/gobgpd.conf \ + -t /usr/share/sonic/templates/zebra.conf.j2,/etc/quagga/zebra.conf \ + -t /usr/share/sonic/templates/isolate.j2,/usr/sbin/bgp-isolate \ + -t /usr/share/sonic/templates/unisolate.j2,/usr/sbin/bgp-unisolate \ +" +sonic-cfggen $CFGGEN_PARAMS + chown root:root /usr/sbin/bgp-isolate chmod 0755 /usr/sbin/bgp-isolate -sonic-cfggen -d -t /usr/share/sonic/templates/unisolate.j2 > /usr/sbin/bgp-unisolate chown root:root /usr/sbin/bgp-unisolate chmod 0755 /usr/sbin/bgp-unisolate diff --git a/dockers/docker-fpm-quagga/start.sh b/dockers/docker-fpm-quagga/start.sh index 1ffda3d17732..37d9c5072d9d 100755 --- a/dockers/docker-fpm-quagga/start.sh +++ b/dockers/docker-fpm-quagga/start.sh @@ -1,15 +1,20 @@ #!/usr/bin/env bash mkdir -p /etc/quagga -sonic-cfggen -d -y /etc/sonic/constants.yml -t /usr/share/sonic/templates/bgpd.conf.j2 > /etc/quagga/bgpd.conf -sonic-cfggen -d -t /usr/share/sonic/templates/zebra.conf.j2 > /etc/quagga/zebra.conf +CFGGEN_PARAMS=" \ + -d \ + -y /etc/sonic/constants.yml \ + -t /usr/share/sonic/templates/bgpd.conf.j2,/etc/quagga/bgpd.conf \ + -t /usr/share/sonic/templates/zebra.conf.j2,/etc/quagga/zebra.conf \ + -t /usr/share/sonic/templates/isolate.j2,/usr/sbin/bgp-isolate \ + -t /usr/share/sonic/templates/unisolate.j2,/usr/sbin/bgp-unisolate \ +" +sonic-cfggen $CFGGEN_PARAMS -sonic-cfggen -d -t /usr/share/sonic/templates/isolate.j2 > /usr/sbin/bgp-isolate chown root:root /usr/sbin/bgp-isolate chmod 0755 /usr/sbin/bgp-isolate -sonic-cfggen -d -t /usr/share/sonic/templates/unisolate.j2 > /usr/sbin/bgp-unisolate chown root:root /usr/sbin/bgp-unisolate chmod 0755 /usr/sbin/bgp-unisolate From d3fa7f01158672b8ca6e6b43230d0bade4b92ee6 Mon Sep 17 00:00:00 2001 From: Tamer Ahmed Date: Fri, 14 Aug 2020 13:44:44 -0700 Subject: [PATCH 2/2] reduce sonic-cfggen calls to one call --- dockers/docker-fpm-frr/docker_init.sh | 24 ++++++++---------------- dockers/docker-fpm-frr/frr/frr_vars.j2 | 1 + 2 files changed, 9 insertions(+), 16 deletions(-) create mode 100644 dockers/docker-fpm-frr/frr/frr_vars.j2 diff --git a/dockers/docker-fpm-frr/docker_init.sh b/dockers/docker-fpm-frr/docker_init.sh index 556521805d3b..09489a6ae04a 100755 --- a/dockers/docker-fpm-frr/docker_init.sh +++ b/dockers/docker-fpm-frr/docker_init.sh @@ -3,13 +3,19 @@ mkdir -p /etc/frr mkdir -p /etc/supervisor/conf.d -CONFIG_TYPE=`sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["docker_routing_config_mode"]'` - CFGGEN_PARAMS=" \ -d \ -y /etc/sonic/constants.yml \ + -t /usr/share/sonic/templates/supervisord/frr_vars.j2 \ -t /usr/share/sonic/templates/supervisord/supervisord.conf.j2,/etc/supervisor/conf.d/supervisord.conf \ + -t /usr/share/sonic/templates/bgpd/bgpd.conf.j2,/etc/frr/bgpd.conf \ + -t /usr/share/sonic/templates/zebra/zebra.conf.j2,/etc/frr/zebra.conf \ + -t /usr/share/sonic/templates/staticd/staticd.conf.j2,/etc/frr/staticd.conf \ + -t /usr/share/sonic/templates/frr.conf.j2,/etc/frr/frr.conf \ + -t /usr/share/sonic/templates/isolate.j2,/usr/sbin/bgp-isolate \ + -t /usr/share/sonic/templates/unisolate.j2,/usr/sbin/bgp-unisolate \ " +CONFIG_TYPE=$(sonic-cfggen $CFGGEN_PARAMS) if [[ ! -z "$NAMESPACE_ID" ]]; then # FRR is not running in host namespace so we need to delete @@ -35,27 +41,13 @@ if [[ ! -z "$NAMESPACE_ID" ]]; then fi if [ -z "$CONFIG_TYPE" ] || [ "$CONFIG_TYPE" == "separated" ]; then - CFGGEN_PARAMS+=" \ - -t /usr/share/sonic/templates/bgpd/bgpd.conf.j2,/etc/frr/bgpd.conf \ - -t /usr/share/sonic/templates/zebra/zebra.conf.j2,/etc/frr/zebra.conf \ - -t /usr/share/sonic/templates/staticd/staticd.conf.j2,/etc/frr/staticd.conf \ - " echo "no service integrated-vtysh-config" > /etc/frr/vtysh.conf rm -f /etc/frr/frr.conf elif [ "$CONFIG_TYPE" == "unified" ]; then - CFGGEN_PARAMS+=" \ - -t /usr/share/sonic/templates/frr.conf.j2,/etc/frr/frr.conf \ - " echo "service integrated-vtysh-config" > /etc/frr/vtysh.conf rm -f /etc/frr/bgpd.conf /etc/frr/zebra.conf /etc/frr/staticd.conf fi -CFGGEN_PARAMS+=" \ - -t /usr/share/sonic/templates/isolate.j2,/usr/sbin/bgp-isolate \ - -t /usr/share/sonic/templates/unisolate.j2,/usr/sbin/bgp-unisolate \ -" -sonic-cfggen $CFGGEN_PARAMS - chown -R frr:frr /etc/frr/ chown root:root /usr/sbin/bgp-isolate diff --git a/dockers/docker-fpm-frr/frr/frr_vars.j2 b/dockers/docker-fpm-frr/frr/frr_vars.j2 new file mode 100644 index 000000000000..9909604e5f1c --- /dev/null +++ b/dockers/docker-fpm-frr/frr/frr_vars.j2 @@ -0,0 +1 @@ +{{ DEVICE_METADATA["localhost"]["docker_routing_config_mode"] }}