PhxPaxos测试
1 测试环境
1.1 硬件环境
实验使用3台Ubuntu 22.04 x86 PC,硬件配置分别如下:
设备 | 名称 | CPU | 内存 |
---|---|---|---|
PC1 | tjopenlab | Intel Core i5-3470 3.2GHz 4核4线程 | 16GB |
PC2 | poweredge | Intel Xeon CPU E5-2403 v2 1.8GHz 2座4核4线程 | 32GB |
PC3 | inspiron | Intel Core i5-4210U 1.7GHz 2核2线程 | 6GB |
注意:由于Windows不支持POSIX,WSL Ubuntu存在兼容性问题,建议在纯Linux环境下编译测试。
1.2 网络环境
确保各设备处于同一局域网下。假设各设备IP分别为:
编号 | 名称 | IP地址 |
---|---|---|
PC1 | tjopenlab | 192.168.0.12 |
PC2 | poweredge | 192.168.0.22 |
PC3 | inspiron | 192.168.0.10 |
2 编译
PhxPaxos依赖2个共享库:PhxPaxos.so和comort.so。下面在一台主机上编译它们,并传输到其他主机。首先进行编译:
# 克隆COMO仓库(包括子仓库)
git clone https://gitee.com/tjopenlab/como.git --recursive
# 安装COMO所需依赖
sudo apt install build-essential cmake libdbus-1-dev libunwind8-dev libicu-dev dh-autoreconf libtool -y
# 安装外部编译依赖
sudo apt install python3 python-is-python3
# 编译COMO
cd como
source build/envsetup.sh
como_linux_x64
build
# 编译外部组件(包括phxpaxos)
cd ../../.. # como目录
./MakeOptionalExternal.sh
查看编译得到的PhxPaxos.so和可执行文件phxcomo_test:
ls ~/Work/1-2025/como/external/phxpaxos/export_como | grep -E 'PhxPaxos.so|phxcomo_test'
查看编译得到的comort.so:
ls ~/Work/1-2025/como/bin/target/como.linux.x64.rls | grep comort.so
在本机,将上述2条路径设置为动态链接库的搜索路径(以冒号分隔):
export LD_LIBRARY_PATH=/home/user/Work/1-2025/como/external/phxpaxos/export_como:/home/user/Work/1-2025/como/bin/target/como.linux.x64.rls
将上述3个文件传输到其他主机:
scp ~/Work/1-2025/como/external/phxpaxos/export_como/PhxPaxos.so user@192.168.0.22:~/Work/1-2025/
scp ~/Work/1-2025/como/external/phxpaxos/export_como/phxcomo_test user@192.168.0.22:~/Work/1-2025/
scp ~/Work/1-2025/como/bin/target/como.linux.x64.rls/comort.so user@192.168.0.22:~/Work/1-2025/
在其他主机设置对应动态链接库的搜索路径(假设事先将上述文件放在phxpaxos_bin目录下):
export LD_LIBRARY_PATH=/home/user/Work/1-2025/phxpaxos_bin
3 运行测试
3.1 方法
程序参数格式如下:
./phxcomo_test ip1:port1 ip1:port1,ip2:port2,ip3:port3 <y/n>
注意:其中参数ip1:port1
是当前主机的IP地址和端口;参数ip1:port1,ip2:port2,ip3:port3
是包括本机在内的所有主机的IP和端口,以逗号分隔;<y\n>
表示是否为发送节点,y表示发送,n表示只接收而不发送。先运行接收节点,后运行发送节点。
先在另外2台主机上运行phxpaxos_test(作为接收节点),程序将阻塞等待接收。之后在本机运行phxpaxos_test(作为发送节点)。端口号可以任意选取,不冲突即可,如1111。示例指令如下:
# PC2
./phxcomo_test 192.168.0.22:1111 192.168.0.22:1111,192.168.0.10:1111,192.168.0.12:1111 n
# PC3
./phxcomo_test 192.168.0.10:1111 192.168.0.10:1111,192.168.0.12:1111,192.168.0.22:1111 n
# PC1
./phxcomo_test 192.168.0.12:1111 192.168.0.12:1111,192.168.0.10:1111,192.168.0.22:1111 y
3.2 结果
发送节点将发送许多条PhxPropose,并给出对应的状态同步所需时间use_time1
,以及从发起同步请求到信号量被设置的时间use_time2
。