-
Notifications
You must be signed in to change notification settings - Fork 552
Home
Welcome to the cpuminer-opt wiki!
First draft to add log description. Will be supplimented with examples and detailed descriptions of the logs.
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.
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.
Some algorithms may work wallet mining using getwork or GBT, YMMV.
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 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.
- Download cpuminer-opt
Download the source code for the latest realease 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
- 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.
- Start mining.
$ ./cpuminer -a algo -o url -u username -p password
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...
- 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
-
Create a local library directory for packages to be compiled in the next step. Suggested location is $HOME/usr/lib/
-
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 ~/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
- 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.
- 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.
- 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
- 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.
Somes logs and fields are colour coded based on their purpose or to highlight important information
- Blue is used to report mnetworking 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 cause the miner to exit.
The log reports contain a wealth of data that can be used to report actual miner perforance and provide estimates.
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.
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.
The main purpose of this report is to timestamp when a share is submitted and record the job id for later comparison with the share result.
This report is generated when a reply to a submitted share is received.
Generated aproximately every 5 miinutes. It 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 as well as session statistics.
Another opportunistic report to avoid interrupting mining operation. In adition the frequency of the report is dependent on the current temperature.
- temp > 80: 30 seconds
- 70 <= temp <= 80: 1 minute
- t < 70: 2 minutes
In addition the report will be generated sooner if the current temperature exceeds the previous maximum.
The sampling is approximately every 30 seconds. The reported maximum it the highest sample and not represent the actual instantaneous maximim temperature.