Skip to content

staheri/ectgo

Repository files navigation

ECT GO

This is a prototype tool for automatic collection of execution concurrent traces (ECT). Details of the idea and design will be published in the 6th Workshop on Formal Integrated Development Environment (F-IDE 2021)

Build and Run

Before running this artifact to generate the results in the table 2 of the paper, you have to install ECT patch. Follow Install for downloading dependencies and building a new runtime. Then execute below program

cd [path-to-ectgo]
go build

Then:

./ectgo -path=benchmark/overhead/primesieve/main

ECT Enhancement

Please refer to patch for the details of enhancement to the original tracer package. Please refer to goatlib for the implemented API of automatic trace collection and storage.

Email me staheri@cs.utah.edu if you want to try this out. I would be more than happy to assist.

Acknowledgement

The idea of enhancing the tracer package is adopted from the MIT licensed work by Ivan Daniluk.

Overview

Overview

Install ECT patch

Currently work for Go V1.15.6 (macOS) but extensible to other versions and systems (replace below download link with the ones compatible with your system) Steps:

  • Patch the runtime
  • Dependencies
  • Build
  • Features

Patching Runtime

goTrace_runtime_v1_15_6.patch has all the needed injections to the Go runtime in order to capture additional events like channel operations, waiting groups and mutexes.

Assuming your Go installation is in /usr/local/go, download Go 1.15.6 and unpack it into /usr/local/go-new.

 sudo -i
 mkdir -p /usr/local/go-new
 curl https://dl.google.com/go/go1.15.6.darwin-amd64.tar.gz | tar -xz -C /usr/local/go-new

Then, copy patch and apply it:

sudo patch -p1 -d /usr/local/go-new/go < goTrace_runtime_v1_15_6.patch

Now you can build the new runtime

 sudo -i
 cd /usr/local/go-new/go/src
 export GOROOT_BOOTSTRAP=/usr/local/go #or choose yours
 ./make.bash

Finally, export PATH or use ln -s command to make this Go version actual in your system:

 export PATH=/usr/local/go-new/go/bin:$PATH

or (assuming your PATH set to use /usr/local/go)

	sudo mv /usr/local/go /usr/local/go-orig
	sudo ln -nsf /usr/local/go-new/go /usr/local/go

NOTE: return your previous installation by sudo ln -nsf /usr/local/go-orig /usr/local/go

Dependencies

GoTrace uses different libraries and drivers. [TODO] Use Go Modules/Vendors to automatically detect dependencies and versions

Libraries

Database

About

Automated Dynamic Tracing for Go

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages