postgres \c 调用 fscanf 导致的 bug。

This commit is contained in:
2026-03-14 18:52:28 +08:00
parent cf13b0228e
commit 1732163cbf
15 changed files with 107 additions and 175 deletions

View File

@@ -4,14 +4,6 @@
sudo apt-get update
sudo apt-get install -y postgresql postgresql-contrib
# 2. 找到 postgresql.confUbuntu 通常在这个目录)
ls /etc/postgresql/*/main/postgresql.conf
# 3. 配置禁用 mmap编辑 postgresql.conf
shared_memory_type = sysv
dynamic_shared_memory_type = sysv
# 4. 重启 PostgreSQL
@@ -19,52 +11,39 @@ dynamic_shared_memory_type = sysv
sudo systemctl stop postgresql
pkill -9 -u postgres postgres || true
rm -rf /home/lian/pg/pgdata
rm -rf /zvfs/pg_ts_bench
LD_PRELOAD=/home/lian/share/zvfs/src/libzvfs.so rm -rf /zvfs/pg_ts_bench
rm -rf /tmp/pg.log
## 初始化
sudo mkdir -p /home/lian/pg/pgdata
sudo chown -R postgres:postgres /home/lian/pg
sudo -u postgres mkdir -p /home/lian/pg/pgdata
sudo chown -R postgres:postgres /home/lian/pg/pgdata
sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
sudo -u postgres env LD_PRELOAD=/home/lian/share/zvfs/src/libzvfs.so \
/usr/lib/postgresql/12/bin/initdb -D /home/lian/pg/pgdata
## 修改配置文件
cp ./postgresql.conf /home/lian/pg/pgdata/
cp /home/lian/share/zvfs/postgresql.conf /home/lian/pg/pgdata/
sudo chown -R postgres:postgres /home/lian/pg/pgdata/postgresql.conf
## 创建测试环境
sudo -u postgres mkdir -p /zvfs/pg_ts_bench
sudo mkdir -p /zvfs/pg_ts_bench
sudo chown -R postgres:postgres /zvfs/pg_ts_bench
sudo chmod 700 /zvfs/pg_ts_bench
## 启动服务
sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
sudo -u postgres env LD_PRELOAD=/home/lian/share/zvfs/src/libzvfs.so \
/usr/lib/postgresql/12/bin/pg_ctl -D /home/lian/pg/pgdata -l /tmp/pg.log start
sudo -u postgres env \
LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
ZVFS_DEBUG_OPEN=1 \
ZVFS_DEBUG_OPEN_MATCH=PG_VERSION \
ZVFS_DEBUG_RW=1 \
/usr/lib/postgresql/12/bin/pg_ctl -D /home/lian/pg/pgdata -l /tmp/pg.log start
## 打开命令行工具
sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
/usr/lib/postgresql/12/bin/psql
sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
ZVFS_DEBUG_OPEN=1 \
ZVFS_DEBUG_OPEN_MATCH=PG_VERSION \
ZVFS_DEBUG_RW=1 \
sudo -u postgres env LD_PRELOAD=/home/lian/share/zvfs/src/libzvfs.so \
/usr/lib/postgresql/12/bin/psql
## 重启服务
sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \
## 重启服务指令
sudo -u postgres env LD_PRELOAD=/home/lian/share/zvfs/src/libzvfs.so \
/usr/lib/postgresql/12/bin/pg_ctl -D /home/lian/pg/pgdata -l /tmp/pg.log restart
@@ -142,7 +121,9 @@ WHERE relname='hook_probe';
# 12. 删表
DROP TABLE IF EXISTS hook_probe;
# 查看表文件
SELECT pg_relation_filepath('hook_probe');
# 13. 压测
bash /home/lian/try/zvfs/scripts/run_pgbench_no_mmap.sh
bash /home/lian/share/zvfs/scripts/run_pgbench_no_mmap.sh
```

View File

@@ -0,0 +1,13 @@
```shell
sudo apt install -y git build-essential libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev cmake
git clone https://github.com/facebook/rocksdb.git
cd rocksdb
git checkout v8.10.0
make db_bench -j$(nproc) \
DISABLE_JEMALLOC=1 \
USE_JEMALLOC=0 \
JEMALLOC=0
```

View File

@@ -5,7 +5,7 @@ set -euo pipefail
# Manual Config (edit here)
# =========================
# 可执行文件路径
DB_BENCH_BIN="/home/lian/env/rocksdb-test/db_bench"
DB_BENCH_BIN="/home/lian/env/rocksdb/db_bench"
# RocksDB 数据目录
DB_PATH="/tmp/rocksdb_manual"

View File

@@ -1,12 +1,12 @@
#!/usr/bin/env bash
set -euo pipefail
env -u LD_PRELOAD rm -rf /zvfs/rocksdb_manual || true
env -u LD_PRELOAD=/home/lian/share/zvfs/src/libzvfs.so -rf /zvfs/rocksdb_manual || true
# =========================
# Manual Config (edit here)
# =========================
# 可执行文件路径
DB_BENCH_BIN="/home/lian/env/rocksdb-test/db_bench"
DB_BENCH_BIN="/home/lian/env/rocksdb/db_bench"
# RocksDB 数据目录
DB_PATH="/zvfs/rocksdb_manual"
@@ -20,8 +20,7 @@ DB_PATH="/zvfs/rocksdb_manual"
BENCHMARKS="fillrandom,readrandom"
# key数
# NUM=1000000
NUM=5000
NUM=50000
# 线程数
THREADS=2
@@ -92,7 +91,7 @@ echo "USE_MMAP_READS=$USE_MMAP_READS USE_MMAP_WRITES=$USE_MMAP_WRITES"
echo "STATISTICS=$STATISTICS STATS_INTERVAL_SECONDS=$STATS_INTERVAL_SECONDS HISTOGRAM=$HISTOGRAM"
echo
exec "$DB_BENCH_BIN" \
exec env LD_PRELOAD=/home/lian/share/zvfs/src/libzvfs.so "$DB_BENCH_BIN" \
--db="$DB_PATH" \
--benchmarks="$BENCHMARKS" \
--num="$NUM" \

View File

@@ -21,7 +21,7 @@ PG_INIT_STEPS="dtg"
PG_SKIP_INIT="0"
PG_SUPERUSER="postgres"
USE_LD_PRELOAD="1"
LD_PRELOAD_PATH="/home/lian/try/zvfs/src/libzvfs.so"
LD_PRELOAD_PATH="/home/lian/share/zvfs/src/libzvfs.so"
# 可选:优先使用这个目录;为空时自动从 PATH 里找
PG_BIN_DIR="/usr/lib/postgresql/12/bin"

View File

@@ -1 +1 @@
LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so ZVFS_TEST_ROOT=/zvfs /home/lian/try/zvfs/tests/bin/hook_api_test
LD_PRELOAD=/home/lian/share/zvfs/src/libzvfs.so ZVFS_TEST_ROOT=/zvfs /home/lian/share/zvfs/tests/bin/hook_api_test

View File

@@ -1,8 +0,0 @@
# pgrep -u postgres -x postgres | while read p; do
# echo "PID=$p"
# sudo grep -m1 libzvfs /proc/$p/maps || echo " (no libzvfs)"
# done
for p in 185591 185633 185664; do
echo "== $p"; grep libzvfs /proc/$p/maps || echo "NO_LIB";
done