Simulate Time Faults
This document describes how to use Chaosd to simulate a time offset scenario. You can create experiments either in command-line mode or service mode.
Create experiments using command-line mode
This section describes how to create time fault experiments using commands.
Before creating an experiment, you can run the following command to check the options of time faults:
chaosd attack clock -h
The result is as follows:
$ chaosd attack clock -h
clock skew
Usage:
  chaosd attack clock attack [flags]
Flags:
  -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")
  -h, --help                     help for clock
  -p, --pid int                  Pid of target program.
  -t, --time-offset string       Specifies the length of time offset.
Global Flags:
      --log-level string   the log level of chaosd, the value can be 'debug', 'info', 'warn' and 'error'
      --uid string         the experiment ID
Quick Example
Prepare test program:
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
Then execute get_time and try to attack it. The following is an example:
chaosd attack clock -p $PID -t 11s
Configurations of simulating time faults
| Parameter | Type | Note | Default value | Required | Example | 
|---|---|---|---|---|---|
| timeOffset | string | Specifies the length of time offset. | None | Yes | -5m | 
| clockIds | []string | Specifies the ID of clock that will be offset. See the clock_gettime documentation for details. | ["CLOCK_REALTIME"] | No | ["CLOCK_REALTIME", "CLOCK_MONOTONIC"] | 
| pid | string | The identifier of the process. | None | Yes | 1 | 
Create experiments using service mode
(ongoing update)