{"id":44210506,"url":"https://github.com/atlarge-research/continuum","last_synced_at":"2026-02-10T00:12:28.732Z","repository":{"id":43084582,"uuid":"451551422","full_name":"atlarge-research/continuum","owner":"atlarge-research","description":" Automate Cloud-Edge Infrastructure Deployments and Benchmarks with Continuum.","archived":false,"fork":false,"pushed_at":"2026-01-12T17:00:24.000Z","size":26656,"stargazers_count":22,"open_issues_count":2,"forks_count":15,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-01-12T22:25:10.539Z","etag":null,"topics":["docker","kubernetes","openfaas","qemu-kvm","serverless","virtualization"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/atlarge-research.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-01-24T16:52:49.000Z","updated_at":"2026-01-09T16:33:56.000Z","dependencies_parsed_at":"2025-09-09T11:34:20.065Z","dependency_job_id":"cf04d827-b7bb-4b1b-a1b0-74f574aa91ea","html_url":"https://github.com/atlarge-research/continuum","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/atlarge-research/continuum","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atlarge-research%2Fcontinuum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atlarge-research%2Fcontinuum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atlarge-research%2Fcontinuum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atlarge-research%2Fcontinuum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/atlarge-research","download_url":"https://codeload.github.com/atlarge-research/continuum/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atlarge-research%2Fcontinuum/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29287113,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-09T21:57:15.303Z","status":"ssl_error","status_checked_at":"2026-02-09T21:57:11.537Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","kubernetes","openfaas","qemu-kvm","serverless","virtualization"],"created_at":"2026-02-10T00:12:25.081Z","updated_at":"2026-02-10T00:12:28.726Z","avatar_url":"https://github.com/atlarge-research.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Continuum\nContinuum is a deployment and benchmarking framework for the edge-cloud compute continuum.\nContinuum offers the following features:\n\n1. Continuum automates the creation of a cluster of cloud, edge, and endpoint virtual machines to emulate a compute continuum environment.\n2. Users can freely configure the specifications of the virtual machines and the network connecting them through a single configuration file.\n3. Continuum automatically installs operating services, resource managers, and applications inside the emulated cluster based on the user's preference. Supported operating services include MQTT, resource managers include Kubernetes, KubeEdge, and OpenFaaS, and applications include machine learning.\n4. Continuum can automatically benchmark the resource managers and applications installed in the emulated cluster, and report metrics and logs back to the user.\n5. Continuum is easily extendable, allowing users to add support for more infrastructure providers, operating services, resource managers, and applications.\n\n## Features\nContinuum supports the following software:\n\n1. **Infrastructure**: Virtual machine provisioning through QEMU/KVM on local bare-metal devices.\n2. **Operating Services**: Continuum can set up an MQTT broker on edge device for lightweight communication to endpoint users.\n3. **Resource Manager**: Continuum can deploy containerized applications via Docker and Containerd using the resource managers Kubernetes and KubeEdge. OpenFaaS is supported for deploying serverless functions.\n4. **Applications and application back-ends**: Continuum supports any application that can be deployed on VMs, containers, or serverless functions. As an example, a machine learning application is included.\n\n## How it works\nContinuum has the following architecture:\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"./docs/images/architecture.png\" width = \"50%\" align=\"center\"\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\nThe execution flow consists of three phases, each having a configuration and execution step. These phases are **infrastructure deployment**, **software installation**, and **benchmarking**. Each phase is optional, i.e., the framework can be used for infrastructure deployment without any pre-installed software if so desired.\n\n1. **Infrastructure configuration:** Libvirt configuration files for QEMU/KVM are created based on the user's preferences.\n2. **Infrastructure execution:** The configuration files are executed, creating QEMU/KVM virtual machines connected through network bridges.\n3. **Software configuration:** Ansible is configured for software installation based on the configured infrastructure.\n4. **Software execution:** Ansible playbooks are executed, installing operating services and resource management software on each machine. This step includes setting up resource management clusters such as Kubernetes.\n5. **Benchmark configuration** The benchmark is configured and prepared based on the user's preferences.\n6. **Benchmark execution:** Applications (encapsulated in containers) are executed using resource managers running on the emulated infrastructure (Kubernetes, KubeEdge, etc.). Meanwhile, application- and system-level metrics are captured, processed, and presented to the user.\n\n## Who Uses Continuum\nThe Continuum framework has been used for scientific research, leading to (i) publications, (ii) Bachelor and Master of Science projects and theses, (iii) has been the topic of multiple demos, and (iv) has been awarded artifact reproducibility badges. More information on the Continuum project and its contributors can be found [here](https://atlarge-research.com/continuum/).\n\n### Citation\nWhen using Continuum for research, please cite the work as follows:\n```\n@inproceedings{2023-jansen-continuum,\n    author    = {Matthijs Jansen and\n                 Linus Wagner and\n                 Animesh Trivedi and\n                 Alexandru Iosup},\n    title     = {Continuum: Automate Infrastructure Deployment and Benchmarking in the Compute Continuum},\n    booktitle = {Proceedings of the First FastContinuum Workshop, in conjuncrtion with ICPE, Coimbra, Portugal, April, 2023},\n    year      = {2023},\n    url       = {https://atlarge-research.com/pdfs/2023-fastcontinuum-continuum.pdf},\n}\n```\nThe presentation slides of this work can be found [here](https://atlarge-research.com/talks/2023-continuum-framework-fastcontinuum.html)\n\nOther work on the Continuum framework includes:\n```\n@inproceedings{2023-jansen-refarch,\n    author    = {Matthijs Jansen and\n                 Auday Al-Duilamy and\n                 Allesandro Vittorio Papadopoulos and\n                 Animesh Trivedi and\n                 Alexandru Iosup},\n    title     = {The {SPEC-RG} Reference Architecture for the Compute Continuum},\n    booktitle = {The 23rd IEEE/ACM International Symposium on Cluster, Cloud and Internet Computing, CCGRID 2023, Bangalore, India, May 1-4, 2023},\n    year      = {2023},\n    url       = {https://atlarge-research.com/pdfs/2023-ccgrid-refarch.pdf},\n}\n```\nThe presentation slides of this work can be found [here](https://atlarge-research.com/talks/pres-2022-compsys-mjansen.html) and [here](https://atlarge-research.com/talks/poster-2022-ictopen-mjansen.html).\n\n### Student Work\nThe Continuum framework has been used by many students from the Vrije University Amsterdam:\n\n**Bachelor Thesis**\n* Daniel Berzak: Embedded Domain Specific Language: A Streamlined Approach for Framework Abstraction\n\n**Master Thesis**\n* Edgardo Reinoso Campos: Serverless Computing at the Edge in Precise Agriculture (ongoing)\n* Antonios Sklavos: Exploring the Performance-Isolation Trade-off for Isolation Mechanisms (ongoing)\n* Tim van Kemenade: A Comparison of Scheduling Algorithms in the Compute Continuum (ongoing)\n\n**Student Research Projects**\n* Felix Goosens: Edge Continuum Framework on an ARM Raspberry Pi Cluster\n* David Freina et al: Serverless Computing in the Edge Continuum\n* Andreas Frangos et al: Performance Variability and Resource Analysis in Serverless Applications\n\n### Demo\nThe Continuum framework has been part of four classes with a demo, organized by the VU Amsterdam Bachelor and Master program Computer Science, as well as the Dutch Research School for high-quality research and education in computer systems and Imaging (ASCI).\n\nfor over 100 students and researchers in total. Specifically, it has been demoed in the following occasions:\n* Distributed Systems (2021) - Part of the VU Amsterdam MSc program Computer Science\n* ASCI A24 (2022) - A course in the Dutch Research School for high-quality research and education in computer systems and Imaging (ASCI)\n* Distributed Systems (2022) - Part of the VU Amsterdam MSc program Computer Science\n* ASCI A22 (2023) - A course in the Dutch Research School for high-quality research and education in computer systems and Imaging (ASCI)\n* Computer Networks (2023) - Part of the VU Amsterdam BSc program Computer Science\n\n\u003cp\u003e\n  \u003cimg src=\"./docs/images/Open_Research.png\" width=\"100\" align=\"right\" /\u003e\n  \u003cimg src=\"./docs/images/Research_Objects.png\" width=\"100\" align=\"right\" /\u003e\n\u003c/p\u003e\n\n### Artifact\nThe Continuum framework has been awarded the IEEE reproducibility badges for Open Research Objects (ORO) and Reusable/Research Objects Reviewed (ROR).\nThese badges have been awarded by independent reviewers as part of the CCGRID 2023 Artifact Track.\nFor more information on these badges, see [here](https://ccgrid2023.iisc.ac.in/call-for-artifacts/).\nThe code and instructions for this artifact are available on GitHub [here](https://github.com/atlarge-research/continuum/tree/CCGRID2023-Artifact-Evaluation). \n\n## Demo\nContinuum supports multiple virtual machine infrastructure deployment platforms, most notably QEMU for execution on local hardware or Google Cloud for execution in the cloud.\nIn this demo, we present how to use Continuum using QEMU. \nIf you want to use Google Cloud instead, which requires much fewer installation steps, please see the extensive README [here](https://github.com/atlarge-research/continuum/tree/CCGRID2023-Artifact-Evaluation).\n\nThis demo requires a single machine and a Linux operating system that supports QEMU/KVM and Libvirt.\nWe recommend running the demo on an Ubuntu 20.04 machine but have also tested on Ubuntu 22.04. \nIf you don't have access to such a machine, see the Appendix for tips on how to install this in a VM.\nWe recommend installing the framework bare-metal for more reliable performance metrics.\n\nThe demo contains two parts:\n\n1. Install the framework\n2. Use the framework\n\nIn part one, we install the Continuum framework and use the framework in part 2.\nThe framework does support execution on multiple physical machines through a network bridge.\nWe leave this multi-machine execution out of this tutorial; consult the documentation for more information.\nFor more questions, open a GitHub Issue or mail m.s.jansen@vu.nl.\n\nSoftware versions tested:\n\n- QEMU 6.1.0\n- Libvirt 6.0.0\n- Docker 20.10.12\n- Python 3.8.10\n- Ansible 2.13.2\n\n### Part 1: Install the framework\nWe start by installing all requirements for the Continuum framework.\nWe assume the operating system is Ubuntu 20.04, either natively or via a VM.\nUbuntu 22.04 should also work, but commands and packages might slightly differ.\n\n```bash\n# 1. Install the VM requirements\nsudo apt update\nsudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils\n\n# 1.1. Give your user sufficient permissions\n# After these steps, refresh you session to make the group addition take effect.\nsudo adduser $USER libvirt\nsudo adduser $USER kvm\n\n# 1.2. Check if the installation was succesful\n# If not, you may need to use `sudo systemctl enable --now libvirtd`\nqemu-system-x86_64 --version\nsudo systemctl status libvirtd\n\n# 1.3. Force libvirt to use QEMU.\necho 'export LIBVIRT_DEFAULT_URI=\"qemu:///system\"' \u003e\u003e ~/.bashrc\nsource ~/.bashrc\n\n# 2. Install Docker (see Docker website for alternative instructions)\nsudo apt-get install ca-certificates curl gnupg lsb-release\n\nsudo mkdir -p /etc/apt/keyrings\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg\n\necho \\\n    \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \\\n    https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" | \\\n    sudo tee /etc/apt/sources.list.d/docker.list \u003e /dev/null\n\nsudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin\n\n# After these steps, refresh you session to make the group addition take effect.\nsudo groupadd docker\nsudo usermod -aG docker $USER\nsudo systemctl enable docker.service\nsudo systemctl enable containerd.service\n# Now refresh you SSH session by logging in / out\n\n# Continuum creates a local docker registry using http\n# Http support needs to be enabled\nhttp_ip=$(hostname -I | awk '{print $1;}')\necho '{ \"insecure-registries\":[\"${http_ip}:5000\"] }' | sudo tee -a /etc/docker/daemon.json\nsudo systemctl restart docker\n\n# 3. Install the Continuum framework\nmkdir ~/.ssh\ntouch ~/.ssh/known_hosts\n\ngit clone https://github.com/atlarge-research/continuum.git\ncd continuum\n\n# 4. Install Python and some packages, including Ansible\nsudo add-apt-repository --yes ppa:ansible/ansible\nsudo apt install python3 python3-pip ansible\npip3 install -r requirements.txt\n\n# 5. Edit the Ansible configuration as follows on Ubuntu 20.04:\n# Under `[defaults]`, add `callback_enabled = profile_tasks`\n# Under `[defaults]`, add `command_warnings = False`\n# For Ubuntu 22.04, add just the following: callbacks_enabled=profile_tasks\nsudo vim /etc/ansible/ansible.cfg\n\n# 6. Setup up bridged networking on the machine\n# First, delete any virtual bridges\nvirsh net-destroy default\nvirsh net-undefine default\n\n# Check that no bridges exist anymore\nvirsh net-list --all\n\n# Now create the new bridge itself\n# Make a backup of the old network settings, then edit the new one\n# Use `ip -a` to find the name of your network interface, for example, ens3\n# and to find its IP, for example, 10.0.2.15\n# Find the gateway address using `ip r` (the first IP on the first line)\n# An example command could look like this:\nsudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak\n\nsudo su\ncat \u003e /etc/netplan/00-installer-config.yaml \u003c\u003cEOF\nnetwork:\n    ethernets:\n    ens3:\n        dhcp4: false\n        dhcp6: false\n    bridges:\n    br0:\n        interfaces: [ens3]\n        addresses: [10.0.2.15/16]\n        gateway4: 10.0.2.2\n        nameservers:\n        addresses: [1.1.1.1, 8.8.8.8]\n        search: []\n        parameters:\n        stp: true\n        dhcp4: false\n        dhcp6: false\n    version: 2\nEOF\nexit\n\n# Apply the changes\nsudo netplan generate\nsudo netplan apply\n\n# Check if the bridge br0 was successfully created\n# And check that the network interface, for example, ens3, doesn't have an IP listed anymore, but br0 does instead.\nbrctl show\nip a\n\n# Enable IP forwarding\nsudo su\ncat \u003e\u003e /etc/sysctl.conf \u003c\u003cEOF\nnet.bridge.bridge-nf-call-ip6tables = 0\nnet.bridge.bridge-nf-call-iptables = 0\nnet.bridge.bridge-nf-call-arptables = 0\nEOF\nexit\n\n# Then execute this command\nsudo sysctl -p /etc/sysctl.conf\n```\n\n### Part 2: Use the framework\nContinuum comes with many pre-made configuration files that can be used to deploy infrastructures and benchmark with Continuum. You can find these files in `/configuration`.\nFor example:\n1. Go the the continuum framework: `cd continuum`\n2. Check how the framework can be used: `python3 continuum.py --help`\n3. We use a configuration that deploys 2 virtual machines, installs Kubernetes on them, and starts a third machine that emulates an IoT device that sends data periodically to the Kubernetes cluster for processing. The framework starts a processing application on the cluster, which processes the incoming data and sends the result back to the IoT device: `python3 continuum.py configuration/bench_cloud.cfg`.\n4. If the program executes correctly, the results will be printed at the end, as well as the ssh commands needed to log into the created VMs.\n\nPlease explore what the Continuum framework can do, see `configuration/template.cfg` for a list of all configuration parameters. These include deploying infrastructure on Google Cloud, installing Prometheus and Grafana on VMs, or running serverless benchmarks. All components can be easily extended - open a GitHub Issue or send us a mail at m.s.jansen@vu.nl if you have any questions.\n\n### Appendix\nThe Continuum framework is supposed to be run from an Ubuntu-like operating system.\nThe framework has been extensively tested on Ubuntu 20.04.\nIn this part, we show how to create an Ubuntu 20.04 VM that you can use to run Continuum in.\nThis example is supposed to be executed on a Linux machine.\n```bash\n# 1. Install the VM software QEMU, KVM, and Libvirt\nsudo apt update \nsudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils\n\n# Give your user sufficient permissions - this may require you to refresh your session\nsudo adduser $USER libvirt\nsudo adduser $USER kvm\n\n# Exit your shell and open a new one for the permissions to take effect\n\n# Check if the installation was succesful\n# If not, you may need to use `sudo systemctl enable --now libvirtd`\nqemu-system-x86_64 --version\nsudo systemctl status libvirtd\n\n# Download the Ubuntu 20.04 server image\nwget https://releases.ubuntu.com/20.04.3/ubuntu-20.04.3-live-server-amd64.iso\n\n# Create a QCOW disk as storage for your VM (at least 20 GB of disk space is advised)\nqemu-img create -f qcow2 ubuntu.img 20G\n\n#############\n# Boot the VM\n#############\n# 1. On a system with a GUI\n# - This will open a new window for the VM\n# - Use at least 4 GB of RAM and 4 CPUs\nsudo qemu-system-x86_64 -hda ubuntu.img --enable-kvm -m 8G -smp 4 -boot d -cdrom ubuntu-20.04.3-live-server-amd64.iso -cpu host -net nic -net user\n#############\n# 2. On a system without a GUI\nsudo qemu-system-x86_64 -hda ubuntu.img --enable-kvm -m 8G -smp 4 -boot d -cdrom ubuntu-20.04.3-live-server-amd64.iso -cpu host -net nic -net user,hostfwd=tcp::7777-:22\n# 2.1. Access the VM from an OS with GUI: You can now SSH in to machine\nssh -p 7777 ubuntu@127.0.0.1\n# 2.2 On the VM, execute remmina so you can see the GUI of the VM on your machine\nsudo apt install remmina\nremmina\n# 2.3 This should open the Remmina screen for you. Click on the + icon to create a new connection. Under protocol, select “VNC”, and then under server, add the VNC address displayed in the terminal where you started the VM (for example, 127.0.0.1:5900). Click save and connect to connect to the VM.\n#############\n\n# Finish the initialization of the VM\n# Don't forget to install the open-SSH client during the installation\n# Then, shut the VM down and re-launch\nsudo qemu-system-x86_64 -hda ubuntu.img --enable-kvm -m 8G -smp 4 -cpu host -net nic -net user,hostfwd=tcp::7777-:22 --name ubuntu\n\n# On a system with a GUI: The VM should open automatically\n# On a system without a GUI: \nssh [username]@localhost -p 7777\n```\n\n# Acknowledgment\nThis work is funded by NWO TOP OffSense (OCENW.KLEIN.209).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatlarge-research%2Fcontinuum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fatlarge-research%2Fcontinuum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatlarge-research%2Fcontinuum/lists"}