summaryrefslogtreecommitdiffstats
path: root/README.rst
blob: 0a9295dfb8ea1d6b9a8e9f165b1d81b8e51ca783 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
NFVbench: A Network Performance Benchmarking Tool for NFVi Full Stacks
**********************************************************************

The NFVbench tool provides an automated way to measure the network performance for the most common data plane packet flows on any OpenStack based NFVi system viewed as a black box (NFVi Full Stack).
An NFVi full stack exposes the following interfaces:
- an OpenStack API
- an interface to send and receive packets on the data plane (typically through top of rack switches)

The NFVi full stack does not have to be supported by the OPNFV ecosystem and can be any functional OpenStack system that provides the aboce interfaces. NFVbench can be installed standalone (in the form of a single Docker container) and is fully functional without the need to install any other OPNFV framework.

It is designed to be easy to install and easy to use by non experts (no need to be an expert in traffic generators and data plane performance testing).


Contact Information
-------------------
Inquiries and questions: send an email to opnfv-tech-discuss@lists.opnfv.org with a Subject line starting with "[nfvbench]".

Open issues or submit an issue or enhancement request: https://jira.opnfv.org/projects/NFVBENCH/issues (this requires an OPNFV Linux Foundation login).
ont-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
heat_template_version: pike

description: >
  OpenStack containerized gnocchi service

parameters:
  DockerNamespace:
    description: namespace
    default: 'tripleoupstream'
    type: string
  DockerGnocchiApiImage:
    description: image
    default: 'centos-binary-gnocchi-api:latest'
    type: string
  EndpointMap:
    default: {}
    description: Mapping of service endpoint -> protocol. Typically set
                 via parameter_defaults in the resource registry.
    type: json
  ServiceNetMap:
    default: {}
    description: Mapping of service_name -> network name. Typically set
                 via parameter_defaults in the resource registry.  This
                 mapping overrides those in ServiceNetMapDefaults.
    type: json
  DefaultPasswords:
    default: {}
    type: json
  RoleName:
    default: ''
    description: Role name on which the service is applied
    type: string
  RoleParameters:
    default: {}
    description: Parameters specific to the role
    type: json
  EnableInternalTLS:
    type: boolean
    default: false

conditions:

  internal_tls_enabled: {equals: [{get_param: EnableInternalTLS}, true]}

resources:

  ContainersCommon:
    type: ./containers-common.yaml

  GnocchiApiPuppetBase:
      type: ../../puppet/services/gnocchi-api.yaml
      properties:
        EndpointMap: {get_param: EndpointMap}
        ServiceNetMap: {get_param: ServiceNetMap}
        DefaultPasswords: {get_param: DefaultPasswords}
        RoleName: {get_param: RoleName}
        RoleParameters: {get_param: RoleParameters}

outputs:
  role_data:
    description: Role data for the gnocchi API role.
    value:
      service_name: {get_attr: [GnocchiApiPuppetBase, role_data, service_name]}
      config_settings:
        map_merge:
          - get_attr: [GnocchiApiPuppetBase, role_data, config_settings]
          - apache::default_vhost: false
      step_config: &step_config
        get_attr: [GnocchiApiPuppetBase, role_data, step_config]
      service_config_settings: {get_attr: [GnocchiApiPuppetBase, role_data, service_config_settings]}
      # BEGIN DOCKER SETTINGS
      puppet_config:
        config_volume: gnocchi
        puppet_tags: gnocchi_api_paste_ini,gnocchi_config
        step_config: *step_config
        config_image: &gnocchi_image
          list_join:
            - '/'
            - [ {get_param: DockerNamespace}, {get_param: DockerGnocchiApiImage} ]
      kolla_config:
        /var/lib/kolla/config_files/gnocchi-api.json:
          command: /usr/sbin/httpd -DFOREGROUND
          permissions:
            - path: /var/log/gnocchi
              owner: gnocchi:gnocchi
              recurse: true
      docker_config:
        # db sync runs before permissions set by kolla_config
        step_3:
          gnocchi_init_log:
            start_order: 0
            image: *gnocchi_image
            user: root
            volumes:
              - /var/log/containers/gnocchi:/var/log/gnocchi
            command: ['/bin/bash', '-c', 'mkdir -p /var/log/httpd; chown -R gnocchi:gnocchi /var/log/gnocchi']
          gnocchi_db_sync:
            start_order: 1
            image: *gnocchi_image
            net: host
            detach: false
            privileged: false
            user: root
            volumes:
              list_concat:
                - {get_attr: [ContainersCommon, volumes]}
                -
                  - /var/lib/config-data/gnocchi/etc/gnocchi/:/etc/gnocchi/:ro
                  - /var/log/containers/gnocchi:/var/log/gnocchi
            command: "/usr/bin/bootstrap_host_exec gnocchi_api su gnocchi -s /bin/bash -c '/usr/bin/gnocchi-upgrade --skip-storage'"
        step_4:
          gnocchi_api:
            image: *gnocchi_image
            net: host
            privileged: false
            restart: always
            volumes:
              list_concat:
                - {get_attr: [ContainersCommon, volumes]}
                -
                  - /var/lib/kolla/config_files/gnocchi-api.json:/var/lib/kolla/config_files/config.json:ro
                  - /var/lib/config-data/gnocchi/etc/gnocchi/:/etc/gnocchi/:ro
                  - /var/lib/config-data/gnocchi/etc/httpd/:/etc/httpd/:ro
                  - /var/lib/config-data/gnocchi/var/www/:/var/www/:ro
                  - /var/log/containers/gnocchi:/var/log/gnocchi
                  -
                    if:
                      - internal_tls_enabled
                      - /etc/pki/tls/certs/httpd:/etc/pki/tls/certs/httpd:ro
                      - ''
                  -
                    if:
                      - internal_tls_enabled
                      - /etc/pki/tls/private/httpd:/etc/pki/tls/private/httpd:ro
                      - ''
            environment:
              - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
      host_prep_tasks:
        - name: create persistent logs directory
          file:
            path: /var/log/containers/gnocchi
            state: directory
      upgrade_tasks:
        - name: Stop and disable httpd service
          tags: step2
          service: name=httpd state=stopped enabled=no
      metadata_settings:
        get_attr: [GnocchiApiPuppetBase, role_data, metadata_settings]