Files
graphene/Examples/pytorch/python3.manifest.template
Michał Kowalczyk e587869e13 [LibOS+Pal] manifest: Remove support for loader.exec and sgx.sigfile
Supporting these options complicates the design of Graphene and loading
logic significantly, providing little useful functionality:
- loader.exec:
    - the main user of it were our tests
    - worked only for the first process spawned inside Graphene, as it
      was a unidirectional manifest->binary mapping, so the child
      process didn't know about the corresponding manifest.
- sgx.sigfile:
    - probably all existing usages of it were completely redundant
    - was resolved relatively to CWD instead of the executable location,
      which made it mostly useless

From now on, the correct location of the files is:
- either place the manifest and sigfile next to the binary, with a
  matching name, or
- create a symlink to the binary in the folder where manifests are
  stored and launch it through this symlink
2020-10-23 00:06:46 +02:00

178 lines
7.8 KiB
Plaintext

# PyTorch manifest template
#
# This manifest was tested on Ubuntu 16.04 and 18.04.
loader.argv0_override = python3
# Graphene environment, including the path to the library OS and the debug
# option (inline/none)
loader.preload = file:$(GRAPHENEDIR)/Runtime/libsysdb.so
loader.debug_type = $(GRAPHENEDEBUG)
# Read application arguments directly from the command line. Don't use this on production!
loader.insecure__use_cmdline_argv = 1
# Propagate environment variables from the host. Don't use this on production!
loader.insecure__use_host_env = 1
# Overwrite some environment variables
loader.env.LD_LIBRARY_PATH = /lib:/usr/lib:$(ARCH_LIBDIR):/usr/$(ARCH_LIBDIR)
# Default glibc files, mounted from the Runtime directory in GRAPHENEDIR
fs.mount.lib.type = chroot
fs.mount.lib.path = /lib
fs.mount.lib.uri = file:$(GRAPHENEDIR)/Runtime/
# More libraries required by PyTorch
fs.mount.lib2.type = chroot
fs.mount.lib2.path = $(ARCH_LIBDIR)
fs.mount.lib2.uri = file:$(ARCH_LIBDIR)
fs.mount.usr.type = chroot
fs.mount.usr.path = /usr
fs.mount.usr.uri = file:/usr
# Host-level directory to NSS files required by Glibc + NSS libs
fs.mount.etc.type = chroot
fs.mount.etc.path = /etc
fs.mount.etc.uri = file:/etc
# Workload needs to create temporary files
fs.mount.tmp.type = chroot
fs.mount.tmp.path = /tmp
fs.mount.tmp.uri = file:/tmp
# PyTorch loads its pre-trained models from here
# Uncomment lines below if you want to use torchvision.model.alexnet(pretrained=True)
# fs.mount.torch.type = chroot
# fs.mount.torch.path = $(HOME)/.cache/torch
# fs.mount.torch.uri = file:$(HOME)/.cache/torch
# When run as `pip install --user ...`, pip installs Python packages here
fs.mount.pip.type = chroot
fs.mount.pip.path = $(HOME)/.local/lib
fs.mount.pip.uri = file:$(HOME)/.local/lib
# SGX general options
# Set the virtual memory size of the SGX enclave. For SGX v1, the enclave
# size must be specified during signing. If the workload needs more virtual memory
# than the enclave size, Graphene will not be able to allocate it.
#
# In particular, libtorch*.so is more than 1G, thus 4G is the minimum to make this run.
sgx.enclave_size = 4G
# Set the maximum number of enclave threads. For SGX v1, the number of enclave
# TCSes must be specified during signing, so the application cannot use more
# threads than the number of TCSes. Note that Graphene also creates an internal
# thread for handling inter-process communication (IPC), and potentially another
# thread for asynchronous events. Therefore, the actual number of threads that
# the application can create is (sgx.thread_num - 2).
#
# We (somewhat arbitrarily) specify 128 threads for this workload.
sgx.thread_num = 128
# SGX trusted libraries
sgx.trusted_files.ld = file:$(GRAPHENEDIR)/Runtime/ld-linux-x86-64.so.2
sgx.trusted_files.libc = file:$(GRAPHENEDIR)/Runtime/libc.so.6
sgx.trusted_files.libdl = file:$(GRAPHENEDIR)/Runtime/libdl.so.2
sgx.trusted_files.libm = file:$(GRAPHENEDIR)/Runtime/libm.so.6
sgx.trusted_files.libpthread = file:$(GRAPHENEDIR)/Runtime/libpthread.so.0
sgx.trusted_files.libresolv = file:$(GRAPHENEDIR)/Runtime/libresolv.so.2
sgx.trusted_files.librt = file:$(GRAPHENEDIR)/Runtime/librt.so.1
sgx.trusted_files.libutil = file:$(GRAPHENEDIR)/Runtime/libutil.so.1
sgx.trusted_files.libnssdns = file:$(GRAPHENEDIR)/Runtime/libnss_dns.so.2
sgx.trusted_files.libstdc = file:/usr/$(ARCH_LIBDIR)/libstdc++.so.6
sgx.trusted_files.libgccs = file:$(ARCH_LIBDIR)/libgcc_s.so.1
sgx.trusted_files.libaptpkg = file:/usr/$(ARCH_LIBDIR)/libapt-pkg.so.5.0
sgx.trusted_files.liblz4 = file:/usr/$(ARCH_LIBDIR)/liblz4.so.1
sgx.trusted_files.libsystemd = file:$(ARCH_LIBDIR)/libsystemd.so.0
sgx.trusted_files.libselinux = file:$(ARCH_LIBDIR)/libselinux.so.1
sgx.trusted_files.libgcrypt = file:$(ARCH_LIBDIR)/libgcrypt.so.20
sgx.trusted_files.libpcre = file:$(ARCH_LIBDIR)/libpcre.so.3
sgx.trusted_files.libgpgerror = file:$(ARCH_LIBDIR)/libgpg-error.so.0
sgx.trusted_files.libexpat = file:$(ARCH_LIBDIR)/libexpat.so.1
sgx.trusted_files.libz = file:$(ARCH_LIBDIR)/libz.so.1
sgx.trusted_files.libz2 = file:$(ARCH_LIBDIR)/libbz2.so.1.0
sgx.trusted_files.liblzma = file:$(ARCH_LIBDIR)/liblzma.so.5
sgx.trusted_files.libmpdec = file:/usr/$(ARCH_LIBDIR)/libmpdec.so.2
# Ubuntu16.04 sgx.trusted_files.libcrypto = file:$(ARCH_LIBDIR)/libcrypto.so.1.0.0
# Ubuntu16.04 sgx.trusted_files.libssl = file:$(ARCH_LIBDIR)/libssl.so.1.0.0
# Ubuntu18.04 sgx.trusted_files.libcrypto = file:/usr/$(ARCH_LIBDIR)/libcrypto.so.1.1
# Ubuntu18.04 sgx.trusted_files.libssl = file:/usr/$(ARCH_LIBDIR)/libssl.so.1.1
# Name Service Switch (NSS) libraries (Glibc dependencies)
sgx.trusted_files.libnssfiles = file:$(ARCH_LIBDIR)/libnss_files.so.2
sgx.trusted_files.libnsscompat = file:$(ARCH_LIBDIR)/libnss_compat.so.2
sgx.trusted_files.libnssnis = file:$(ARCH_LIBDIR)/libnss_nis.so.2
sgx.trusted_files.libnsl = file:$(ARCH_LIBDIR)/libnsl.so.1
sgx.trusted_files.libnssmyhostname = file:$(ARCH_LIBDIR)/libnss_myhostname.so.2
sgx.trusted_files.libnssmdns = file:$(ARCH_LIBDIR)/libnss_mdns4_minimal.so.2
# The script to run
sgx.trusted_files.script = file:pytorchexample.py
# required by Python package ctypes (lib/python3.6/lib-dynload/ctypes.cpython-36m-x86_64-linux-gnu.so)
# Ubuntu18.04 sgx.trusted_files.libffi = file:/usr/$(ARCH_LIBDIR)/libffi.so.6
# File containing the classes, i.e., things the classifier has been trained to distinguish between
sgx.trusted_files.classes = file:classes.txt
# Input image
sgx.trusted_files.image = file:input.jpg
# File containing the pre-trained model
# Uncomment lines below if you want to use torchvision.model.alexnet(pretrained=True)
# sgx.trusted_files.torch = file:$(HOME)/.cache/torch/checkpoints/alexnet-owt-4df8aa71.pth
# Pre-trained model saved as a file
sgx.trusted_files.model = file:alexnet-pretrained.pt
# Scratch space
sgx.allowed_files.tmp = file:/tmp
# The workload needs to fork/execve; this allows it to do so
sgx.trusted_children.fork = file:python3_child.sig
# Various locations where Python dependencies are found
sgx.allowed_files.python3 = file:/usr/lib/python3
sgx.allowed_files.pythonhome = file:$(HOME)/.local/lib
# Ubuntu16.04 sgx.allowed_files.python35 = file:/usr/lib/python3.5
# Ubuntu18.04 sgx.allowed_files.python36 = file:/usr/lib/python3.6
# Ubuntu16.04 sgx.allowed_files.python35local = file:/usr/local/lib/python3.5
# Ubuntu18.04 sgx.allowed_files.python36local = file:/usr/local/lib/python3.6
# APT config files
sgx.allowed_files.aptconfd = file:/etc/apt/apt.conf.d
sgx.allowed_files.aptconf = file:/etc/apt/apt.conf
sgx.allowed_files.apport = file:/etc/default/apport
# Name Service Switch (NSS) files (Glibc reads these files)
sgx.allowed_files.nsswitch = file:/etc/nsswitch.conf
sgx.allowed_files.group = file:/etc/group
sgx.allowed_files.passwd = file:/etc/passwd
# DNS hostname resolution files (Glibc reads these files)
sgx.allowed_files.hostconf = file:/etc/host.conf
sgx.allowed_files.hosts = file:/etc/hosts
sgx.allowed_files.gaiconf = file:/etc/gai.conf
sgx.allowed_files.resolv = file:/etc/resolv.conf
# System's file system table
sgx.allowed_files.fstab = file:/etc/fstab
# Graphene optionally provides patched OpenMP runtime library that runs faster
# inside SGX enclaves (execute `make -C LibOS gcc` to generate it). Uncomment
# the lines below to use the patched library. PyTorch's SGX perf overhead
# decreases on some workloads from 25% to 8% with this patched library. Note
# that we need to preload the library because PyTorch's distribution renames
# libgomp.so to smth like libgomp-7c85b1e2.so.1, so it's not just a matter of
# searching in the Graphene's Runtime path first, but a matter of intercepting
# OpenMP functions.
# loader.env.LD_PRELOAD = /lib/libgomp.so.1
# sgx.trusted_files.libgomp = file:$(GRAPHENEDIR)/Runtime/libgomp.so.1