fireworm71 / veriumMiner

veriumMiner for solomining and pools
Other
59 stars 36 forks source link

veriumMiner

This is a multi-threaded CPU miner for Verium using scrypt², fork of tpruvot's cpuminer-multi (see AUTHORS for list of contributors).

Latest Binaries here

Table of contents

Overview

To use this miner, you can do one of the following:

Download

Dependencies

Build

Basic *nix build instructions:

If you are fancy,

FreeBSD users:

   export C_INCLUDE_PATH=$INCLUDE_PATH:/usr/local/include
   export CPLUS_INCLUDE_PATH=$INCLUDE_PATH:/usr/local/include
   export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib
   ./autogen.sh
   /usr/local/bin/perl ./nomacro.pl
   ./configure CFLAGS="-march=native" --with-crypto --with-curl
   make

Notes for AIX users:

Basic Windows build instructions, using MinGW64:

Pacman -Syu
pacman -Sy mingw-w64-x86_64-gcc
pacman -Sy make
pacman -Sy automake
pacman -Sy autoconf

pacman -Sy mingw-w64-x86_64-curl
pacman -Sy curl libcurl libcurl-devel mingw-w64-x86_64-curl mingw-w64-x86_64-libwinpthread-git libopenssl openssl openssl-devel

Architecture-specific notes:

Usage instructions

Run "cpuminer --help" to see options.

HugePages

HugePages allow for faster memory lookups, which is very important for this miner. Enabling HugePages typically gets 10% or more performance.

HugePages (Linux)

To make matters complicated, there are two ways of doing this. One is transparent_hugepages one is preallocated. Even more complicated, one is sometimes faster than the other.

This miner will use transparent_hugepages by default.

To enable transparent_hugepages, (on Ubuntu 16.04): echo always | sudo tee /sys/kernel/mm/transparent_hugepage/enabled

To disable transparent_hugepages, (on Ubuntu 16.04): echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled

To verify the status of transparent_hugepages cat /sys/kernel/mm/transparent_hugepage/enabled ([] will show around the current status).

To enable preallocated hugepages (on Ubuntu 16.04), first check that you have /proc/sys/vm/nr_hugepages by doing ls /proc/sys/vm (you should see nr_hugepages in the print out). Then,

  1. sudo nano /etc/sysctl.conf,
  2. scroll to the bottom,
  3. type in vm.nr_hugepages=size
  4. Ctrl+O, then [Enter], then Ctrl+X.
  5. sudo sysctl -p

To disable:

  1. sudo nano /etc/sysctl.conf,
  2. scroll to the bottom,
  3. remove the line vm.nr_hugepages=size
  4. Ctrl+O, then [Enter], then Ctrl+X.
  5. sudo sysctl -p

Note that you can also reboot and this will cause HugePages to allocate / deallocate.

When enabling, you should see vm.nr_hugepages=size print out on the console. If not, check your distro. You may need to recompile your kernel to enable this. You can also verify that memory is allocated by running free and seeing that you now have a ton of memory allocated, but aren't running anything that's using it.

size = (the amount of memory each miner thread needs) / (2048 * 1024).

How much memory is be used per thread?

Multiply that number by the number of threads, and you will have the size needed. Note, you may not have enough RAM for this on ARM SoCs. The miner should still work, but it will not be as optimal.

For example, 4 threads on an SSE4, you'd type vm.nr_hugepages=772. Since 4 (threads) * 193 (hugepages per thread) = 772.

HugePages (Windows)

Oneways, cpu affinity.

You can now specify a number of 'oneway' threads to acompany your 'default way' threads. Default way is determined by your CPU instruction set.

'-1 n' will specify the number of oneway threads to spawn. You can also use --oneways n. Some folks (on arm especially) see perf gains due to the implementation. Additionally, there are new options to help control affinity for these threads and 'default' way threads too. --cpu-affinity-stride N, --cpu-affinity-default-index N, --cpu-affinity-oneway-index N, and --cpu-priority-oneway 0-5

Affinity stride works by saying how many cpus should be skipped before assigning the thread to it. So, if you have 8 cpu's and set 'stride' to 3, you will start with CPU (0 + 3 0), then CPU (0 + 3 1), then CPU (0 + 3 * 2), aka CPU's 0, 3, 6. 'default' index is the starting index ('0' in the example) for the number of -t threads. 'oneway-index' is the starting index for oneway -1 threads.

Play around with them, and pass -D to get some debug output.

e.g, 'Bind oneways to odd threads, 'defaults' to even threads: ./cpuminer ... -t 4 -1 4 --cpu-affinity-stride 2 --cpu-affinity-default-index 0 --cpu-affinity-oneway-index 1 e.g.2, 'Bind oneways to the last 4 cpu's after the defaults' ./cpuminer ... -t 4 -1 4 --cpu-affinity-stride 1 --cpu-affinity-default-index 0 --cpu-affinity-oneway-index 4 (edited)

RYZEN USERS pass --ryzen.

Ryzen's implementation of AVX2 is ... subpar. Please pass --ryzen on the commandline to default to the AVX implementation. Users reported ~25% gains.

Connecting through a proxy

Use the --proxy option.

To use a SOCKS proxy, add a socks4:// or socks5:// prefix to the proxy host
Protocols socks4a and socks5h, allowing remote name resolving, are also available since libcurl 7.18.0.

If no protocol is specified, the proxy is assumed to be a HTTP proxy.
When the --proxy option is not used, the program honors the http_proxy and all_proxy environment variables.

GCC

Some people have reported increases by using GCC 7.2. Please note, this will replace your existing GCC installation, which may become unrecoverable if any errors occur in the make process.

To build and install GCC 7.2 on Ubuntu do the following:

Credits

CPUMiner-multi was forked from pooler's CPUMiner, and has been started by Lucas Jones.

Donations

This miner does not include any automatic donation code. Please donate if you find this code profitable. A suggestion is about 3.5 days of mining time per year (1%). If you prefer to mine on my behalf, please run your miner with the miner args below.

License

GPLv2. See COPYING for details.