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/cppbuilder
docker run -it --rm -v $PWD:/builder -u $(id -u) cppbuilder
docker run -v /tmp/sortbackend:/ssdmount --privileged -it --rm -v $PWD:/builder cppbuilder
rm -rf build
cmake -B build -G Ninja
ninja -C build
ninja -C build test
rm -rf build # Needed after the CC/CXX export or after changing the CMAKE_BUILD_TYPE
export CC=/usr/bin/gcc-11
export CXX=/usr/bin/g++-11
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
ninja -C build
source /startsgxenv.sh
cd applications/sorting
make
source /startsgxenv.sh
cd applications/sorting
make SGX_MODE=SIM
cd applications/sorting
./algo_runner.sh
osort - 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).