Git Product home page Git Product logo

sto's Introduction

Build Status

STO: Software Transactional Objects

STO (/stō/, pronounced the same as "stow") is a software transactional memory (STM) library and experimental platform written in C++. STO distinguishes itself from other STM libraries in that it uses data type information derived from the programming language, thus drastically reducing footprint of transactions and false conflicts when compared to an untyped STM system. Please check out our EuroSys '16 paper for more information.

STO was created by Nathaniel Herman as a Harvard undergrad.

Installation

We tested our build on Linux (Ubuntu 16.04 LTS and later) only. Building on other platforms should technically be possible, because we use standard C++/POSIX calls and avoid hacks as much as we can. There is a known issue with Win32 object file format, so building under Windows (Cygwin or the Windows Subsystem for Linux in Windows 10) is not recommended.

Dependencies

  • Modern C++ compiler with C++14 support
    • If you use GNU C Compiler (g++), version 7.2+ is recommended.
  • GNU build system (autoreconf and make in particular)
  • cmake 3.8+ (Optional)
  • jemalloc
  • libnuma
  • ninja build system
  • masstree and third-party libraries (as git submodules)

Please refer to your own system documentation on how to install these dependencies prior to building STO. On Ubuntu 16.04 LTS or later, you can install all dependencies by using:

$ sudo apt update
$ sudo apt install build-essential cmake libjemalloc-dev libnuma-dev ninja-build

If you wish to install g++ version 7 on Ubuntu 16.04 or older systems, you can use the following PPA package:

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt update
$ sudo apt install g++-7

Build

  1. Clone the git repository
$ git clone https://github.com/readablesystems/sto.git
$ cd sto
  1. Initialize submodules
$ git submodule update --init --recursive
  1. Execute configuration scripts
$ ./bootstrap.sh
$ ./configure

The configure script lets you specify the compiler to use when building STO. For example, if g++-7 is not the default compiler in your system, you can enable it for STO by running ./configure CC=gcc-7 CXX=g++-7.

(Note: if you use macOS you should probably run ./configure CXX='clang++ -stdlib=libc++')

  1. Build
$ make -jN # launch N parallel build jobs

This builds all targets, which include all tests and benchmarks. If you don't want all of those, you can build selected targets as well.

Here are some targets you may find useful:

  • make check: Build and run all unit tests. This is the target used by continuous integration.
  • make tpcc_bench: Build the TPC-C benchmark.
  • make ycsb_bench: Build the YCSB-like benchmark.
  • make micro_bench: Build the array-based microbenchmark.
  • make clean: You know what it does.

See Wiki for advanced buid options.

IDE Support & cmake

STO contains cmake configuration files that can be used by IDEs like JetBrains CLion. You can potentially also use cmake to configure and build STO, but it is not recommended.

Full support for cmake will come soon.

Develop New Data Types

You can implement your own data type in STO to extend the transactional data type library. Please see the Wiki on how to implement a STO data type.

You can also take a look at datatype/TBox.hh for a simple example.

Bug Reporting

You can report bugs by opening issues or contacting Yihe Huang.

sto's People

Contributors

huangyihe avatar jinala avatar kohler avatar mzhang94 avatar nathanielherman avatar tslilyai avatar weirdseven avatar wqian94 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.