Skip to content

Commit d47282c

Browse files
author
Your Name
committed
update
1 parent 16ed6b5 commit d47282c

File tree

6 files changed

+388
-5
lines changed

6 files changed

+388
-5
lines changed

qemu_integration/launch_qemu_cxl.sh

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,15 @@ exec $QEMU_BINARY \
2222
-drive file=./qemu.img,index=0,media=disk,format=raw \
2323
-netdev tap,id=net0,ifname=tap0,script=no,downscript=no \
2424
-device virtio-net-pci,netdev=net0,mac=52:54:00:00:00:01 \
25+
-fsdev local,security_model=none,id=fsdev0,path=/dev/shm \
26+
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshm,bus=pcie.0 \
2527
-device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \
2628
-device cxl-rp,port=0,bus=cxl.1,id=root_port13,chassis=0,slot=0 \
2729
-device cxl-rp,port=1,bus=cxl.1,id=root_port14,chassis=0,slot=1 \
2830
-device cxl-type3,bus=root_port13,persistent-memdev=cxl-mem1,lsa=cxl-lsa1,id=cxl-pmem0,sn=0x1 \
2931
-device cxl-type1,bus=root_port14,size=256M,cache-size=64M \
3032
-device virtio-cxl-accel-pci,bus=pcie.0 \
31-
-object memory-backend-file,id=cxl-mem1,share=on,mem-path=/tmp/cxltest.raw,size=256M \
32-
-object memory-backend-file,id=cxl-lsa1,share=on,mem-path=/tmp/lsa.raw,size=256M \
33+
-object memory-backend-file,id=cxl-mem1,share=on,mem-path=/dev/shm/cxlmemsim_shared,size=256M \
34+
-object memory-backend-file,id=cxl-lsa1,share=on,mem-path=/tmp/lsa0.raw,size=256M \
3335
-M cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=4G \
3436
-nographic

