Skip to content
JayDDee edited this page Feb 20, 2020 · 31 revisions

Welcome to the cpuminer-opt wiki!

First draft to add log description. Will be supplimented with examples and detailed descriptions of the logs.

Requirements

Hardware requirements.

A x86_64 architecture CPU with a minimum of SSE2 support. This includes Intel Core2 and newer and AMD equivalents. In order to take advantage of AES_NI optimizations a CPU with AES_NI is required. This includes Intel Westmere and newer and AMD equivalents. Further optimizations are available on some algoritms for CPUs with AVX and AVX2, Sandybridge and Haswell respectively, as well as AVX512, SHA, and VAES avaible on Icelake.

Older CPUs are supported by cpuminer-multi by TPruvot but at reduced performance.

ARM CPUs are not supported.

Software requirements

64 bit Linux OS. Ubuntu and Fedora based distributions, including Mint and Centos, are known to work and have all dependencies in their repositories. Others may work but may require more effort. Older versions such as Centos 6 don't work due to missing features. 64 bit Windows OS is supported with mingw_w64 and msys or pre-built binaries.

MacOS, OSx and Android are not supported.

Stratum pool

Some algorithms may work wallet mining using getwork or GBT, YMMV.

Supported algorithms

                      allium        Garlicoin
                      anime         Animecoin
                      argon2        Argon2 coin (AR2)
                      argon2d250    argon2d-crds, Credits (CRDS)
                      argon2d500    argon2d-dyn,  Dynamic (DYN)
                      argon2d4096   argon2d-uis, Unitus, (UIS)
                      axiom         Shabal-256 MemoHash
                      blake         Blake-256 (SFR)
                      blake2b       Blake2b 256
                      blake2s       Blake-2 S
                      blakecoin     blake256r8
                      bmw           BMW 256
                      bmw512        BMW 512
                      c11           Chaincoin
                      decred
                      deep          Deepcoin (DCN)
                      dmd-gr        Diamond-Groestl
                      groestl       Groestl coin
                      hex           x16r-hex
                      hmq1725       Espers
                      hodl          Hodlcoin
                      jha           Jackpotcoin
                      keccak        Maxcoin
                      keccakc       Creative coin
                      lbry          LBC, LBRY Credits
                      luffa         Luffa
                      lyra2h        Hppcoin
                      lyra2re       lyra2
                      lyra2rev2     lyra2v2
                      lyra2rev3     lyrav2v3, Vertcoin
                      lyra2z
                      lyra2z330     Lyra2 330 rows, Zoin (ZOI)
                      m7m           Magi (XMG)
                      myr-gr        Myriad-Groestl
                      neoscrypt     NeoScrypt(128, 2, 1)
                      nist5         Nist5
                      pentablake    Pentablake
                      phi1612       phi
                      phi2          Luxcoin (LUX)
                      phi2-lux      identical to phi2
                      pluck         Pluck:128 (Supcoin)
                      polytimos     Ninja
                      power2b       MicroBitcoin (MBC)
                      quark         Quark
                      qubit         Qubit
                      scrypt        scrypt(1024, 1, 1) (default)
                      scrypt:N      scrypt(N, 1, 1)
                      sha256d       Double SHA-256
                      sha256q       Quad SHA-256, Pyrite (PYE)
                      sha256t       Triple SHA-256, Onecoin (OC)
                      sha3d         Double keccak256 (BSHA3)
                      shavite3      Shavite3
                      skein         Skein+Sha (Skeincoin)
                      skein2        Double Skein (Woodcoin)
                      skunk         Signatum (SIGT)
                      sonoa         Sono
                      timetravel    Machinecoin (MAC)
                      timetravel10  Bitcore
                      tribus        Denarius (DNR)
                      vanilla       blake256r8vnl (VCash)
                      veltor        (VLT)
                      whirlpool
                      whirlpoolx
                      x11           Dash
                      x11evo        Revolvercoin
                      x11gost       sib (SibCoin)
                      x12           Galaxie Cash (GCH)
                      x13           X13
                      x13bcd        bcd
                      x13sm3        hsr (Hshare)
                      x14           X14
                      x15           X15
                      x16r
                      x16rv2        Ravencoin (RVN)
                      x16rt         Gincoin (GIN)
                      x16rt-veil    Veil (VEIL)
                      x16s          Pigeoncoin (PGN)
                      x17
                      x21s
                      x22i
                      x25x
                      xevan         Bitsend (BSD)
                      yescrypt      Globalboost-Y (BSTY)
                      yescryptr8    BitZeny (ZNY)
                      yescryptr8g   Koto (KOTO)
                      yescryptr16   Eli
                      yescryptr32   WAVI
                      yespower      Cryply
                      yespowerr16   Yenten (YTN)
                      yespower-b2b  generic yespower + blake2b
                      zr5           Ziftr

