Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
badrishc committed Oct 6, 2018
2 parents aa365f9 + 917f763 commit be967f8
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 59 deletions.
88 changes: 44 additions & 44 deletions README.md
@@ -1,44 +1,44 @@
# Introduction

Managing large application state easily and with high performance is one of the hardest problems
in the cloud today. FASTER is a concurrent key-value store + cache that is designed for point
lookups and heavy updates. FASTER supports data larger than memory, by leveraging fast external
storage. It also supports consistent recovery using a new checkpointing technique that lets
applications trade-off performance for commit latency.

What differentiates FASTER from a technical perspective are (1) its latch-free cache-optimized index;
(2) its unique “hybrid record log” design that combines a traditional persistent append-only log with
in-place updates, to shape the memory working set and retain performance; (3) its architecture as a
component that can be embedded in multi-threaded cloud apps; and (4) its asynchronous recovery model
based on group commit.

For standard benchmarks where the working set fits in main memory, we found FASTER to achieve
significantly higher throughput than current systems, and match or exceed the performance of pure
in-memory data structures while offering more functionality. See [the SIGMOD paper](https://www.microsoft.com/en-us/research/uploads/prod/2018/03/faster-sigmod18.pdf) for more details. We also have a detailed
analysis of C# FASTER performance in a wiki page
[here](https://github.com/Microsoft/FASTER/wiki/Performance-of-FASTER-in-C%23). The performance of the
C# and C++ versions of FASTER are very similar.

# Getting Started

Go to [our website](http://aka.ms/FASTER) for more details and papers.

# Build and Test

For C#, see [here](https://github.com/Microsoft/FASTER/tree/master/cs).

For C++, see [here](https://github.com/Microsoft/FASTER/tree/master/cc).

# Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide
a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions
provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
# Introduction

Managing large application state easily and with high performance is one of the hardest problems
in the cloud today. FASTER is a concurrent key-value store + cache that is designed for point
lookups and heavy updates. FASTER supports data larger than memory, by leveraging fast external
storage. It also supports consistent recovery using a new checkpointing technique that lets
applications trade-off performance for commit latency.

The following features of FASTER differentiate it from a technical perspective:
1. Latch-free cache-optimized index.
2. Unique “hybrid record log” design that combines a traditional persistent append-only log with in-place updates, to shape the memory working set and retain performance.
3. Architecture as a component that can be embedded in multi-threaded cloud apps.
4. Asynchronous recovery model based on group commit.

For standard benchmarks where the working set fits in main memory, we found FASTER to achieve
significantly higher throughput than current systems, and match or exceed the performance of pure
in-memory data structures while offering more functionality. See [the SIGMOD paper](https://www.microsoft.com/en-us/research/uploads/prod/2018/03/faster-sigmod18.pdf) for more details. We also have a detailed
analysis of C# FASTER performance in a wiki page
[here](https://github.com/Microsoft/FASTER/wiki/Performance-of-FASTER-in-C%23). The performance of the
C# and C++ versions of FASTER are very similar.

# Getting Started

Visit [our website](http://aka.ms/FASTER) for more details and papers.

# Build and Test

For C#, click [here](https://github.com/Microsoft/FASTER/tree/master/cs).

For C++, click [here](https://github.com/Microsoft/FASTER/tree/master/cc).

# Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide
a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions
provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
44 changes: 29 additions & 15 deletions cc/README.md
@@ -1,41 +1,49 @@
Building C++ FASTER
===================

The C++ version of FASTER uses CMake for builds. To build C++ FASTER, create
one or more build directories and use CMake to set up build scripts for your
target OS. Once CMake has generated the build scripts, it will try to update
them, as needed, during ordinary build.

Building on Windows
-------------------

Create new directory "build" off the root directory (FASTER\cc). From the new
"build" directory, execute:

cmake .. -G "<MSVC compiler> Win64"
```sh
cmake .. -G "<MSVC compiler> Win64"
```

To see a list of supported MSVC compiler versions, just run "cmake -G". As of
this writing, we're using Visual Studio 2017, so you would execute:

cmake .. -G "Visual Studio 15 2017 Win64"
```sh
cmake .. -G "Visual Studio 15 2017 Win64"
```

That will create build scripts inside your new "build" directory, including
a "FASTER.sln" file that you can use inside Visual Studio. CMake will add several
build profiles to FASTER.sln, including Debug/x64 and Release/x64.

Building on Linux
-----------------

The Linux build requires several packages (both libraries and header files);
see "CMakeFiles.txt" in the root directory (FASTER/cc) for the list of libraries
being linked to, on Linux.

As of this writing, the required libraries are:
- stdc++fs : for <experimental/filesytem>, used for cross-platform directory
creation.
- uuid : support for GUIDs.
- tbb : Intel's Thread Building Blocks library, used for concurrent_queue.
- gcc
- aio : Kernel Async I/O, used by QueueFile / QueueIoHandler.
- stdc++
- pthread : thread library.

- stdc++fs : for <experimental/filesytem>, used for cross-platform directory
creation.
- uuid : support for GUIDs.
- tbb : Intel's Thread Building Blocks library, used for concurrent_queue.
- gcc
- aio : Kernel Async I/O, used by QueueFile / QueueIoHandler.
- stdc++
- pthread : thread library.

Also, CMake on Linux, for the gcc compiler, generates build scripts for either
Debug or Release build, but not both; so you'll have to run CMake twice, in two
Expand All @@ -44,25 +52,31 @@ different directories, to get both Debug and Release build scripts.
Create new directories "build/Debug" and "build/Release" off the root directory
(FASTER/cc). From "build/Debug", run:

cmake -DCMAKE_BUILD_TYPE=Debug ../..
```sh
cmake -DCMAKE_BUILD_TYPE=Debug ../..
```

--and from "build/Release", run:

cmake -DCMAKE_BUILD_TYPE=Release ../..
```sh
cmake -DCMAKE_BUILD_TYPE=Release ../..
```

Then you can build Debug or Release binaries by running "make" inside the
relevant build directory.

Other options
-------------

You can try other generators (compilers) supported by CMake. The main CMake
build script is the CMakeLists.txt located in the root directory (FASTER/cc).

Examples
========
There are some unit tests in FASTER/cc/test.

Sum-store, located in FASTER/cc/playground/sum_store-dir, is a good example of
There are some unit tests in [FASTER/cc/test](https://github.com/Microsoft/FASTER/tree/master/cc/test).

Sum-store, located in [FASTER/cc/playground/sum_store-dir](https://github.com/Microsoft/FASTER/tree/master/cc/playground/sum_store-dir), is a good example of
checkpointing and recovery.

There's a basic YCSB test driver in FASTER/cc/benchmark-dir.
There's a basic YCSB test driver in [FASTER/cc/benchmark-dir](https://github.com/Microsoft/FASTER/tree/master/cc/benchmark-dir).

0 comments on commit be967f8

Please sign in to comment.