qemu_integration/launch_qemu_cxl1.sh

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,15 @@ exec $QEMU_BINARY \
2222
-drive file=./qemu1.img,index=0,media=disk,format=raw \
2323
-netdev tap,id=net0,ifname=tap1,script=no,downscript=no \
2424
-device virtio-net-pci,netdev=net0,mac=52:54:00:00:00:02 \
25+
-fsdev local,security_model=none,id=fsdev0,path=/dev/shm \
26+
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshm,bus=pcie.0 \
2527
-device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \
2628
-device cxl-rp,port=0,bus=cxl.1,id=root_port13,chassis=0,slot=0 \
2729
-device cxl-rp,port=1,bus=cxl.1,id=root_port14,chassis=0,slot=1 \
2830
-device cxl-type3,bus=root_port13,persistent-memdev=cxl-mem1,lsa=cxl-lsa1,id=cxl-pmem0,sn=0x1 \
2931
-device cxl-type1,bus=root_port14,size=256M,cache-size=64M \
3032
-device virtio-cxl-accel-pci,bus=pcie.0 \
31-
-object memory-backend-file,id=cxl-mem1,share=on,mem-path=/tmp/cxltest.raw,size=256M \
32-
-object memory-backend-file,id=cxl-lsa1,share=on,mem-path=/tmp/lsa.raw,size=256M \
33+
-object memory-backend-file,id=cxl-mem1,share=on,mem-path=/dev/shm/cxlmemsim_shared,size=256M \
34+
-object memory-backend-file,id=cxl-lsa1,share=on,mem-path=/tmp/lsa1.raw,size=256M \
3335
-M cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=4G \
3436
-nographic
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#!/bin/bash
2+
# 重启两个VM使用共享内存
3+
4+
echo "========================================="
5+
echo "重启VM以使用共享内存配置"
6+
echo "========================================="
7+
echo ""
8+
9+
# 找到QEMU进程并杀掉
10+
echo "[1/5] 停止现有VM..."
11+
pkill -9 qemu-system-x86_64
12+
sleep 3
13+
14+
# 确保cxlmemsim_server正在运行
15+
echo "[2/5] 检查cxlmemsim_server..."
16+
if ! pgrep -x cxlmemsim_server > /dev/null; then
17+
echo " 错误: cxlmemsim_server未运行"
18+
echo " 请先启动server"
19+
exit 1
20+
fi
21+
echo " ✓ Server正在运行"
22+
23+
# 检查共享内存文件
24+
echo "[3/5] 检查共享内存文件..."
25+
if [ ! -f /dev/shm/cxlmemsim_shared ]; then
26+
echo " 错误: /dev/shm/cxlmemsim_shared 不存在"
27+
exit 1
28+
fi
29+
echo " ✓ 共享内存文件存在: $(ls -lh /dev/shm/cxlmemsim_shared | awk '{print $5}')"
30+
31+
# 创建LSA文件(如果不存在)
32+
echo "[4/5] 准备LSA文件..."
33+
for i in 0 1; do
34+
LSA_FILE="/tmp/lsa${i}.raw"
35+
if [ ! -f "$LSA_FILE" ]; then
36+
echo " 创建 $LSA_FILE..."
37+
truncate -s 256M "$LSA_FILE"
38+
fi
39+
done
40+
echo " ✓ LSA文件准备完成"
41+
42+
# 启动VM
43+
echo "[5/5] 启动VM..."
44+
echo ""
45+
echo "启动Node 0..."
46+
cd /home/yhgan913/CXLMemSim/qemu_integration
47+
nohup ./launch_qemu_cxl.sh > /tmp/qemu0.log 2>&1 &
48+
QEMU0_PID=$!
49+
echo " PID: $QEMU0_PID"
50+
51+
sleep 5
52+
53+
echo "启动Node 1..."
54+
nohup ./launch_qemu_cxl1.sh > /tmp/qemu1.log 2>&1 &
55+
QEMU1_PID=$!
56+
echo " PID: $QEMU1_PID"
57+
58+
echo ""
59+
echo "========================================="
60+
echo "VM已启动"
61+
echo "========================================="
62+
echo "Node 0 PID: $QEMU0_PID"
63+
echo "Node 1 PID: $QEMU1_PID"
64+
echo ""
65+
echo "查看日志:"
66+
echo " tail -f /tmp/qemu0.log"
67+
echo " tail -f /tmp/qemu1.log"
68+
echo ""
69+
echo "等待10秒让VM启动..."
70+
sleep 10
71+
72+
echo "检查VM状态..."
73+
ping -c 1 -W 2 192.168.100.10 > /dev/null && echo " ✓ Node 0 (192.168.100.10) 可达" || echo " ✗ Node 0 不可达"
74+
ping -c 1 -W 2 192.168.100.11 > /dev/null && echo " ✓ Node 1 (192.168.100.11) 可达" || echo " ✗ Node 1 不可达"
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
#!/bin/bash
2+
# 测试共享内存是否工作
3+
4+
echo "========================================="
5+
echo "测试共享内存配置"
6+
echo "========================================="
7+
echo ""
8+
9+
# 1. 检查host共享内存
10+
echo "[1/6] 检查host共享内存文件..."
11+
if [ ! -f /dev/shm/cxlmemsim_shared ]; then
12+
echo " ✗ 错误: /dev/shm/cxlmemsim_shared 不存在"
13+
exit 1
14+
fi
15+
echo " ✓ 文件存在: $(ls -lh /dev/shm/cxlmemsim_shared | awk '{print $5}')"
16+
17+
# 2. 检查哪些进程在使用
18+
echo "[2/6] 检查使用共享内存的进程..."
19+
USERS=$(lsof /dev/shm/cxlmemsim_shared 2>/dev/null | tail -n +2 | awk '{print $1}' | sort -u)
20+
if [ -z "$USERS" ]; then
21+
echo " ✗ 警告: 没有进程在使用共享内存"
22+
else
23+
echo " ✓ 使用中的进程:"
24+
echo "$USERS" | while read proc; do
25+
COUNT=$(lsof /dev/shm/cxlmemsim_shared 2>/dev/null | grep -c "$proc")
26+
echo " - $proc (${COUNT}个实例)"
27+
done
28+
fi
29+
echo ""
30+
31+
# 3. 检查VM可达性
32+
echo "[3/6] 检查VM网络连接..."
33+
if ping -c 1 -W 2 192.168.100.10 > /dev/null 2>&1; then
34+
echo " ✓ Node 0 (192.168.100.10) 可达"
35+
NODE0_UP=1
36+
else
37+
echo " ✗ Node 0 (192.168.100.10) 不可达"
38+
NODE0_UP=0
39+
fi
40+
41+
if ping -c 1 -W 2 192.168.100.11 > /dev/null 2>&1; then
42+
echo " ✓ Node 1 (192.168.100.11) 可达"
43+
NODE1_UP=1
44+
else
45+
echo " ✗ Node 1 (192.168.100.11) 不可达"
46+
NODE1_UP=0
47+
fi
48+
echo ""
49+
50+
if [ $NODE0_UP -eq 0 ] || [ $NODE1_UP -eq 0 ]; then
51+
echo "错误: 一个或多个VM不可达,无法继续测试"
52+
exit 1
53+
fi
54+
55+
# 4. 检查DAX设备
56+
echo "[4/6] 检查VM内DAX设备..."
57+
NODE0_DAX=$(ssh root@192.168.100.10 "ls -l /dev/dax0.0 2>&1" | grep -c "^c")
58+
NODE1_DAX=$(ssh root@192.168.100.11 "ls -l /dev/dax0.0 2>&1" | grep -c "^c")
59+
60+
if [ $NODE0_DAX -eq 1 ]; then
61+
echo " ✓ Node 0: /dev/dax0.0 存在"
62+
else
63+
echo " ✗ Node 0: /dev/dax0.0 不存在"
64+
fi
65+
66+
if [ $NODE1_DAX -eq 1 ]; then
67+
echo " ✓ Node 1: /dev/dax0.0 存在"
68+
else
69+
echo " ✗ Node 1: /dev/dax0.0 不存在"
70+
fi
71+
echo ""
72+
73+
# 5. 测试共享内存写入/读取
74+
echo "[5/6] 测试共享内存读写..."
75+
TEST_STRING="SHARED_MEMORY_TEST_$(date +%s)"
76+
echo " 写入测试字符串到Node 0: $TEST_STRING"
77+
78+
# 在Node 0写入
79+
ssh root@192.168.100.10 "echo -n '$TEST_STRING' | dd of=/dev/dax0.0 bs=1 seek=1024 2>/dev/null"
80+
sleep 1
81+
82+
# 在Node 1读取
83+
RESULT=$(ssh root@192.168.100.11 "dd if=/dev/dax0.0 bs=1 skip=1024 count=${#TEST_STRING} 2>/dev/null")
84+
85+
if [ "$RESULT" = "$TEST_STRING" ]; then
86+
echo " ✓ 成功!Node 1 读取到Node 0写入的数据"
87+
echo " 写入: $TEST_STRING"
88+
echo " 读取: $RESULT"
89+
SHARED_WORKS=1
90+
else
91+
echo " ✗ 失败!共享内存不工作"
92+
echo " 写入: $TEST_STRING"
93+
echo " 读取: $RESULT"
94+
SHARED_WORKS=0
95+
fi
96+
echo ""
97+
98+
# 6. 测试反向(Node 1写,Node 0读)
99+
echo "[6/6] 测试反向读写..."
100+
TEST_STRING2="REVERSE_TEST_$(date +%s)"
101+
echo " 写入测试字符串到Node 1: $TEST_STRING2"
102+
103+
# 在Node 1写入
104+
ssh root@192.168.100.11 "echo -n '$TEST_STRING2' | dd of=/dev/dax0.0 bs=1 seek=2048 2>/dev/null"
105+
sleep 1
106+
107+
# 在Node 0读取
108+
RESULT2=$(ssh root@192.168.100.10 "dd if=/dev/dax0.0 bs=1 skip=2048 count=${#TEST_STRING2} 2>/dev/null")
109+
110+
if [ "$RESULT2" = "$TEST_STRING2" ]; then
111+
echo " ✓ 成功!Node 0 读取到Node 1写入的数据"
112+
echo " 写入: $TEST_STRING2"
113+
echo " 读取: $RESULT2"
114+
REVERSE_WORKS=1
115+
else
116+
echo " ✗ 失败!反向共享不工作"
117+
echo " 写入: $TEST_STRING2"
118+
echo " 读取: $RESULT2"
119+
REVERSE_WORKS=0
120+
fi
121+
echo ""
122+
123+
# 总结
124+
echo "========================================="
125+
echo "测试总结"
126+
echo "========================================="
127+
if [ $SHARED_WORKS -eq 1 ] && [ $REVERSE_WORKS -eq 1 ]; then
128+
echo "✓ 共享内存配置正确!"
129+
echo ""
130+
echo "可以运行Tigon多节点测试了:"
131+
echo " cd /home/yhgan913/CXLMemSim/workloads/tigon"
132+
echo " export CXL_BACKEND=dax"
133+
echo " export CXL_MEMORY_RESOURCE=/dev/dax0.0"
134+
echo " ./scripts/run.sh TPCC TwoPLPasha 2 3 mixed 10 15 1 0 1 Clock OnDemand 200000000 1 WriteThrough None 30 10 BLACKHOLE 20000 0 0"
135+
exit 0
136+
else
137+
echo "✗ 共享内存配置有问题"
138+
echo ""
139+
echo "故障排查:"
140+
echo " 1. 确认两个VM都使用 /dev/shm/cxlmemsim_shared"
141+
echo " 2. 检查 lsof /dev/shm/cxlmemsim_shared"
142+
echo " 3. 查看 /tmp/qemu0.log 和 /tmp/qemu1.log"
143+
echo " 4. 重启VM: ./restart_vms_shared.sh"
144+
exit 1
145+
fi

0 commit comments

Comments
 (0)