解决多线程dmabuffer竞态问题
This commit is contained in:
@@ -19,9 +19,9 @@ DB_PATH="/tmp/rocksdb_manual"
|
||||
BENCHMARKS="fillrandom,readrandom"
|
||||
|
||||
# key数
|
||||
NUM=1000000
|
||||
NUM=50000
|
||||
# 线程数
|
||||
THREADS=1
|
||||
THREADS=2
|
||||
# 随机种子
|
||||
SEED=1
|
||||
|
||||
@@ -52,7 +52,7 @@ DISABLE_WAL=1
|
||||
SYNC=0
|
||||
|
||||
# direct I/O
|
||||
USE_DIRECT_READS=0
|
||||
USE_DIRECT_READS=1
|
||||
USE_DIRECT_IO_FOR_FLUSH_AND_COMPACTION=0
|
||||
|
||||
# mmap I/O
|
||||
|
||||
@@ -54,7 +54,7 @@ DISABLE_WAL=1
|
||||
SYNC=0
|
||||
|
||||
# direct I/O
|
||||
USE_DIRECT_READS=0
|
||||
USE_DIRECT_READS=1
|
||||
USE_DIRECT_IO_FOR_FLUSH_AND_COMPACTION=0
|
||||
|
||||
# mmap I/O
|
||||
|
||||
62
scripts/run_pgbench.sh
Executable file
62
scripts/run_pgbench.sh
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# 简化版 pgbench 测试脚本:
|
||||
# 1) 参数都在本文件顶部配置;
|
||||
# 2) 直接连接 benchdb;
|
||||
# 3) 执行 pgbench 初始化和压测。
|
||||
|
||||
# ---------------------------
|
||||
# 固定配置(按需改这里)
|
||||
# ---------------------------
|
||||
PG_HOST="127.0.0.1"
|
||||
PG_PORT="5432"
|
||||
PG_DB="postgres"
|
||||
PG_SCALE="10"
|
||||
PG_TIME="15"
|
||||
PG_CLIENTS="32"
|
||||
PG_THREADS="8"
|
||||
PG_INIT_JOBS="1"
|
||||
PG_INIT_STEPS="dtg"
|
||||
PG_SKIP_INIT="0"
|
||||
PG_SUPERUSER="postgres"
|
||||
USE_LD_PRELOAD="0"
|
||||
|
||||
# 可选:优先使用这个目录;为空时自动从 PATH 里找
|
||||
PG_BIN_DIR="/usr/lib/postgresql/12/bin"
|
||||
|
||||
if [[ ! -x "${PG_BIN_DIR}/pgbench" ]]; then
|
||||
PG_BIN_DIR="$(dirname "$(command -v pgbench 2>/dev/null || true)")"
|
||||
fi
|
||||
|
||||
if [[ -z "${PG_BIN_DIR}" || ! -x "${PG_BIN_DIR}/pgbench" ]]; then
|
||||
echo "未找到 pgbench,请先安装 PostgreSQL 客户端或修正 PG_BIN_DIR。" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
run_pg_cmd() {
|
||||
if [[ "${USE_LD_PRELOAD}" == "1" ]]; then
|
||||
sudo -u "${PG_SUPERUSER}" env LD_PRELOAD="${LD_PRELOAD_PATH}" "$@"
|
||||
else
|
||||
sudo -u "${PG_SUPERUSER}" "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
echo "当前配置:"
|
||||
echo " host=${PG_HOST} port=${PG_PORT} db=${PG_DB}"
|
||||
echo " scale=${PG_SCALE} clients=${PG_CLIENTS} threads=${PG_THREADS} time=${PG_TIME}s preload=${USE_LD_PRELOAD}"
|
||||
echo " init_jobs=${PG_INIT_JOBS} init_steps=${PG_INIT_STEPS} skip_init=${PG_SKIP_INIT}"
|
||||
echo
|
||||
|
||||
if [[ "${PG_SKIP_INIT}" != "1" ]]; then
|
||||
echo "[1/2] pgbench 初始化(-i)"
|
||||
run_pg_cmd "${PG_BIN_DIR}/pgbench" \
|
||||
-h "${PG_HOST}" -p "${PG_PORT}" -i \
|
||||
-s "${PG_SCALE}" -I "${PG_INIT_STEPS}" "${PG_DB}"
|
||||
else
|
||||
echo "[1/2] 跳过初始化(PG_SKIP_INIT=1)"
|
||||
fi
|
||||
|
||||
echo "[2/2] pgbench 压测(-T)"
|
||||
run_pg_cmd "${PG_BIN_DIR}/pgbench" \
|
||||
-h "${PG_HOST}" -p "${PG_PORT}" -c "${PG_CLIENTS}" -j "${PG_THREADS}" -T "${PG_TIME}" "${PG_DB}"
|
||||
@@ -12,10 +12,10 @@ set -euo pipefail
|
||||
PG_HOST="127.0.0.1"
|
||||
PG_PORT="5432"
|
||||
PG_DB="benchdb"
|
||||
PG_SCALE="1"
|
||||
PG_SCALE="10"
|
||||
PG_TIME="15"
|
||||
PG_CLIENTS="1"
|
||||
PG_THREADS="1"
|
||||
PG_CLIENTS="32"
|
||||
PG_THREADS="8"
|
||||
PG_INIT_JOBS="1"
|
||||
PG_INIT_STEPS="dtg"
|
||||
PG_SKIP_INIT="0"
|
||||
Reference in New Issue
Block a user