diff --git a/cpuminer-opt-READMEs,-HowTos-&-FAQs.md b/cpuminer-opt-READMEs,-HowTos-&-FAQs.md deleted file mode 100644 index 794f554..0000000 --- a/cpuminer-opt-READMEs,-HowTos-&-FAQs.md +++ /dev/null @@ -1,725 +0,0 @@ -Welcome to the cpuminer-opt wiki! - -A work in progress - - -# Requirements - -## Hardware requirements. - -### CPU - -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, Aarch64, Raspberry Pi are not supported. - -### Memory - -Memory requirements are very dependant on the algorithm. Some algorithms require over 100 MB per thread. -GPU mining will also raise memory requirements. It's not a performance issue, it works smoothly or it -doesn't. - -## Software requirements - -### Operating system - -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. - -FreeBSD and other BSDs may work, YMMV. - -MacOS, OSx, Android, Haiku and reactOS are not supported. - -### Virtualization and Emulation - -It is possible to run cpuminer-opt in a virtual machine but some CPU features may be missing emulation. -CygWin has been known to work but has significantly lower performance than running a Windows binary natively. -VMs and emulators are nit recommended. - -### Server - -A stratum server for shared mode pool mining. Some pools also offer solo mining. - -A full node wallet for the coin to be mined using getwork. - -GBT is 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 - -### Scrypt, yescrypt, yespower parameters - -Many variations of scrypt based algos can be mine by specifying their parameters: - -* scryptn2: --algo scrypt --param-n 1048576 - -* cpupower: --algo yespower --param-key "CPUpower: The number of CPU working or available for proof-of-work mining" - -* power2b: --algo yespower-b2b --param-n 2048 --param-r 32 --param-key "Now I am become Death, the destroyer of worlds" - -* sugarchain: --algo yespower --param-n 2048 -param-r 32 --param-key "Satoshi Nakamoto 31/Oct/2008 Proof-of-work is essentially one-CPU-one-vote" - -* yespoweriots: --algo yespower --param-n 2048 --param-key "Iots is committed to the development of IOT" - -* yespowerlitb: --algo yespower --param-n 2048 --param-r 32 --param-key "LITBpower: The number of LITB working or available for proof-of-work mini" - -* yespoweric: --algo yespower --param-n 2048 --param-r 32 --param-key "IsotopeC" - -* yespowerurx: --algo yespower --param-n 2048 --param-r 32 --param-key "UraniumX" - -* yespowerltncg: --algo yespower --param-n 2048 --param-r 32 --param-key "LTNCGYES" - - -# Building - -## Building on Linux - -### 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 usually the best choice and is used by build.sh - -"-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 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` - -### Build cpuminer-opt - -It is recomended to Build with default options, this will usuallly -produce the best results. - -`$ ./build.sh` - -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` - - -## 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... - -### Install packages - -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 - -Create a directory for libraries that that need to be compiled in the next stept step. -The Suggested location is $HOME/usr/lib/ - -`$ mkdir $HOME/usr/lib` - -### Buld libraries - -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` - - -### 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/` - - -### Download cpuminer-opt - -The following steps need to be done every time a new source package is -opened. - -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` - -### 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. Only the highest ranked feature in -each class is displayed although lower ranking features may also exist and be avaiable. Not all features -have significant improvements and not all combinations are avalable in binary format for Windows. - -### 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. Also requires AVX512F. - -### 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. - -Some other messages are displayed based on options such as stratum connection, API enabled, CPU affinity etc. - - -## 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, ntime 5e5c2e79` - -` 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, this is the traditional hash rate displayed by most miners. It is -calculated by counting the nonces hashed over time. It should be statistically equal to the sum of the -effective hash rate and lost hash rate. -* 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 is calculated from network difficulty and the number of blocks found during - the mining session. -* observed network block TTF calculated from the number of blocks found during the session. - -### Getwork new block, work report - - -`[2020-02-28 10:54:02] New block 6273226, diff 118.48, ntime 5e5c2e79` - -` Miner TTF @ 3938.69 kh/s 6m11s, net TTF @ 68.24 Mh/s 2h04m` - - -The getwork new block report is similar to the stratum new block log with a few differences. There is no -stratum difficulty and no job id. "New job" is replaced with "New work". All present fields have the same -meaning as the stratum log but some are calculated differently. New work is detected by a change of the ntime field of the block header data. Unlike the stratum version the network hashrate is provided by the wallet -and is not an estimate. The block TTF is calculated from network hashrate and network difficulty and is -therefore considered correct. - - -## Share submitted report - - -`[2020-03-01 16:52:18] 168 Submit diff 2.4496e-07, block 440815, job 3f4a` - - -The main purpose of the share submitted report is to timestamp the event to measure latency. It also contains -info to help tracking. - -* 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. - -* The difficulty of the submitted share, should be <= target diff to be accepted, otherwise it will be rejected -as a low difficulty share. Low difficulty shares are caused by the wtrong algorithm or wrong pamameters, -A pool misconfiguration or a bug in cpuminer-opt. A bug is more liky wih new code. - -* The current block, also known as height. - -* The job id, stratum only, useful to troubleshoot stale shares. - - -## 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 to 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. - -Stale shares can't be completely avoided. There is always a window beetween a job expiring and the miner -getting the new data. Id a share is submitted in this window it will be rejected as stale. Stale shares are -included in lost hash rate. - -Rejected shares should never happen. They are either wrong algorithm, wrong parameters or a software bug. -Most common reject reasons are invalid job id which are reported as stale, low difficulty share and invalid -share. Invalid shares are caused by incorrect algorithm, wrong algorithm paramaters or a software bug. -Low diffiulty shares can be due to incorrect algorithm parameters, particularly for algos like yespower, -or a stratum mismatch due to a pool misconfiguration or software bug. When troubleshooting low difficulty -shares the share difficulty and the target difficulty from the new block log are useful information. - -* The submit 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 not matter most of the time so is FYI. As long as the share -difficulty 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 fraction of the difficulty required to solve a block, 1.0 or greater solves a block. -Mostly FYI except when solo mining. It is the ratio of share difficulty over network difficulty. - -* The current block height (block number), coloured magenta when the block is found by the miner. - -* Job id, stratum only, 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. - - -## Periodic summary report - - -` [2020-03-01 16:49:10] scrypt: scryptn2.mine.zergpool.com:3435` - -` Periodic Report 3m45s 14m58s` - -` Share rate 9.84/min 9.68/min` - -` Hash rate 27.03h/s 29.17h/s (22.83h/s)` - -` Lost hash rate 0h/s .17h/s` - -` Submitted 37 145` - -` Accepted 37 144` - -` Stale 0 1` - - -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: (blue) the current algorithm and URL - -* Line 2: 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, the same way pool's -calculate hash rate. - -* Line 3: Effective hash rate calculated from share rate and stratum difficulty. Should closely follow the -pool's reported hash rate. - - -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: Optional lost hashrate, the sum of the effective hashrate of stale and rejected shares. Only -displayed if not zero. Add this to effective hash rate for performance comparison with reference hash rate. - -* Line 5: Numner of shares submitted. - -* Lines 6+: 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 or rising temperatures and colour coded to draw attention. - -* temp >= 80: 30+ seconds, red -* 70 <= temp < 80: 60+ seconds, yellow -* temp < 70: 120+ seconds, no colour - -The sampling is approximately every 30 seconds and is the temperature of core 0 at that time. It is not an -average or absolute maximum, just a single sample. 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.