Building

Building on Linux

  1. Building on linux prerequisites:

It is assumed users know how to install packages on their system and be able to compile standard source packages. This is basic Linux and beyond the scope of cpuminer-opt. Regardless compiling is trivial if you follow the instructions.

Make sure you have the basic development packages installed. Here is a good start:

http://askubuntu.com/questions/457526/how-to-install-cpuminer-in-ubuntu

Install any additional dependencies needed by cpuminer-opt. The list below are some of the ones that may not be in the default install and need to be installed manually. There may be others, read the compiler error messages, they will give a clue as to the missing package.

The following command should install everything you need on Debian based distributions such as Ubuntu. Fedora and other distributions may have similar but different package names.

$ sudo apt-get install build-essential automake libssl-dev libcurl4-openssl-dev libjansson-dev libgmp-dev zlib1g-dev git

SHA support on AMD Ryzen CPUs requires gcc version 5 or higher and openssl 1.1.0e or higher. Add one of the following to CFLAGS for SHA support depending on your CPU and compiler version:

"-march=native" is always the best choice

"-march=znver1" for Ryzen 1000 & 2000 series, znver2 for 3000.

"-msha" Add SHA to other tuning options

Additional instructions for static compilalation can be found here: https://lxadm.com/Static_compilation_of_cpuminer Static builds should only considered in a homogeneous HW and SW environment. Local builds will always have the best performance and compatibility.

  1. Download cpuminer-opt

Download the source code for the latest release from the official repository.

https://github.com/JayDDee/cpuminer-opt/releases

Extract the source code.

$ tar xvzf cpuminer-opt-x.y.z.tar.gz

Alternatively it can be cloned from git.

$ git clone https://github.com/JayDDee/cpuminer-opt.git

  1. Build cpuminer-opt

It is recomended to Build with default options, this will usuallly produce the best results.

$ ./build.sh to build on Linux or execute the following commands.

or

$ ./autogen.sh $ CFLAGS="-O3 -march=native -Wall" ./configure --with-curl $ make -j n

n is the number of threads.

  1. Start mining.

$ ./cpuminer -a algo -o url -u username -p password

Building for Windows

Windows compilation using Visual Studio is not supported. Mingw64 is used on a Linux system (bare metal or virtual machine) to cross-compile cpuminer-opt executable binaries for Windows.

These instructions were written for Debian and Ubuntu compatible distributions but should work on other major distributions as well. However some of the package names or file paths may be different.

It is assumed a Linux system is already available and running. And the user has enough Linux knowledge to find and install packages and follow these instructions.

First it is a good idea to create new user specifically for cross compiling. It keeps all mingw stuff contained and isolated from the rest of the system.

Step by step...

  1. Install necessary packages from the distribution's repositories.

Refer to Linux compile instructions and install required packages.

Additionally, install mingw-w64.

sudo apt-get install mingw-w64

  1. Create a local library directory for packages to be compiled in the next step. Suggested location is $HOME/usr/lib/

  2. Download and build other packages for mingw that don't have a mingw64 version available in the repositories.

Download the following source code packages from their respective and respected download locations, copy them to $HOME/usr/lib/ and uncompress them.

openssl curl gmp

In most cases the latest vesrion is ok but it's safest to download the same major and minor version as included in your distribution.

Run the following commands or follow the supplied instructions. Do not run "make install" unless you are using /usr/lib, which isn't recommended.

Some instructions insist on running "make check". If make check fails it may still work, YMMV.

You can speed up "make" by using all CPU cores available with "-j n" where n is the number of CPU threads you want to use.

openssl:

./Configure mingw64 shared --cross-compile-prefix=x86_64-w64-mingw32 make

curl:

./configure --with-winssl --with-winidn --host=x86_64-w64-mingw32 make

gmp:

./configure --host=x86_64-w64-mingw32 make

  1. Tweak the environment.

This step is required everytime you login or the commands can be added to .bashrc.

Define some local variables to point to local library.

export LOCAL_LIB="$HOME/usr/lib"

export LDFLAGS="-L$LOCAL_LIB/curl/lib/.libs -L$LOCAL_LIB/gmp/.libs -L$LOCAL_LIB/openssl"

export CONFIGURE_ARGS="--with-curl=$LOCAL_LIB/curl --with-crypto=$LOCAL_LIB/openssl --host=x86_64-w64-mingw32"

Create a release directory and copy some dll files previously built. This can be done outside of cpuminer-opt and only needs to be done once. If the release directory is in cpuminer-opt directory it needs to be recreated every a source package is decompressed.

mkdir release cp /usr/x86_64-w64-mingw32/lib/zlib1.dll release/ cp /usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll release/ cp /usr/lib/gcc/x86_64-w64-mingw32/7.3-win32/libstdc++-6.dll release/ cp /usr/lib/gcc/x86_64-w64-mingw32/7.3-win32/libgcc_s_seh-1.dll release/ cp $LOCAL_LIB/openssl/libcrypto-1_1-x64.dll release/ cp $LOCAL_LIB/curl/lib/.libs/libcurl-4.dll release/

The following steps need to be done every time a new source package is opened.

  1. Download cpuminer-opt

Download the latest source code package of cpumuner-opt to your desired location. .zip or .tar.gz, your choice.

https://github.com/JayDDee/cpuminer-opt/releases

Decompress and change to the cpuminer-opt directory.

  1. Prepare to compile

Create a link to the locally compiled version of gmp.h

ln -s $LOCAL_LIB/gmp-version/gmp.h ./gmp.h

Edit configure.ac to fix lipthread package name.

sed -i 's/"-lpthread"/"-lpthreadGC2"/g' configure.ac

  1. Compile

you can use the default compile if you intend to use cpuminer-opt on the same CPU and the virtual machine supports that architecture.

./build.sh

Otherwise you can compile manually while setting options in CFLAGS.

Some common options:

To compile for a specific CPU architecture:

CFLAGS="-O3 -march=znver1 -Wall" ./configure --with-curl

This will compile for AMD Ryzen.

You can compile more generically for a set of specific CPU features if you know what features you want:

CFLAGS="-O3 -maes -msse4.2 -Wall" ./configure --with-curl

This will compile for an older CPU that does not have AVX.

You can find several examples in build-allarch.sh

If you have a CPU with more than 64 threads and Windows 7 or higher you can enable the CPU Groups feature:

-D_WIN32_WINNT==0x0601

Once you have run configure successfully run make with n CPU threads:

make -j n

Copy cpuminer.exe to the release directory, compress and copy the release directory to a Windows system and run cpuminer.exe from the command line.

Run cpuminer

In a command windows change directories to the unzipped release folder. to get a list of all options:

cpuminer.exe --help

Command options are specific to where you mine. Refer to the pool's instructions on how to set them.

Usage

Basic usage

options

Logs

Colours

