Project Greenroom
Grid Hardware
Published: 2020-07-11

I’ve been working on adding support for the ARM architecture to Homefarm for a bit now. This week I decided to try to push through, and get that work done and tested.

Obviously you can’t test software designed to manage a farm of computers with just one machine, so I had to build myself a tiny ARM farm.

Building the cube

Here’s most of the raw materials:

4 Raspberry Pis

Four Raspberry Pi 4 Model Bs (4GB version), 4 heatsink sets, and 3 16GB SD cards (I already had one spare). Oh, and one more thing…

120mm fan

A 120mm fan with its own wall-wart power supply and a hi/med/lo switch. This is the key to keeping the Pis cool while they crunch, as well as the actual structural keystone for the rest of my plan :)

Foamcore wall with Pi attached

I cut 120mm x 120mm sections of foam-core board and lashed one Pi to each with zipties. The Pi is more-or-less centered on the board horizontally, and is positioned to sit just under the fan vertically. This gives enough clearance for the Pi’s power cables at the bottom.

Ziptie detail

The zipties go in from the back, so that their… zippy block part… will act as a spacer to hold the Pi away from the board, letting air flow over both sides.

Side view of Pi zipped to board

A side view, showing the positioning of the Pi.

2 boards and the fan

This is two of the sides, with Pis attached, showing how they’ll be arranged around the fan. This whole thing is upside-down at this stage; when assembled the fan will be on top and will pull air upward past the Pis.

The Pi-fan-cube thing

The last steps were to cut sections out of the bottom of each side for airflow and power cords (I should have done this first, but it worked out fine); and to duct tape all the sides together, arranged around the fan.

Looking inside the cube

Et viola, a 120mm3 (AKA 1.73L) cube containing 16 A72 cores running at 1.5GHz.

Stats

Using a 120mm fan to cool RPis works. In fact, it might be a bit of an overkill. Here’s the receipts.

Uptime:

----------------------------------------------------------------------- nodepi01
 20:51:58 up  1:10,  0 users,  load average: 4.43, 4.62, 4.63

----------------------------------------------------------------------- nodepi02
 20:51:58 up  1:10,  0 users,  load average: 4.45, 4.37, 4.24

----------------------------------------------------------------------- nodepi03
 20:51:59 up  1:10,  0 users,  load average: 4.30, 4.52, 4.38

----------------------------------------------------------------------- nodepi04
 20:52:00 up  1:10,  0 users,  load average: 4.37, 4.46, 4.36

What they’re crunching:

================================================================================
nodepi01
================================================================================
World Community Grid      User: someuser      State: Active
Tasks: 4          Active: 4       Credit/RAC: 543/50

     Workunit                                     Stat  Prog    ETA      Dline
     -------------------------------------------  ----  ------  -------  -------
  1  OPN1_0004501_03273_1                         Run   44.70%   11h21m    6d08h
  2  OPN1_0004555_03384_0                         Run   41.90%   11h56m    6d10h
  3  OPN1_0004552_05879_0                         Run   34.62%   13h26m    6d11h
  4  OPN1_0004543_04058_0                         Run   31.67%   14h02m    6d09h

================================================================================
nodepi02
================================================================================
World Community Grid      User: someuser      State: Active
Tasks: 4          Active: 4       Credit/RAC: 0/0

     Workunit                                     Stat  Prog    ETA      Dline
     -------------------------------------------  ----  ------  -------  -------
  1  OPN1_0004504_03659_0                         Run   18.80%   16h41m    6d23h
  2  OPN1_0004504_03855_0                         Run    7.47%   19h01m    6d23h
  3  OPN1_0004491_06436_0                         Run    5.00%   19h32m    6d23h
  4  OPN1_0004481_00076_0                         Run    4.76%   19h35m    6d23h

================================================================================
nodepi03
================================================================================
World Community Grid      User: someuser      State: Active
Tasks: 4          Active: 4       Credit/RAC: 0/0

     Workunit                                     Stat  Prog    ETA      Dline
     -------------------------------------------  ----  ------  -------  -------
  1  OPN1_0004520_01168_0                         Run    9.34%   18h38m    6d23h
  2  OPN1_0004491_02763_0                         Run    8.63%   18h47m    6d23h
  3  OPN1_0004520_01150_0                         Run    8.63%   18h47m    6d23h
  4  OPN1_0004481_00472_0                         Run    5.25%   19h29m    6d23h

================================================================================
nodepi04
================================================================================
World Community Grid      User: someuser      State: Active
Tasks: 4          Active: 4       Credit/RAC: 0/0

     Workunit                                     Stat  Prog    ETA      Dline
     -------------------------------------------  ----  ------  -------  -------
  1  OPN1_0004520_00966_0                         Run   26.90%   15h01m    6d23h
  2  OPN1_0004534_00978_0                         Run   14.47%   17h35m    6d23h
  3  OPN1_0004481_04968_0                         Run    9.61%   18h35m    6d23h
  4  OPN1_0004481_04962_0                         Run    7.39%   19h02m    6d23h

[NB: These ETAs, being the initial batch of WUs, were well off from actual completion times. For all 4 Pis the maximum actual completion time was 10h20min, and the avg across 30+ WUs was 9.5h.]

CPU clocks (in Hz):

----------------------------------------------------------------------- nodepi01
frequency(48)=1500398464

----------------------------------------------------------------------- nodepi02
frequency(48)=1500398464

----------------------------------------------------------------------- nodepi03
frequency(48)=1500398464

----------------------------------------------------------------------- nodepi04
frequency(48)=1500345728

And temps:

----------------------------------------------------------------------- nodepi01
temp=47.0'C

----------------------------------------------------------------------- nodepi02
temp=45.0'C

----------------------------------------------------------------------- nodepi03
temp=46.0'C

----------------------------------------------------------------------- nodepi04
temp=47.0'C

ARM is coming to Homefarm

The cool thing is that, from Homefarm’s point of view, there’s nothing special about these machines.

Over the past week I updated the code for local repository management; node installs and setup; a lot of Homefarm’s informational scripting; and the management of OS packages, BOINC settings, and BOINC projects.

Now that I write it out like that I realize that this has touched almost every piece of Homefarm.

These Raspberry Pis were installed via the Homefarm tooling, and now they’re being managed by it. I think they’ve largely done their job of shaking out the bugs from all of this week’s work. Now they’re doing work for World Community Grid.

My farm is now heterogenous, and I take care of all of it with Homefarm. I’m gonna do a lot of testing over the next week, and if all goes well, I’ll be releasing Homefarm 2.8.0, which will include support for ARM machines.