Version: 2.1.4

模拟时间故障

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

使用命令行模式创建实验

本节介绍如何在命令行模式中创建时间故障实验。

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

  1. chaosd attack clock -h

结果如下所示:

  1. $ chaosd attack clock -h
  2. clock skew
  3. Usage:
  4. chaosd attack clock attack [flags]
  5. Flags:
  6. -c, --clock-ids-slice string The identifier of the particular clock on which to act.More clock description in linux kernel can be found in man page of clock_getres, clock_gettime, clock_settime.Muti clock ids should be split with "," (default "CLOCK_REALTIME")
  7. -h, --help help for clock
  8. -p, --pid int Pid of target program.
  9. -t, --time-offset string Specifies the length of time offset.
  10. Global Flags:
  11. --log-level string the log level of chaosd, the value can be 'debug', 'info', 'warn' and 'error'
  12. --uid string the experiment ID

快速使用

准备测试程序:

  1. cat > time.c << EOF
  2. #include <stdio.h>
  3. #include <time.h>
  4. #include <unistd.h>
  5. #include <sys/types.h>
  6. int main() {
  7. printf("PID : %ld\n", (long)getpid());
  8. struct timespec ts;
  9. for(;;) {
  10. clock_gettime(CLOCK_REALTIME, &ts);
  11. printf("Time : %lld.%.9ld\n", (long long)ts.tv_sec, ts.tv_nsec);
  12. sleep(10);
  13. }
  14. }
  15. EOF
  16. gcc -o get_time ./time.c

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

  1. chaosd attack clock -p $PID -t 11s

模拟时间故障的相关配置

配置项类型说明默认值必要项例子
timeOffsetstring指定时间的偏移量。None-5m
clockIds[]string指定时间偏移作用的时钟,详见 clock_gettime documentation[“CLOCK_REALTIME”][“CLOCK_REALTIME”, “CLOCK_MONOTONIC”]
pidstring进程的标识符。None1

使用服务模式创建实验

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

参数说明
pid进程的标识符。int 类型
time-offset指定时间的偏移量。string 类型,例如:”-5m”
clock-ids-slice指定时间偏移作用的时钟,详见 clock_gettime documentationstring 数组类型,默认为 [“CLOCK_REALTIME”]

使用服务模式模拟时间故障示例

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

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