Somes logs and fields are colour coded based on their purpose or to highlight important information

  • Blue is used to report networking events, primarilly new jobs.
  • Green is used to identify when a share has been accepted.
  • Yellow is used when a share is stale or to warn of a minor error that ay affect perforance.
  • Red is a more serious error and is used when a share is rejected or when performance is affected or may cause the miner to stop mining and exit.

The log reports contain a wealth of data that can be used to report actual miner perforance and provide estimates.

Start up

The startup messages are very important to ensure best performmance. In particular the features lists ensure the software is built for the CPU architecture and can take advantage of all the algo optimizations.

` CPU: AMD Ryzen 7 1700 Eight-Core Processor . SW built on Feb 8 2020 with GCC 7.4.0. CPU features: AVX2 AES SHA SW features: AVX2 AES SHA Algo features: AVX512 VAES

Starting miner with AVX2 AES... ` Line 1: CPU brand and model Line 2: CPU hardware extensions available Line 3: Hardware extensions supported by the software build. Line 4: Extensions supported, to varying degrees, by the mining algorithm Line 5: Extensions to be used in the current session

Hardware extensions are divided into 3 classes, SIMD, AES and SHA. There are multiple levels in each clash. Each provides additional CPU instructions and more complex operations.

  • SIMD vector support SSE2: minimum for 128 bit integer vector support, first available on Intel core2. SSSE3: Some additional instructions for 128 bit integer vectors, not very significant. SSE4.2: More 128 bit vector instructions, also not very significant. AVX: Initial support for 256 bit vectors but no integer support. AVX2: minimum level for 256 bit integer vector support, first available on Intel Haswell amd AMD Ryzen. AVX512: a suite of seperate extensions that provide 512 bit integer vector support, first available on Intel Cascade Lake X HEDT CPUs.

  • AES encryption and decryption, aka AES_NI AES: basic hardware AES support performs AES operations with a single instruction, also requires SSE2, first available on Intel Westmere. VAES: Vectored AES, supports 4 parallel AES operations with a single instruction, first available on Intel Icelake.

  • SHA encryption and decryption, aka SHA_NI SHA supports basic SHA-256 operations with a single instruction, also requires SSE2. First available on Intel Goldmont but not widely avaiable until AMD Ryzen and Intel Icelake.

New stratum, block job report

This report is issued when a new job is received from the stratum server. If the report is also for a new block or a changed stratum difficulty the report will include new estimates for the new block or stratum difficulty. Using external data the coin can be identifed from its block number.

[2020-02-07 23:38:22] New block 1293839, job 1d9f lyra2rev3: lyra2v3.mine.zergpool.com:4550 Diff: Net 50648, Stratum 26, Target 0.10156 TTF @ 2758.00 kh/s: block 2y2d, share 2m38s Net TTF @ 1040.82 Gh/s: 3m29s

There are 3 forms of this report. New job is a one line report, new block and new stratum diff are up to 4 lines. A new stratum diff also includes a new block and a new block includes a new job.

Line 1 (blue) shows what new information was received from the stratum server.

Line 2 shows the current algo and pool URL.

Line 3:

  • Network difficulty, provided by the server, the minimum difficulty hash required to solve a block.
  • Stratum difficulty, provide by the server, determines the value of a share and, combined with a target factor (hard coded for each algo) determines the minimum share difficulty.
  • Target difficulty, the minimum acceptible share difficulty, calculated from data received from the stratum server.

Line 4:

  • TTF, an abbeviation for Time To Find, an estimate of the average time required to find either a block or a share for a given hash rate.
  • Reference hash rate of the miner, calculated by counting the number of hashes over time.
  • Block TTF estimate calculated from miner's reference hash rate and network difficulty.
  • Share TTF estimate calculated from miner's reference hash rate and target difficulty.

Line 5, only displayed in single coin pools

  • network hashrate estimate calculated from network difficulty and the number of blocks found during the session.
  • observed network block TTF calculated from the number of blocks found during the session.

Share submitted report

[2020-02-07 23:59:03] 5 submitted by thread 15, lane 1, job 1dd6

