Skip to content
/ TICS Public

Time-sensitive Intermittent Computing Meets Legacy Software

Notifications You must be signed in to change notification settings

TUDSSL/TICS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Time-sensitive Intermittent Computing Meets Legacy Software (TICS)

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

Project Layout

├── 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

Usage

TICS was tested on Ubuntu 18.04

Building GCC

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

Building LLVM

Required packages:

$ apt-get install make gcc cmake python zlib1g-dev

Build commands:

$ cd llvm-tics
$ ./build.sh

Configuring toolchains

$ ./setup.sh

Installing MSP430 Support Files

From Texas Instruments website download and extract the MSP430 GCC support files.

Build Source Instrumentation Tool (memlog)

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.

Building C Code

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

Benchmarks

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.

System Comparisons

The system was benchmarked against

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.

Paper

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

Copyright (C) 2019 TU Delft Embedded and Networked Systems Group/Sustainable Systems Laboratory.

MIT Licence. See License file for details.