Automated Flamegraph Generation with nanolab-lxd: Nano Integration Testing Simplified
nanolab-lxd provides an integration test environment for the Nano network. With this tool, you can efficiently spin up local Nano networks and execute tests inside an LXD container. While a similar setup is possible with nanolab, LXD offers the added advantage of isolation, ensuring that your host environment remains untouched.
In this guide, we'll walk you through setting up nanoLab-lxd, executing test cases, and retrieving the results.
0. Getting Started with nanolab-lxd
To begin, clone the nanolab-lxd
repository and switch to the wip/host-to-lxd
branch:
git clone https://github.com/gr0vity-dev/nanolab-lxd.git
cd nanolab-lxd
git checkout wip/host-to-lxd
1. Setting up the LXD environment
For Ubuntu users:
sudo apt-get install lxd lxd-client
lxd init # Accept the default options when prompted
2. Initialize your nanolab-lxd container
To launch nanoLab inside an LXD container, execute:
./nanolab-lxd.sh
You can then verify that the container is operational using:
lxc ls nanolab22
The expected output resembles:
+-----------+---------+--------------+------------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-----------+---------+--------------+------------+-----------+-----------+
| nanolab22 | RUNNING | 17.. (br..) | fd42: (eth)| CONTAINER | 0 |
| | | 17.. (dock..)| | | |
| | | 10.. (eth0) | | | |
+-----------+---------+--------------+------------+-----------+-----------+
3. Exploring and Running Test Cases
To see all available test cases, use:
./run-lab-lxd list
This will display a series of available test cases:
https://api.github.com/repos/gr0vity-dev/nanolab-configs/...
bintree
flamegraph_bintree
flamegraph_bintree_fast
flamegraph_change_independent
To execute a specific test case:
./run-lab-lxd run -t flamegraph_bintree -i "nanocurrency/nano:V26.0DB13"
Here, the -i
flag specifies the Docker image for the Nano nodes.
4. Utilizing Local Docker Builds within the LXD Container
To test custom Nano Docker images compiled from the NanoCurrency source:
git clone https://github.com/nanocurrency/nano-node.git --recursive
cd nano-node
docker build -f docker/node/Dockerfile -t your_nano_image .
Then, transition to the nanolab-lxd
directory and transfer the Docker image to LXD:
./mv_docker_to_lxd.sh your_nano_image
To run your test:
./run-lab-lxd run -t flamegraph_bintree -i "your_nano_image"
5. Extracting Results
To retrieve flamegraphs from the LXD to your host:
lxc exec nanolab22 -- ls | grep flame | xargs -I{} lxc file pull nanolab22/root/{} .
Note: Flamegraph test cases typically record for around 20 seconds. The Docker container might also retrieve additional dependencies, causing minor delays:
apt-get update && apt-get install -y linux-tools-generic binutils
6. Customizing Test Cases
You can tailor test cases to your requirements by adjusting the config.json
file inside the LXD container. Execute:
lxc exec nanolab22 /bin/bash
nanolab list --local # This displays all the downloaded test case configurations.
This command showcases the available configurations:
testcases/flamegraph_change_independent_config.json
testcases/flamegraph_bintree_fast_config.json
testcases/flamegraph_bintree_config.json
testcases/bintree_config.json
Adjust these configurations using your favorite text editor.