On this page:
The POWDER Manual
2026-10-07 (583a9ef)

The POWDER Manual🔗

The Powder Team

Powder is a facility for experimenting on the future of wireless networking in a city-scale "living laboratory" environment. It was one of the first two platforms funded by the Platforms for Advanced Wireless Research program at the National Science Foundation (NSF), receiving support from NSF grants CNS-1827940 and CNS-2346555.

Powder is developed, deployed, and operated by the University of Utah, in partnership with the RENEW team at Rice University.

The Powder facility is built on top of Emulab and is run by the Flux Research Group, part of the Kahlert School of Computing at the University of Utah.

    1 Powder Overview

      1.1 What is Powder

      1.2 Powder status

      1.3 Roadmap to using Powder

    2 Getting Started

      2.1 Next Steps

    3 Powder starter profiles

    4 Powder Users

      4.1 Register for an Account

        4.1.1 Join an existing project

        4.1.2 Create a new project

        4.1.3 Setting up SSH access

        4.1.4 Setting up X11

    5 Powder and Repeatable Research

    6 Basic Concepts

      6.1 Profiles

      6.2 Experiments

        6.2.1 Reserving Resources for Experiments

        6.2.2 Extending Experiments

      6.3 Projects

      6.4 Physical Resources

      6.5 Virtual Machines

    7 Resource Reservations

      7.1 What Reservations Guarantee

      7.2 How Reservations May Affect You

      7.3 Making a Reservation

      7.4 Using a Reservation

      7.5 Who Shares Access to Reservations

    8 Creating Profiles

      8.1 Creating a profile from an existing one

        8.1.1 Copying a Profile

        8.1.2 Creating the Profile

        8.1.3 Updating a profile

      8.2 Capturing Disk Images for Profiles

      8.3 Repository-Based Profiles

        8.3.1 Updating Repository-Based Profiles

        8.3.2 Branches and Tags in Repository-Based Profiles

      8.4 Sharing Profiles

      8.5 Versioned Profiles

    9 Spectrum use

      9.1 Radio monitoring

        9.1.1 Conducted RF

        9.1.2 Radiated RF

        9.1.3 Massive MIMO

    10 Using Powder: From simulation, to emulation, to over-the-air

      10.1 Simulated RF Experimentation

      10.2 Conducted RF Environment

      10.3 Using the Indoor Over-The-Air Lab

      10.4 Outdoor Over-The-Air Environment

        10.4.1 Step-by-step walkthrough

        10.4.2 Some Important Notes

      10.5 Next Steps

    11 Using radios on Powder

      11.1 COTS Radios

        11.1.1 COTS O-RU devices

        11.1.2 Management of O-RU devices on Powder

      11.2 Software Defined Radios

        11.2.1 SDRs on POWDER

        11.2.2 SDR Capabilities and Limitations

        11.2.3 SDR Calibration

        11.2.4 Working With Powder Custom RF Front-Ends

        11.2.5 Powder Custom RF Front-End Details

      11.3 Radio Synchronization

    12 Describing a profile with python and geni-lib

      12.1 A single XEN VM node

      12.2 A single physical host

      12.3 Two XenVM nodes with a link between them

      12.4 Two ARM64 servers in a LAN

      12.5 A VM with a custom size

      12.6 Set a specific IP address on each node

      12.7 RF communication

      12.8 Specify an operating system and set install and execute scripts

      12.9 Profiles with user-specified parameters

      12.10 Add storage to a node

      12.11 Debugging geni-lib profile scripts

    13 Storage Mechanisms

      13.1 Overview of Storage Mechanisms

      13.2 Node-Local Storage

        13.2.1 Specifying Storage in a Profile – Local Datasets

        13.2.2 Allocating Storage in a Running Experiment

        13.2.3 Persisting Local Data

      13.3 Image-backed Datasets

      13.4 Remote Datasets

      13.5 NFS Shared Filesystems

      13.6 Write-back Storage for Fixed and Mobile Endpoints

      13.7 High-performance Storage for Streaming Data

        13.7.1 Using CephFS in an Experiment

        13.7.2 Limitations and Guidelines for CephFS Usage.

      13.8 Storage Type Summary (TL;DR)

      13.9 Example Storage Profiles

        13.9.1 Creating a Node-local Dataset

        13.9.2 Creating an Image-backed Dataset from a Node-local Dataset

        13.9.3 Using and Updating an Image-backed Dataset

        13.9.4 Creating a Remote Dataset

        13.9.5 Using a Remote Dataset on a Single Node

        13.9.6 Using a Remote Dataset on Multiple Nodes via a Shared Filesystem

        13.9.7 Using a Remote Dataset on Multiple Nodes via Clones

    14 The Control Network

      14.1 Overview

      14.2 Ensuring your experiment nodes use the correct interfaces

        14.2.1 Common causes of control network misuse

        14.2.2 Empirically verifying interface use

      14.3 What to do if you get a Control Network Violation email

      14.4 Why is it so important to avoid the control network?

      14.5 When can I use the control network?

    15 Advanced Topics

      15.1 Disk Images

      15.2 RSpecs

      15.3 Public IP Access

        15.3.1 Dynamic Public IP Addresses

      15.4 Markdown

      15.5 Introspection

        15.5.1 Client ID

        15.5.2 Control MAC

        15.5.3 Manifest

        15.5.4 Private key

        15.5.5 Profile parameters

      15.6 User-controlled switches and layer-1 topologies

      15.7 Portal API

      15.8 Legacy Portal API

    16 Virtual Machines

      16.1 Xen VMs

        16.1.1 Controlling CPU and Memory

        16.1.2 Controlling Disk Space

        16.1.3 Setting HVM Mode

        16.1.4 Dedicated and Shared VMs

    17 Automating Experiment Configuration

      17.1 Configuration Management: Ansible

      17.2 Ansible in Profiles: geni-lib extensions

      17.3 Bootstrapping Ansible in Experiments

      17.4 Using Ansible in Experiments

        17.4.1 Per-experiment Ansible Facts

        17.4.2 emulab-common Ansible Roles

        17.4.3 Using emulab-common Roles

      17.5 Example: OpenZMS profile

      17.6 Example: Kubernetes profile

      17.7 Example: workflow-manager profile

    18 Hardware and Wireless Environments

      18.1 Conducted attenuator matrix resources

      18.2 Paired Radio workbench resources

      18.3 Indoor OTA lab resources

      18.4 Rooftop site resources

      18.5 Dense-deployment site resources

      18.6 Fixed-endpoint resources

      18.7 Mobile-endpoint resources

      18.8 Near-edge computing resources

      18.9 Cloud computing resources

    19 Powder basic srsLTE Tutorial

      19.1 Objectives

      19.2 Prerequisites

      19.3 Logging In

      19.4 Creating a simple srsLTE experiment

      19.5 Exploring Your Experiment

        19.5.1 Experiment Status

        19.5.2 Profile Instructions

        19.5.3 Topology View

        19.5.4 List View

        19.5.5 Manifest View

        19.5.6 Graphs View

        19.5.7 Actions

        19.5.8 Web-based Shell

      19.6 Using the srsLTE tools

      19.7 Digging deeper

      19.8 Terminating the Experiment

      19.9 Taking Next Steps

    20 Powder OAI Tutorial

      20.1 Objectives

      20.2 Prerequisites

      20.3 Logging In

      20.4 Building Your Own OAI Network

      20.5 Exploring Your Experiment

        20.5.1 Experiment Status

        20.5.2 Profile Instructions

        20.5.3 Topology View

        20.5.4 List View

        20.5.5 Manifest View

        20.5.6 Graphs View

        20.5.7 Actions

        20.5.8 Web-based Shell

      20.6 Starting OAI Services

      20.7 Connecting the UE

      20.8 In-Depth OAI Profile Documentation

      20.9 Terminating the Experiment

      20.10 Taking Next Steps

    21 Powder OpenStack Tutorial

      21.1 Objectives

      21.2 Prerequisites

      21.3 Logging In

      21.4 Building Your Own OpenStack Cloud

      21.5 Exploring Your Experiment

        21.5.1 Experiment Status

        21.5.2 Profile Instructions

        21.5.3 Topology View

        21.5.4 List View

        21.5.5 Manifest View

        21.5.6 Graphs View

        21.5.7 Actions

        21.5.8 Web-based Shell

        21.5.9 Serial Console

      21.6 Bringing up Instances in OpenStack

      21.7 Administering OpenStack

        21.7.1 Log Into The Control Nodes

        21.7.2 Reboot the Compute Node

      21.8 Terminating the Experiment

      21.9 Taking Next Steps

    22 Citing Powder

    23 Getting Help