ARM Yourself – using Advanced RISC Machines for CPU Crypto Mining

This article will continue along the same path as previous articles looking at CPU and GPU platforms in Amazon Web Services (AWS) for mining and their profitability. Specifically, we will be experimenting with AWS’ ARM instances.

ARM is the company producing the Reduced Instruction Set Computing (RISC) processors. So, smaller more atomic instruction sets. The current interest in RISC is in containerized computing like Docker. The best reason is ARM are cheap and can be used to scale the CPU needed for much less than Intel CPU.

The Experiment

The experiment is multifaceted. Can an ARM image be built for cryptomining, what hash rate can be produced by an ARM CPU, and what is the cost.

Setup – ARM’ing Up

At Krunzy.com we have Webchain (CryptoNight v7) and Swap (CryptoNight SuperFast) mining pools available. Just so happens these will be good picks as they have a low difficulty so we may be able to produce some rewards. We also have full control of the pools so we can reduce anomalies in testing.

First, we need an ARM platform. I will be using Ubuntu Server 18.04 LTS HVM for ARM. I will make an assumption that not only can you install Ubuntu but also get it to a base configuration which is covered in a previous article.

For each miner build I will briefly describe the build then provide all the commands.

Webchain Miner ARM

There are not many Webchain miners so we chose the webchain-miner from Webchain’s GitHub. With minimal effort we compiled a working ARM miner. The following steps should provide a working miner.

sudo apt install libmicrohttpd-dev libssl-dev cmake build-essential git libuv1-dev


#GCC 7.1
sudo add-apt-repository ppa:jonathonf/gcc-7.1
sudo apt-get update
sudo apt-get install gcc-7 g++-7

#webchain-miner
git clone https://github.com/webchain-network/webchain-miner.git
mkdir webchain-miner/build
cd webchain-miner/build
cmake .. -DCMAKE_C_COMPILER=gcc-7 -DCMAKE_CXX_COMPILER=g++-7
make

In the same directory as the miner (webchain-miner/build) add or update the json.config to the following (feel free to change address, etc.):

 
{
    "algo": "cryptonight-webchain",
    "av": 0,                // algorithm variation, 0 auto select
    "background": false,    // true to run the miner in the background
    "colors": true,         // false to disable colored output
    "cpu-affinity": null,   // set process affinity to CPU core(s), mask "0x3" for cores 0 and 1
    "cpu-priority": 5,   // set process priority (0 idle, 2 normal to 5 highest)
    "donate-level": 0,      // donate level, mininum 1%
    "log-file": null,       // log all output to a file, example: "c:/some/path/webchain-miner.log"
    "max-cpu-usage": 100,    // maximum CPU usage for automatic mode, usually limiting factor is CPU cache not this opt$
    "print-time": 60,       // print hashrate report every N seconds
    "retries": 5,           // number of times to retry before switch to backup server
    "retry-pause": 5,       // time to pause between retries
    "safe": false,          // true to safe adjust threads and av settings for current CPU
    "syslog": false,        // use system log for output messages
    "threads":
[
                {"low_power_mode": 2, "affine_to_cpu": 0},
                {"low_power_mode": 2, "affine_to_cpu": 1},
                {"low_power_mode": 2, "affine_to_cpu": 2},
               ]


,  // number of miner threads
    "pools": [
        {
            "url": "webchain.mine.krunzy.com:1111", // URL of mining server
            "user": "0xd9b36d8e0ff81da377620239b40de478d0f5a62b",  // username for mining server put your wallet addres$
            "pass": "x",                         // password for mining server
            "worker-id": "ARM",                    // worker ID for mining server no spaces
            "keepalive": false,                  // send keepalived for prevent timeout (need pool support)
            "nicehash": false
        }
    ],
}

To run the miner go to the directory webchain-miner/build then the following command:
./webchain-miner

To auto run the miner on machine startup add the following to /etc/rc.local (adjust for your paths):

 #!/bin/sh -e
cd /home/ubuntu/webchain-miner/build
./webchain-miner
exit 0

Swap Miner ARM

