Yuhala / memcached-sgx

Intel SGX SDK compatible port of memcached server for Intel SGX enclaves.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

memcached-sgx

A port of memcached into Intel SGX. Meant for benchmarking configless switchless calls.

How to test memcached-sgx (Ubuntu 18.04)

  • Install SGX SDK on your system
./sgx-install.sh

  • Install the following libraries
sudo apt-get install libseccomp-dev
sudo apt-get install libsasl2-dev

  • Download libevent here
  • If in cmd-line mode:
sudo apt-get install wget
wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
  • Build and install libevent
tar -xvf libevent*
cd libevent*
./autogen.sh
./configure
make
sudo make install

  • Add libevent symbolic link. The below command works only for the above installed libevent version. Modify the command accordingly if you have a different version of libevent installed.
sudo ln -s /usr/local/lib/libevent-2.1.so.7 /usr/lib/libevent-2.1.so.7

  • Clone this repo and move to branch kyoto
git clone https://gitlab.com/Yuhala/memcached-sgx.git
git checkout kyoto
cd sgx

  • Build the memcached-sgx server program:
make 

  • Run the memcached-sgx server.
./memcached-sgx

  • To run memcached-sgx server in Intel switchless mode, do:
./memcached-sgx 0 1

  • NB: this version does not kill the process/threads correctly with ctrl + c. Kill the app with the kill script ./kill.sh or run app in the sgx-gdb debugger and stop normally via ctrl + c. To run app in the sgx debugger, do:
source /opt/intel/sgxsdk/environment 
sgx-gdb ./memcached-sgx

  • Open a terminal and connect to the server
telnet 127.0.0.1 11211

  • Set a kv pair within the telnet session
set test 0 100 5
hello

  • Get kv pair within the telnet session
get test

  • To build normal memcached, cd into the memcached folder and run make. Run the server with ./memcached. Connect to the server via telnet as explained above.

Logging

  • To view function call logs i.e names of enclave routines called in memcached-sgx, comment out #undef LOG_FUNC_IN in Enclave/memcached/my_logger_in.c
  • To view function call logs for out-of-enclave routines called in memcached-sgx, comment out #undef LOG_FUNC in App/memcached/my_logger_out.c

Benchmarking with YCSB workloads

  • Follow these instructions to test memcached with YCSB workloads.

  • Start by installing java and maven on your server if they are absent.

sudo apt update
sudo apt install default-jre
sudo apt install maven

  • Setup YCSB.
cd YCSB
mvn -pl site.ycsb:memcached-binding -am clean package

  • Launch the memcached-server as explained above: either memcached-sgx or default memcached.

  • Load YCSB data (ie kv pairs) into the memcached server. We use workload A in this example.

./bin/ycsb load memcached -s -P workloads/workloada -p "memcached.hosts=127.0.0.1" -threads 4 > outputLoad.txt

  • Run operations (ie get/set/) on the loaded memcached server. This will use 4 client threads; modify the option to change. The output of the run is sent to outputRun.txt
./bin/ycsb run memcached -s -P workloads/workloada -p "memcached.hosts=127.0.0.1" -threads 4 > outputRun.txt

Author

  • Peterson Yuhala

About

Intel SGX SDK compatible port of memcached server for Intel SGX enclaves.


Languages

Language:C++ 42.9%Language:C 31.4%Language:Java 10.6%Language:Makefile 6.8%Language:Roff 3.5%Language:Shell 2.7%Language:M4 1.1%Language:Gnuplot 0.3%Language:Python 0.3%Language:HTML 0.2%Language:Yacc 0.1%Language:Lex 0.1%Language:Batchfile 0.0%Language:Perl 0.0%Language:Lua 0.0%Language:Starlark 0.0%Language:Dockerfile 0.0%Language:GDB 0.0%