Forum > Open source education
jadr2ddude 看全部
2016-5-1 21:00:50
Edited by jadr2ddude at 2016-5-1 21:01

I am planning a project to experiment with the use of Orange Pi’s for cluster processing. This will be my sophomore research project for High Technology High School. My goal is to provide speed to an Intel server at much lower cost by using many Orange Pi Ones. When my project is complete, I will release a system for easily setting up, deploying, managing, and utilizing an Orange Pi cluster. Here are some possible tasks it could be used to speed up:
  • Compilation (distcc)
  • Web Serving
  • Dynamic Web Resource Generation
  • Distributed Neural Networks
  • Simulations
  • Storage Systems
This project will use a buildroot system to provide containerization and will also manage the networking. I will provide the compiled image, config, and patches for the buildroot system.

I plan to use the USB OTG ports on Orange Pi One SBCs for networking. They will all connect to a USB 3.0 hub which will then connect to a router running OpenWRT. Because they are USB 2.0, each Orange Pi One will be able to transfer data at up to 450 megabits per second – 4.5 times faster than the Ethernet ports. The hub will also have a SSD connected via a SATA-to-USB adapter. Because USB 3.0 can carry 5Gbit/second, all of the SBCs can communicate at top speed simultaneously, but not with the SSD running at top speed at the same time. This is still plenty of routing power for most purposes.
There will be another set of six OPIs plugged into the first set (total of twelve boards in my cluster). This can be repeated to add more computing power, but will have declining returns due to increasing latency and decreasing bandwidth per node. To further expand the cluster, the OpenWRT router can run a software defined network.

Single choicepoll, A total of people voted

91.30% (21)

0.00% (0)

8.70% (2)

jadr2ddude 看全部
2016-5-2 00:40:19
I will be using the g_ether driver.
jadr2ddude 看全部
2016-5-2 06:42:03


trpaslikcz replied at 2016-5-2 02:37
Interesting. This way each SBC will appear as an USB network dongle to a connected host. Did you a ...

The SSD will be mounted on the OpenWRT router and the filesystem will be shared to the nodes. I will be testing the performance and CPU usage of the networking once I have the images compiled.
jadr2ddude 看全部
2016-5-3 03:06:18
Then I will write a new driver/protocol.
bhgv 看全部
2016-6-13 08:21:54
interesting theme.

a easiest way to build cluster/grid/botnet/skynet:

download and build inferno-os. it is a framework/system designed especially to develop distributed networks ( https://en.wikipedia.org/wiki/Inferno_(operating_system) ). it can run as framework on win/lin/mac OSes, x86/arm/sparc/raspberypi like and many others cpus. and it can run as OS itself. yes, it's a oldschool skynet software.

here the main free sources repo - https://bitbucket.org/inferno-os/inferno-os/

it's easy to buid, but here is a prebuilt package (inferno-owen.xz) - https://mega.nz/#F!ZshHFJ5J!8-TKqn9gTKZh6QybGKiAjg
unpack somewhere, go to inferno-os folder, run emu.sh

cluster/grid/botnet/shwarz.. hm.. others (easyest kind):

1) one (only one) of nodes (computers in the grid) should contain the registry of currently connected nodes. its IP address should be written to


   registry=<IP address of registry node>
on every node in your botnet.

2) you need start emu on the registry node, run shell (if it started in the graphical mode), and type in the shell:
ndb/cs #start the connection server
mount -A -c {ndb/registry} /mnt/registry #mount registry server to /mnt/registry (-A - without security)
listen -A -v 'tcp!*!registry' {export /mnt/registry&} #listen to network and export mounted registry service to just connected node

3) start emus on worker nodes and type in their shells:
mount -A 'net!$registry!registry' /mnt/registry  #connect to registry node and mount exported registry
#the should register itself in the registry
myip=`{os hostname -I} #get self IP (command "os" runs the command/program of hosting OS, "hostname -I" is here)
grid/reglisten -A -r svc rstyx 'tcp!' ^ $myip ^ '!5678' {auxi/rstyxd&} #register node, run styx (network protocol) server, listen network for rcmd and export rstyxd. very complex command
initialisation has finished (all without security - -A key). howto use:

you can see all connected nodes from any connected node:
ls /mnt/registry

you can send a job to a node:
rcmd -A tcp!<IP of a worker node>!5678 <command to execute remotelly. it may contain os cmd>

you can send a job to all connected nodes:
for i in `{ndb/regquery -n svc rstyx} {
    rcmd -A $i <your command>

in the inferno-owen.xz has file gridlib with this examples written. to use it:
in the shell on registry node:
run gridlib

on worker nodes:
run gridlib

now you can use rcmd (or rsplit to run a cmd on all connected nodes)

this was a simple, tutorial example

OrangePi En

Powered by Discuz! X3.4

homepage|Simple edition|Touch edition|PC