Swap miners have a few choices. There is xmr-stak and flavors of xmrig. We gave xmr-stak a try but it is not able to compile to ARM. We looked at xmrig and landed on xmrigCC as the miner for Swap ARM. It took a little effort to compile the ARM miner to build. Mostly around Boost and the cmake options. The following steps should be done in order for best results.

sudo apt install libmicrohttpd-dev libssl-dev cmake build-essential git libuv1-dev 

#GCC 7.1
sudo add-apt-repository ppa:jonathonf/gcc-7.1
sudo apt-get update
sudo apt-get install gcc-7 g++-7

#BOOST (used XMRIGCC folder)
wget https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.bz2
tar xvfj boost_1_67_0.tar.bz2
cd boost_1_67_0
./bootstrap.sh --with-libraries=system
./b2 --toolset=gcc-7
build boost static libs:
./b2 link=static runtime-link=static install --toolset=gcc-7  

#XMRIG
sudo add-apt-repository ppa:jonathonf/gcc-7.1
sudo apt-get update
sudo apt-get install gcc-7 g++-7

git clone https://github.com/Bendr0id/xmrigCC.git
cd xmrigCC
cmake . -DCMAKE_C_COMPILER=gcc-7 -DCMAKE_CXX_COMPILER=g++-7 -DWITH_CC_SERVER=OFF -DWITH_TLS=OFF -DWITH_HTTPD=OFF -DBOOST_ROOT=~/xmrigCC/boost_1_67_0
make

In the same directory as the miner (xmridCC) add or update the json.config to the following (feel free to change address, etc.):

 
{
    "algo": "cryptonight", // cryptonight (default), cryptonight-lite or cryptonight-heavy
    "aesni": 0, // selection of AES-NI mode (0 auto, 1 on, 2 off)
    "threads": 2, // number of miner threads (not set or 0 enables automatic selection of optimal thread count)
    "multihash-factor": 3, // number of hash blocks to process at a time (not set or 0 enables automatic selection of optimal number of hash $
    "multihash-thread-mask" : null, // for multihash-factors>0 only, limits multihash to given threads (mask), mask "0x3" means run multihash$
    "pow-variant" : "xfh", // specificy the PoW variat to use: -> auto (default), 0 (v0), 1 (v1, aka monerov7, aeonv7), ipbc (tube), alloy, x$
                                                // for further help see: https://github.com/Bendr0id/xmrigCC/wiki/Coin-configurations
    "background": false, // true to run the miner in the background (Windows only, for *nix plase use screen/tmux or systemd service instead)
    "colors": true, // false to disable colored output
    "cpu-affinity": null, // set process affinity to CPU core(s), mask "0x3" for cores 0 and 1
    "cpu-priority": null, // set process priority (0 idle, 2 normal to 5 highest)
    "donate-level": 1, // donate level, mininum 1%
    "log-file": null, // log all output to a file, example: "c:/some/path/xmrig.log"
    "max-cpu-usage": 100, // maximum CPU usage for automatic mode, usually limiting factor is CPU cache not this option.
    "print-time": 60, // print hashrate report every N seconds
    "retries": 5, // number of times to retry before switch to backup server
    "retry-pause": 5, // time to pause between retries
    "safe": false, // true to safe adjust threads and av settings for current CPU
    "syslog": false, // use system log for output messages
    "pools": [
        {
            "url": "swap.mine.krunzy.com:2222", // URL of mining server
            "user": "fh3n1xT9NNJJFPZVNcR8Hr3b4Aybm2R31f7v9NeDbw2tMMgZqzK8hRm1hgPdzRD4W4ZSpJrT8gy5o6D6ksno9VYY1iQFSeTGt.5000", // username for$
            "pass": "swARMp", // password for mining server
            "use-tls" : false, // enable tls for pool communication (need pool support)
            "keepalive": true, // send keepalived for prevent timeout (need pool support)
            "nicehash": false // enable nicehash/xmrig-proxy support
        }
    ],
    "cc-client":  null
}

To run the miner from the xmrigCC folder enter the following command:
./xmrigDaemon -c=config.json

To auto run the miner on machine startup add the following to /etc/rc.local (adjust for your paths):

