| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472 |
- This is a multi-threaded multi-pool CPU and GPU miner with ATI GPU monitoring,
- (over)clocking and fanspeed support for bitcoin and derivative coins.
- GIT TREE:
- https://github.com/ckolivas/cgminer
- Support thread:
- http://bitcointalk.org/index.php?topic=28402.0
- IRC Channel:
- irc://irc.freenode.net/cgminer
- License: GPLv2. See COPYING for details.
- Dependencies:
- curl dev library http://curl.haxx.se/libcurl/
- (libcurl4-openssl-dev)
- curses dev library
- (libncurses5-dev or libpdcurses on WIN32)
- pkg-config http://www.freedesktop.org/wiki/Software/pkg-config
- jansson http://www.digip.org/jansson/
- (jansson is included in-tree and not necessary)
- yasm 1.0.1+ http://yasm.tortall.net/
- (yasm is optional, gives assembly routines for CPU mining)
- AMD APP SDK http://developer.amd.com/sdks/AMDAPPSDK
- (This sdk is optional and gives support for GPU mining)
- AMD ADL SDK http://developer.amd.com/sdks/ADLSDK
- (This sdk is optional and gives support for ATI GPU monitoring & clocking)
- Basic *nix build instructions:
- To build with GPU mining support:
- Install AMD APP sdk, latest version - there is no official place to
- install it so just keep track of where it is if you're not installing
- the include files and library files into the system directory.
- (Do NOT install the ati amd sdk if you are on nvidia.)
- To build with GPU monitoring & clocking support:
- Extract the AMD ADL SDK, latest version - there is also no official
- place for these files. Copy all the *.h files in the "include"
- directory into cgminer's ADL_SDK directory.
- The easiest way to install the ATI AMD SPP sdk on linux is to actually put it
- into a system location. Then building will be simpler. Download the correct
- version for either 32 bit or 64 bit from here:
- http://developer.amd.com/sdks/AMDAPPSDK/downloads/Pages/default.aspx
- This will give you a file with a name like AMD-APP-SDK-v2.4-lnx64.tgz
- Then:
- sudo su
- cd /opt
- tar xf /path/to/AMD-APP-SDK-v2.4-lnx64.tgz
- cd /
- tar xf /opt/AMD-APP-SDK-v2.4-lnx64/icd-registration.tgz
- ln -s /opt/AMD-APP-SDK-v2.4-lnx64/include/CL /usr/include
- ln -s /opt/AMD-APP-SDK-v2.4-lnx64/lib/x86_64/* /usr/lib/
- ldconfig
- If you are on 32 bit, x86_64 in the 2nd last line should be x86
- To actually build:
- ./autogen.sh # only needed if building from git repo
- CFLAGS="-O2 -Wall -march=native" ./configure
- or if you haven't installed the ati files in system locations:
- CFLAGS="-O2 -Wall -march=native -I<path to AMD APP include>" LDFLAGS="-L<path to AMD APP lib/x86_64> ./configure
- make
-
- If it finds the opencl files it will inform you with
- "OpenCL: FOUND. GPU mining support enabled."
- Basic WIN32 build instructions (LIKELY OUTDATED INFO. requires mingw32):
- ./autogen.sh # only needed if building from git repo
- rm -f mingw32-config.cache
- MINGW32_CFLAGS="-O2 -Wall -msse2" mingw32-configure
- make
- ./mknsis.sh
-
- Native WIN32 build instructions (on mingw32, on windows):
- Install the Microsoft platform SDK
- Install AMD APP sdk, latest version (only if you want GPU mining)
- Install AMD ADL sdk, latest version (only if you want GPU monitoring)
- (Do NOT install the ati amd sdk if you are on nvidia)
- Install mingw32
- Install libcurl, copy libcurl.m4 into /mingw/share/aclocal
- Install pkg-config, copy pkg.m4 into /mingw/share/aclocal
- Run:
- autoreconf -fvi
- CFLAGS="-O2 -msse2" ./configure
- make
- ---
- Usage instructions: Run "cgminer --help" to see options:
- Usage: . [-atDdGCgIKklmpPQqrRsTouvwOchnV]
- Options for both config file and command line:
- --algo|-a <arg> Specify sha256 implementation for CPU mining:
- auto Benchmark at startup and pick fastest algorithm
- c Linux kernel sha256, implemented in C
- 4way tcatm's 4-way SSE2 implementation
- via VIA padlock implementation
- cryptopp Crypto++ C/C++ implementation
- sse2_64 SSE2 64 bit implementation for x86_64 machines
- sse4_64 SSE4.1 64 bit implementation for x86_64 machines (default: sse2_64)
- --auto-fan Automatically adjust all GPU fan speeds to maintain a target temperature
- --auto-gpu Automatically adjust all GPU engine clock speeds to maintain a target temperature
- --cpu-threads|-t <arg> Number of miner CPU threads (default: 4)
- --debug|-D Enable debug output
- --device|-d <arg> Select device to use, (Use repeat -d for multiple devices, default: all)
- --disable-gpu|-G Disable GPU mining even if suitable devices exist
- --enable-cpu|-C Enable CPU mining with GPU mining (default: no CPU mining if suitable GPUs exist)
- --failover-only Don't leak work to backup pools when primary pool is lagging
- --gpu-threads|-g <arg> Number of threads per GPU (1 - 10) (default: 2)
- --gpu-engine <arg> Set the GPU engine (over)clock in Mhz - one value for all or separate by commas for per card.
- --gpu-fan <arg> Set the GPU fan percentage - one value for all or separate by commas for per card.
- --gpu-memclock <arg> Set the GPU memory (over)clock in Mhz - one value for all or separate by commas for per card.
- --gpu-powertune <arg> Set the GPU powertune percentage - one value for all or separate by commas for per card.
- --gpu-vddc <arg> Set the GPU voltage in Volts - one value for all or separate by commas for per card.
- --intensity|-I <arg> Intensity of GPU scanning (-10 -> 10, default: dynamic to maintain desktop interactivity)
- --kernel-path|-K <arg> Specify a path to where the kernel .cl files are (default: "/usr/local/bin")
- --kernel|-k <arg> Select kernel to use (poclbm or phatk - default: auto)
- --load-balance Change multipool strategy from failover to even load balance
- --log|-l <arg> Interval in seconds between log output (default: 5)
- --monitor|-m <arg> Use custom pipe cmd for output messages
- --no-longpoll Disable X-Long-Polling support
- --no-restart Do not attempt to restart GPUs that hang
- --pass|-p <arg> Password for bitcoin JSON-RPC server
- --per-device-stats Force verbose mode and output per-device statistics
- --protocol-dump|-P Verbose dump of protocol-level activities
- --queue|-Q <arg> Minimum number of work items to have queued (0 - 10) (default: 1)
- --quiet|-q Disable logging output, display status and errors
- --real-quiet Disable all output
- --retries|-r <arg> Number of times to retry before giving up, if JSON-RPC call fails (-1 means never) (default: -1)
- --retry-pause|-R <arg> Number of seconds to pause, between retries (default: 5)
- --rotate <arg> Change multipool strategy from failover to regularly rotate at N minutes (default: 0)
- --round-robin Change multipool strategy from failover to round robin on failure
- --scan-time|-s <arg> Upper bound on time spent scanning current work, in seconds (default: 60)
- --sched-start <arg> Set a time of day in HH:MM to start mining (a once off without a stop time)
- --sched-stop <arg> Set a time of day in HH:MM to stop mining (will quit without a start time)
- --shares <arg> Quit after mining N shares (default: unlimited)
- --submit-stale Submit shares even if they would normally be considered stale
- --syslog Use system log for output messages (default: standard error)
- --temp-hysteresis <arg> Set how much the temperature can fluctuate outside limits when automanaging speeds (default: 3)
- --temp-overheat <arg> Set the overheat temperature when automatically managing fan and GPU speeds (default: 85)
- --temp-target <arg> Set the target temperature when automatically managing fan and GPU speeds (default: 75)
- --text-only|-T Disable ncurses formatted screen output
- --url|-o <arg> URL for bitcoin JSON-RPC server
- --user|-u <arg> Username for bitcoin JSON-RPC server
- --vectors|-v <arg> Override detected optimal vector width (1, 2 or 4)
- --verbose Log verbose output to stderr as well as status output
- --worksize|-w <arg> Override detected optimal worksize (default: 0)
- --userpass|-O <arg> Username:Password pair for bitcoin JSON-RPC server
- Options for command line only:
- --config|-c <arg> Load a JSON-format configuration file
- See example-cfg.json for an example configuration.
- --help|-h Print this message
- --ndevs|-n Enumerate number of detected GPUs and exit
- --version|-V Display version and exit
- ---
- EXECUTIVE SUMMARY ON USAGE:
- Single pool, regular desktop:
- cgminer -o http://pool:port -u username -p password
- Single pool, dedicated miner:
- cgminer -o http://pool:port -u username -p password -I 9
- Multiple pool, dedicated miner:
- cgminer -o http://pool1:port -u pool1username -p pool1password -o http://pool2:port -u pool2usernmae -p pool2password -I 9
- Add overclocking settings, GPU and fan control for all cards:
- cgminer -o http://pool:port -u username -p password -I 9 --auto-fan --auto-gpu --gpu-engine 950 --gpu-memclock 300
- Add overclocking settings, GPU and fan control with different engine settings for 4 cards:
- cgminer -o http://pool:port -u username -p password -I 9 --auto-fan --auto-gpu --gpu-engine 950,945,930,960 --gpu-memclock 300
- READ WARNINGS AND DOCUMENTATION BELOW ABOUT OVERCLOCKING
- ---
- WHILE RUNNING:
- The following options are available while running with a single keypress:
- [P]ool management [G]PU management [S]ettings [D]isplay options [Q]uit
- P gives you:
- Current pool management strategy: Failover
- [A]dd pool [R]emove pool [D]isable pool [E]nable pool
- [C]hange management strategy [S]witch pool [I]nformation
- S gives you:
- [D]ynamic mode: On
- [L]ongpoll: On
- [I]ntensity: Dynamic
- [Q]ueue: 0
- [S]cantime: 60
- [R]etries: -1
- [P]ause: 5
- D gives you:
- Toggle: [D]ebug [N]ormal [S]ilent [V]erbose [R]PC debug
- [L]og interval [C]lear
- Q quits the application.
- G gives you something like:
- GPU 0: [124.2 / 191.3 Mh/s] [Q:212 A:77 R:33 HW:0 E:36% U:1.73/m]
- Temp: 67.0 C
- Fan Speed: 35% (2500 RPM)
- Engine Clock: 960 MHz
- Memory Clock: 480 Mhz
- Vddc: 1.200 V
- Activity: 93%
- Powertune: 0%
- Last initialised: [2011-09-06 12:03:56]
- Thread 0: 62.4 Mh/s Enabled ALIVE
- Thread 1: 60.2 Mh/s Enabled ALIVE
- [E]nable [D]isable [R]estart GPU [C]hange settings
- Or press any other key to continue
- ---
- Also many issues and FAQs are covered in the forum thread
- dedicated to this program,
- http://forum.bitcoin.org/index.php?topic=28402.0
- The output line shows the following:
- [(5s):204.4 (avg):203.1 Mh/s] [Q:56 A:51 R:4 HW:0 E:91% U:2.47/m]
- Each column is as follows:
- A 5 second exponentially decaying average hash rate
- An all time average hash rate
- The number of requested work items
- The number of accepted shares
- The number of rejected shares
- The number of hardware erorrs
- The efficiency defined as the accepted shares / requested work and can be >100
- The utility defines as the number of shares / minute
- The cgminer status line shows:
- TQ: 1 ST: 1 SS: 0 DW: 0 NB: 1 LW: 8 GF: 1 RF: 1 I: 2
- TQ is Total Queued work items.
- ST is STaged work items (ready to use).
- SS is Stale Shares discarded (detected and not submitted so don't count as rejects)
- DW is Discarded Work items (work from block no longer valid to work on)
- NB is New Blocks detected on the network
- LW is Locally generated Work items
- GF is Getwork Fail Occasions (server slow to provide work)
- RF is Remote Fail occasions (server slow to accept work)
- I is current Intensity (changes in dynamic mode).
- NOTE: Running intensities above 9 with current hardware is likely to only
- diminish return performance even if the hash rate might appear better. A good
- starting baseline intensity to try on dedicated miners is 9. Higher values are
- there to cope with future improvements in hardware.
- ---
- MULTIPOOL
- FAILOVER STRATEGIES WITH MULTIPOOL:
- A number of different strategies for dealing with multipool setups are
- available. Each has their advantages and disadvantages so multiple strategies
- are available by user choice, as per the following list:
- FAILOVER:
- The default strategy is failover. This means that if you input a number of
- pools, it will try to use them as a priority list, moving away from the 1st
- to the 2nd, 2nd to 3rd and so on. If any of the earlier pools recover, it will
- move back to the higher priority ones.
- ROUND ROBIN:
- This strategy only moves from one pool to the next when the current one falls
- idle and makes no attempt to move otherwise.
- ROTATE:
- This strategy moves at user-defined intervals from one active pool to the next,
- skipping pools that are idle.
- LOAD BALANCE:
- This strategy sends work in equal amounts to all the pools specified. If any
- pool falls idle, the rest will take up the slack keeping the miner busy.
- ---
- LOGGING
- cgminer will log to stderr if it detects stderr is being redirected to a file.
- To enable logging simply add 2>logfile.txt to your command line and logfile.txt
- will contain the logged output at the log level you specify (normal, verbose,
- debug etc.)
- In other words if you would normally use:
- ./cgminer -o xxx -u yyy -p zzz
- if you use
- ./cgminer -o xxx -u yyy -p zzz 2>logfile.txt
- it will log to a file called logfile.txt and otherwise work the same.
- There is also the -m option on linux which will spawn a command of your choice
- and pipe the output directly to that command.
- ---
- OVERCLOCKING WARNING AND INFORMATION
- AS WITH ALL OVERCLOCKING TOOLS YOU ARE ENTIRELY RESPONSIBLE FOR ANY HARM YOU
- MAY CAUSE TO YOUR HARDWARE. OVERCLOCKING CAN INVALIDATE WARRANTIES, DAMAGE
- HARDWARE AND EVEN CAUSE FIRES. THE AUTHOR ASSUMES NO RESPONSIBILITY FOR ANY
- DAMAGE YOU MAY CAUSE OR UNPLANNED CHILDREN THAT MAY OCCUR AS A RESULT.
- The GPU monitoring, clocking and fanspeed control incorporated into cgminer
- comes through use of the ATI Display Library. As such, it only supports ATI
- GPUs. Even if ADL support is successfully built into cgminer, unless the card
- and driver supports it, no GPU monitoring/settings will be available.
- Cgminer supports initial setting of GPU engine clock speed, memory clock
- speed, voltage, fanspeed, and the undocumented powertune feature of 69x0+ GPUs.
- The setting passed to cgminer is used by all GPUs unless separate values are
- specified. All settings can all be changed within the menu on the fly on a
- per-GPU basis.
- For example:
- --gpu-engine 950 --gpu-memclock 825
- will try to set all GPU engine clocks to 950 and all memory clocks to 825,
- while:
- --gpu-engine 950,945,930,960 --gpu-memclock 300
- will try to set the engine clock of card 0 to 950, 1 to 945, 2 to 930, 3 to
- 960 and all memory clocks to 825.
- AUTO MODES:
- There are two "auto" modes in cgminer, --auto-fan and --auto-gpu. These can
- be used independently of each other and are complementary. Both auto modes
- are designed to safely change settings while trying to maintain a target
- temperature. By default this is set to 75 degrees C but can be changed with:
- --temp-target
- AUTO FAN:
- Fan control in auto fan works off the theory that the minimum possible fan
- required to maintain an optimal temperature will use less power, make less
- noise, and prolong the life of the fan. In auto-fan mode, the fan speed is
- limited to 85% if the temperature is below "overheat" intentionally, as
- higher fanspeeds on GPUs do not produce signficantly more cooling, yet
- significanly shorten the lifespan of the fans. If temperature reaches the
- overheat value, fanspeed will still be increased to 100%. The overheat value
- is set to 85 degrees by default and can be changed with:
- --temp-overheat
- AUTO GPU:
- GPU control in auto gpu tries to maintain as high a clock speed as possible
- while not reaching overheat temperatures. As a lower clock speed limit,
- the auto-gpu mode checks the GPU card's "normal" clock speed and will not go
- below this unless you have manually set a lower speed at some time. Also,
- unless a higher clock speed was specified at startup, it will not raise the
- clockspeed. If the temperature climbs, fanspeed is adjusted and optimised
- before GPU engine clockspeed is adjusted. If fan speed control is not available
- or already optimal, then GPU clock speed is only decreased if it goes over
- the target temperature by the hysteresis amount, which is set to 3 by default
- and can be changed with:
- --temp-hysteresis
- If the temperature drops below the target temperature, and engine clock speed
- is not at the highest level set at startup, cgminer will raise the clock speed.
- If at any time you manually set an even higher clock speed successfully in
- cgminer, it will record this value and use it as its new upper limit (and the
- same for low clock speeds and lower limits).
- CHANGING SETTINGS:
- When setting values, it is important to realise that even though the driver
- may report the value was changed successfully, and the new card power profile
- information contains the values you set it to, that the card itself may
- refuse to use those settings. As the performance profile changes dynamically,
- querying the "current" value on the card can be wrong as well. So when changing
- values in cgminer, after a pause of 1 second, it will report to you the current
- values where you should check that your change has taken. An example is that
- 6970 reference cards will accept low memory values but refuse to actually run
- those lower memory values unless they're within 125 of the engine clock speed.
- In that scenario, they usually set their real speed back to their default.
- STARTUP / SHUTDOWN:
- When cgminer starts up, it tries to read off the current profile information
- for clock and fan speeds and stores these values. When quitting cgminer, it
- will then try to restore the original values. Changing settings outside of
- cgminer while it's running may be reset to the startup cgminer values when
- cgminer shuts down because of this.
- ---
- FAQ
- Q: cgminer segfaults when I change my shell window size.
- A: Older versions of libncurses have a bug to do with refreshing a window
- after a size change. Upgrading to a new version of curses will fix it.
- Q: Can I mine on servers from different networks (eg smartcoin and bitcoin) at
- the same time?
- A: No, cgminer keeps a database of the block it's working on to ensure it does
- not work on stale blocks, and having different blocks from two networks would
- make it invalidate the work from each other.
- Q: Can I change the intensity settings individually for each GPU?
- A: Not currently.
- Q: Can I put multiple pools in the json config file?
- A: Not currently, but you can use multiple config files and specify each with
- successive -c. e.g.: cgminer -c cfg1.json -c cfg2.json
- Q: The build fails with gcc is unable to build a binary.
- A: Remove the "-march=native" component of your CFLAGS as your version of gcc
- does not support it.
- Q: The CPU usage is high.
- A: If you're on linux, the ATI drivers after 11.6 have a bug that makes them
- consume 100% of one CPU core unnecessarily so downgrade to 11.6. If you're on
- windows, you may be out of luck because the pthread library used consumes a
- lot of CPU.
- Q: Can you implement feature X?
- A: I can, but time is limited, and people who donate are more likely to get
- their feature requests implemented.
- Q: My GPU hangs and I have to reboot it to get it going again?
- A: The more aggressively the mining software uses your GPU, the less overclock
- you will be able to run. You are more likely to hit your limits with cgminer
- and you will find you may need to overclock your GPU less aggressively. The
- software cannot be responsible and make your GPU hang directly.
- Q: The Queue total at the top is much more than the sum of all the Queued
- values in each device.
- A: The per-device queue value is only incremented when that device has
- requested work over any buffered amount of work, so with fewer devices this
- value may stay very small.
- Q: Work keeps going to my backup pool even though my primary pool hasn't
- failed?
- A: Cgminer checks for conditions where the primary pool is lagging and will
- pass some work to the backup servers under those conditions. The reason for
- doing this is to try its absolute best to keep the GPUs working on something
- useful and not risk idle periods. You can disable this behaviour with the
- option --failover-only.
- Q: GUI version?
- A: No.
- ---
- This code is provided entirely free of charge by the programmer in his spare
- time so donations would be greatly appreciated.
- Con Kolivas <kernel@kolivas.org>
- 15qSxP1SQcUX3o4nhkfdbgyoWEFMomJ4rZ
|