Benching: Multiple Cellframe nodes on a Raspberry Pi

Category: About

Title image, read title

This article was originally written by Mika Hyttinen. Medium link: https://medium.com/@mika.hyttinen

I think I mentioned in Twitter that the next article is going to be about Cellframe GlobalDB (as in global databases) but I got distracted in Cellframe Telegram channel by this:

User 1: Can I run a Cell node on a Raspberry Pi? If yes, one or more nodes with one Raspberry possible?
User 2: Yes, one node per device
Me: Or with Docker, multiple. But Raspberry Pi doesn't have enough power to do that though.
Me: Or maybe it has? Have to test it soon™

So here we are. Again!

Raspberry Pi surely has enough power to run at least one Cellframe node, it’s been already tested by several users.

But can you run multiple nodes on it?

Let’s put these little ARM64 computers to a test, shall we?

. . .

About Cellframe

Cellframe is an ambitious third generation blockchain project and few people (me included) have already started to talk about it as the next Polkadot or Kusama.

This project is, however, more service oriented and has some advantages compared to Polkadot/Kusama (eg. post-quantum cryptography, 2-level sharding, P2P cross-chain operations).

Cellframe is written in C (which will make it FAST and portable), and it has an SDK for C and Python at the moment. More supported languages are coming in the future.

I really recommend visiting their website (https://cellframe.net) and read their whitepaper!

. . .

Testing process

In this test I will be using two different Raspberry Pi computers (Raspberry Pi 3B+ (1GB RAM) and Raspberry Pi 4 (4GB RAM). Cellframe node version is 5.1–67-arm64 (which was available at https://pub.cellframe.net).

After that, the steps for getting the results are:

  • Install Debian on SD card
  • Install Cellframe node on a Raspberry Pi
  • Install Docker
  • Pull latest Debian stable image from Dockerhub
  • Create a container from that image and install Cellframe node to it
  • Create a snapshot of that container
  • Launch node containers until Raspberry Pi is begging for mercy

Node configuration:

  • Backbone enabled as full node
  • Mileena enabled as full node
  • Subzero enabled as full node

I think that I need to be clear that obviously just running the node on a container doesn’t mean anything. Node stays idle and is just connected to the networks but it doesn’t really perform any operations which would simulate real world usage.

As I really don’t know how to simulate node actions, I’m just testing the nodes with running one node in the host system and then as many as possible in a Docker containers.

And hey, don’t take this test too seriously anyway 😉.

Let’s go!

. . .

Subject 1: Raspberry Pi 3B+

So, this is the model which I have had for few years now. It’s the same computer on which I have written and tested my previous Cellframe node installation tutorials (1,2).

It’s hardware specs are not so impressive:

  • Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz
  • 1GB LPDDR2 SDRAM

Yet, Cellframe node runs on it flawlessly.

After installing Docker and Cellframe node, I decided to wait around 15 minutes to get more reliable information about the CPU and RAM usage:

Available RAM: 340 Megabytes

Let’s look also at the CPU usage with top :

CPU usage is low. Super low.

It’s rather impressive to see such a low CPU usage! (I think the node was still syncing at this point!)

Now we can already say that available RAM in this particular model will be too low for running more than 2 nodes.

But anyway, let’s fire up another Cellframe node in a container and see what will happen. I created a special image which has the same version of Cellframe node installed and configured exactly the same like it’s configured on my Debian installation.

After around 30 minutes passed, I decided to check out the RAM usage:

Available RAM: 86 Megabytes

Went exactly as I thought it would go. 1GB of RAM is not enough. But you should keep in mind that 1GB of RAM in today's standard is super low. Even the lowest end of mobile phones have more than 1GB of RAM!

Let’s also check out the CPU usage:

Two cellframe-node processes running. CPU usage is really low!

All I can say that I’m really impressed! CPU usage is ~1% while nodes are idling.

I think the conclusion for this particular model is that you can run 2 nodes in it. It would definitely hog up all your RAM but technically, it’s possible.

. . .

Subject 2: Raspberry Pi 4 4GB

This particular model was rather hard to purchase as all the retailers (which I would normally use) didn’t have this model in stock at all.

But as I wanted to really do this test, I ended up renting a dedicated Raspberry Pi online for 1 month 😆.

Now this model has much more impressive hardware specs than the Raspberry Pi 3B+:

  • Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz
  • 1GB, 2GB, 4GB or 8GB LPDDR4–3200 SDRAM (depending on model)

Technically the CPU on this model should be about 2 times faster than on a Raspberry Pi 3B+.

Let’s use the same methods like I used on my own Raspberry Pi 3B+. I started by installing Docker and Cellframe node to this host and looked at the RAM and CPU utilization:

Available RAM: 3.1 Gigabytes

And top command gives us:

As expected, low CPU usage.

Now, let’s launch one container which have Cellframe node already installed. Same configuration like on 3B+:

Available RAM: 2.9 Gigabytes

And output of top gives us the following results:

Two cellframe-node processes running. Low CPU usage.

You know what. Let’s get serious with this, launching 2 new containers:

3 nodes running in containers + 1 on the host.

At this point, I tried to launch 4th container but the system got too unresponsive and I didn’t manage to get top utility running anymore.

Pretty impressed actually 😆.

Conclusion

Alright, I think it’s safe to say that the 3B+ model should be only used for running 1 node on “bare metal”. However, I think with some tweaking it’s actually possible to run 2 nodes on that particular model.

On the Raspberry Pi 4 however, I think it could be actually possible to run 3 or 4 nodes (for VPN sharing or something like that). It has technically twice the amount of CPU power than 3B+ and lots of more RAM. And it’s 1Gbit network adapter gives you more network speed obviously.

This test actually made me think about the power and portability of Cellframe node. I have a 4 year old mobile phone (Oneplus 6) and it has probably 4 times more CPU power with it’s Qualcomm Snapdragon 835 than Raspberry Pi 3B+.

When we’re getting the nodes running on mobile phones, it will be a game changer in the blockchain world.

The power of Cellframe node, in the palm of my hand.

Interested building on Cellframe?

Join their development Telegram channel: https://t.me/cellframe_dev_en

You can also contact me if you’re interested building something on the future of blockchains or if you have some questions:

Telegram: @CELLgainz

Twitter: @CELLgainz