#!/bin/sh -e
cd /home/ubuntu/xmrigCC
./xmrigDaemon -c=config.json
#exit 0

Testing

The testing was performed on AWS A1 instances. The pools used were Krunzy.com Webchain and Swap pools in the same region (US) the tests were performed. Both miners were run using the lowest difficulty the pools offered. Webchain miner ran at 1000 variable difficulty. Swap miner ran at 5000 static difficulty. Testing ran for 60 minutes and were monitored on the miner and the pool. The testing ran across the A1 series and focused on optimizing the hash rate.

Results

The testing started with the smallest A1 instance, a1.medium (1 CPU, 2GB):
Webchain: miner=16 H/s, pool=14 H/s
Swap: miner=33 H/s, pool=32 H/s

The testing jumped to the largest A1 instance tested, a1.xlarge (4 CPU, 8GB):
Webchain: miner=44 H/s, pool=36 H/s
Swap: 80 H/s, pool=100 H/s

Testing and optimization primarily on a1.large (2 CPU, 4GB):
Webchain: miner=30H/s, pool=26H/s
Swap: 100 H/s, pool=125 H/

a1.large optimized (see optimized configs for each miner above in setup):
Webchain: using low_power_mode: 2 and 3 threads
miner=38 H/s, pool=32 H/s

"threads":
[
     {"low_power_mode": 2, "affine_to_cpu": 0},
     {"low_power_mode": 2, "affine_to_cpu": 1},
  {"low_power_mode": 2, "affine_to_cpu": 2},
]

Swap: using 2 threads and multihash-factor 3
miner=100 H/s, pool=125 H/

  "threads": 2,
  "multihash-factor": 3,

a1.large optimized at scale for 60 minutes:
To create scale, a launch template was created with an auto starting miner and used as part of an Auto Scaling Group (ASG).

Webchain @ 100 instances: 2250 H/s at pool
Swap @ 20 instances: 1280 H/s

Spot costs at the time of testing for US-EAST-2 (Ohio, USA):

Spot Costs OHIO us-east-2
A1 Spot Costs OHIO us-east-2

Hash cost based on a1.large @ $0.01/hour (rounding up)
Webchain 32 H/s for 1 hour = 115 kH/h
Swap 100 H/s for 1 hour = 360 kH/h

Conclusion

It was encouraging to find we could compile ARM versions of both the webchain-miner for Webchain and xmrigCC for Swap. Testing showed Swap ARM has 3 times more hashing power than the Webchain ARM. Not surprising based on the underlying PoW algorithms. Webchain is closer to CryptoNight v7 where Swap was engineered to have lighter PoW with CryptoNight SuperFast. So, we proved we could compile to an ARM version of a miner and produce a hash.

The hash rate was not too bad. An AMD Threadripper thread will provide ~100 H/s for Webchain and ~185 H/s for Swap conservatively. Webchain ARM is about a third of the hash than the AMD CPU whereas Swap is slightly over half the hash.

ARMs are inexpensive at pennies an hour. Because of this you could keep a small hash on a pool for a day for about a quarter ($0.25). You could also provide some load and increase to 100 times for an hour for 1 dollar. For pool testing this is an inexpensive way to create load especially if simulating multiple users/ addresses.

In the end, ARM miners are available and offer a cost effective way to run some smaller hash tests. In AWS, ARM instances can scale to 100 instances using spot pricing for pennies an instance in order to create load. Currently, this is not a profitable way to mine cryptocurrency.

Webchain AWS Profitability Compared to Renting a Rig

Previously we have discussed mining profitability in Amazon Web Services (AWS) in regards to CPU and GPU mining.  If you have not read the previous articles you may want to browse them.  This article will be building on the CPU and GPU mining profitability articles.  I know, it is like the first day of class and the teacher assigns homework.

Based on the interesting findings in the CPU and GPU testing I was curious about rig renting.  Rig renting is where you buy rig time and reap the coins during that time.  Taking a quick survey of the rig rental landscape for Cryptonote v8 rental costs I found cost to be ~$0.40 USD per 1 kH/s per hour.  Many rig rentals are paid in bitcoin or other coins and currently coins are volatile.  So, when I say a rough estimate I mean rough