The main purpose of the share submitted report is to timestamp the event to measure latency.

  • submit count is a simple counter that is incremented every time a share is submitted. It should always match up with a share result counter.

  • CPU thread that submitted the share, FYI Only.

  • Lane of the CPU thread that submitted the share, only displayed when hashing multiple data streams in parallel (N way). FYI only.

  • job id is displayed to help diagnose stale shares caused by latency.

Share result report

This report is generated when the pool's reply has been received acknowledging the submitted share.

[2020-02-07 23:59:03] 5 Accepted 5 S0 R0 B0, 400.092 sec (159ms) Diff 0.11393 (0.0853%), Block 1044635, Job 1dd6

Line 1:

  • Share result count, simple counter independant of submit counter but they should match. a mismatch indicates submitted shares without replies. The result count should also equal the sum of accepted, stale and rejected shares, collectivley known as replied or acknowledged shares.

  • (green)"Accepted", (yellow)"Stale", (red)"Rejected", (magenta)"BLOCK SOLVED" counters. The currently incremented counter is coloured appropriately and displayed in long form. The other counters will be displayed in their short form with no colouring. Solved blocks also count as accepted therefore the accepted count will also be incremented and displayed in green but in abbreviated form.

  • The time in seconds since the last share. Determines share rate (shares/minute) which combined with the stratum difficulty determines the effective hash rate. This is how pools calculate hash rate.

  • (Latency ms) Time in milliseconds from share submission to reply, including transmission time and processing at either end.

Line 2:

  • Share difficulty. The share difficulty does ot matter most of the time so is FYI. As long as the share difficulty it is higher than or equal to the target difficulty all shares are considered equal by the pool server based on the stratum difficulty.

  • (share ratio %) the percentage of the difficulty required to find a block, 100% or greater solves a block. Also FYI only.

  • The current block height (block number), coloured magenta when the block is found by the miner.

  • The id of the job associated with the acknowleged share coloured yellow if the job was stale. This is obtained from data collected at submit time and deoends on proper synchronization (submit count == reply count) for correctness.

Periodic summary report

[2020-02-18 23:50:16] Periodic Report 5m35s 5m35s Share rate 0.36/min 0.36/min Hash rate 1600.25kh/s 1602.60kh/s (1654.96kh/s) Submitted 2 2 Accepted 2 2

Generated aproximately every 5 minutes. The timing is not precise because it is an opportunistic report. It is produced when it is convenient in order to miminize the impact on mining.

The report contains data for the 5 minute interval in the left column, and session statistics in the right.

  • Line 1: Sample time for current period and session Actual interval usually between 5 & 6 minutes.

  • Line 2: Number of shares submitted per minute. Determines effective hash rate, also used by the pool to report hash rate.

  • Line 3: Effective hash rate calculated from share rate and stratum difficulty.

Effective hash rate discounts rejected shares which are reported as lost hash rate. The effective hash rate is the real performance of the miner once luck is factored in. It is also most closely correlated with the pool's reported hash rate. The effective hash rate will fluctuate above and below the miner reference hash rate according to luck (ie share rate). A low share rate will increase volatility. Over time the mean effective hash rate should converge to the miner's reference hash rate if everything is normal.

  • Line 4: Numner of shares submitted.

  • Lines 5+: Optional number of stale or rejected shares or solved blocks, only displayed if not zero.

CPU temperature and frequency report

Another opportunistic report to avoid interrupting mining operation. Temperature reports are dsplayed more frequently at higher temperatures and colour coded to draw attention.

  • temp >= 80: 30+ seconds, red
  • 70 <= temp < 80: 60+ seconds, yellow
  • temp < 70: 120+ seconds, no colour

In addition the report interval will be shorter interval if the new temperature exceeds the previous maximum.

The sampling is approximately every 30 seconds and is the tyemperature at that time. it does not in any way account for fluctuations or spikes during the 5 minute period. The reported maximum is the previous highest sampled temperature.

Clone this wiki locally