← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 2081087] Re: Performance regression in neutron-server from 2023.1 to 2024.1 when fetching a Security Group

 

Reviewed:  https://review.opendev.org/c/openstack/neutron/+/929941
Committed: https://opendev.org/openstack/neutron/commit/c1b05e29adf9d0d68c1ac636013a8a363a92eb85
Submitter: "Zuul (22348)"
Branch:    master

commit c1b05e29adf9d0d68c1ac636013a8a363a92eb85
Author: Rodolfo Alonso Hernandez <ralonsoh@xxxxxxxxxx>
Date:   Thu Sep 19 14:00:57 2024 +0000

    Change the load method of SG rule "default_security_group"
    
    Since [1], the SG rule SQL view also retrieves the table
    "default_security_group", using a complex relationship [2].
    When the number of SG rules of a SG is high (above 50 it
    is clearly noticeable the performance degradation), the
    API call can take several seconds. For example, for 100
    SG rules it can take up to one minute.
    
    This patch changes the load method of the SG rule
    "default_security_group" relationship to "selectin".
    Benchmarks with a single default SG and 100 rules,
    doing "openstack security group show $sg":
    * 2023.2 (without this feature): around 0.05 seconds
    * master: between 45-50 seconds (1000x time increase)
    * loading method "selectin" or "dynamic": around 0.5 seconds.
    
    NOTE: this feature [1] was implemented in 2024.1. At this
    time, SQLAlchemy version was <2.0 and "selectin" method was
    not available. For this version, "dynamic" can be used instead.
    
    [1]https://review.opendev.org/q/topic:%22bug/2019960%22
    [2]https://github.com/openstack/neutron/blob/08fff4087dc342be40db179fca0cd9bbded91053/neutron/db/models/securitygroup.py#L120-L121
    
    Closes-Bug: #2081087
    Change-Id: I46af1179f6905307c0d60b5c0fdee264a40a4eac


** Changed in: neutron
       Status: In Progress => Fix Released

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/2081087

Title:
  Performance regression in neutron-server from 2023.1 to 2024.1 when
  fetching a Security Group

Status in neutron:
  Fix Released