Cyptonote v8 was chosen as it is the most recent fork for some cryptonote coins which also includes bulletproofs.  Bulletproofs lower transaction cost be decreasing blocksize.  Webchain already has a low transaction cost so comparing to Cryptonote v8 rigs seems to be the best comparison.  Webchain uses a special algorithm forked from CryptoNightV7 and altered to be CPU friendly, GPU difficult, and ASIC resistant.  Why not compare directly to an existing Webchain rig rental?  Because there are no Webchain rig rentals.

Okay but why Webchain?  Quite simply because it is currently the most profitable CryptoNight coin to mine.  Mining Webchain at 1 kH/s hash rate for 24 hours yields about 174.131 WEB or roughly $0.58 USD.  A Webchain coin (WEB) is worth about $0.0033 USD.  Solo mining at 1 kH/s will yield a block find about every 6 hours and 20 minutes.  The reward for a block find is currently 47.652 WEB.  So, Webchain was chosen for profitability as well as minability.  This should provide a good starting point for rig rental versus AWS mining.

The Experiment

Using previous results from CPU and GPU mining profitability on AWS as a starting point, determine current data for Webchain.

Setup

A base image for testing was created on Ubuntu 18.04.  The instructions for creating the base image can be found here.

The AWS instance used was a g2.8xlarge which was determined to be the sweet spot for GPU mining based on hash rate to cost.  This provided 4 NVIDIA K520 GPUs at 300 H/s.  The CPU (Intel Xeon E5-2650) hash rate for this instance type is also good at ~40 H/s per CPU.   AWS allows for the selection of threads per CPU so this was adjusted to 20 out of the possible 32 to fully utilize the L3 memory of 40MB.

For this round of experiments I used xmrig.  LOUD Mining created a set of xmrig for Webchain that includes CPU, NVIDIA GPU, and AMD GPU miners.  I used the Webchain CPU and NVIDIA GPU miners.  The mining will be on the Krunzy Webchain Pool with a static difficulty of 25000.  The configuration for Webchain will be the same for Windows and Linux.  Here are the configs and running values:

CPU Miner Configuration

Webchain CPU Miner configuration

GPU Miner Configuration

Webchain NVIDIA GPU miner configuration

CPU Running Values

XMRIG CPU running values

GPU Running Values

XMRIG GPU running values

Testing

Testing was conducted through SSH on the g2.8xlarge instance with a cost of $0.78 USD / h.  A session for CPU miner and GPU miner were created to easily track hash rates.  The experiment was conducted for 90 minutes to allow the mining pool to provide accurate hash rates.

Results

The data collected included hash rate as well as some power costs.  The hash rates remained fairly consistent over the experiment within 20-40 H/s.

Hash Rates after 60 minutes
Miner Reported CPU x 20 = 800-840 H/s
Pool Reported CPU x 20 = 600 H/s

Miner Reported GPU x 4 = 1180 H/s
Pool Reported GPU x 4 = 900 H/s

Total Miner Hash = ~ 2000 H/s
Total Pool Hash = ~ 1500 H/s

Power Costs
In this experiment, 2 x CPU Intel Xeon E5-2650 were used.  This is based on number of threads where one CPU has 16 threads.  The 20 threads were selected from 32 threads available making the CPUs used equal to 2.  The wattage per CPU of 95W was taking from these specifications

XMRIG reports GPU wattage of 80W per GPU as per Table 1.

GPU K520 Running Wattage
Table 1. GPU Wattage

CPU W = 95W/CPU x 2 CPU = 190W
GPU W = 80W/GPU x 4 GPU = 240W
Total W = 430 W
Estimated power cost as $0.10 USD kWh = $0.0001 USD / W/h
Total power cost per hour = $0.0001 USD / W * 430 W = $0.043 USD /h

The total cost per hour would be $0.78 for the g2.8xlarge instance.  Presumably this is covering the power cost of $0.043.  The cost per kH/s is reported pool hash of 1.5 kH/s normalized to 1 kH/s which is $0.52 USD/ kH/s.

