TICS is a framework that allows for C programs to be executed on intermittent power, harvested from the environment. TICS consists of multiple components that together make sure that the program that is being executed continues where it left off after a power failure. Additionally, TICS does this in a way that leads to checkpoint times that can be bounded to a reasonable upper limit, making reasoning about checkpoint placement dynamically possible (although this is not explored in the current version).
TICS is intended to be used with the MSP430FR5969 microcontroller, but can be adapted to work with any MSP-based microcontroller that consists of non-volatile main memory.
The main components of TICS are:
- TICS runtime for memory logging and checkpoint management
- TICS compiler backend (GCC and LLVM) for stack segmentation management
- TICS source instrumentation for variable instrumentation
├── llvm-tics (modified LLVM compiler)
├── msp430-gcc-tics (modified GCC compiler)
├── tics (TICS runtime)
│ ├── arch
│ │ └── msp430x
│ │ ├── lib
│ │ └── llvm-workaround
│ ├── ext (external libraries)
│ ├── include
│ ├── source-instrumentation
│ │ └── memory-log-instrumentation
│ ├── src
│ └── test
│ └── functional (benchmarks)
└── user-study (user study questions and results)
├── user-study-analysis
├── user-study-questions
└── user-study-results
TICS was tested on Ubuntu 18.04
Required packages:
$ apt-get install make gcc g++ libc-dev flex bison texinfo ncurses-dev zlib1g-dev bash curl
Build commands:
$ cd msp430-gcc-tics
$ ./build.sh
Required packages:
$ apt-get install make gcc cmake python zlib1g-dev
Build commands:
$ cd llvm-tics
$ ./build.sh
$ ./setup.sh
From Texas Instruments website download and extract the MSP430 GCC support files.
The source instrumentation tool (memlog
) is located in tics/source-instrumentation/memory-log-instrumentation.
This tool is used to instrument global variable and pointer writes.
Build commands:
$ cd tics/source-instrumentation/memory-log-instrumentation
$ mkdir build
$ cd build
$ cmake ../
$ make
Optionally tests can be run using runtest.sh
.
Path setup
Modify the CMake target configuration file tics/arch/msp430x/msp430-toolchain-ws.cmake such that the correct paths are configured for GCC, LLVM, libraries and the support files. This can be done by changing all the paths starting with /home/user
.
Build commands:
$ cd tics
$ ./configure
$ cd build
$ make
The benchmarks are located in tics/test/functional/checkpoint.
Building the C code will also generate .elf
files for the benchmarks.
Transformation of the C code to the instrumented version that includes memory logging is done using the source instrumentation tool describe above (memlog
).
The benchmarks where uploaded using Code Composer Studio (CCS).
Benchmark timings where started after the system initialization (init()
) and where run until the end of the benchmarks (before result validation and the summary of the run).
The time was measured using hardware breakpoints and the build in cycle counter.
The system was benchmarked against
- InK
- Alpaca
- MayFly
- Chinchilla
The performance numbers for InK, Alpaca and MayFly where extracted from the InK paper. The performance numbers for Chinchilla where obtained by running the benchmarks using the Chinchilla library and compiler on our setup and using the same cycle counter technique as described above.
To cite the paper where TICS is being introduced please use the following LaTeX bibitem.
@inproceedings{kortbeek_asplos2020,
author = "Vito {Kortbeek} and Kasim Sinan {Yildirim} and Abu {Bakar} and Jacob {Sorber}
and Josiah {Hester} and Przemys{\l}}aw {Pawe{\l}czak}",
title = "Time-sensitive Intermittent Computing Meets Legacy Software",
year = "2020",
booktitle = "Proc. ASPLOS",
address = "Lausanne, Switzerland",
month = mar # " 16--20,",
publisher = "ACM"
}
Copyright (C) 2019 TU Delft Embedded and Networked Systems Group/Sustainable Systems Laboratory.
MIT Licence. See License file for details.