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
139 lines
4.1 KiB
Python
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)
|