Files
scylladb/test/cluster/test_tools_perf.py
Avi Kivity 450a09b152 test: tools: restrict embedded perf tests from taking over host
The perf-simple-query tests were not restricted on CPU count,
so on a 96-CPU machine, they would run on 96 CPUs, and time out
in debug mode.

All restrict memory usage and add --overprovisioned so that
pinning is disabled. Apply that to all tests.

Closes scylladb/scylladb#28821
2026-02-27 16:06:22 +02:00

139 lines
4.1 KiB
Python

# Copyright 2025-present ScyllaDB
#
# SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
import socket
import subprocess
import time
import logging
import asyncio
import pytest
from test import path_to
from test.pylib.host_registry import HostRegistry
logger = logging.getLogger(__name__)
# Testing whether perf-simple-query, perf-cql-raw, perf-alternator
# tools work correctly in in-process and remote modes, in various workloads
async def run(args):
loop = asyncio.get_running_loop()
def _run():
return subprocess.run(args, check=True, text=True, timeout=600)
try:
output = await loop.run_in_executor(None, _run)
except Exception as e:
logger.error(e)
raise e
@pytest.fixture(scope="module")
def scylla_path(build_mode):
return path_to(build_mode, "scylla")
@pytest.mark.parametrize("mode", ["read"])
async def test_perf_simple_query(scylla_path, mode, tmp_path):
args = [scylla_path, "perf-simple-query", "--duration", "1", "--partitions", "1000", "--stop-on-error", "false", "--memory", "2G", "--smp", "2", "--overprovisioned"]
await run(args)
@pytest.mark.parametrize("workload", ["read", "write"])
async def test_perf_cql_raw(scylla_path, tmp_path, workload):
hosts = HostRegistry()
host = await hosts.lease_host()
cmd = [
scylla_path, "perf-cql-raw",
'--api-address', host,
'--rpc-address', host,
'--listen-address', host,
'--prometheus-address', host,
'--seed-provider-parameters', 'seeds=' + host,
"--workload", workload,
"--duration", "1",
"--memory", "2G",
"--smp", "2",
"--overprovisioned",
"--workdir", str(tmp_path),
"--developer-mode", "1",
"--partitions", "1000",
"--continue-after-error", "true"
]
try:
await run(cmd)
finally:
await hosts.release_host(host)
@pytest.mark.parametrize("workload", ["write"])
async def test_perf_alternator(scylla_path, tmp_path, workload):
hosts = HostRegistry()
host = await hosts.lease_host()
cmd = [
scylla_path, "perf-alternator",
'--api-address', host,
'--rpc-address', host,
'--listen-address', host,
'--prometheus-address', host,
'--alternator-address', host,
'--seed-provider-parameters', 'seeds=' + host,
"--alternator-port", "8000",
"--alternator-write-isolation", "only_rmw_uses_lwt",
"--workload", workload,
"--duration", "1",
"--memory", "2G",
"--smp", "2",
"--overprovisioned",
"--workdir", str(tmp_path),
"--developer-mode", "1",
"--partitions", "1000",
"--continue-after-error", "true"
]
try:
await run(cmd)
finally:
await hosts.release_host(host)
@pytest.mark.parametrize("workload", ["read"])
async def test_perf_cql_raw_remote(scylla_path, tmp_path, workload, manager):
await manager.server_add()
servers = await manager.running_servers()
await manager.get_ready_cql(servers)
host = servers[0].ip_addr
client_cmd = [
scylla_path, "perf-cql-raw",
"--workload", workload,
"--duration", "1",
"--remote-host", host,
"--memory", "1G",
"--smp", "1",
"--overprovisioned",
"--partitions", "1000",
"--continue-after-error", "true"
]
await run(client_cmd)
@pytest.mark.parametrize("workload", ["read"])
async def test_perf_alternator_remote(scylla_path, tmp_path, workload, manager):
await manager.server_add(cmdline=[
"--alternator-port", "8000",
"--alternator-write-isolation", "only_rmw_uses_lwt"
])
servers = await manager.running_servers()
await manager.get_ready_cql(servers)
host = servers[0].ip_addr
client_cmd = [
scylla_path, "perf-alternator",
"--workload", workload,
"--duration", "1",
"--remote-host", host,
"--memory", "1G",
"--smp", "1",
"--overprovisioned",
"--partitions", "1000",
"--continue-after-error", "true"
]
await run(client_cmd)