As mentioned previously, mining Webchain at 1 kH/s hash rate for 24 hours yields about 174.131 WEB or roughly $0.58 USD.  A Webchain coin (WEB) is worth about $0.0033 USD.  Solo mining at 1 kH/s will yield a block find about every 6 hours and 20 minutes.  The reward for a block find is currently 47.652 WEB.

Renting a rig is about $0.40 USD / kH/s / h

Cost to produce a solo block of WEB at 1 kH/s yielding 47.652 WEB or $0.16 USD

AWS Mining = $0.58 USD * 6.33 h = $3.67 USD (net loss $3.51 USD)
Rig Rental Mining = $0.40 * 6.33 h = $2.53 USD (net loss $2.37 USD)

Conclusion

In a game of pennies a nickel is a lot.  Profitability is influenced by coin value and the cost to create a coin.  Webchain does not have much value currently at a third of a penny.  So, producing WEB is costly.  In fact, the energy costs outweigh mining WEB currently. 

But that’s not why the experiment was run.  We want to answer if AWS mining is viable compared to rig rental.  Simply, AWS mining is over a dollar more per hour on average compared to rig rental.  Is a dollar difference a lot?  Absolutely when dealing with low margins.  The rig rental seems the way to go for now, however, there are no Webchain rig rentals that were found at the time of the article.  Which puts Webchain mining back to your own rig or setting something up in AWS.  If you believe in the future value of WEB then this cost may be acceptable but a straight purchase would be cheapest at this time.

So, when does the break even point happen? Let’s make a few assumptions based on the current data.  It takes 6.33 hours to produce 47.652 WEB on average.  Normalizing to WEB produced per hour we get 7.528 WEB/ h.  Also, based on 1 kH/s the power cost alone is $0.043 USD /h, AWS mining is $0.58 USD/ h, and Rig Rental is $0.40 USD/h.  With assumptions in hand let’s crush some numbers to find the break even values.

Your own rig (power cost) = $0.043 USD/h / 7.528 WEB/h = $0.0057 USD/WEB
Rig rental = $0.40 USD/h / 7.528 WEB/h = $0.0531 USD/WEB

AWS mining = $0.58 USD/h / 7.528 WEB/h = $0.0770 USD/WEB

Running your own rig and paying only power costs based on the AWS setup is 10x cheaper than renting a rig.  A little more than half a penny will be break even for your own rig and a little while back WEB had reached $0.007 USD.  But not everyone can afford to purchase or maintain a rig. 

With no expertise and the will to mine a rig can be rented.  To break even, the cost of WEB would need to reach $0.0531 USD/WEB to make a rig rental viable.

You can still roll your own and create a miner in AWS.  To break even here, based on the current experiment, WEB would need to reach $0.077 USD.  However, you read the CPU Mining Profitability article and you know there is a better AWS rig.  Gold star for you!

Webchain is mineable by CPU and not as good at GPU mining.  We learned previously that we could spin up several cheap CPU instances in AWS. We then see a break even profitability of $0.05 USD also known as the shiny nickel.  It is also at this point that AWS edges out the rental by $0.0031 USD/h.  Remember, fractions of a cent are important in the game of pennies.

Whether new to mining or an old pro, attention to cost to mine is just as important as a huge hash rate.  Calculating the cost to produce a coin to its current value provides insight into when to purchase hash rate.  Bigger is not always better if the costs are too high.  You may actually be more profitable at a lower hash rate.

If you like this article, please think of tossing us some coins to help pay for fluffernutters.  Thank you.

We are add free thanks to CoinIMP

It is hard to stay ad free these days but we are choosing to keep Krunzy.com ad free.  We can do this through two forms of donations.  You can actively donate by sending us some coin.  You can also passively donate and you are doing it right now.

Microhashing may be the best way to describe the passive donation.  The passive donation is enabled through CoinIMP.  CoinIMP is a javascript miner that sends us a passive trickle of hash.  So, just by being on Krunzy.com you are providing a tiny fraction of your CPU as a way of saying thanks.

Please and thank you.  Please continue to benefit from Krunzy.com and thank you for your kind donations.