An implementation of external memory efficient, cpu instruction and memory access trace oblivious sorting algorithms.
Install cmake, ninja and intel sgx sdk, or use the cppbuilder docker image.
docker build -t cppbuilder:latest ./tools/docker/cppbuilderdocker run -it --rm -v $PWD:/builder -u $(id -u) cppbuilderdocker run -v /tmp/sortbackend:/ssdmount --privileged -it --rm -v $PWD:/builder cppbuilderrm -rf build
cmake -B build -G Ninja
ninja -C build
ninja -C build testrm -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 buildsource /startsgxenv.sh
cd applications/sorting
makesource /startsgxenv.sh
cd applications/sorting
make SGX_MODE=SIMcd applications/sorting
./algo_runner.shosort - C++ osort library code tests - C++ tests modules applications - Enclaves example of osort tools - tools used to generate graphs or test sets tools/docker - dockerfiles used for reproducible builds
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)
-
Compile with ENABLE_PROFILING
-
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
-
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).
-
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).