运行基准测试

介绍

本文档描述了如何运行基准测试工具。

Zaqar 贡献者可以使用此工具来测试特定的代码更改如何影响 Zaqar 的性能。

用法

  1. 首先安装并运行 zaqar-server。

    例如,您可以在开发环境中设置 Zaqar。

    请参阅 设置开发环境

  2. 在您的终端中,cd 进入您的本地 Zaqar 仓库并安装额外的依赖项

    $ pip install -r bench-requirements.txt
    
  3. 将配置文件复制到 ~/.zaqar

    $ cp etc/zaqar-benchmark.conf.sample ~/.zaqar/zaqar-benchmark.conf
    
  4. 在此配置文件中,指定可以找到 zaqar-server 的位置

    server_url = https://:8888
    
  5. 基准测试工具需要一组消息来处理。在配置文件中指定包含消息的文件路径。或者,将其放在配置文件的目录中并将其命名为 zaqar-benchmark-messages.json。作为起点,您可以使用 etc 目录中的示例文件

    $ cp etc/zaqar-benchmark-messages.json ~/.zaqar/
    

    如果未找到文件或未指定文件,则单个硬编码消息将用于所有请求。

  6. 使用以下命令运行基准测试工具

    $ zaqar-bench
    

    默认情况下,该命令将运行 5 秒的性能测试,使用一个生产者进程,带有 10 个 greenlet 工作线程,以及一个观察者进程,带有 5 个工作线程。默认情况下禁用消费者角色。

    您可以在配置文件或命令行中使用各种选项来覆盖这些默认值。例如,以下命令使用 4 个生产者进程,每个进程带有 20 个工作线程,以及 4 个消费者进程,每个进程带有 20 个工作线程,运行 30 秒的性能测试。

    请注意,在此示例中,通过将工作线程数设置为零来禁用观察者角色

    $ zaqar-bench -pp 4 -pw 10 -cp 4 -cw 20 -ow 0 -t 30
    

    默认情况下,结果以人类可读的格式显示。对于 JSON 输出,添加 --noverbose 标志。非详细输出如下所示

    $ zaqar-bench --noverbose
    Using 'envvars' credentials
    Using 'keystone' authentication method
    Benchmarking Zaqar API v2...
    {"params": {"consumer": {"processes": 1, "workers": 0}, "observer": {"processes": 1, "workers": 5}, "producer": {"processes": 1, "workers": 10}}, "consumer": {"claim_total_requests": 0, "ms_per_claim": 0, "total_reqs": 0, "reqs_per_sec": 0, "successful_reqs": 0, "duration_sec": 0, "ms_per_delete": 0, "messages_processed": 0}, "producer": {"duration_sec": 8.569170951843262, "ms_per_req": 201.715140507139, "total_reqs": 29, "successful_reqs": 29, "reqs_per_sec": 3.384224700729303}, "observer": {"duration_sec": 8.481178045272827, "ms_per_req": 407.40778711107043, "total_reqs": 18, "successful_reqs": 18, "reqs_per_sec": 2.122346672115049}}
    

    默认情况下,zaqar-bench 正在基准测试 Zaqar API 版本 2。要针对其他 API 版本运行基准测试,请使用 -api 参数。例如

    $ zaqar-bench -api 1.1
    

配置 zaqar-bench 使用 Keystone 身份验证

如果您的 Zaqar 配置为使用 Keystone 身份验证方法并且 Keystone 服务正在运行,则可以使用 zaqar-bench 进行 Keystone 身份验证。例如,在运行 DevStack 时,如果 zaqar.conf 未经修改,则始终为真。

让我们也配置 zaqar-bench 使用 Keystone

  1. 将 zaqar-bench 的身份验证方法设置为 Keystone。

    默认情况下,zaqar-bench 正在使用 noauth 方法。可以通过将环境变量 OS_AUTH_STRATEGY 设置为 keystone 来更改此设置。

    要设置此环境变量

    • 临时,运行

      $ export OS_AUTH_STRATEGY=keystone
      
    • 永久,将此行添加到您的 ~/bashrc 文件

      export OS_AUTH_STRATEGY=keystone
      

      重新启动您的计算机或只是在您将启动 zaqar-bench 的终端中运行

      $ source ~/.bashrc
      
  2. 设置 zaqar-bench 的 Keystone 凭据。

    • 如果您在 DevStack 下运行 Zaqar,您可以省略此步骤,因为 zaqar-bench 将自动从 DevStack 创建的文件之一获取管理员或用户凭据:要么从 /etc/openstack/clouds.yaml 文件,要么从 ~/.config/openstack/clouds.yaml 文件(如果存在)。

    • 如果您手动配置 Zaqar 并手动配置 Keystone(不在 DevStack 下)

      将这些行添加到您的 ~/.bashrc 文件并指定有效的 Keystone 凭据

      export OS_AUTH_URL="http://<your keystone endpoint>/v2.0"
      export OS_USERNAME="<keystone user name>"
      export OS_PASSWORD="<the user's password>"
      export OS_PROJECT_NAME="<keystone project name for the user>"
      

      重新启动您的计算机或只是在您将启动 zaqar-bench 的终端中运行

      $ source ~/.bashrc
      
  3. 像往常一样运行 zaqar-bench,例如

    $ zaqar-bench
    

    如果一切配置正确,zaqar-bench 应该显示 Using 'keystone' authentication method 行并执行而没有身份验证错误。