mirror of https://github.com/GOSTSec/sgminer
Paul Sheppard
13 years ago
17 changed files with 65953 additions and 521 deletions
@ -0,0 +1,459 @@
@@ -0,0 +1,459 @@
|
||||
|
||||
This README contains details about the cgminer RPC API |
||||
|
||||
|
||||
If you start cgminer with the "--api-listen" option, it will listen on a |
||||
simple TCP/IP socket for single string API requests from the same machine |
||||
running cgminer and reply with a string and then close the socket each time |
||||
If you add the "--api-network" option, it will accept API requests from any |
||||
network attached computer. |
||||
|
||||
You can only access the comands that reply with data in this mode. |
||||
By default, you cannot access any privileged command that affects the miner - |
||||
you will receive an access denied status message see --api-allow below. |
||||
|
||||
You can specify IP addresses/prefixes that are only allowed to access the API |
||||
with the "--api-allow" option e.g. --api-allow W:192.168.0.1,10.0.0/24 |
||||
will allow 192.168.0.1 or any address matching 10.0.0.*, but nothing else |
||||
IP addresses are automatically padded with extra '.0's as needed |
||||
Without a /prefix is the same as specifying /32 |
||||
0/0 means all IP addresses. |
||||
The 'W:' on the front gives that address/subnet privileged access to commands |
||||
that modify cgminer. |
||||
Without it those commands return an access denied status. |
||||
Privileged access is checked in the order the IP addresses were supplied to |
||||
"--api-allow" |
||||
The first match determines the privilege level. |
||||
Using the "--api-allow" option overides the "--api-network" option if they |
||||
are both specified |
||||
With "--api-allow", 127.0.0.1 is not by default given access unless specified |
||||
|
||||
The RPC API request can be either simple text or JSON. |
||||
|
||||
If the request is JSON (starts with '{'), it will reply with a JSON formatted |
||||
response, otherwise it replies with text formatted as described further below. |
||||
|
||||
The JSON request format required is '{"command":"CMD","parameter":"PARAM"}' |
||||
(though of course parameter is not required for all requests) |
||||
where "CMD" is from the "Request" column below and "PARAM" would be e.g. |
||||
the CPU/GPU number if required. |
||||
|
||||
An example request in both formats to set GPU 0 fan to 80%: |
||||
gpufan|0,80 |
||||
{"command":"gpufan","parameter":"0,80"} |
||||
|
||||
The format of each reply (unless stated otherwise) is a STATUS section |
||||
followed by an optional detail section |
||||
|
||||
From API version 1.7 onwards, reply strings in JSON and Text have the |
||||
necessary escaping as required to avoid ambiguity - they didn't before 1.7 |
||||
For JSON the 2 characters '"' and '\' are escaped with a '\' before them |
||||
For Text the 4 characters '|' ',' '=' and '\' are escaped the same way |
||||
|
||||
Only user entered information will contain characters that require being |
||||
escaped, such as Pool URL, User and Password or the Config save filename, |
||||
when they are returned in messages or as their values by the API |
||||
|
||||
For API version 1.4 and later: |
||||
|
||||
The STATUS section is: |
||||
|
||||
STATUS=X,When=NNN,Code=N,Msg=string,Description=string| |
||||
|
||||
STATUS=X Where X is one of: |
||||
W - Warning |
||||
I - Informational |
||||
S - Success |
||||
E - Error |
||||
F - Fatal (code bug) |
||||
|
||||
When=NNN |
||||
Standard long time of request in seconds |
||||
|
||||
Code=N |
||||
Each unique reply has a unigue Code (See api.c - #define MSG_NNNNNN) |
||||
|
||||
Msg=string |
||||
Message matching the Code value N |
||||
|
||||
Description=string |
||||
This defaults to the cgminer version but is the value of --api-description |
||||
if it was specified at runtime. |
||||
|
||||
For API version 1.9: |
||||
|
||||
The list of requests - a (*) means it requires privileged access - and replies are: |
||||
|
||||
Request Reply Section Details |
||||
------- ------------- ------- |
||||
version VERSION CGMiner=cgminer version |
||||
API=API version |
||||
|
||||
config CONFIG Some miner configuration information: |
||||
GPU Count=N, <- the number of GPUs |
||||
PGA Count=N, <- the number of PGAs |
||||
CPU Count=N, <- the number of CPUs |
||||
Pool Count=N, <- the number of Pools |
||||
ADL=X, <- Y or N if ADL is compiled in the code |
||||
ADL in use=X, <- Y or N if any GPU has ADL |
||||
Strategy=Name, <- the current pool strategy |
||||
Log Interval=N, <- log interval (--log N) |
||||
Device Code=GPU ICA | <- spaced list of compiled devices |
||||
|
||||
summary SUMMARY The status summary of the miner |
||||
e.g. Elapsed=NNN,Found Blocks=N,Getworks=N,...| |
||||
|
||||
pools POOLS The status of each pool |
||||
e.g. Pool=0,URL=http://pool.com:6311,Status=Alive,...| |
||||
|
||||
devs DEVS Each available GPU, PGA and CPU with their details |
||||
e.g. GPU=0,Accepted=NN,MHS av=NNN,...,Intensity=D| |
||||
Last Share Time=NNN, <- standand long time in seconds |
||||
(or 0 if none) of last accepted share |
||||
Last Share Pool=N, <- pool number (or -1 if none) |
||||
Will not report PGAs if PGA mining is disabled |
||||
Will not report CPUs if CPU mining is disabled |
||||
|
||||
gpu|N GPU The details of a single GPU number N in the same |
||||
format and details as for DEVS |
||||
|
||||
pga|N PGA The details of a single PGA number N in the same |
||||
format and details as for DEVS |
||||
This is only available if PGA mining is enabled |
||||
Use 'pgacount' or 'config' first to see if there are any |
||||
|
||||
cpu|N CPU The details of a single CPU number N in the same |
||||
format and details as for DEVS |
||||
This is only available if CPU mining is enabled |
||||
Use 'cpucount' or 'config' first to see if there are any |
||||
|
||||
gpucount GPUS Count=N| <- the number of GPUs |
||||
|
||||
pgacount PGAS Count=N| <- the number of PGAs |
||||
Always returns 0 if PGA mining is disabled |
||||
|
||||
cpucount CPUS Count=N| <- the number of CPUs |
||||
Always returns 0 if CPU mining is disabled |
||||
|
||||
switchpool|N (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of switching pool N to the |
||||
highest priority (the pool is also enabled) |
||||
The Msg includes the pool URL |
||||
|
||||
enablepool|N (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of enabling pool N |
||||
The Msg includes the pool URL |
||||
|
||||
addpool|URL,USR,PASS (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of attempting to add pool N |
||||
The Msg includes the pool URL |
||||
Use '\\' to get a '\' and '\,' to include a comma |
||||
inside URL, USR or PASS |
||||
|
||||
disablepool|N (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of disabling pool N |
||||
The Msg includes the pool URL |
||||
|
||||
removepool|N (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of removing pool N |
||||
The Msg includes the pool URL |
||||
N.B. all details for the pool will be lost |
||||
|
||||
gpuenable|N (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of the enable request |
||||
|
||||
gpudisable|N (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of the disable request |
||||
|
||||
gpurestart|N (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of the restart request |
||||
|
||||
gpuintensity|N,I (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of setting GPU N intensity to I |
||||
|
||||
gpumem|N,V (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of setting GPU N memoryclock to V MHz |
||||
|
||||
gpuengine|N,V (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of setting GPU N clock to V MHz |
||||
|
||||
gpufan|N,V (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of setting GPU N fan speed to V% |
||||
|
||||
gpuvddc|N,V (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of setting GPU N vddc to V |
||||
|
||||
save|filename (*) |
||||
none There is no reply section just the STATUS section |
||||
stating success or failure saving the cgminer config |
||||
to filename |
||||
The filename is optional and will use the cgminer |
||||
default if not specified |
||||
|
||||
quit (*) none There is no status section but just a single "BYE" |
||||
reply before cgminer quits |
||||
|
||||
notify NOTIFY The last status and history count of each devices problem |
||||
This lists all devices including those not supported |
||||
by the 'devs' command |
||||
e.g. NOTIFY=0,Name=GPU,ID=0,Last Well=1332432290,...| |
||||
|
||||
privileged (*) |
||||
none There is no reply section just the STATUS section |
||||
stating an error if you do not have privileged access |
||||
to the API and success if you do have privilege |
||||
The command doesn't change anything in cgminer |
||||
|
||||
pgaenable|N (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of the enable request |
||||
You cannot enable a PGA if it's status is not WELL |
||||
This is only available if PGA mining is enabled |
||||
|
||||
pgadisable|N (*) |
||||
none There is no reply section just the STATUS section |
||||
stating the results of the disable request |
||||
This is only available if PGA mining is enabled |
||||
|
||||
devdetails DEVDETAILS Each device with a list of their static details |
||||
This lists all devices including those not supported |
||||
by the 'devs' command |
||||
e.g. DEVDETAILS=0,Name=GPU,ID=0,Driver=opencl,...| |
||||
|
||||
restart (*) none There is no status section but just a single "RESTART" |
||||
reply before cgminer restarts |
||||
|
||||
stats STATS Each device or pool that has 1 or more getworks |
||||
with a list of stats regarding getwork times |
||||
The values returned by stats may change in future |
||||
versions thus would not normally be displayed |
||||
Device drivers are also able to add stats to the |
||||
end of the details returned |
||||
|
||||
When you enable, disable or restart a GPU or PGA, you will also get Thread messages |
||||
in the cgminer status window |
||||
|
||||
When you switch to a different pool to the current one, you will get a |
||||
'Switching to URL' message in the cgminer status windows |
||||
|
||||
Obviously, the JSON format is simply just the names as given before the '=' |
||||
with the values after the '=' |
||||
|
||||
If you enable cgminer debug (-D or --debug) you will also get messages showing |
||||
details of the requests received and the replies |
||||
|
||||
There are included 4 program examples for accessing the API: |
||||
|
||||
api-example.php - a php script to access the API |
||||
usAge: php api-example.php command |
||||
by default it sends a 'summary' request to the miner at 127.0.0.1:4028 |
||||
If you specify a command it will send that request instead |
||||
You must modify the line "$socket = getsock('127.0.0.1', 4028);" at the |
||||
beginning of "function request($cmd)" to change where it looks for cgminer |
||||
|
||||
API.java/API.class |
||||
a java program to access the API (with source code) |
||||
usAge is: java API command address port |
||||
Any missing or blank parameters are replaced as if you entered: |
||||
java API summary 127.0.0.1 4028 |
||||
|
||||
api-example.c - a 'C' program to access the API (with source code) |
||||
usAge: api-example [command [ip/host [port]]] |
||||
again, as above, missing or blank parameters are replaced as if you entered: |
||||
api-example summary 127.0.0.1 4028 |
||||
|
||||
miner.php - an example web page to access the API |
||||
This includes buttons and inputs to attempt access to the privileged commands |
||||
Read the top of the file (miner.php) for details of how to tune the display |
||||
and also to use the option to display a multi-rig summary |
||||
|
||||
---------- |
||||
|
||||
Feature Changelog for external applications using the API: |
||||
|
||||
|
||||
API V1.11 |
||||
|
||||
Modified API commands: |
||||
'save' no longer requires a filename (use default if not specified) |
||||
|
||||
'save' incorrectly returned status E (error) on success before. |
||||
It now correctly returns S (success) |
||||
|
||||
---------- |
||||
|
||||
API V1.10 (cgminer v2.4.1) |
||||
|
||||
Added API commands: |
||||
'stats' |
||||
|
||||
N.B. the 'stats' command can change at any time so any specific content |
||||
present should not be relied upon. |
||||
The data content is mainly used for debugging purposes or hidden options |
||||
in cgminer and can change as development work requires |
||||
|
||||
Modified API commands: |
||||
'pools' added "Last Share Time" |
||||
|
||||
---------- |
||||
|
||||
API V1.9 (cgminer v2.4.0) |
||||
|
||||
Added API commands: |
||||
'restart' |
||||
|
||||
Modified API commands: |
||||
'notify' corrected invalid JSON |
||||
|
||||
---------- |
||||
|
||||
API V1.8 (cgminer v2.3.5) |
||||
|
||||
Added API commands: |
||||
'devdetails' |
||||
|
||||
Support for the ZTex FPGA was added |
||||
|
||||
---------- |
||||
|
||||
API V1.7 (cgminer v2.3.4) |
||||
|
||||
Added API commands: |
||||
'removepool' |
||||
|
||||
Modified API commands: |
||||
'pools' added "User" |
||||
|
||||
From API version 1.7 onwards, reply strings in JSON and Text have the |
||||
necessary escaping as required to avoid ambiguity |
||||
For JSON the 2 characters '"' and '\' are escaped with a '\' before them |
||||
For Text the 4 characters '|' ',' '=' and '\' are escaped the same way |
||||
|
||||
---------- |
||||
|
||||
API V1.6 (cgminer v2.3.2) |
||||
|
||||
Added API commands: |
||||
'pga' |
||||
'pgaenable' |
||||
'pgadisable' |
||||
'pgacount' |
||||
|
||||
Modified API commands: |
||||
'devs' now includes Icarus and Bitforce FPGA devices |
||||
'notify' added "*" to the front of the name of all numeric error fields |
||||
'config' correct "Log Interval" to use numeric (not text) type for JSON |
||||
|
||||
Support for Icarus and Bitforce FPGAs was added |
||||
|
||||
---------- |
||||
|
||||
API V1.5 was not released |
||||
|
||||
---------- |
||||
|
||||
API V1.4 (Kano's interim release of cgminer v2.3.1) |
||||
|
||||
Added API commands: |
||||
'notify' |
||||
|
||||
Modified API commands: |
||||
'config' added "Device Code" and "OS" |
||||
|
||||
Added "When" to the STATUS reply section of all commands |
||||
|
||||
---------- |
||||
|
||||
API V1.3 (cgminer v2.3.1-2) |
||||
|
||||
Added API commands: |
||||
'addpool' |
||||
|
||||
Modified API commands: |
||||
'devs'/'gpu' added "Total MH" for each device |
||||
'summary' added "Total MH" |
||||
|
||||
---------- |
||||
|
||||
API V1.2 (cgminer v2.3.0) |
||||
|
||||
Added API commands: |
||||
'enablepool' |
||||
'disablepool' |
||||
'privileged' |
||||
|
||||
Modified API commands: |
||||
'config' added "Log Interval" |
||||
|
||||
Starting with API V1.2, any attempt to access a command that requires |
||||
privileged security, from an IP address that does not have privileged |
||||
security, will return an "Access denied" Error Status |
||||
|
||||
---------- |
||||
|
||||
API V1.1 (cgminer v2.2.4) |
||||
|
||||
There were no changes to the API commands in cgminer v2.2.4, |
||||
however support was added to cgminer for IP address restrictions |
||||
with the --api-allow option |
||||
|
||||
---------- |
||||
|
||||
API V1.1 (cgminer v2.2.2) |
||||
|
||||
Prior to V1.1, devs/gpu incorrectly reported GPU0 Intensity for all GPUs |
||||
|
||||
Modified API commands: |
||||
'devs'/'gpu' added "Last Share Pool" and "Last Share Time" for each device |
||||
|
||||
---------- |
||||
|
||||
API V1.0 (cgminer v2.2.0) |
||||
|
||||
Remove default CPU support |
||||
|
||||
Added API commands: |
||||
'config' |
||||
'gpucount' |
||||
'cpucount' |
||||
'switchpool' |
||||
'gpuintensity' |
||||
'gpumem' |
||||
'gpuengine' |
||||
'gpufan' |
||||
'gpuvddc' |
||||
'save' |
||||
|
||||
---------- |
||||
|
||||
API V0.7 (cgminer v2.1.0) |
||||
|
||||
Initial release of the API in the main cgminer git |
||||
|
||||
Commands: |
||||
'version' |
||||
'devs' |
||||
'pools' |
||||
'summary' |
||||
'gpuenable' |
||||
'gpudisable' |
||||
'gpurestart' |
||||
'gpu' |
||||
'cpu' |
||||
'gpucount' |
||||
'cpucount' |
||||
'quit' |
||||
|
@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
|
||||
|
||||
This README contains extended details about FPGA mining with cgminer |
||||
|
||||
|
||||
Icarus |
||||
|
||||
There is a hidden option in cgminer when Icarus support is compiled in: |
||||
|
||||
--icarus-timing <arg> Set how the Icarus timing is calculated - one setting/value for all or comma separated |
||||
default[=N] Use the default Icarus hash time (2.6316ns) |
||||
short Calculate the hash time and stop adjusting it at ~315 difficulty 1 shares (~1hr) |
||||
long Re-calculate the hash time continuously |
||||
value[=N] Specify the hash time in nanoseconds (e.g. 2.6316) and abort time (e.g. 2.6316=80) |
||||
|
||||
Icarus timing is required for devices that do not exactly match a default Icarus Rev3 in |
||||
processing speed |
||||
If you have an Icarus Rev3 you should not normally need to use --icarus-timing since the |
||||
default values will maximise the MH/s and display it correctly |
||||
|
||||
Icarus timing is used to determine the number of hashes that have been checked when it aborts |
||||
a nonce range (including on a LongPoll) |
||||
It is also used to determine the elapsed time when it should abort a nonce range to avoid |
||||
letting the Icarus go idle, but also to safely maximise that time |
||||
|
||||
'short' or 'long' mode should only be used on a computer that has enough CPU available to run |
||||
cgminer without any CPU delays (an active desktop or swapping computer would not be stable enough) |
||||
Any CPU delays while calculating the hash time will affect the result |
||||
'short' mode only requires the computer to be stable until it has completed ~315 difficulty 1 shares |
||||
'long' mode requires it to always be stable to ensure accuracy, however, over time it continually |
||||
corrects itself |
||||
|
||||
When in 'short' or 'long' mode, it will report the hash time value each time it is re-calculated |
||||
In 'short' or 'long' mode, the scan abort time starts at 5 seconds and uses the default 2.6316ns |
||||
scan hash time, for the first 5 nonce's or one minute (whichever is longer) |
||||
|
||||
In 'default' or 'value' mode the 'constants' are calculated once at the start, based on the default |
||||
value or the value specified |
||||
The optional additional =N specifies to set the default abort at N 1/10ths of a second, not the |
||||
calculated value, which is 112 for 2.6316ns |
||||
|
||||
To determine the hash time value for a non Icarus Rev3 device or an Icarus Rev3 with a different |
||||
bitstream to the default one, use 'long' mode and give it at least a few hundred shares, or use |
||||
'short' mode and take note of the final hash time value (Hs) calculated |
||||
You can also use the RPC API 'stats' command to see the current hash time (Hs) at any time |
||||
|
||||
The Icarus code currently only works with a dual FPGA device that supports the same commands as |
||||
Icarus Rev3 requires and also is less than ~840MH/s and greater than 2MH/s |
||||
If a dual FPGA device does hash faster than ~840MH/s it should work correctly if you supply the |
||||
correct hash time nanoseconds value |
||||
|
||||
The timing code itself will affect the Icarus performance since it increases the delay after |
||||
work is completed or aborted until it starts again |
||||
The increase is, however, extremely small and the actual increase is reported with the |
||||
RPC API 'stats' command (a very slow CPU will make it more noticeable) |
||||
Using the 'short' mode will remove this delay after 'short' mode completes |
||||
The delay doesn't affect the calculation of the correct hash time |
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue