跳到主要内容
版本:2.8.7

模拟时间故障

本文主要介绍如何使用 Chaosd 模拟时间偏移的场景。本功能支持通过命令行模式或服务模式创建实验。

在创建时间故障实验前,可运行以下命令行查看时间故障的相关配置项:

chaosd attack clock -h

要使用服务模式创建实验,你需要以服务模式运行 Chaosd,然后向 Chaosd 服务的路径 /api/attack/clock 发送 POST HTTP 请求:

chaosd server --port 31767
curl -X POST 172.16.112.130:31767/api/attack/clock -H "Content-Type:application/json" -d '{fault-configuration}'

在上述命令中,你需要按照故障类型在 fault-configuration 中进行配置。有关对应的配置参数和示例,请参考下文中各个类型故障的相关参数说明。

备注

在运行实验时,请注意保存实验的 UID 信息。当要结束 UID 对应的实验时,需要向 Chaosd 服务的路径 /api/attack/{uid} 发送 DELETE HTTP 请求。

模拟时间故障相关参数说明​

配置项配置缩写服务模式字段说明类型值
time-offset—time-offset指定时间的偏移量。string 类型例如:-5m,必须配置
clock-ids-slice—clock-ids-slice指定时间偏移作用的时钟,多个时钟 ID 以逗号分隔,详见 clock_gettime documentation。string 类型默认值为 "CLOCK_REALTIME"
pid—pid进程的标识符。int 类型必须配置

使用命令行模式模拟时间故障场景​

快速使用​

准备测试程序:

cat > time.c << EOF
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <sys/types.h>

int main() {
printf("PID : %ld\n", (long)getpid());
struct timespec ts;
for(;;) {
clock_gettime(CLOCK_REALTIME, &ts);
printf("Time : %lld.%.9ld\n", (long long)ts.tv_sec, ts.tv_nsec);
sleep(10);
}
}
EOF

gcc -o get_time ./time.c

接下来执行 get_time 并且使用 chaosd 尝试创建时间故障如下:

chaosd attack clock -p $PID -t 11s

使用服务模式模拟时间故障场景​

运行快速使用中的测试程序,使用以下命令创建时间故障实验:

curl -X POST 172.16.112.130:31767/api/attack/clock -H "Content-Type:application/json" -d '{"pid":123, "time-offset":"11s"}'