8000 GitHub - odslib/odsl: A library providing external memory efficient, cpu instruction and memory access trace oblivious algorithms.
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
/ odsl Public

A library providing external memory efficient, cpu instruction and memory access trace oblivious algorithms.

Notifications You must be signed in to change notification settings

odslib/odsl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Oblivious Data Structure Library

A library providing external memory efficient, cpu instruction and memory access trace oblivious algorithms.

Prerequisites:

Install cmake, ninja and intel sgx sdk, or use the cppbuilder docker image.

How to build the builder docker image:

cd ./tools/docker/cppbuilder
docker build -t cppbuilder:latest .

How to enter the docker environment to build under the builder:

docker run -it --rm -v $PWD:/builder -u $(id -u) cppbuilder

An example for SGX

docker run --device=/dev/sgx_enclave -v /tmp/bucketfile:/ssdmount -it --rm -v $PWD:/builder cppbuilder

How to enter the docker environment to build under the builder and run in SGX:

docker run --device=/dev/sgx_enclave -it --rm -v $PWD:/builder cppbuilder

How to run the unit tests

rm -rf build
cmake -B build -G Ninja
ninja -C build
ninja -C build test
ninja -C build cppcheck

How to do a release compilation:

rm -rf build # Needed after the CC/CXX export or after changing the CMAKE_BUILD_TYPE
export CC=/usr/bin/clang
export CXX=/usr/bin/clang++
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
ninja -C build

Build the signal example enclave

source /startsgxenv.sh
cd applications/signal
make

Performance graph on latest build

Map

map perf graph

map perf graph

External Memory Sorting

sorting perf graph time sorting perf graph page swaps sorting perf graph instructions

Intrinsics performance graphs

latest perf graph

Folder structure high level details

ods - C++ odsl library code tests - C++ tests modules applications - Enclaves using odsl tools - tools used to generate graphs or test sets tools/docker - dockerfiles used for reproducible builds

Ods folder structure:

common - common c++ utilies, cpu abstractions, cryptography abstractions and tracing code external_memory - external memory abstraction and sorting algorithms external_memory/server - server abstraction for different external memory scenarios (sgx, file system, ram) oram - oram implementations otree - oblivious binary search tree recoram - recursive oram implementations

Links to view flamegraph files:

https://www.speedscope.app/

chrome://tracing/

It's also possible to view in qt creator as described here: https://doc.qt.io/qtcreator/creator-ctf-visualizer.html

At last: https://ui.perfetto.dev/ seems ok also

Profiling code

  1. Compile with ENABLE_PROFILING

  2. For the functions that need profiling, add PROFILE_F(); at as the first line of the function code. Additionally add the function name to trace_events.hxx

  3. Use PROFILER_SET(false); to disable profiling, use PROFILER_RESET() to write the profile to the log file (see profiling related functions in profiling_test to confirm).

  4. Use any of the tools in "Links to view flamegraph files" above to look at the profiling, adjust uncached IO time based on the results of the benchmarks enclave (benchmark_sgx).

About

A library providing external memory efficient, cpu instruction and memory access trace oblivious algorithms.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0