Bug description:
  With upgrade from 2023.1 to 2024.1 with driver ML2/OVS we've spotted a
  significant (10 times) performance regression on some operations.

  As best example - we can take security groups operations.

  Neutron is running in eventlet, since uWSGI is not yet fully
  functional for 2024.1 (see
  https://review.opendev.org/c/openstack/neutron/+/926922).

  So neutron-server is just being launched with exactly same database
  and config, just from different venvs.

  ```
  # cat /etc/systemd/system/neutron-server.service 
  [Unit]
  Description = neutron-server service
  After = network-online.target
  After = syslog.target

  [Service]
  Type = simple
  User = neutron
  Group = neutron
  ExecStart = /openstack/venvs/neutron-29.0.2/bin/neutron-server --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini
  ExecReload = /bin/kill -HUP $MAINPID
  # Give a reasonable amount of time for the server to start up/shut down
  TimeoutSec = 120
  Restart = on-failure
  RestartSec = 2
  # This creates a specific slice which all services will operate from
  #  The accounting options give us the ability to see resource usage through
  #  the `systemd-cgtop` command.
  Slice = neutron.slice
  # Set Accounting
  CPUAccounting = True
  BlockIOAccounting = True
  MemoryAccounting = True
  TasksAccounting = True
  # Set Sandboxing
  PrivateTmp = False
  PrivateDevices = False
  PrivateNetwork = False
  PrivateUsers = False

  [Install]
  WantedBy = multi-user.target

  # time curl -X GET http://127.0.0.1:9696/v2.0/security-groups?project_id=${OS_PROJECT_ID} -H "X-Auth-Token: ${TOKEN}"
  ...
  real    0m24.450s
  user    0m0.008s
  sys     0m0.010s
  # time curl -X GET http://127.0.0.1:9696/v2.0/security-groups/${security_group_uuid} -H "X-Auth-Token: ${TOKEN}"
  ...
  real    0m54.841s
  user    0m0.010s
  sys     0m0.012s
  # sed -i 's/29.0.2/27.4.0/g' /etc/systemd/system/neutron-server.service
  # systemctl daemon-reload
  # systemctl restart neutron-server
  # time curl -X GET http://127.0.0.1:9696/v2.0/security-groups?project_id=${OS_PROJECT_ID} -H "X-Auth-Token: ${TOKEN}"
  ...
  real    0m1.040s
  user    0m0.011s
  sys     0m0.007s
  # time curl -X GET http://127.0.0.1:9696/v2.0/security-groups/${security_group_uuid} -H "X-Auth-Token: ${TOKEN}"
  ...
  real    0m0.589s
  user    0m0.012s
  sys     0m0.007s
  ```

  So as you might see, difference in response time is very significant,
  while the only change I've made is to use previous codebase for the
  service.

  I am also providing pip freeze for both venvs for comparison, though both of them were using upper-constraints:
  # /openstack/venvs/neutron-27.4.0/bin/pip freeze
  alembic==1.8.1
  amqp==5.1.1
  appdirs==1.4.4
  attrs==22.1.0
  autopage==0.5.1
  bcrypt==4.0.0
  cachetools==5.2.0
  certifi==2023.11.17
  cffi==1.15.1
  charset-normalizer==2.1.1
  cliff==4.2.0
  cmd2==2.4.2
  cryptography==38.0.2
  debtcollector==2.5.0
  decorator==5.1.1
  dnspython==2.2.1
  dogpile.cache==1.1.8
  eventlet==0.33.1
  extras==1.0.0
  fasteners==0.18
  fixtures==4.0.1
  futurist==2.4.1
  greenlet==1.1.3
  httplib2==0.20.4
  idna==3.4
  importlib-metadata==5.0.0
  iso8601==1.1.0
  Jinja2==3.1.2
  jmespath==1.0.1
  jsonpatch==1.32
  jsonpointer==2.3
  jsonschema==4.16.0
  keystoneauth1==5.1.2
  keystonemiddleware==10.2.0
  kombu==5.2.4
  logutils==0.3.5
  lxml==4.9.1
  Mako==1.2.3
  MarkupSafe==2.1.1
  msgpack==1.0.4
  ncclient==0.6.13
  netaddr==0.8.0
  netifaces==0.11.0
  neutron==22.1.1.dev52
  neutron-dynamic-routing==22.0.0
  neutron-lib==3.4.1
  neutron-vpnaas==22.0.1.dev2
  openstacksdk==1.0.1
  os-client-config==2.1.0
  os-ken==2.6.0
  os-resource-classes==1.1.0
  os-service-types==1.7.0
  os-traits==2.10.0
  os-vif==3.1.1
  osc-lib==2.7.0
  oslo.cache==3.3.1
  oslo.concurrency==5.1.1
  oslo.config==9.1.1
  oslo.context==5.6.0
  oslo.db==12.3.1
  oslo.i18n==6.0.0
  oslo.log==5.2.0
  oslo.messaging==14.7.1
  oslo.metrics==0.6.0
  oslo.middleware==5.1.1
  oslo.policy==4.1.1
  oslo.privsep==3.1.0
  oslo.reports==3.0.0
  oslo.rootwrap==7.0.1
  oslo.serialization==5.1.1
  oslo.service==3.1.1
  oslo.upgradecheck==2.1.1
  oslo.utils==6.1.0
  oslo.versionedobjects==3.1.0
  osprofiler==3.4.3
  ovs==2.17.1.post1
  ovsdbapp==2.2.1
  packaging==21.3
  paramiko==2.11.0
  Paste==3.5.2
  PasteDeploy==2.1.1
  pbr==5.11.1
  pecan==1.4.2
  prettytable==3.4.1
  prometheus-client==0.14.1
  psutil==5.9.2
  pycadf==3.1.1
  pycparser==2.21
  pyinotify==0.9.6
  pymemcache==3.5.2
  PyMySQL==1.0.2
  PyNaCl==1.5.0
  pyOpenSSL==22.1.0
  pyparsing==3.0.9
  pyperclip==1.8.2
  pyroute2==0.7.3
  pyrsistent==0.18.1
  python-binary-memcached==0.31.1
  python-dateutil==2.8.2
  python-designateclient==5.2.0
  python-keystoneclient==5.1.0
  python-memcached==1.59
  python-neutronclient==9.0.0
  python-novaclient==18.3.0
  pytz==2022.4
  PyYAML==6.0
  repoze.lru==0.7
  requests==2.28.1
  requestsexceptions==1.4.0
  rfc3986==1.5.0
  Routes==2.5.1
  setproctitle==1.3.2
  simplejson==3.17.6
  six==1.16.0
  sortedcontainers==2.4.0
  SQLAlchemy==1.4.41
  sqlalchemy-migrate==0.13.0
  sqlparse==0.4.3
  statsd==3.3.0
  stevedore==5.0.0
  systemd-python==234
  Tempita==0.5.2
  tenacity==6.3.1
  testresources==2.0.1
  testscenarios==0.5.0
  testtools==2.5.0
  tooz==3.2.0
  uhashring==2.1
  urllib3==1.26.12
  vine==5.0.0
  voluptuous==0.13.1
  wcwidth==0.2.5
  WebOb==1.8.7
  wrapt==1.14.1
  yappi==1.4.0
  zipp==3.8.1

  # /openstack/venvs/neutron-29.0.2/bin/pip freeze
  alembic==1.9.4
  amqp==5.2.0
  async-timeout==4.0.3
  attrs==23.2.0
  autopage==0.5.2
  bcrypt==4.1.2
  cachetools==5.3.2
  certifi==2024.8.30
  cffi==1.16.0
  charset-normalizer==3.3.2
  cliff==4.6.0
  cmd2==2.4.3
  cryptography==42.0.4
  debtcollector==3.0.0
  decorator==5.1.1
  dnspython==2.6.1
  dogpile.cache==1.3.1
  eventlet==0.36.1
  fasteners==0.19
  fixtures==4.1.0
  futurist==3.0.0
  greenlet==3.0.3
  httplib2==0.22.0
  idna==3.6
  iso8601==2.1.0
  Jinja2==3.1.3
  jmespath==1.0.1
  jsonpatch==1.33
  jsonpointer==2.4
  jsonschema==4.19.2
  jsonschema-specifications==2023.12.1
  keystoneauth1==5.6.0
  keystonemiddleware==10.6.0
  kombu==5.3.5
  logutils==0.3.5
  lxml==5.1.0
  Mako==1.3.2
  MarkupSafe==2.1.5
  msgpack==1.0.7
  ncclient==0.6.15
  netaddr==0.10.1
  netifaces==0.11.0
  neutron==24.0.2.dev15
  neutron-dynamic-routing==24.0.1.dev2
  neutron-lib==3.11.0
  neutron-vpnaas==24.0.2.dev1
  openstacksdk==3.0.0
  os-client-config==2.1.0
  os-ken==2.8.1
  os-resource-classes==1.1.0
  os-service-types==1.7.0
  os-traits==3.0.0
  os-vif==3.5.0
  osc-lib==3.0.1
  oslo.cache==3.7.0
  oslo.concurrency==6.0.0
  oslo.config==9.4.0
  oslo.context==5.5.0
  oslo.db==15.0.0
  oslo.i18n==6.3.0
  oslo.log==5.5.1
  oslo.messaging==14.7.1
  oslo.metrics==0.8.0
  oslo.middleware==6.1.0
  oslo.policy==4.3.0
  oslo.privsep==3.3.0
  oslo.reports==3.3.0
  oslo.rootwrap==7.2.0
  oslo.serialization==5.4.0
  oslo.service==3.4.1
  oslo.upgradecheck==2.3.0
  oslo.utils==7.1.0
  oslo.versionedobjects==3.3.0
  osprofiler==4.1.0
  ovs==3.1.2
  ovsdbapp==2.6.1
  packaging==23.2
  paramiko==3.4.0
  Paste==3.7.1
  PasteDeploy==3.1.0
  pbr==6.0.0
  pecan==1.5.1
  platformdirs==4.2.0
  prettytable==3.9.0
  prometheus_client==0.20.0
  psutil==5.9.8
  pycadf==3.1.1
  pycparser==2.21
  pyinotify==0.9.6
  PyJWT==2.8.0
  pymemcache==4.0.0
  PyMySQL==1.1.0
  PyNaCl==1.5.0
  pyOpenSSL==24.0.0
  pyparsing==3.1.1
  pyperclip==1.8.2
  pyroute2==0.7.12
  python-binary-memcached==0.31.2
  python-dateutil==2.8.2
  python-designateclient==6.0.1
  python-keystoneclient==5.4.0
  python-memcached==1.62
  python-neutronclient==11.2.0
  python-novaclient==18.6.0
  pytz==2024.1
  PyYAML==6.0.1
  redis==5.0.1
  referencing==0.33.0
  repoze.lru==0.7
  requests==2.31.0
  requestsexceptions==1.4.0
  rfc3986==2.0.0
  Routes==2.5.1
  rpds-py==0.18.0
  setproctitle==1.3.3
  simplejson==3.19.2
  six==1.16.0
  sortedcontainers==2.4.0
  SQLAlchemy==1.4.51
  statsd==4.0.1
  stevedore==5.2.0
  systemd-python==235
  tenacity==8.2.3
  testresources==2.0.1
  testscenarios==0.5.0
  testtools==2.7.1
  tooz==6.2.0
  typing_extensions==4.9.0
  tzdata==2024.1
  uhashring==2.3
  urllib3==1.26.18
  vine==5.1.0
  voluptuous==0.14.2
  wcwidth==0.2.13
  WebOb==1.8.7
  wrapt==1.16.0
  yappi==1.6.0
  #

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/2081087/+subscriptions



References