测试过程
如果您的工作负载只定义了一个基准测试场景,请在顶层指定调度。使用 test-procedures
元素指定其他属性,例如名称或描述。测试程序类似于基准测试场景。如果您有多个测试程序,可以定义各种挑战。
下表列出了此数据集中基准测试场景的测试程序。测试程序可以引用操作部分中定义的所有操作。
参数 | 必需 | 类型 | 描述 |
---|---|---|---|
名称 | 是 | 字符串 | 测试程序的名称。命名测试程序时,请勿使用空格;这可确保名称在命令行中易于输入。 |
描述 | 否 | 字符串 | 以人类可读的格式描述测试程序。 |
用户信息 | 否 | 字符串 | 在测试开始时输出消息,以通知您重要的测试相关信息,例如弃用项。 |
默认 | 否 | 布尔型 | 设置为 true 时,如果您未在命令行中指定测试程序,则选择默认测试程序。如果工作负载只定义了一个测试程序,则将其隐式选为默认程序。否则,您必须在恰好一个挑战中定义 "default": true 。 |
调度 | 是 | 数组 | 定义工作负载任务的运行顺序。 |
调度
schedule
元素包含任务列表,这些任务是 OpenSearch Benchmark 支持的操作,在基准测试期间由工作负载运行。
用法
schedule
元素使用本节中描述的方法定义任务。
使用操作元素
以下示例使用 operations
元素定义了一个 force-merge
和 match-all
查询任务。force-merge
操作不使用任何参数,因此只需要 name
和 operation-type
。match-all-query
参数需要查询 body
和 operation-type
。
在 operations
元素中定义的操作可以在调度中多次重用。
{
"operations": [
{
"name": "force-merge",
"operation-type": "force-merge"
},
{
"name": "match-all-query",
"operation-type": "search",
"body": {
"query": {
"match_all": {}
}
}
}
],
"schedule": [
{
"operation": "force-merge",
"clients": 1
},
{
"operation": "match-all-query",
"clients": 4,
"warmup-iterations": 1000,
"iterations": 1000,
"target-throughput": 100
}
]
}
内联定义操作
如果您不想在调度中重用某个操作,可以在 schedule
元素内部定义操作,如以下示例所示
{
"schedule": [
{
"operation": {
"name": "force-merge",
"operation-type": "force-merge"
},
"clients": 1
},
{
"operation": {
"name": "match-all-query",
"operation-type": "search",
"body": {
"query": {
"match_all": {}
}
}
},
"clients": 4,
"warmup-iterations": 1000,
"iterations": 1000,
"target-throughput": 100
}
]
}
任务选项
每个任务包含以下选项。
参数 | 必需 | 类型 | 描述 |
---|---|---|---|
操作 | 是 | 列表 | 引用在 operations 元素中定义的操作名称,或内联包含整个操作。 |
名称 | 否 | 字符串 | 当多个任务使用相同的操作时,为任务指定唯一的名称。 |
标签 | 否 | 字符串 | 可用于在 tasks.clients 之间或同时执行任务的客户端数量之间进行筛选的唯一标识符。默认值为 1。 |
客户端 | 否 | 整数 | 指定将同时运行任务的客户端数量。默认值为 1 。 |
目标选项
OpenSearch Benchmark 在运行任务时需要以下选项之一
目标吞吐量 | 否 | 整数 | 定义基准测试模式。如果未定义,OpenSearch Benchmark 假定它是一个吞吐量基准测试,并尽可能快地运行任务。这对于批处理操作很有用,因为批处理操作更倾向于实现更高的吞吐量而不是更低的延迟。如果已定义,则目标指定所有客户端每秒的请求数。例如,如果您指定 target-throughput: 1000 并使用 8 个客户端,则每个客户端每秒发出 125 (= 1000 / 8) 个请求。 |
目标间隔 | 否 | 间隔 | 当 target-throughput 小于每秒 1 次操作时,定义一个由 target-throughput 除以 1(以秒为单位)的间隔。定义 target-throughput 或 target-interval ,但不能同时定义两者,否则 OpenSearch Benchmark 将引发错误。 |
忽略响应错误级别 | 否 | 布尔型 | 控制当使用 on-error=abort 命令标志运行基准测试时,是否忽略任务期间遇到的错误。 |
基于迭代的选项
基于迭代的选项确定操作应运行的次数。它还可以定义任务在并行运行时迭代运行的次数。要配置基于迭代的调度,请使用以下选项。
参数 | 必需 | 类型 | 描述 |
---|---|---|---|
迭代次数 | 否 | 整数 | 指定客户端应执行操作的次数。所有迭代都包含在测量结果中。默认值为 1 。 |
预热迭代次数 | 否 | 整数 | 指定客户端应执行操作以预热基准测试候选的次数。warmup-iterations 不会出现在测量结果中。默认值为 0 。 |
并行任务
parallel
元素同时运行包装在该元素内的任务。
并行运行任务时,每个任务都需要 client
选项,以确保基准测试中的客户端保留给该任务。否则,如果在 parallel
元素内指定了 client
选项而未连接到任务,则基准测试将对所有任务使用该数量的客户端。
用法
在以下示例中,parallel-task-1
和 parallel-task-2
并行执行 bulk
操作
{
"name": "parallel-any",
"description": "Workload completed-by property",
"schedule": [
{
"parallel": {
"tasks": [
{
"name": "parellel-task-1",
"operation": {
"operation-type": "bulk",
"bulk-size": 1000
},
"clients": 8
},
{
"name": "parellel-task-2",
"operation": {
"operation-type": "bulk",
"bulk-size": 500
},
"clients": 8
}
]
}
}
]
}
选项
parallel
元素支持所有 schedule
参数,以及以下选项。
任务 | 是 | 数组 | 定义应同时执行的任务列表。 |
完成者 | 否 | 字符串 | 允许您定义任务列表中一个任务的名称或值 any 。如果 completed-by 设置为列表中一个任务的名称,则一旦该特定任务完成,parallel-task 结构就被视为已完成。如果 completed-by 设置为 any ,则当列表中任何一个任务完成时,parallel-task 结构就被视为已完成。如果未显式定义 completed-by ,则一旦列表中所有任务完成,parallel-task 结构就被视为已完成。 |
基于时间的选项
基于时间的选项确定操作应运行的时间持续时间(以秒为单位)。这对于批处理样式操作非常理想,因为它们可能需要额外的预热期。
要配置基于时间的调度,请使用以下选项。
参数 | 必需 | 类型 | 描述 |
---|---|---|---|
时间段 | 否 | 整数 | 指定 OpenSearch Benchmark 用于测量的时间段(以秒为单位)。批量索引不需要此项,因为 OpenSearch Benchmark 会批量索引所有文档,并在指定的 warmup-time-period 之后自然测量所有样本。 |
预热时间段 | 否 | 整数 | 指定 OpenSearch Benchmark 逐渐添加客户端并达到为操作指定的客户端总数的时间段(以秒为单位)。 |
预热时间段 | 否 | 整数 | 指定预热基准测试候选的时间量(以秒为单位)。在预热期间捕获的任何响应数据都不会出现在测量结果中。 |