Skip to content

ahorn/benchmarks

Repository files navigation

Benchmarks

This repository contains benchmarks for formal co-validation of hardware and low-level software interfaces. The source code for these benchmarks was extracted from QEMU and Linux.

RTC Benchmark

The RTC benchmark illustrates the hardware/software interface for a real-time clock. The focus is on Register B and the ten time/calendar and alarm bytes:

RTC Registers

Courtesy of MC146818 data sheet

To run the experiments on the HW/SW model, execute the following command from within the folder sw-hw/linux/rtc_x86:

$ ./run_expt.sh [Num of Runs] [Experiment Name] [Property No. (1 to 11)]

You can also run the experiment from propery i to j once by exectuing the following command within the same folder:

$ ./run_expt_all.sh [Experiment Name] [i] [j] 

Use the same command in the folder qemu-hw/rtc to run the experiments on the standalone HW model.

To get the total runtime and runtime spent on the decision procedure produced by the script run_expt.sh, run the command:

$ ./get_result.sh [(Relative) Path to the Data Folder]

Note: get_result.sh does not work with the script run_expt_all.sh

I2C Benchmark

The I2C benchmark illustrates hardware/software interface for a temperature sensor on a serial bus. Thus, this benchmark goes beyond fixed-sized register updates as illustrated by the following waveform:

TMP105 I2C Write Word Protocol

Courtesy of TMP105 data sheet

To run the experiments on the HW/SW model, execute the following command from within the folder sw-hw/linux/tmp105_x86:

$ ./run_expt.sh [Num of Runs] [Experiment Name] [Property No. (1 to 17)]

You can also run the experiment from propery i to j once by exectuing the following command within the same folder:

$ ./run_expt_all.sh [Experiment Name] [i] [j]

Use the same command in folder qemu-hw/tmp105 to run experiments on the standalone HW model (property no. 1 to 8, and 10 to 20).

To get the total runtime and runtime spent on the decision procedure produced by the script run_expt.sh, run the command:

$ ./get_result.sh [(Relative) Path to the Data Folder]

Note: get_result.sh does not work with the script run_expt_all.sh

ETHOC Benchmark

The ETHOC benchmark exemplifies a known concurrency bug in a NAPI-enabled driver for an Ethernet MAC.

The concurrent interactions of software and hardware are best clarified in the graphs showing the interleaving of software and hardware model threads. These are available in PNG and SVG format (the corresponding partial orders used by CBMC are also available in graphical form, as SVG or PDF).

Summary tables and full log files of these experiments are available at ethoc-hw for the hardware model, and ethoc-sw-hw for the combined hardware+software implementation. These tables and results were generated using our benchmarking framework. The corresponding commands are documented in the scripts ethoc-hw-experiments and ethoc-sw-hw-experiments, which were used to compute and generate all these results.

Contribute Benchmarks

We welcome contributions of new benchmarks. See also our Wiki for useful resources.

About

A hub for sharing ideas on planning, executing and evaluating benchmarks.

Resources

Stars

Watchers

Forks

Packages

No packages published