[RFC 0/9] Popcorn Linux Distributed Thread Execution
From: Javier Malave
Date: Wed Apr 29 2020 - 15:33:40 EST
This patch set adds the Popcorn Distributed Thread Execution support
to the kernel. It is based off of Linux 5.2 commit 72a20ce. We are
looking for feedback on design and implementation from the community.
Background
==========
Popcorn Linux is a collaborative work by the Software and Systems Research
Group at Virginia Tech. It is based on the original thesis by David
Katz. Principal contributors since include, Sang-Hoon Kim, Maria Sadini
Ajith Saya, Vicnent Legout, Antonio Barbalace and Binoy Ravindran.
Popcorn Linux is a Linux kernel-based software stack that enables
applications to execute, with a shared code base, on distributed hosts.
Popcorn allows applications to start execution on a particular host and
migrate, at run-time, to a remote host. Multi-threaded applications may
migrate any particular thread to any remote host.
Unlike userspace checkpoint-restart solutions (e.g., CRIU), Popcorn
enables seamless and dynamic migration across hosts during execution
(no user interaction), and ensures coherent virtual memory across hosts
for concurrent thread execution.
Popcorn Linux implements a software-based distributed shared memory
by extending Linux's virtual memory subsystem and it enables processes
on different machines to observe a common and coherent virtual address
space. Coherency of virtual memory pages of different hosts is ensured
using a reader-replicate/writer-invalidate, page-level consistency protocol.
The version of Popcorn Linux presented in this RFC supports only x86
configurations. The stack in this RFC includes a modified kernel and a
userspace run-time library.
There is a more advanced version of Popcorn Linux that allows applications
to concurrently execute across ISA-different cores (.e.g. X86, ARM). This
feature-rich version adds a customized LLVM-compiler toolchain to the stack.
Nevertheless, this RFC focuses on a simpler single-architecture form of
Popcorn that does not require compiler modifications.
Both the compiler toolchain and the heterogeneous implementation of
Popcorn Linux may be found at these github locations. It should be noted
the heterogeneous version is under active development and is likely less
stable than the one provided in this patch.
Heterogeneous Popcorn Linux
https://github.com/ssrg-vt/popcorn-kernel
LLVM Compiler
https://github.com/ssrg-vt/popcorn-compiler
More information on the Popcorn Linux research team and their current
work may be found here:
http://popcornlinux.org/
Popcorn Library
===============
The Popcorn kernel library is a suite of light tests that showcase
the use of Popcorn's core system calls. These tests allow for a
basic migration of processes and threads between 2 or more nodes.
The test suite is being expanded and may be found in at
https://github.com/ssrg-vt/popcorn-kernel-lib. The branch
matching this RFC kernel code base is called "upstream".
Reverting L1TF protections
==========================
This initial iteration of code currently reverts L1TF side channel
protections on x86 systems. Future iterations of code will comply
with the L1TF patches and current pagetable walking algorithms.
Security Disclaimer
===================
Popcorn Linux assumes that it is operating across equally-trusted host
systems. This patch-set is intended to initiate discussions and should
not be built and loaded onto public (internet-connected) machines.
Popcorn Linux, as-is, runs a kernel-based daemon that listens for
messages passed to it via a TCP socket. This IP-based message layer
is intended for Popcorn testing and development purposes only, given
obvious latency and security issues stemming from passing pages and
kernel structures over TCP.
Andrew Hughes (9):
Core Popcorn Changes Popcorn Linux
Add x86 specifc files for Popcorn
Temporarily revert L1TF mitigation for Popcorn
Popcorn system call additions
Popcorn Utility
Process Server for Popcorn Distributed Thread Execution
Virtual Memory Address Server for Distributed Thread Execution
Page Server for Distributed Thread Execution
Add Popcorn Message Layer and socket support
arch/x86/Kconfig | 3 +
arch/x86/entry/syscalls/syscall_64.tbl | 3 +
arch/x86/include/asm/pgtable-2level.h | 17 -
arch/x86/include/asm/pgtable-3level.h | 2 -
arch/x86/include/asm/pgtable.h | 52 +-
arch/x86/include/asm/pgtable_64.h | 2 -
arch/x86/kernel/Makefile | 1 +
arch/x86/kernel/process_server.c | 250 +++
arch/x86/mm/fault.c | 18 +
arch/x86/mm/mmap.c | 21 -
drivers/msg_layer/Kconfig | 28 +
drivers/msg_layer/Makefile | 2 +
drivers/msg_layer/common.h | 63 +
drivers/msg_layer/socket.c | 710 +++++++++
fs/proc/base.c | 9 +
fs/read_write.c | 15 +-
include/linux/mm_types.h | 12 +
include/linux/sched.h | 27 +-
include/linux/syscalls.h | 9 +
include/popcorn/bundle.h | 38 +
include/popcorn/debug.h | 38 +
include/popcorn/page_server.h | 34 +
include/popcorn/pcn_kmsg.h | 205 +++
include/popcorn/process_server.h | 18 +
include/popcorn/regset.h | 96 ++
include/popcorn/stat.h | 16 +
include/popcorn/types.h | 20 +
include/popcorn/vma_server.h | 33 +
include/uapi/asm-generic/mman-common.h | 4 +
include/uapi/asm-generic/unistd.h | 11 +-
kernel/Kconfig.popcorn | 54 +
kernel/Makefile | 1 +
kernel/exit.c | 9 +
kernel/fork.c | 51 +-
kernel/futex.c | 32 +
kernel/popcorn/Makefile | 7 +
kernel/popcorn/bundle.c | 115 ++
kernel/popcorn/fh_action.c | 207 +++
kernel/popcorn/fh_action.h | 34 +
kernel/popcorn/init.c | 58 +
kernel/popcorn/page_server.c | 2019 ++++++++++++++++++++++++
kernel/popcorn/page_server.h | 16 +
kernel/popcorn/pcn_kmsg.c | 231 +++
kernel/popcorn/pgtable.h | 31 +
kernel/popcorn/process_server.c | 1037 ++++++++++++
kernel/popcorn/process_server.h | 21 +
kernel/popcorn/stat.c | 165 ++
kernel/popcorn/trace_events.h | 76 +
kernel/popcorn/types.h | 358 +++++
kernel/popcorn/util.c | 121 ++
kernel/popcorn/util.h | 14 +
kernel/popcorn/vma_server.c | 818 ++++++++++
kernel/popcorn/vma_server.h | 24 +
kernel/popcorn/wait_station.c | 84 +
kernel/popcorn/wait_station.h | 27 +
kernel/sched/core.c | 106 +-
kernel/sys_ni.c | 3 +
mm/gup.c | 18 +
mm/internal.h | 4 +
mm/madvise.c | 51 +
mm/memory.c | 236 ++-
mm/mmap.c | 53 +
mm/mprotect.c | 70 +-
mm/mremap.c | 20 +
64 files changed, 7763 insertions(+), 165 deletions(-)
create mode 100644 arch/x86/kernel/process_server.c
create mode 100644 drivers/msg_layer/Kconfig
create mode 100644 drivers/msg_layer/Makefile
create mode 100644 drivers/msg_layer/common.h
create mode 100644 drivers/msg_layer/socket.c
create mode 100644 include/popcorn/bundle.h
create mode 100644 include/popcorn/debug.h
create mode 100644 include/popcorn/page_server.h
create mode 100644 include/popcorn/pcn_kmsg.h
create mode 100644 include/popcorn/process_server.h
create mode 100644 include/popcorn/regset.h
create mode 100644 include/popcorn/stat.h
create mode 100644 include/popcorn/types.h
create mode 100644 include/popcorn/vma_server.h
create mode 100644 kernel/Kconfig.popcorn
create mode 100644 kernel/popcorn/Makefile
create mode 100644 kernel/popcorn/bundle.c
create mode 100644 kernel/popcorn/fh_action.c
create mode 100644 kernel/popcorn/fh_action.h
create mode 100644 kernel/popcorn/init.c
create mode 100644 kernel/popcorn/page_server.c
create mode 100644 kernel/popcorn/page_server.h
create mode 100644 kernel/popcorn/pcn_kmsg.c
create mode 100644 kernel/popcorn/pgtable.h
create mode 100644 kernel/popcorn/process_server.c
create mode 100644 kernel/popcorn/process_server.h
create mode 100644 kernel/popcorn/stat.c
create mode 100644 kernel/popcorn/trace_events.h
create mode 100644 kernel/popcorn/types.h
create mode 100644 kernel/popcorn/util.c
create mode 100644 kernel/popcorn/util.h
create mode 100644 kernel/popcorn/vma_server.c
create mode 100644 kernel/popcorn/vma_server.h
create mode 100644 kernel/popcorn/wait_station.c
create mode 100644 kernel/popcorn/wait_station.h
--
2.17.1